1(* armScript.sml - generated by L<3> - Fri Mar 14 11:12:38 2014 *)
2open HolKernel boolLib bossLib Import
3
4val () = Import.start "arm"
5
6open monadsyntax
7val _ = Construct
8  [("Architecture",
9    [("ARMv4",[]),("ARMv4T",[]),("ARMv5T",[]),("ARMv5TE",[]),("ARMv6",[]),
10     ("ARMv6K",[]),("ARMv6T2",[]),("ARMv7_A",[]),("ARMv7_R",[])])]
11;
12val _ = Construct
13  [("Extensions",
14    [("Extension_ThumbEE",[]),("Extension_Security",[]),
15     ("Extension_Multiprocessing",[]),("Extension_Virtualization",[]),
16     ("Extension_VFP",[]),("Extension_AdvanvedSIMD",[])])]
17;
18val _ = Record
19  ("PSR",
20   [("A",bTy),("C",bTy),("E",bTy),("F",bTy),("GE",F4),("I",bTy),("IT",F8),
21    ("J",bTy),("M",FTy 5),("N",bTy),("Q",bTy),("T",bTy),("V",bTy),
22    ("Z",bTy),("psr'rst",F4)])
23;
24val _ = Record ("CP14",[("TEEHBR",F32)])
25;
26val _ = Record
27  ("SCTLR",
28   [("A",bTy),("B",bTy),("BR",bTy),("C",bTy),("DZ",bTy),("EE",bTy),
29    ("FI",bTy),("I",bTy),("IE",bTy),("M",bTy),("NMFI",bTy),("RR",bTy),
30    ("SW",bTy),("TE",bTy),("U",bTy),("V",bTy),("VE",bTy),("Z",bTy),
31    ("sctlr'rst",FTy 14)])
32;
33val _ = Record
34  ("HSCTLR",
35   [("A",bTy),("C",bTy),("CP15BEN",bTy),("EE",bTy),("FI",bTy),("I",bTy),
36    ("M",bTy),("TE",bTy),("WXN",bTy),("hsctlr'rst",FTy 23)])
37;
38val _ = Record ("HSR",[("EC",FTy 6),("IL",bTy),("ISS",FTy 25)])
39;
40val _ = Record
41  ("SCR",
42   [("AW",bTy),("EA",bTy),("FIQ",bTy),("FW",bTy),("HCE",bTy),("IRQ",bTy),
43    ("NS",bTy),("SCD",bTy),("SIF",bTy),("nET",bTy),("scr'rst",FTy 22)])
44;
45val _ = Record
46  ("NSACR",
47   [("NSASEDIS",bTy),("NSD32DIS",bTy),("NSTRCDIS",bTy),("RFR",bTy),
48    ("cp",FTy 14),("nsacr'rst",FTy 14)])
49;
50val _ = Record
51  ("HCR",
52   [("AMO",bTy),("BSU",FTy 2),("DC",bTy),("FB",bTy),("FMO",bTy),
53    ("IMO",bTy),("PTW",bTy),("SWIO",bTy),("TAC",bTy),("TGE",bTy),
54    ("TID",F4),("TIDCP",bTy),("TPC",bTy),("TPU",bTy),("TSC",bTy),
55    ("TSW",bTy),("TTLB",bTy),("TVM",bTy),("TWE",bTy),("TWI",bTy),
56    ("VA",bTy),("VF",bTy),("VI",bTy),("VM",bTy),("hcr'rst",F4)])
57;
58val _ = Record
59  ("CP15",
60   [("HCR",CTy"HCR"),("HSCTLR",CTy"HSCTLR"),("HSR",CTy"HSR"),
61    ("MVBAR",F32),("NSACR",CTy"NSACR"),("SCR",CTy"SCR"),
62    ("SCTLR",CTy"SCTLR"),("VBAR",F32)])
63;
64val _ = Construct
65  [("InstrSet",
66    [("InstrSet_ARM",[]),("InstrSet_Thumb",[]),("InstrSet_Jazelle",[]),
67     ("InstrSet_ThumbEE",[])])]
68;
69val _ = Construct
70  [("Encoding",
71    [("Encoding_Thumb",[]),("Encoding_Thumb2",[]),("Encoding_ARM",[])])]
72;
73val _ = Construct
74  [("RName",
75    [("RName_0usr",[]),("RName_1usr",[]),("RName_2usr",[]),
76     ("RName_3usr",[]),("RName_4usr",[]),("RName_5usr",[]),
77     ("RName_6usr",[]),("RName_7usr",[]),("RName_8usr",[]),
78     ("RName_8fiq",[]),("RName_9usr",[]),("RName_9fiq",[]),
79     ("RName_10usr",[]),("RName_10fiq",[]),("RName_11usr",[]),
80     ("RName_11fiq",[]),("RName_12usr",[]),("RName_12fiq",[]),
81     ("RName_SPusr",[]),("RName_SPfiq",[]),("RName_SPirq",[]),
82     ("RName_SPsvc",[]),("RName_SPabt",[]),("RName_SPund",[]),
83     ("RName_SPmon",[]),("RName_SPhyp",[]),("RName_LRusr",[]),
84     ("RName_LRfiq",[]),("RName_LRirq",[]),("RName_LRsvc",[]),
85     ("RName_LRabt",[]),("RName_LRund",[]),("RName_LRmon",[]),
86     ("RName_PC",[])])]
87;
88val _ = Construct
89  [("rights",
90    [("Restricted",[]),("ReadPermit",[]),("ReadWritePermit",[]),
91     ("XNeverRead",[]),("XNeverReadWrite",[])])]
92;
93val _ = Construct
94  [("SRType",
95    [("SRType_LSL",[]),("SRType_LSR",[]),("SRType_ASR",[]),
96     ("SRType_ROR",[]),("SRType_RRX",[])])]
97;
98val _ = Construct
99  [("offset1",
100    [("immediate_form1",[F32]),
101     ("register_form1",[PTy(F4,PTy(CTy"SRType",nTy))])])]
102;
103val _ = Construct
104  [("offset2",[("immediate_form2",[F32]),("register_form2",[F4])])]
105;
106val _ = Construct
107  [("Hint",
108    [("Breakpoint",[F32]),("DataMemoryBarrier",[F4]),
109     ("DataSynchronizationBarrier",[F4]),("Debug",[F4]),
110     ("InstructionSynchronizationBarrier",[F4]),
111     ("PreloadData",[PTy(bTy,PTy(bTy,PTy(F4,CTy"offset1")))]),
112     ("PreloadDataLiteral",[PTy(bTy,F32)]),
113     ("PreloadInstruction",[PTy(bTy,PTy(F4,CTy"offset1"))]),
114     ("SendEvent",[]),("WaitForEvent",[]),("WaitForInterrupt",[]),
115     ("Yield",[])])]
116;
117val _ = Construct
118  [("System",
119    [("ChangeProcessorState",
120      [PTy(bTy,PTy(bTy,PTy(bTy,PTy(bTy,PTy(bTy,PTy(bTy,FTy 5))))))]),
121     ("ChangeProcessorStateT1",[PTy(bTy,PTy(bTy,PTy(bTy,bTy)))]),
122     ("EnterxLeavex",[bTy]),("ExceptionReturn",[]),
123     ("HypervisorCall",[F16]),
124     ("MoveToBankedOrSpecialRegister",[PTy(bTy,PTy(FTy 5,F4))]),
125     ("MoveToRegisterFromBankedOrSpecial",[PTy(bTy,PTy(FTy 5,F4))]),
126     ("MoveToRegisterFromSpecial",[PTy(bTy,F4)]),
127     ("MoveToSpecialFromImmediate",[PTy(bTy,PTy(F32,F4))]),
128     ("MoveToSpecialFromRegister",[PTy(bTy,PTy(F4,F4))]),
129     ("ReturnFromException",[PTy(bTy,PTy(bTy,PTy(bTy,F4)))]),
130     ("SecureMonitorCall",[F4]),("Setend",[bTy]),
131     ("StoreReturnState",[PTy(bTy,PTy(bTy,PTy(bTy,FTy 5)))]),
132     ("SupervisorCall",[F32])])]
133;
134val _ = Construct
135  [("Store",
136    [("StoreByte",
137      [PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))]),
138     ("StoreByteUnprivileged",
139      [PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))]),
140     ("StoreDual",
141      [PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,CTy"offset2"))))))]),
142     ("StoreExclusive",[PTy(F4,PTy(F4,PTy(F4,F32)))]),
143     ("StoreExclusiveByte",[PTy(F4,PTy(F4,F4))]),
144     ("StoreExclusiveDoubleword",[PTy(F4,PTy(F4,PTy(F4,F4)))]),
145     ("StoreExclusiveHalf",[PTy(F4,PTy(F4,F4))]),
146     ("StoreHalf",
147      [PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))]),
148     ("StoreHalfUnprivileged",
149      [PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset2"))))]),
150     ("StoreMultiple",[PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,F16))))]),
151     ("StoreMultipleUserRegisters",[PTy(bTy,PTy(bTy,PTy(F4,F16)))]),
152     ("StoreUnprivileged",[PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))]),
153     ("StoreWord",
154      [PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))])])]
155;
156val _ = Construct
157  [("Load",
158    [("LoadByte",
159      [PTy(bTy,PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))]),
160     ("LoadByteLiteral",[PTy(bTy,PTy(bTy,PTy(F4,F32)))]),
161     ("LoadByteUnprivileged",
162      [PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))]),
163     ("LoadDual",
164      [PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,CTy"offset2"))))))]),
165     ("LoadDualLiteral",[PTy(bTy,PTy(F4,PTy(F4,F32)))]),
166     ("LoadExclusive",[PTy(F4,PTy(F4,F32))]),
167     ("LoadExclusiveByte",[PTy(F4,F4)]),
168     ("LoadExclusiveDoubleword",[PTy(F4,PTy(F4,F4))]),
169     ("LoadExclusiveHalf",[PTy(F4,F4)]),
170     ("LoadHalf",
171      [PTy(bTy,PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))]),
172     ("LoadHalfLiteral",[PTy(bTy,PTy(bTy,PTy(F4,F32)))]),
173     ("LoadHalfUnprivileged",
174      [PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset2")))))]),
175     ("LoadLiteral",[PTy(bTy,PTy(F4,F32))]),
176     ("LoadMultiple",[PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,F16))))]),
177     ("LoadMultipleExceptionReturn",
178      [PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,FTy 15))))]),
179     ("LoadMultipleUserRegisters",[PTy(bTy,PTy(bTy,PTy(F4,FTy 15)))]),
180     ("LoadSignedByteUnprivileged",
181      [PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset2"))))]),
182     ("LoadUnprivileged",[PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))]),
183     ("LoadWord",[PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))])])]
184;
185val _ = Construct
186  [("Media",
187    [("BitFieldClearOrInsert",[PTy(F4,PTy(F4,PTy(nTy,nTy)))]),
188     ("BitFieldExtract",[PTy(bTy,PTy(F4,PTy(F4,PTy(nTy,nTy))))]),
189     ("ByteReverse",[PTy(F4,F4)]),
190     ("ByteReversePackedHalfword",[PTy(F4,F4)]),
191     ("ByteReverseSignedHalfword",[PTy(F4,F4)]),
192     ("ExtendByte",[PTy(bTy,PTy(F4,PTy(F4,PTy(F4,nTy))))]),
193     ("ExtendByte16",[PTy(bTy,PTy(F4,PTy(F4,PTy(F4,nTy))))]),
194     ("ExtendHalfword",[PTy(bTy,PTy(F4,PTy(F4,PTy(F4,nTy))))]),
195     ("PackHalfword",
196      [PTy(CTy"SRType",PTy(nTy,PTy(bTy,PTy(F4,PTy(F4,F4)))))]),
197     ("ReverseBits",[PTy(F4,F4)]),
198     ("Saturate",[PTy(CTy"SRType",PTy(nTy,PTy(nTy,PTy(bTy,PTy(F4,F4)))))]),
199     ("Saturate16",[PTy(nTy,PTy(bTy,PTy(F4,F4)))]),
200     ("SaturatingAddSubtract",[PTy(FTy 2,PTy(F4,PTy(F4,F4)))]),
201     ("SelectBytes",[PTy(F4,PTy(F4,F4))])])]
202;
203val _ = Construct
204  [("SIMD",
205    [("SignedAddSub16",[PTy(FTy 2,PTy(F4,PTy(F4,F4)))]),
206     ("SignedAddSub8",[PTy(bTy,PTy(F4,PTy(F4,F4)))]),
207     ("SignedHalvingAddSub16",[PTy(FTy 2,PTy(F4,PTy(F4,F4)))]),
208     ("SignedHalvingAddSub8",[PTy(bTy,PTy(F4,PTy(F4,F4)))]),
209     ("SignedSaturatingAddSub16",[PTy(FTy 2,PTy(F4,PTy(F4,F4)))]),
210     ("SignedSaturatingAddSub8",[PTy(bTy,PTy(F4,PTy(F4,F4)))]),
211     ("UnsignedAddSub16",[PTy(FTy 2,PTy(F4,PTy(F4,F4)))]),
212     ("UnsignedAddSub8",[PTy(bTy,PTy(F4,PTy(F4,F4)))]),
213     ("UnsignedHalvingAddSub16",[PTy(FTy 2,PTy(F4,PTy(F4,F4)))]),
214     ("UnsignedHalvingAddSub8",[PTy(bTy,PTy(F4,PTy(F4,F4)))]),
215     ("UnsignedSaturatingAddSub16",[PTy(FTy 2,PTy(F4,PTy(F4,F4)))]),
216     ("UnsignedSaturatingAddSub8",[PTy(bTy,PTy(F4,PTy(F4,F4)))]),
217     ("UnsignedSumAbsoluteDifferences",[PTy(F4,PTy(F4,PTy(F4,F4)))])])]
218;
219val _ = Construct
220  [("Multiply",
221    [("Multiply32",[PTy(bTy,PTy(F4,PTy(F4,F4)))]),
222     ("MultiplyAccumulate",[PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))]),
223     ("MultiplyAccumulateAccumulate",[PTy(F4,PTy(F4,PTy(F4,F4)))]),
224     ("MultiplyLong",
225      [PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))))]),
226     ("MultiplySubtract",[PTy(F4,PTy(F4,PTy(F4,F4)))]),
227     ("Signed16Multiply32Accumulate",
228      [PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))]),
229     ("Signed16Multiply32Result",[PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,F4))))]),
230     ("Signed16Multiply64Accumulate",
231      [PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))]),
232     ("Signed16x32Multiply32Accumulate",
233      [PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))]),
234     ("Signed16x32Multiply32Result",[PTy(bTy,PTy(F4,PTy(F4,F4)))]),
235     ("SignedMostSignificantMultiply",
236      [PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))]),
237     ("SignedMostSignificantMultiplySubtract",
238      [PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))]),
239     ("SignedMultiplyDual",[PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))]),
240     ("SignedMultiplyLongDual",
241      [PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))])])]
242;
243val _ = Construct
244  [("Data",
245    [("AddSub",[PTy(bTy,PTy(F4,PTy(F4,FTy 12)))]),
246     ("ArithLogicImmediate",[PTy(F4,PTy(bTy,PTy(F4,PTy(F4,FTy 12))))]),
247     ("CountLeadingZeroes",[PTy(F4,F4)]),
248     ("Move",[PTy(bTy,PTy(bTy,PTy(F4,FTy 12)))]),
249     ("MoveHalfword",[PTy(bTy,PTy(F4,F16))]),
250     ("Register",
251      [PTy(F4,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,PTy(CTy"SRType",nTy))))))]),
252     ("RegisterShiftedRegister",
253      [PTy(F4,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,PTy(CTy"SRType",F4))))))]),
254     ("ShiftImmediate",
255      [PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(CTy"SRType",nTy)))))]),
256     ("ShiftRegister",
257      [PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(CTy"SRType",F4)))))]),
258     ("TestCompareImmediate",[PTy(FTy 2,PTy(F4,FTy 12))]),
259     ("TestCompareRegister",
260      [PTy(FTy 2,PTy(F4,PTy(F4,PTy(CTy"SRType",nTy))))])])]
261;
262val _ = Construct
263  [("Branch",
264    [("BranchExchange",[F4]),
265     ("BranchLinkExchangeImmediate",[PTy(CTy"InstrSet",F32)]),
266     ("BranchLinkExchangeRegister",[F4]),("BranchTarget",[F32]),
267     ("CheckArray",[PTy(F4,F4)]),("CompareBranch",[PTy(bTy,PTy(F4,F32))]),
268     ("HandlerBranchLink",[PTy(bTy,F32)]),
269     ("HandlerBranchLinkParameter",[PTy(F32,F32)]),
270     ("HandlerBranchParameter",[PTy(F32,F32)]),
271     ("TableBranchByte",[PTy(bTy,PTy(F4,F4))])])]
272;
273val _ = Construct
274  [("instruction",
275    [("Branch",[CTy"Branch"]),("ClearExclusive",[]),("Data",[CTy"Data"]),
276     ("Divide",[PTy(bTy,PTy(F4,PTy(F4,F4)))]),("Hint",[CTy"Hint"]),
277     ("IfThen",[PTy(F4,F4)]),("Load",[CTy"Load"]),("Media",[CTy"Media"]),
278     ("Multiply",[CTy"Multiply"]),("NoOperation",[]),("SIMD",[CTy"SIMD"]),
279     ("Store",[CTy"Store"]),("Swap",[PTy(bTy,PTy(F4,PTy(F4,F4)))]),
280     ("System",[CTy"System"]),("Undefined",[F32])])]
281;
282val _ = Construct
283  [("MachineCode",
284    [("ARM",[F32]),("Thumb",[F16]),("Thumb2",[PTy(F16,F16)]),
285     ("ThumbEE",[F16])])]
286;
287val _ = Construct
288  [("exception",
289    [("ASSERT",[sTy]),("IMPLEMENTATION_DEFINED",[sTy]),("NoException",[]),
290     ("UNPREDICTABLE",[sTy])])]
291;
292val _ = Record
293  ("arm_state",
294   [("Architecture",CTy"Architecture"),("CP14",CTy"CP14"),
295    ("CP15",CTy"CP15"),("CPSR",CTy"PSR"),
296    ("ClearExclusiveLocal",
297     ATy(PTy(iTy,PTy(LTy(STy F32),STy(PTy(F32,nTy)))),
298         PTy(LTy(STy F32),STy(PTy(F32,nTy))))),("CurrentCondition",F4),
299    ("ELR_hyp",F32),("Encoding",CTy"Encoding"),
300    ("ExclusiveMonitorsPass",
301     ATy(PTy(F32,PTy(nTy,PTy(LTy(STy F32),STy(PTy(F32,nTy))))),bTy)),
302    ("Extensions",STy(CTy"Extensions")),("MEM",ATy(F32,F8)),
303    ("REG",ATy(CTy"RName",F32)),("SPSR_abt",CTy"PSR"),
304    ("SPSR_fiq",CTy"PSR"),("SPSR_hyp",CTy"PSR"),("SPSR_irq",CTy"PSR"),
305    ("SPSR_mon",CTy"PSR"),("SPSR_svc",CTy"PSR"),("SPSR_und",CTy"PSR"),
306    ("SetExclusiveMonitors",
307     ATy(PTy(F32,PTy(nTy,PTy(LTy(STy F32),STy(PTy(F32,nTy))))),
308         PTy(LTy(STy F32),STy(PTy(F32,nTy))))),("data_abort",bTy),
309    ("exception",CTy"exception"),
310    ("exclusive_state",PTy(LTy(STy F32),STy(PTy(F32,nTy)))),
311    ("external_abort_oracle",ATy(nTy,bTy)),
312    ("external_abort_oracle_count",nTy),("isfetch",bTy),
313    ("rights_map",ATy(F32,CTy"rights")),("transfer_unknown",bTy),
314    ("translate_address",ATy(F32,OTy F32)),("undefined",bTy)])
315;
316val qTy = CTy "arm_state";
317fun qVar v = Term.mk_var (v, ParseDatatype.pretypeToType qTy);
318val raise'exception_def = Def
319  ("raise'exception",Var("e",CTy"exception"),
320   MB(MR(Close(qVar"s",Dest("exception",CTy"exception",qVar"s"))),
321      Close
322        (Var("v",CTy"exception"),
323         MB(MB(MU(EQ(Var("v",CTy"exception"),
324                     Const("NoException",CTy"exception")),qTy),
325               Close
326                 (bVar"b",
327                  ITE(bVar"b",
328                      MW(Close
329                           (qVar"s",
330                            Rupd
331                              ("exception",
332                               TP[qVar"s",Var("e",CTy"exception")]))),
333                      MU(LU,qTy)))),Close(AVar uTy,MU(LX(VTy"a"),qTy))))))
334;
335val ArchVersion_def = Def
336  ("ArchVersion",AVar uTy,
337   MB(MR(Close(qVar"s",Dest("Architecture",CTy"Architecture",qVar"s"))),
338      Close
339        (Var("x",CTy"Architecture"),
340         MU(CS(Var("x",CTy"Architecture"),
341               [(LC("ARMv4",CTy"Architecture"),LN 4),
342                (LC("ARMv4T",CTy"Architecture"),LN 4),
343                (LC("ARMv5T",CTy"Architecture"),LN 5),
344                (LC("ARMv5TE",CTy"Architecture"),LN 5),
345                (LC("ARMv6",CTy"Architecture"),LN 6),
346                (LC("ARMv6K",CTy"Architecture"),LN 6),
347                (LC("ARMv6T2",CTy"Architecture"),LN 6),
348                (LC("ARMv7_A",CTy"Architecture"),LN 7),
349                (LC("ARMv7_R",CTy"Architecture"),LN 7)]),qTy))))
350;
351val HaveDSPSupport_def = Def
352  ("HaveDSPSupport",AVar uTy,
353   MB(MR(Close(qVar"s",Dest("Architecture",CTy"Architecture",qVar"s"))),
354      Close
355        (Var("v",CTy"Architecture"),
356         MB(MU(Bop(In,Var("v",CTy"Architecture"),
357                   SL[LC("ARMv4",CTy"Architecture"),
358                      LC("ARMv4T",CTy"Architecture"),
359                      LC("ARMv5T",CTy"Architecture")]),qTy),
360            Close(bVar"v",MU(Mop(Not,bVar"v"),qTy))))))
361;
362val HaveThumb2_def = Def
363  ("HaveThumb2",AVar uTy,
364   MB(MR(Close(qVar"s",Dest("Architecture",CTy"Architecture",qVar"s"))),
365      Close
366        (Var("v",CTy"Architecture"),
367         MU(Bop(In,Var("v",CTy"Architecture"),
368                SL[LC("ARMv6T2",CTy"Architecture"),
369                   LC("ARMv7_A",CTy"Architecture"),
370                   LC("ARMv7_R",CTy"Architecture")]),qTy))))
371;
372val HaveThumbEE_def = Def
373  ("HaveThumbEE",AVar uTy,
374   MB(MR(Close(qVar"s",Dest("Architecture",CTy"Architecture",qVar"s"))),
375      Close
376        (Var("v",CTy"Architecture"),
377         MB(MU(EQ(Var("v",CTy"Architecture"),
378                  LC("ARMv7_A",CTy"Architecture")),qTy),
379            Close
380              (bVar"b",
381               ITE(bVar"b",MU(LT,qTy),
382                   MB(MR(Close
383                           (qVar"s",
384                            Dest("Architecture",CTy"Architecture",qVar"s"))),
385                      Close
386                        (Var("v",CTy"Architecture"),
387                         MB(MU(EQ(Var("v",CTy"Architecture"),
388                                  LC("ARMv7_R",CTy"Architecture")),qTy),
389                            Close
390                              (bVar"b",
391                               ITE(bVar"b",
392                                   MB(MR(Close
393                                           (qVar"s",
394                                            Dest
395                                              ("Extensions",
396                                               STy(CTy"Extensions"),
397                                               qVar"s"))),
398                                      Close
399                                        (Var("v",STy(CTy"Extensions")),
400                                         MU(Bop(In,
401                                                LC("Extension_ThumbEE",
402                                                   CTy"Extensions"),
403                                                Var("v",
404                                                    STy(CTy"Extensions"))),
405                                            qTy))),MU(LF,qTy))))))))))))
406;
407val HaveMPExt_def = Def
408  ("HaveMPExt",AVar uTy,
409   MB(Call("ArchVersion",ATy(qTy,PTy(nTy,qTy)),LU),
410      Close
411        (nVar"v",
412         MB(MU(Bop(Ge,nVar"v",LN 7),qTy),
413            Close
414              (bVar"b",
415               ITE(bVar"b",
416                   MB(MR(Close
417                           (qVar"s",
418                            Dest
419                              ("Extensions",STy(CTy"Extensions"),qVar"s"))),
420                      Close
421                        (Var("v",STy(CTy"Extensions")),
422                         MU(Bop(In,
423                                LC("Extension_Multiprocessing",
424                                   CTy"Extensions"),
425                                Var("v",STy(CTy"Extensions"))),qTy))),
426                   MU(LF,qTy)))))))
427;
428val HaveSecurityExt_def = Def
429  ("HaveSecurityExt",AVar uTy,
430   MB(MR(Close(qVar"s",Dest("Architecture",CTy"Architecture",qVar"s"))),
431      Close
432        (Var("v",CTy"Architecture"),
433         MB(MU(Bop(In,Var("v",CTy"Architecture"),
434                   SL[LC("ARMv6K",CTy"Architecture"),
435                      LC("ARMv7_A",CTy"Architecture")]),qTy),
436            Close
437              (bVar"b",
438               ITE(bVar"b",
439                   MB(MR(Close
440                           (qVar"s",
441                            Dest
442                              ("Extensions",STy(CTy"Extensions"),qVar"s"))),
443                      Close
444                        (Var("v",STy(CTy"Extensions")),
445                         MU(Bop(In,
446                                LC("Extension_Security",CTy"Extensions"),
447                                Var("v",STy(CTy"Extensions"))),qTy))),
448                   MU(LF,qTy)))))))
449;
450val HaveVirtExt_def = Def
451  ("HaveVirtExt",AVar uTy,
452   MB(Call("ArchVersion",ATy(qTy,PTy(nTy,qTy)),LU),
453      Close
454        (nVar"v",
455         MB(MU(Bop(Ge,nVar"v",LN 7),qTy),
456            Close
457              (bVar"b",
458               ITE(bVar"b",
459                   MB(MR(Close
460                           (qVar"s",
461                            Dest
462                              ("Extensions",STy(CTy"Extensions"),qVar"s"))),
463                      Close
464                        (Var("v",STy(CTy"Extensions")),
465                         MU(Bop(In,
466                                LC("Extension_Virtualization",
467                                   CTy"Extensions"),
468                                Var("v",STy(CTy"Extensions"))),qTy))),
469                   MU(LF,qTy)))))))
470;
471val rec'PSR_def = Def
472  ("rec'PSR",Var("x",F32),
473   Rec(CTy"PSR",
474       [Bop(Bit,Var("x",F32),LN 8),Bop(Bit,Var("x",F32),LN 29),
475        Bop(Bit,Var("x",F32),LN 9),Bop(Bit,Var("x",F32),LN 6),
476        EX(Var("x",F32),LN 19,LN 16,F4),Bop(Bit,Var("x",F32),LN 7),
477        CC[EX(Var("x",F32),LN 15,LN 10,FTy 6),
478           EX(Var("x",F32),LN 26,LN 25,FTy 2)],
479        Bop(Bit,Var("x",F32),LN 24),EX(Var("x",F32),LN 4,LN 0,FTy 5),
480        Bop(Bit,Var("x",F32),LN 31),Bop(Bit,Var("x",F32),LN 27),
481        Bop(Bit,Var("x",F32),LN 5),Bop(Bit,Var("x",F32),LN 28),
482        Bop(Bit,Var("x",F32),LN 30),EX(Var("x",F32),LN 23,LN 20,F4)]))
483;
484val reg'PSR_def = Def
485  ("reg'PSR",Var("x",CTy"PSR"),
486   CS(Var("x",CTy"PSR"),
487      [(Rec(CTy"PSR",
488            [bVar"A",bVar"C",bVar"E",bVar"F",Var("GE",F4),bVar"I",
489             Var("IT",F8),bVar"J",Var("M",FTy 5),bVar"N",bVar"Q",bVar"T",
490             bVar"V",bVar"Z",Var("psr'rst",F4)]),
491        Bop(Mdfy,
492            Close
493              (TP[nVar"i",AVar bTy],
494               ITB([(EQ(nVar"i",LN 31),bVar"N"),
495                    (EQ(nVar"i",LN 30),bVar"Z"),
496                    (EQ(nVar"i",LN 29),bVar"C"),
497                    (EQ(nVar"i",LN 28),bVar"V"),
498                    (EQ(nVar"i",LN 27),bVar"Q"),
499                    (EQ(nVar"i",LN 26),Bop(Bit,Var("IT",F8),LN 1)),
500                    (EQ(nVar"i",LN 25),Bop(Bit,Var("IT",F8),LN 0)),
501                    (EQ(nVar"i",LN 24),bVar"J"),
502                    (EQ(nVar"i",LN 23),Bop(Bit,Var("psr'rst",F4),LN 3)),
503                    (EQ(nVar"i",LN 22),Bop(Bit,Var("psr'rst",F4),LN 2)),
504                    (EQ(nVar"i",LN 21),Bop(Bit,Var("psr'rst",F4),LN 1)),
505                    (EQ(nVar"i",LN 20),Bop(Bit,Var("psr'rst",F4),LN 0)),
506                    (EQ(nVar"i",LN 19),Bop(Bit,Var("GE",F4),LN 3)),
507                    (EQ(nVar"i",LN 18),Bop(Bit,Var("GE",F4),LN 2)),
508                    (EQ(nVar"i",LN 17),Bop(Bit,Var("GE",F4),LN 1)),
509                    (EQ(nVar"i",LN 16),Bop(Bit,Var("GE",F4),LN 0)),
510                    (EQ(nVar"i",LN 15),Bop(Bit,Var("IT",F8),LN 7)),
511                    (EQ(nVar"i",LN 14),Bop(Bit,Var("IT",F8),LN 6)),
512                    (EQ(nVar"i",LN 13),Bop(Bit,Var("IT",F8),LN 5)),
513                    (EQ(nVar"i",LN 12),Bop(Bit,Var("IT",F8),LN 4)),
514                    (EQ(nVar"i",LN 11),Bop(Bit,Var("IT",F8),LN 3)),
515                    (EQ(nVar"i",LN 10),Bop(Bit,Var("IT",F8),LN 2)),
516                    (EQ(nVar"i",LN 9),bVar"E"),(EQ(nVar"i",LN 8),bVar"A"),
517                    (EQ(nVar"i",LN 7),bVar"I"),(EQ(nVar"i",LN 6),bVar"F"),
518                    (EQ(nVar"i",LN 5),bVar"T"),
519                    (EQ(nVar"i",LN 4),Bop(Bit,Var("M",FTy 5),LN 4)),
520                    (EQ(nVar"i",LN 3),Bop(Bit,Var("M",FTy 5),LN 3)),
521                    (EQ(nVar"i",LN 2),Bop(Bit,Var("M",FTy 5),LN 2)),
522                    (EQ(nVar"i",LN 1),Bop(Bit,Var("M",FTy 5),LN 1))],
523                   Bop(Bit,Var("M",FTy 5),LN 0))),LW(0,32)))]))
524;
525val write'rec'PSR_def = Def
526  ("write'rec'PSR",TP[AVar F32,Var("x",CTy"PSR")],
527   Call("reg'PSR",F32,Var("x",CTy"PSR")))
528;
529val write'reg'PSR_def = Def
530  ("write'reg'PSR",TP[AVar(CTy"PSR"),Var("x",F32)],
531   Call("rec'PSR",CTy"PSR",Var("x",F32)))
532;
533val rec'SCTLR_def = Def
534  ("rec'SCTLR",Var("x",F32),
535   Rec(CTy"SCTLR",
536       [Bop(Bit,Var("x",F32),LN 1),Bop(Bit,Var("x",F32),LN 7),
537        Bop(Bit,Var("x",F32),LN 17),Bop(Bit,Var("x",F32),LN 2),
538        Bop(Bit,Var("x",F32),LN 19),Bop(Bit,Var("x",F32),LN 25),
539        Bop(Bit,Var("x",F32),LN 21),Bop(Bit,Var("x",F32),LN 12),
540        Bop(Bit,Var("x",F32),LN 31),Bop(Bit,Var("x",F32),LN 0),
541        Bop(Bit,Var("x",F32),LN 27),Bop(Bit,Var("x",F32),LN 14),
542        Bop(Bit,Var("x",F32),LN 10),Bop(Bit,Var("x",F32),LN 30),
543        Bop(Bit,Var("x",F32),LN 22),Bop(Bit,Var("x",F32),LN 13),
544        Bop(Bit,Var("x",F32),LN 24),Bop(Bit,Var("x",F32),LN 11),
545        CC[EX(Var("x",F32),LN 6,LN 3,F4),EX(Var("x",F32),LN 9,LN 8,FTy 2),
546           EX(Var("x",F32),LN 16,LN 15,FTy 2),
547           EX(Var("x",F32),LN 18,LN 18,F1),
548           EX(Var("x",F32),LN 20,LN 20,F1),
549           EX(Var("x",F32),LN 23,LN 23,F1),
550           EX(Var("x",F32),LN 26,LN 26,F1),
551           EX(Var("x",F32),LN 29,LN 28,FTy 2)]]))
552;
553val reg'SCTLR_def = Def
554  ("reg'SCTLR",Var("x",CTy"SCTLR"),
555   CS(Var("x",CTy"SCTLR"),
556      [(Rec(CTy"SCTLR",
557            [bVar"A",bVar"B",bVar"BR",bVar"C",bVar"DZ",bVar"EE",bVar"FI",
558             bVar"I",bVar"IE",bVar"M",bVar"NMFI",bVar"RR",bVar"SW",
559             bVar"TE",bVar"U",bVar"V",bVar"VE",bVar"Z",
560             Var("sctlr'rst",FTy 14)]),
561        Bop(Mdfy,
562            Close
563              (TP[nVar"i",AVar bTy],
564               ITB([(EQ(nVar"i",LN 31),bVar"IE"),
565                    (EQ(nVar"i",LN 30),bVar"TE"),
566                    (EQ(nVar"i",LN 29),
567                     Bop(Bit,Var("sctlr'rst",FTy 14),LN 1)),
568                    (EQ(nVar"i",LN 28),
569                     Bop(Bit,Var("sctlr'rst",FTy 14),LN 0)),
570                    (EQ(nVar"i",LN 27),bVar"NMFI"),
571                    (EQ(nVar"i",LN 26),
572                     Bop(Bit,Var("sctlr'rst",FTy 14),LN 2)),
573                    (EQ(nVar"i",LN 25),bVar"EE"),
574                    (EQ(nVar"i",LN 24),bVar"VE"),
575                    (EQ(nVar"i",LN 23),
576                     Bop(Bit,Var("sctlr'rst",FTy 14),LN 3)),
577                    (EQ(nVar"i",LN 22),bVar"U"),
578                    (EQ(nVar"i",LN 21),bVar"FI"),
579                    (EQ(nVar"i",LN 20),
580                     Bop(Bit,Var("sctlr'rst",FTy 14),LN 4)),
581                    (EQ(nVar"i",LN 19),bVar"DZ"),
582                    (EQ(nVar"i",LN 18),
583                     Bop(Bit,Var("sctlr'rst",FTy 14),LN 5)),
584                    (EQ(nVar"i",LN 17),bVar"BR"),
585                    (EQ(nVar"i",LN 16),
586                     Bop(Bit,Var("sctlr'rst",FTy 14),LN 7)),
587                    (EQ(nVar"i",LN 15),
588                     Bop(Bit,Var("sctlr'rst",FTy 14),LN 6)),
589                    (EQ(nVar"i",LN 14),bVar"RR"),
590                    (EQ(nVar"i",LN 13),bVar"V"),
591                    (EQ(nVar"i",LN 12),bVar"I"),
592                    (EQ(nVar"i",LN 11),bVar"Z"),
593                    (EQ(nVar"i",LN 10),bVar"SW"),
594                    (EQ(nVar"i",LN 9),
595                     Bop(Bit,Var("sctlr'rst",FTy 14),LN 9)),
596                    (EQ(nVar"i",LN 8),
597                     Bop(Bit,Var("sctlr'rst",FTy 14),LN 8)),
598                    (EQ(nVar"i",LN 7),bVar"B"),
599                    (EQ(nVar"i",LN 6),
600                     Bop(Bit,Var("sctlr'rst",FTy 14),LN 13)),
601                    (EQ(nVar"i",LN 5),
602                     Bop(Bit,Var("sctlr'rst",FTy 14),LN 12)),
603                    (EQ(nVar"i",LN 4),
604                     Bop(Bit,Var("sctlr'rst",FTy 14),LN 11)),
605                    (EQ(nVar"i",LN 3),
606                     Bop(Bit,Var("sctlr'rst",FTy 14),LN 10)),
607                    (EQ(nVar"i",LN 2),bVar"C"),(EQ(nVar"i",LN 1),bVar"A")],
608                   bVar"M")),LW(0,32)))]))
609;
610val write'rec'SCTLR_def = Def
611  ("write'rec'SCTLR",TP[AVar F32,Var("x",CTy"SCTLR")],
612   Call("reg'SCTLR",F32,Var("x",CTy"SCTLR")))
613;
614val write'reg'SCTLR_def = Def
615  ("write'reg'SCTLR",TP[AVar(CTy"SCTLR"),Var("x",F32)],
616   Call("rec'SCTLR",CTy"SCTLR",Var("x",F32)))
617;
618val rec'HSCTLR_def = Def
619  ("rec'HSCTLR",Var("x",F32),
620   Rec(CTy"HSCTLR",
621       [Bop(Bit,Var("x",F32),LN 1),Bop(Bit,Var("x",F32),LN 2),
622        Bop(Bit,Var("x",F32),LN 5),Bop(Bit,Var("x",F32),LN 25),
623        Bop(Bit,Var("x",F32),LN 21),Bop(Bit,Var("x",F32),LN 12),
624        Bop(Bit,Var("x",F32),LN 0),Bop(Bit,Var("x",F32),LN 30),
625        Bop(Bit,Var("x",F32),LN 19),
626        CC[EX(Var("x",F32),LN 4,LN 3,FTy 2),
627           EX(Var("x",F32),LN 11,LN 6,FTy 6),
628           EX(Var("x",F32),LN 18,LN 13,FTy 6),
629           EX(Var("x",F32),LN 20,LN 20,F1),
630           EX(Var("x",F32),LN 24,LN 22,FTy 3),
631           EX(Var("x",F32),LN 29,LN 26,F4),EX(Var("x",F32),LN 31,LN 31,F1)]]))
632;
633val reg'HSCTLR_def = Def
634  ("reg'HSCTLR",Var("x",CTy"HSCTLR"),
635   CS(Var("x",CTy"HSCTLR"),
636      [(Rec(CTy"HSCTLR",
637            [bVar"A",bVar"C",bVar"CP15BEN",bVar"EE",bVar"FI",bVar"I",
638             bVar"M",bVar"TE",bVar"WXN",Var("hsctlr'rst",FTy 23)]),
639        Bop(Mdfy,
640            Close
641              (TP[nVar"i",AVar bTy],
642               ITB([(EQ(nVar"i",LN 31),
643                     Bop(Bit,Var("hsctlr'rst",FTy 23),LN 0)),
644                    (EQ(nVar"i",LN 30),bVar"TE"),
645                    (EQ(nVar"i",LN 29),
646                     Bop(Bit,Var("hsctlr'rst",FTy 23),LN 4)),
647                    (EQ(nVar"i",LN 28),
648                     Bop(Bit,Var("hsctlr'rst",FTy 23),LN 3)),
649                    (EQ(nVar"i",LN 27),
650                     Bop(Bit,Var("hsctlr'rst",FTy 23),LN 2)),
651                    (EQ(nVar"i",LN 26),
652                     Bop(Bit,Var("hsctlr'rst",FTy 23),LN 1)),
653                    (EQ(nVar"i",LN 25),bVar"EE"),
654                    (EQ(nVar"i",LN 24),
655                     Bop(Bit,Var("hsctlr'rst",FTy 23),LN 7)),
656                    (EQ(nVar"i",LN 23),
657                     Bop(Bit,Var("hsctlr'rst",FTy 23),LN 6)),
658                    (EQ(nVar"i",LN 22),
659                     Bop(Bit,Var("hsctlr'rst",FTy 23),LN 5)),
660                    (EQ(nVar"i",LN 21),bVar"FI"),
661                    (EQ(nVar"i",LN 20),
662                     Bop(Bit,Var("hsctlr'rst",FTy 23),LN 8)),
663                    (EQ(nVar"i",LN 19),bVar"WXN"),
664                    (EQ(nVar"i",LN 18),
665                     Bop(Bit,Var("hsctlr'rst",FTy 23),LN 14)),
666                    (EQ(nVar"i",LN 17),
667                     Bop(Bit,Var("hsctlr'rst",FTy 23),LN 13)),
668                    (EQ(nVar"i",LN 16),
669                     Bop(Bit,Var("hsctlr'rst",FTy 23),LN 12)),
670                    (EQ(nVar"i",LN 15),
671                     Bop(Bit,Var("hsctlr'rst",FTy 23),LN 11)),
672                    (EQ(nVar"i",LN 14),
673                     Bop(Bit,Var("hsctlr'rst",FTy 23),LN 10)),
674                    (EQ(nVar"i",LN 13),
675                     Bop(Bit,Var("hsctlr'rst",FTy 23),LN 9)),
676                    (EQ(nVar"i",LN 12),bVar"I"),
677                    (EQ(nVar"i",LN 11),
678                     Bop(Bit,Var("hsctlr'rst",FTy 23),LN 20)),
679                    (EQ(nVar"i",LN 10),
680                     Bop(Bit,Var("hsctlr'rst",FTy 23),LN 19)),
681                    (EQ(nVar"i",LN 9),
682                     Bop(Bit,Var("hsctlr'rst",FTy 23),LN 18)),
683                    (EQ(nVar"i",LN 8),
684                     Bop(Bit,Var("hsctlr'rst",FTy 23),LN 17)),
685                    (EQ(nVar"i",LN 7),
686                     Bop(Bit,Var("hsctlr'rst",FTy 23),LN 16)),
687                    (EQ(nVar"i",LN 6),
688                     Bop(Bit,Var("hsctlr'rst",FTy 23),LN 15)),
689                    (EQ(nVar"i",LN 5),bVar"CP15BEN"),
690                    (EQ(nVar"i",LN 4),
691                     Bop(Bit,Var("hsctlr'rst",FTy 23),LN 22)),
692                    (EQ(nVar"i",LN 3),
693                     Bop(Bit,Var("hsctlr'rst",FTy 23),LN 21)),
694                    (EQ(nVar"i",LN 2),bVar"C"),(EQ(nVar"i",LN 1),bVar"A")],
695                   bVar"M")),LW(0,32)))]))
696;
697val write'rec'HSCTLR_def = Def
698  ("write'rec'HSCTLR",TP[AVar F32,Var("x",CTy"HSCTLR")],
699   Call("reg'HSCTLR",F32,Var("x",CTy"HSCTLR")))
700;
701val write'reg'HSCTLR_def = Def
702  ("write'reg'HSCTLR",TP[AVar(CTy"HSCTLR"),Var("x",F32)],
703   Call("rec'HSCTLR",CTy"HSCTLR",Var("x",F32)))
704;
705val rec'HSR_def = Def
706  ("rec'HSR",Var("x",F32),
707   Rec(CTy"HSR",
708       [EX(Var("x",F32),LN 31,LN 26,FTy 6),Bop(Bit,Var("x",F32),LN 25),
709        EX(Var("x",F32),LN 24,LN 0,FTy 25)]))
710;
711val reg'HSR_def = Def
712  ("reg'HSR",Var("x",CTy"HSR"),
713   CS(Var("x",CTy"HSR"),
714      [(Rec(CTy"HSR",[Var("EC",FTy 6),bVar"IL",Var("ISS",FTy 25)]),
715        Bop(Mdfy,
716            Close
717              (TP[nVar"i",AVar bTy],
718               ITB([(EQ(nVar"i",LN 31),Bop(Bit,Var("EC",FTy 6),LN 5)),
719                    (EQ(nVar"i",LN 30),Bop(Bit,Var("EC",FTy 6),LN 4)),
720                    (EQ(nVar"i",LN 29),Bop(Bit,Var("EC",FTy 6),LN 3)),
721                    (EQ(nVar"i",LN 28),Bop(Bit,Var("EC",FTy 6),LN 2)),
722                    (EQ(nVar"i",LN 27),Bop(Bit,Var("EC",FTy 6),LN 1)),
723                    (EQ(nVar"i",LN 26),Bop(Bit,Var("EC",FTy 6),LN 0)),
724                    (EQ(nVar"i",LN 25),bVar"IL"),
725                    (EQ(nVar"i",LN 24),Bop(Bit,Var("ISS",FTy 25),LN 24)),
726                    (EQ(nVar"i",LN 23),Bop(Bit,Var("ISS",FTy 25),LN 23)),
727                    (EQ(nVar"i",LN 22),Bop(Bit,Var("ISS",FTy 25),LN 22)),
728                    (EQ(nVar"i",LN 21),Bop(Bit,Var("ISS",FTy 25),LN 21)),
729                    (EQ(nVar"i",LN 20),Bop(Bit,Var("ISS",FTy 25),LN 20)),
730                    (EQ(nVar"i",LN 19),Bop(Bit,Var("ISS",FTy 25),LN 19)),
731                    (EQ(nVar"i",LN 18),Bop(Bit,Var("ISS",FTy 25),LN 18)),
732                    (EQ(nVar"i",LN 17),Bop(Bit,Var("ISS",FTy 25),LN 17)),
733                    (EQ(nVar"i",LN 16),Bop(Bit,Var("ISS",FTy 25),LN 16)),
734                    (EQ(nVar"i",LN 15),Bop(Bit,Var("ISS",FTy 25),LN 15)),
735                    (EQ(nVar"i",LN 14),Bop(Bit,Var("ISS",FTy 25),LN 14)),
736                    (EQ(nVar"i",LN 13),Bop(Bit,Var("ISS",FTy 25),LN 13)),
737                    (EQ(nVar"i",LN 12),Bop(Bit,Var("ISS",FTy 25),LN 12)),
738                    (EQ(nVar"i",LN 11),Bop(Bit,Var("ISS",FTy 25),LN 11)),
739                    (EQ(nVar"i",LN 10),Bop(Bit,Var("ISS",FTy 25),LN 10)),
740                    (EQ(nVar"i",LN 9),Bop(Bit,Var("ISS",FTy 25),LN 9)),
741                    (EQ(nVar"i",LN 8),Bop(Bit,Var("ISS",FTy 25),LN 8)),
742                    (EQ(nVar"i",LN 7),Bop(Bit,Var("ISS",FTy 25),LN 7)),
743                    (EQ(nVar"i",LN 6),Bop(Bit,Var("ISS",FTy 25),LN 6)),
744                    (EQ(nVar"i",LN 5),Bop(Bit,Var("ISS",FTy 25),LN 5)),
745                    (EQ(nVar"i",LN 4),Bop(Bit,Var("ISS",FTy 25),LN 4)),
746                    (EQ(nVar"i",LN 3),Bop(Bit,Var("ISS",FTy 25),LN 3)),
747                    (EQ(nVar"i",LN 2),Bop(Bit,Var("ISS",FTy 25),LN 2)),
748                    (EQ(nVar"i",LN 1),Bop(Bit,Var("ISS",FTy 25),LN 1))],
749                   Bop(Bit,Var("ISS",FTy 25),LN 0))),LW(0,32)))]))
750;
751val write'rec'HSR_def = Def
752  ("write'rec'HSR",TP[AVar F32,Var("x",CTy"HSR")],
753   Call("reg'HSR",F32,Var("x",CTy"HSR")))
754;
755val write'reg'HSR_def = Def
756  ("write'reg'HSR",TP[AVar(CTy"HSR"),Var("x",F32)],
757   Call("rec'HSR",CTy"HSR",Var("x",F32)))
758;
759val rec'SCR_def = Def
760  ("rec'SCR",Var("x",F32),
761   Rec(CTy"SCR",
762       [Bop(Bit,Var("x",F32),LN 5),Bop(Bit,Var("x",F32),LN 3),
763        Bop(Bit,Var("x",F32),LN 2),Bop(Bit,Var("x",F32),LN 4),
764        Bop(Bit,Var("x",F32),LN 8),Bop(Bit,Var("x",F32),LN 1),
765        Bop(Bit,Var("x",F32),LN 0),Bop(Bit,Var("x",F32),LN 7),
766        Bop(Bit,Var("x",F32),LN 9),Bop(Bit,Var("x",F32),LN 6),
767        EX(Var("x",F32),LN 31,LN 10,FTy 22)]))
768;
769val reg'SCR_def = Def
770  ("reg'SCR",Var("x",CTy"SCR"),
771   CS(Var("x",CTy"SCR"),
772      [(Rec(CTy"SCR",
773            [bVar"AW",bVar"EA",bVar"FIQ",bVar"FW",bVar"HCE",bVar"IRQ",
774             bVar"NS",bVar"SCD",bVar"SIF",bVar"nET",Var("scr'rst",FTy 22)]),
775        Bop(Mdfy,
776            Close
777              (TP[nVar"i",AVar bTy],
778               ITB([(EQ(nVar"i",LN 31),
779                     Bop(Bit,Var("scr'rst",FTy 22),LN 21)),
780                    (EQ(nVar"i",LN 30),
781                     Bop(Bit,Var("scr'rst",FTy 22),LN 20)),
782                    (EQ(nVar"i",LN 29),
783                     Bop(Bit,Var("scr'rst",FTy 22),LN 19)),
784                    (EQ(nVar"i",LN 28),
785                     Bop(Bit,Var("scr'rst",FTy 22),LN 18)),
786                    (EQ(nVar"i",LN 27),
787                     Bop(Bit,Var("scr'rst",FTy 22),LN 17)),
788                    (EQ(nVar"i",LN 26),
789                     Bop(Bit,Var("scr'rst",FTy 22),LN 16)),
790                    (EQ(nVar"i",LN 25),
791                     Bop(Bit,Var("scr'rst",FTy 22),LN 15)),
792                    (EQ(nVar"i",LN 24),
793                     Bop(Bit,Var("scr'rst",FTy 22),LN 14)),
794                    (EQ(nVar"i",LN 23),
795                     Bop(Bit,Var("scr'rst",FTy 22),LN 13)),
796                    (EQ(nVar"i",LN 22),
797                     Bop(Bit,Var("scr'rst",FTy 22),LN 12)),
798                    (EQ(nVar"i",LN 21),
799                     Bop(Bit,Var("scr'rst",FTy 22),LN 11)),
800                    (EQ(nVar"i",LN 20),
801                     Bop(Bit,Var("scr'rst",FTy 22),LN 10)),
802                    (EQ(nVar"i",LN 19),Bop(Bit,Var("scr'rst",FTy 22),LN 9)),
803                    (EQ(nVar"i",LN 18),Bop(Bit,Var("scr'rst",FTy 22),LN 8)),
804                    (EQ(nVar"i",LN 17),Bop(Bit,Var("scr'rst",FTy 22),LN 7)),
805                    (EQ(nVar"i",LN 16),Bop(Bit,Var("scr'rst",FTy 22),LN 6)),
806                    (EQ(nVar"i",LN 15),Bop(Bit,Var("scr'rst",FTy 22),LN 5)),
807                    (EQ(nVar"i",LN 14),Bop(Bit,Var("scr'rst",FTy 22),LN 4)),
808                    (EQ(nVar"i",LN 13),Bop(Bit,Var("scr'rst",FTy 22),LN 3)),
809                    (EQ(nVar"i",LN 12),Bop(Bit,Var("scr'rst",FTy 22),LN 2)),
810                    (EQ(nVar"i",LN 11),Bop(Bit,Var("scr'rst",FTy 22),LN 1)),
811                    (EQ(nVar"i",LN 10),Bop(Bit,Var("scr'rst",FTy 22),LN 0)),
812                    (EQ(nVar"i",LN 9),bVar"SIF"),
813                    (EQ(nVar"i",LN 8),bVar"HCE"),
814                    (EQ(nVar"i",LN 7),bVar"SCD"),
815                    (EQ(nVar"i",LN 6),bVar"nET"),
816                    (EQ(nVar"i",LN 5),bVar"AW"),
817                    (EQ(nVar"i",LN 4),bVar"FW"),
818                    (EQ(nVar"i",LN 3),bVar"EA"),
819                    (EQ(nVar"i",LN 2),bVar"FIQ"),
820                    (EQ(nVar"i",LN 1),bVar"IRQ")],bVar"NS")),LW(0,32)))]))
821;
822val write'rec'SCR_def = Def
823  ("write'rec'SCR",TP[AVar F32,Var("x",CTy"SCR")],
824   Call("reg'SCR",F32,Var("x",CTy"SCR")))
825;
826val write'reg'SCR_def = Def
827  ("write'reg'SCR",TP[AVar(CTy"SCR"),Var("x",F32)],
828   Call("rec'SCR",CTy"SCR",Var("x",F32)))
829;
830val rec'NSACR_def = Def
831  ("rec'NSACR",Var("x",F32),
832   Rec(CTy"NSACR",
833       [Bop(Bit,Var("x",F32),LN 15),Bop(Bit,Var("x",F32),LN 14),
834        Bop(Bit,Var("x",F32),LN 20),Bop(Bit,Var("x",F32),LN 19),
835        EX(Var("x",F32),LN 13,LN 0,FTy 14),
836        CC[EX(Var("x",F32),LN 18,LN 16,FTy 3),
837           EX(Var("x",F32),LN 31,LN 21,FTy 11)]]))
838;
839val reg'NSACR_def = Def
840  ("reg'NSACR",Var("x",CTy"NSACR"),
841   CS(Var("x",CTy"NSACR"),
842      [(Rec(CTy"NSACR",
843            [bVar"NSASEDIS",bVar"NSD32DIS",bVar"NSTRCDIS",bVar"RFR",
844             Var("cp",FTy 14),Var("nsacr'rst",FTy 14)]),
845        Bop(Mdfy,
846            Close
847              (TP[nVar"i",AVar bTy],
848               ITB([(EQ(nVar"i",LN 31),
849                     Bop(Bit,Var("nsacr'rst",FTy 14),LN 10)),
850                    (EQ(nVar"i",LN 30),
851                     Bop(Bit,Var("nsacr'rst",FTy 14),LN 9)),
852                    (EQ(nVar"i",LN 29),
853                     Bop(Bit,Var("nsacr'rst",FTy 14),LN 8)),
854                    (EQ(nVar"i",LN 28),
855                     Bop(Bit,Var("nsacr'rst",FTy 14),LN 7)),
856                    (EQ(nVar"i",LN 27),
857                     Bop(Bit,Var("nsacr'rst",FTy 14),LN 6)),
858                    (EQ(nVar"i",LN 26),
859                     Bop(Bit,Var("nsacr'rst",FTy 14),LN 5)),
860                    (EQ(nVar"i",LN 25),
861                     Bop(Bit,Var("nsacr'rst",FTy 14),LN 4)),
862                    (EQ(nVar"i",LN 24),
863                     Bop(Bit,Var("nsacr'rst",FTy 14),LN 3)),
864                    (EQ(nVar"i",LN 23),
865                     Bop(Bit,Var("nsacr'rst",FTy 14),LN 2)),
866                    (EQ(nVar"i",LN 22),
867                     Bop(Bit,Var("nsacr'rst",FTy 14),LN 1)),
868                    (EQ(nVar"i",LN 21),
869                     Bop(Bit,Var("nsacr'rst",FTy 14),LN 0)),
870                    (EQ(nVar"i",LN 20),bVar"NSTRCDIS"),
871                    (EQ(nVar"i",LN 19),bVar"RFR"),
872                    (EQ(nVar"i",LN 18),
873                     Bop(Bit,Var("nsacr'rst",FTy 14),LN 13)),
874                    (EQ(nVar"i",LN 17),
875                     Bop(Bit,Var("nsacr'rst",FTy 14),LN 12)),
876                    (EQ(nVar"i",LN 16),
877                     Bop(Bit,Var("nsacr'rst",FTy 14),LN 11)),
878                    (EQ(nVar"i",LN 15),bVar"NSASEDIS"),
879                    (EQ(nVar"i",LN 14),bVar"NSD32DIS"),
880                    (EQ(nVar"i",LN 13),Bop(Bit,Var("cp",FTy 14),LN 13)),
881                    (EQ(nVar"i",LN 12),Bop(Bit,Var("cp",FTy 14),LN 12)),
882                    (EQ(nVar"i",LN 11),Bop(Bit,Var("cp",FTy 14),LN 11)),
883                    (EQ(nVar"i",LN 10),Bop(Bit,Var("cp",FTy 14),LN 10)),
884                    (EQ(nVar"i",LN 9),Bop(Bit,Var("cp",FTy 14),LN 9)),
885                    (EQ(nVar"i",LN 8),Bop(Bit,Var("cp",FTy 14),LN 8)),
886                    (EQ(nVar"i",LN 7),Bop(Bit,Var("cp",FTy 14),LN 7)),
887                    (EQ(nVar"i",LN 6),Bop(Bit,Var("cp",FTy 14),LN 6)),
888                    (EQ(nVar"i",LN 5),Bop(Bit,Var("cp",FTy 14),LN 5)),
889                    (EQ(nVar"i",LN 4),Bop(Bit,Var("cp",FTy 14),LN 4)),
890                    (EQ(nVar"i",LN 3),Bop(Bit,Var("cp",FTy 14),LN 3)),
891                    (EQ(nVar"i",LN 2),Bop(Bit,Var("cp",FTy 14),LN 2)),
892                    (EQ(nVar"i",LN 1),Bop(Bit,Var("cp",FTy 14),LN 1))],
893                   Bop(Bit,Var("cp",FTy 14),LN 0))),LW(0,32)))]))
894;
895val write'rec'NSACR_def = Def
896  ("write'rec'NSACR",TP[AVar F32,Var("x",CTy"NSACR")],
897   Call("reg'NSACR",F32,Var("x",CTy"NSACR")))
898;
899val write'reg'NSACR_def = Def
900  ("write'reg'NSACR",TP[AVar(CTy"NSACR"),Var("x",F32)],
901   Call("rec'NSACR",CTy"NSACR",Var("x",F32)))
902;
903val rec'HCR_def = Def
904  ("rec'HCR",Var("x",F32),
905   Rec(CTy"HCR",
906       [Bop(Bit,Var("x",F32),LN 5),EX(Var("x",F32),LN 11,LN 10,FTy 2),
907        Bop(Bit,Var("x",F32),LN 12),Bop(Bit,Var("x",F32),LN 9),
908        Bop(Bit,Var("x",F32),LN 3),Bop(Bit,Var("x",F32),LN 4),
909        Bop(Bit,Var("x",F32),LN 2),Bop(Bit,Var("x",F32),LN 1),
910        Bop(Bit,Var("x",F32),LN 21),Bop(Bit,Var("x",F32),LN 27),
911        EX(Var("x",F32),LN 18,LN 15,F4),Bop(Bit,Var("x",F32),LN 20),
912        Bop(Bit,Var("x",F32),LN 23),Bop(Bit,Var("x",F32),LN 24),
913        Bop(Bit,Var("x",F32),LN 19),Bop(Bit,Var("x",F32),LN 22),
914        Bop(Bit,Var("x",F32),LN 25),Bop(Bit,Var("x",F32),LN 26),
915        Bop(Bit,Var("x",F32),LN 14),Bop(Bit,Var("x",F32),LN 13),
916        Bop(Bit,Var("x",F32),LN 8),Bop(Bit,Var("x",F32),LN 6),
917        Bop(Bit,Var("x",F32),LN 7),Bop(Bit,Var("x",F32),LN 0),
918        EX(Var("x",F32),LN 31,LN 28,F4)]))
919;
920val reg'HCR_def = Def
921  ("reg'HCR",Var("x",CTy"HCR"),
922   CS(Var("x",CTy"HCR"),
923      [(Rec(CTy"HCR",
924            [bVar"AMO",Var("BSU",FTy 2),bVar"DC",bVar"FB",bVar"FMO",
925             bVar"IMO",bVar"PTW",bVar"SWIO",bVar"TAC",bVar"TGE",
926             Var("TID",F4),bVar"TIDCP",bVar"TPC",bVar"TPU",bVar"TSC",
927             bVar"TSW",bVar"TTLB",bVar"TVM",bVar"TWE",bVar"TWI",bVar"VA",
928             bVar"VF",bVar"VI",bVar"VM",Var("hcr'rst",F4)]),
929        Bop(Mdfy,
930            Close
931              (TP[nVar"i",AVar bTy],
932               ITB([(EQ(nVar"i",LN 31),Bop(Bit,Var("hcr'rst",F4),LN 3)),
933                    (EQ(nVar"i",LN 30),Bop(Bit,Var("hcr'rst",F4),LN 2)),
934                    (EQ(nVar"i",LN 29),Bop(Bit,Var("hcr'rst",F4),LN 1)),
935                    (EQ(nVar"i",LN 28),Bop(Bit,Var("hcr'rst",F4),LN 0)),
936                    (EQ(nVar"i",LN 27),bVar"TGE"),
937                    (EQ(nVar"i",LN 26),bVar"TVM"),
938                    (EQ(nVar"i",LN 25),bVar"TTLB"),
939                    (EQ(nVar"i",LN 24),bVar"TPU"),
940                    (EQ(nVar"i",LN 23),bVar"TPC"),
941                    (EQ(nVar"i",LN 22),bVar"TSW"),
942                    (EQ(nVar"i",LN 21),bVar"TAC"),
943                    (EQ(nVar"i",LN 20),bVar"TIDCP"),
944                    (EQ(nVar"i",LN 19),bVar"TSC"),
945                    (EQ(nVar"i",LN 18),Bop(Bit,Var("TID",F4),LN 3)),
946                    (EQ(nVar"i",LN 17),Bop(Bit,Var("TID",F4),LN 2)),
947                    (EQ(nVar"i",LN 16),Bop(Bit,Var("TID",F4),LN 1)),
948                    (EQ(nVar"i",LN 15),Bop(Bit,Var("TID",F4),LN 0)),
949                    (EQ(nVar"i",LN 14),bVar"TWE"),
950                    (EQ(nVar"i",LN 13),bVar"TWI"),
951                    (EQ(nVar"i",LN 12),bVar"DC"),
952                    (EQ(nVar"i",LN 11),Bop(Bit,Var("BSU",FTy 2),LN 1)),
953                    (EQ(nVar"i",LN 10),Bop(Bit,Var("BSU",FTy 2),LN 0)),
954                    (EQ(nVar"i",LN 9),bVar"FB"),
955                    (EQ(nVar"i",LN 8),bVar"VA"),
956                    (EQ(nVar"i",LN 7),bVar"VI"),
957                    (EQ(nVar"i",LN 6),bVar"VF"),
958                    (EQ(nVar"i",LN 5),bVar"AMO"),
959                    (EQ(nVar"i",LN 4),bVar"IMO"),
960                    (EQ(nVar"i",LN 3),bVar"FMO"),
961                    (EQ(nVar"i",LN 2),bVar"PTW"),
962                    (EQ(nVar"i",LN 1),bVar"SWIO")],bVar"VM")),LW(0,32)))]))
963;
964val write'rec'HCR_def = Def
965  ("write'rec'HCR",TP[AVar F32,Var("x",CTy"HCR")],
966   Call("reg'HCR",F32,Var("x",CTy"HCR")))
967;
968val write'reg'HCR_def = Def
969  ("write'reg'HCR",TP[AVar(CTy"HCR"),Var("x",F32)],
970   Call("rec'HCR",CTy"HCR",Var("x",F32)))
971;
972val ProcessorID_def = Def ("ProcessorID",AVar uTy,LI 0)
973;
974val IsExternalAbort_def = Def
975  ("IsExternalAbort",AVar uTy,
976   MB(MR(Close(qVar"s",Dest("external_abort_oracle",ATy(nTy,bTy),qVar"s"))),
977      Close
978        (Var("v",ATy(nTy,bTy)),
979         MB(MB(MR(Close
980                    (qVar"s",
981                     Dest("external_abort_oracle_count",nTy,qVar"s"))),
982               Close
983                 (nVar"v0",MU(Apply(Var("v",ATy(nTy,bTy)),nVar"v0"),qTy))),
984            Close
985              (bVar"ext",
986               MB(MR(Close
987                       (qVar"s",
988                        Dest("external_abort_oracle_count",nTy,qVar"s"))),
989                  Close
990                    (nVar"v",
991                     MB(MB(MU(Bop(Add,nVar"v",LN 1),qTy),
992                           Close
993                             (nVar"v",
994                              MW(Close
995                                   (qVar"s",
996                                    Rupd
997                                      ("external_abort_oracle_count",
998                                       TP[qVar"s",nVar"v"]))))),
999                        Close(AVar uTy,MU(bVar"ext",qTy))))))))))
1000;
1001val IsSecure_def = Def
1002  ("IsSecure",AVar uTy,
1003   MB(Call("HaveSecurityExt",ATy(qTy,PTy(bTy,qTy)),LU),
1004      Close
1005        (bVar"v",
1006         MB(MB(MU(Mop(Not,bVar"v"),qTy),
1007               Close
1008                 (bVar"b",
1009                  ITE(bVar"b",MU(LT,qTy),
1010                      MB(MR(Close(qVar"s",Dest("CP15",CTy"CP15",qVar"s"))),
1011                         Close
1012                           (Var("v",CTy"CP15"),
1013                            MB(MB(MU(Dest
1014                                       ("SCR",CTy"SCR",Var("v",CTy"CP15")),
1015                                     qTy),
1016                                  Close
1017                                    (Var("v",CTy"SCR"),
1018                                     MU(Dest("NS",bTy,Var("v",CTy"SCR")),
1019                                        qTy))),
1020                               Close(bVar"v",MU(Mop(Not,bVar"v"),qTy)))))))),
1021            Close
1022              (bVar"b",
1023               ITE(bVar"b",MU(LT,qTy),
1024                   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1025                      Close
1026                        (Var("v",CTy"PSR"),
1027                         MB(MU(Dest("M",FTy 5,Var("v",CTy"PSR")),qTy),
1028                            Close
1029                              (Var("v",FTy 5),
1030                               MU(EQ(Var("v",FTy 5),LW(22,5)),qTy)))))))))))
1031;
1032val UnalignedSupport_def = Def
1033  ("UnalignedSupport",AVar uTy,
1034   MB(Call("ArchVersion",ATy(qTy,PTy(nTy,qTy)),LU),
1035      Close
1036        (nVar"v",
1037         MB(MR(Close(qVar"s",Dest("CP15",CTy"CP15",qVar"s"))),
1038            Close
1039              (Var("v0",CTy"CP15"),
1040               MB(MB(MB(MU(Dest("SCTLR",CTy"SCTLR",Var("v0",CTy"CP15")),
1041                           qTy),
1042                        Close
1043                          (Var("v",CTy"SCTLR"),
1044                           MU(Dest("U",bTy,Var("v",CTy"SCTLR")),qTy))),
1045                     Close
1046                       (bVar"v0",
1047                        MU(Bop(And,EQ(nVar"v",LN 6),bVar"v0"),qTy))),
1048                  Close
1049                    (bVar"v0",
1050                     MU(Bop(Or,Bop(Ge,nVar"v",LN 7),bVar"v0"),qTy))))))))
1051;
1052val BadMode_def = Def
1053  ("BadMode",Var("mode",FTy 5),
1054   CS(Var("mode",FTy 5),
1055      [(LW(16,5),MU(LF,qTy)),(LW(17,5),MU(LF,qTy)),(LW(18,5),MU(LF,qTy)),
1056       (LW(19,5),MU(LF,qTy)),
1057       (LW(22,5),
1058        MB(Call("HaveSecurityExt",ATy(qTy,PTy(bTy,qTy)),LU),
1059           Close(bVar"v",MU(Mop(Not,bVar"v"),qTy)))),
1060       (LW(23,5),MU(LF,qTy)),
1061       (LW(26,5),
1062        MB(Call("HaveVirtExt",ATy(qTy,PTy(bTy,qTy)),LU),
1063           Close(bVar"v",MU(Mop(Not,bVar"v"),qTy)))),
1064       (LW(27,5),MU(LF,qTy)),(LW(31,5),MU(LF,qTy)),
1065       (AVar(FTy 5),MU(LT,qTy))]))
1066;
1067val CurrentModeIsNotUser_def = Def
1068  ("CurrentModeIsNotUser",AVar uTy,
1069   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1070      Close
1071        (Var("v",CTy"PSR"),
1072         MB(MB(MB(MU(Dest("M",FTy 5,Var("v",CTy"PSR")),qTy),
1073                  Close
1074                    (Var("v",FTy 5),
1075                     Call("BadMode",ATy(qTy,PTy(bTy,qTy)),Var("v",FTy 5)))),
1076               Close
1077                 (bVar"b",
1078                  ITE(bVar"b",
1079                      MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1080                         Close
1081                           (Var("v",CTy"PSR"),
1082                            MB(MB(MB(MB(MU(Dest
1083                                             ("M",FTy 5,Var("v",CTy"PSR")),
1084                                           qTy),
1085                                        Close
1086                                          (Var("v",FTy 5),
1087                                           MU(Mop(Cast sTy,Var("v",FTy 5)),
1088                                              qTy))),
1089                                     Close
1090                                       (sVar"v",
1091                                        MU(CC[LS"BadMode: ",sVar"v"],qTy))),
1092                                  Close
1093                                    (sVar"v",
1094                                     MU(Call
1095                                          ("UNPREDICTABLE",CTy"exception",
1096                                           sVar"v"),qTy))),
1097                               Close
1098                                 (Var("v",CTy"exception"),
1099                                  Call
1100                                    ("raise'exception",
1101                                     ATy(qTy,PTy(uTy,qTy)),
1102                                     Var("v",CTy"exception")))))),
1103                      MU(LU,qTy)))),
1104            Close
1105              (AVar uTy,
1106               MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1107                  Close
1108                    (Var("v",CTy"PSR"),
1109                     MB(MB(MU(Dest("M",FTy 5,Var("v",CTy"PSR")),qTy),
1110                           Close
1111                             (Var("v",FTy 5),
1112                              MU(EQ(Var("v",FTy 5),LW(16,5)),qTy))),
1113                        Close(bVar"v",MU(Mop(Not,bVar"v"),qTy))))))))))
1114;
1115val CurrentModeIsUserOrSystem_def = Def
1116  ("CurrentModeIsUserOrSystem",AVar uTy,
1117   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1118      Close
1119        (Var("v",CTy"PSR"),
1120         MB(MB(MB(MU(Dest("M",FTy 5,Var("v",CTy"PSR")),qTy),
1121                  Close
1122                    (Var("v",FTy 5),
1123                     Call("BadMode",ATy(qTy,PTy(bTy,qTy)),Var("v",FTy 5)))),
1124               Close
1125                 (bVar"b",
1126                  ITE(bVar"b",
1127                      MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1128                         Close
1129                           (Var("v",CTy"PSR"),
1130                            MB(MB(MB(MB(MU(Dest
1131                                             ("M",FTy 5,Var("v",CTy"PSR")),
1132                                           qTy),
1133                                        Close
1134                                          (Var("v",FTy 5),
1135                                           MU(Mop(Cast sTy,Var("v",FTy 5)),
1136                                              qTy))),
1137                                     Close
1138                                       (sVar"v",
1139                                        MU(CC[LS"BadMode: ",sVar"v"],qTy))),
1140                                  Close
1141                                    (sVar"v",
1142                                     MU(Call
1143                                          ("UNPREDICTABLE",CTy"exception",
1144                                           sVar"v"),qTy))),
1145                               Close
1146                                 (Var("v",CTy"exception"),
1147                                  Call
1148                                    ("raise'exception",
1149                                     ATy(qTy,PTy(uTy,qTy)),
1150                                     Var("v",CTy"exception")))))),
1151                      MU(LU,qTy)))),
1152            Close
1153              (AVar uTy,
1154               MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1155                  Close
1156                    (Var("v",CTy"PSR"),
1157                     MB(MU(Dest("M",FTy 5,Var("v",CTy"PSR")),qTy),
1158                        Close
1159                          (Var("v",FTy 5),
1160                           MU(Bop(In,Var("v",FTy 5),SL[LW(16,5),LW(31,5)]),
1161                              qTy))))))))))
1162;
1163val CurrentModeIsHyp_def = Def
1164  ("CurrentModeIsHyp",AVar uTy,
1165   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1166      Close
1167        (Var("v",CTy"PSR"),
1168         MB(MB(MB(MU(Dest("M",FTy 5,Var("v",CTy"PSR")),qTy),
1169                  Close
1170                    (Var("v",FTy 5),
1171                     Call("BadMode",ATy(qTy,PTy(bTy,qTy)),Var("v",FTy 5)))),
1172               Close
1173                 (bVar"b",
1174                  ITE(bVar"b",
1175                      MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1176                         Close
1177                           (Var("v",CTy"PSR"),
1178                            MB(MB(MB(MB(MU(Dest
1179                                             ("M",FTy 5,Var("v",CTy"PSR")),
1180                                           qTy),
1181                                        Close
1182                                          (Var("v",FTy 5),
1183                                           MU(Mop(Cast sTy,Var("v",FTy 5)),
1184                                              qTy))),
1185                                     Close
1186                                       (sVar"v",
1187                                        MU(CC[LS"BadMode: ",sVar"v"],qTy))),
1188                                  Close
1189                                    (sVar"v",
1190                                     MU(Call
1191                                          ("UNPREDICTABLE",CTy"exception",
1192                                           sVar"v"),qTy))),
1193                               Close
1194                                 (Var("v",CTy"exception"),
1195                                  Call
1196                                    ("raise'exception",
1197                                     ATy(qTy,PTy(uTy,qTy)),
1198                                     Var("v",CTy"exception")))))),
1199                      MU(LU,qTy)))),
1200            Close
1201              (AVar uTy,
1202               MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1203                  Close
1204                    (Var("v",CTy"PSR"),
1205                     MB(MU(Dest("M",FTy 5,Var("v",CTy"PSR")),qTy),
1206                        Close
1207                          (Var("v",FTy 5),
1208                           MU(EQ(Var("v",FTy 5),LW(26,5)),qTy))))))))))
1209;
1210val IntegerZeroDivideTrappingEnabled_def = Def
1211  ("IntegerZeroDivideTrappingEnabled",AVar uTy,
1212   MB(MR(Close(qVar"s",Dest("CP15",CTy"CP15",qVar"s"))),
1213      Close
1214        (Var("v",CTy"CP15"),
1215         MB(MU(Dest("SCTLR",CTy"SCTLR",Var("v",CTy"CP15")),qTy),
1216            Close
1217              (Var("v",CTy"SCTLR"),
1218               MU(Dest("DZ",bTy,Var("v",CTy"SCTLR")),qTy))))))
1219;
1220val ISETSTATE_def = Def0
1221  ("ISETSTATE",
1222   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1223      Close
1224        (Var("v",CTy"PSR"),
1225         MB(MB(MU(Dest("J",bTy,Var("v",CTy"PSR")),qTy),
1226               Close(bVar"v",MU(Mop(Cast F1,bVar"v"),qTy))),
1227            Close
1228              (Var("v",F1),
1229               MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1230                  Close
1231                    (Var("v0",CTy"PSR"),
1232                     MB(MB(MU(Dest("T",bTy,Var("v0",CTy"PSR")),qTy),
1233                           Close(bVar"v",MU(Mop(Cast F1,bVar"v"),qTy))),
1234                        Close
1235                          (Var("v0",F1),
1236                           MU(CC[Var("v",F1),Var("v0",F1)],qTy))))))))))
1237;
1238val write'ISETSTATE_def = Def
1239  ("write'ISETSTATE",Var("value",FTy 2),
1240   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1241      Close
1242        (Var("v",CTy"PSR"),
1243         MB(MB(MB(MU(TP[Var("v",CTy"PSR"),Bop(Bit,Var("value",FTy 2),LN 1)],
1244                     qTy),
1245                  Close
1246                    (Var("v",PTy(CTy"PSR",bTy)),
1247                     MU(Rupd("J",Var("v",PTy(CTy"PSR",bTy))),qTy))),
1248               Close
1249                 (Var("v",CTy"PSR"),
1250                  MW(Close
1251                       (qVar"s",Rupd("CPSR",TP[qVar"s",Var("v",CTy"PSR")]))))),
1252            Close
1253              (AVar uTy,
1254               MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1255                  Close
1256                    (Var("v",CTy"PSR"),
1257                     MB(MB(MU(TP[Var("v",CTy"PSR"),
1258                                 Bop(Bit,Var("value",FTy 2),LN 0)],qTy),
1259                           Close
1260                             (Var("v",PTy(CTy"PSR",bTy)),
1261                              MU(Rupd("T",Var("v",PTy(CTy"PSR",bTy))),qTy))),
1262                        Close
1263                          (Var("v",CTy"PSR"),
1264                           MW(Close
1265                                (qVar"s",
1266                                 Rupd
1267                                   ("CPSR",TP[qVar"s",Var("v",CTy"PSR")]))))))))))))
1268;
1269val CurrentInstrSet_def = Def
1270  ("CurrentInstrSet",AVar uTy,
1271   MB(Const("ISETSTATE",ATy(qTy,PTy(FTy 2,qTy))),
1272      Close
1273        (Var("x",FTy 2),
1274         MU(CS(Var("x",FTy 2),
1275               [(LW(0,2),LC("InstrSet_ARM",CTy"InstrSet")),
1276                (LW(1,2),LC("InstrSet_Thumb",CTy"InstrSet")),
1277                (LW(2,2),LC("InstrSet_Jazelle",CTy"InstrSet")),
1278                (LW(3,2),LC("InstrSet_ThumbEE",CTy"InstrSet"))]),qTy))))
1279;
1280val SelectInstrSet_def = Def
1281  ("SelectInstrSet",Var("iset",CTy"InstrSet"),
1282   CS(Var("iset",CTy"InstrSet"),
1283      [(LC("InstrSet_ARM",CTy"InstrSet"),
1284        MB(Call("CurrentInstrSet",ATy(qTy,PTy(CTy"InstrSet",qTy)),LU),
1285           Close
1286             (Var("v",CTy"InstrSet"),
1287              MB(MU(EQ(Var("v",CTy"InstrSet"),
1288                       LC("InstrSet_ThumbEE",CTy"InstrSet")),qTy),
1289                 Close
1290                   (bVar"b",
1291                    ITE(bVar"b",
1292                        Call
1293                          ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
1294                           Call
1295                             ("UNPREDICTABLE",CTy"exception",
1296                              LS"SelectInstrSet")),
1297                        Call
1298                          ("write'ISETSTATE",ATy(qTy,PTy(uTy,qTy)),LW(0,2)))))))),
1299       (LC("InstrSet_Thumb",CTy"InstrSet"),
1300        Call("write'ISETSTATE",ATy(qTy,PTy(uTy,qTy)),LW(1,2))),
1301       (LC("InstrSet_Jazelle",CTy"InstrSet"),
1302        Call("write'ISETSTATE",ATy(qTy,PTy(uTy,qTy)),LW(2,2))),
1303       (LC("InstrSet_ThumbEE",CTy"InstrSet"),
1304        Call("write'ISETSTATE",ATy(qTy,PTy(uTy,qTy)),LW(3,2)))]))
1305;
1306val ITSTATE_def = Def0
1307  ("ITSTATE",
1308   MB(Call("HaveThumb2",ATy(qTy,PTy(bTy,qTy)),LU),
1309      Close
1310        (bVar"b",
1311         ITE(bVar"b",
1312             MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1313                Close
1314                  (Var("v",CTy"PSR"),
1315                   MU(Dest("IT",F8,Var("v",CTy"PSR")),qTy))),
1316             MU(LW(0,8),qTy)))))
1317;
1318val write'ITSTATE_def = Def
1319  ("write'ITSTATE",Var("value",F8),
1320   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1321      Close
1322        (Var("v",CTy"PSR"),
1323         MB(MB(MU(TP[Var("v",CTy"PSR"),Var("value",F8)],qTy),
1324               Close
1325                 (Var("v",PTy(CTy"PSR",F8)),
1326                  MU(Rupd("IT",Var("v",PTy(CTy"PSR",F8))),qTy))),
1327            Close
1328              (Var("v",CTy"PSR"),
1329               MW(Close
1330                    (qVar"s",Rupd("CPSR",TP[qVar"s",Var("v",CTy"PSR")]))))))))
1331;
1332val ITAdvance_def = Def
1333  ("ITAdvance",AVar uTy,
1334   MB(Call("HaveThumb2",ATy(qTy,PTy(bTy,qTy)),LU),
1335      Close
1336        (bVar"v",
1337         MB(ITE(bVar"v",
1338                MB(MR(Close
1339                        (qVar"s",Dest("Encoding",CTy"Encoding",qVar"s"))),
1340                   Close
1341                     (Var("v",CTy"Encoding"),
1342                      MB(MU(EQ(Var("v",CTy"Encoding"),
1343                               LC("Encoding_ARM",CTy"Encoding")),qTy),
1344                         Close(bVar"v",MU(Mop(Not,bVar"v"),qTy))))),
1345                MU(LF,qTy)),
1346            Close
1347              (bVar"b",
1348               ITE(bVar"b",
1349                   MB(Const("ITSTATE",ATy(qTy,PTy(F8,qTy))),
1350                      Close
1351                        (Var("v",F8),
1352                         MB(MB(MU(EX(Var("v",F8),LN 2,LN 0,FTy 3),qTy),
1353                               Close
1354                                 (Var("v",FTy 3),
1355                                  MU(EQ(Var("v",FTy 3),LW(0,3)),qTy))),
1356                            Close
1357                              (bVar"b",
1358                               ITE(bVar"b",
1359                                   Call
1360                                     ("write'ITSTATE",
1361                                      ATy(qTy,PTy(uTy,qTy)),LW(0,8)),
1362                                   MB(Const
1363                                        ("ITSTATE",ATy(qTy,PTy(F8,qTy))),
1364                                      Close
1365                                        (Var("w",F8),
1366                                         MB(Const
1367                                              ("ITSTATE",
1368                                               ATy(qTy,PTy(F8,qTy))),
1369                                            Close
1370                                              (Var("v",F8),
1371                                               MB(MB(MB(MU(EX(Var("v",F8),
1372                                                              LN 4,LN 0,
1373                                                              FTy 5),qTy),
1374                                                        Close
1375                                                          (Var("v",FTy 5),
1376                                                           MU(Bop(Lsl,
1377                                                                  Var("v",
1378                                                                      FTy 5),
1379                                                                  LN 1),
1380                                                              qTy))),
1381                                                     Close
1382                                                       (Var("v",FTy 5),
1383                                                        MU(BFI(LN 4,LN 0,
1384                                                               Var("v",
1385                                                                   FTy 5),
1386                                                               Var("w",F8)),
1387                                                           qTy))),
1388                                                  Close
1389                                                    (Var("v",F8),
1390                                                     Call
1391                                                       ("write'ITSTATE",
1392                                                        ATy(qTy,
1393                                                            PTy(uTy,qTy)),
1394                                                        Var("v",F8))))))))))))),
1395                   MU(LU,qTy)))))))
1396;
1397val InITBlock_def = Def
1398  ("InITBlock",AVar uTy,
1399   MB(Const("ITSTATE",ATy(qTy,PTy(F8,qTy))),
1400      Close
1401        (Var("v",F8),
1402         MB(MB(MU(EX(Var("v",F8),LN 3,LN 0,F4),qTy),
1403               Close(Var("v",F4),MU(EQ(Var("v",F4),LW(0,4)),qTy))),
1404            Close(bVar"v",MU(Mop(Not,bVar"v"),qTy))))))
1405;
1406val LastInITBlock_def = Def
1407  ("LastInITBlock",AVar uTy,
1408   MB(Const("ITSTATE",ATy(qTy,PTy(F8,qTy))),
1409      Close
1410        (Var("v",F8),
1411         MB(MU(EX(Var("v",F8),LN 3,LN 0,F4),qTy),
1412            Close(Var("v",F4),MU(EQ(Var("v",F4),LW(8,4)),qTy))))))
1413;
1414val ThumbCondition_def = Def
1415  ("ThumbCondition",AVar uTy,
1416   MB(Const("ITSTATE",ATy(qTy,PTy(F8,qTy))),
1417      Close
1418        (Var("v",F8),
1419         MB(MU(EQ(Var("v",F8),LW(0,8)),qTy),
1420            Close
1421              (bVar"b",
1422               ITE(bVar"b",MU(LW(14,4),qTy),
1423                   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1424                      Close
1425                        (Var("v",CTy"PSR"),
1426                         MB(MB(MB(MB(MU(Dest("IT",F8,Var("v",CTy"PSR")),
1427                                        qTy),
1428                                     Close
1429                                       (Var("v",F8),
1430                                        MU(EX(Var("v",F8),LN 3,LN 0,F4),
1431                                           qTy))),
1432                                  Close
1433                                    (Var("v",F4),
1434                                     MU(EQ(Var("v",F4),LW(0,4)),qTy))),
1435                               Close(bVar"v",MU(Mop(Not,bVar"v"),qTy))),
1436                            Close
1437                              (bVar"b",
1438                               ITE(bVar"b",
1439                                   MB(MR(Close
1440                                           (qVar"s",
1441                                            Dest("CPSR",CTy"PSR",qVar"s"))),
1442                                      Close
1443                                        (Var("v",CTy"PSR"),
1444                                         MB(MU(Dest
1445                                                 ("IT",F8,
1446                                                  Var("v",CTy"PSR")),qTy),
1447                                            Close
1448                                              (Var("v",F8),
1449                                               MU(EX(Var("v",F8),LN 7,
1450                                                     LN 4,F4),qTy))))),
1451                                   Call
1452                                     ("raise'exception",
1453                                      ATy(qTy,PTy(F4,qTy)),
1454                                      Call
1455                                        ("UNPREDICTABLE",CTy"exception",
1456                                         LS"ThumbCondition")))))))))))))
1457;
1458val BigEndian_def = Def
1459  ("BigEndian",AVar uTy,
1460   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1461      Close(Var("v",CTy"PSR"),MU(Dest("E",bTy,Var("v",CTy"PSR")),qTy))))
1462;
1463val CurrentCond_def = Def
1464  ("CurrentCond",AVar uTy,
1465   MR(Close(qVar"s",Dest("CurrentCondition",F4,qVar"s"))))
1466;
1467val ConditionPassed_def = Def
1468  ("ConditionPassed",AVar uTy,
1469   MB(Call("CurrentCond",ATy(qTy,PTy(F4,qTy)),LU),
1470      Close
1471        (Var("cond",F4),
1472         MB(CS(EX(Var("cond",F4),LN 3,LN 1,FTy 3),
1473               [(LW(0,3),
1474                 MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1475                    Close
1476                      (Var("v",CTy"PSR"),
1477                       MU(Dest("Z",bTy,Var("v",CTy"PSR")),qTy)))),
1478                (LW(1,3),
1479                 MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1480                    Close
1481                      (Var("v",CTy"PSR"),
1482                       MU(Dest("C",bTy,Var("v",CTy"PSR")),qTy)))),
1483                (LW(2,3),
1484                 MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1485                    Close
1486                      (Var("v",CTy"PSR"),
1487                       MU(Dest("N",bTy,Var("v",CTy"PSR")),qTy)))),
1488                (LW(3,3),
1489                 MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1490                    Close
1491                      (Var("v",CTy"PSR"),
1492                       MU(Dest("V",bTy,Var("v",CTy"PSR")),qTy)))),
1493                (LW(4,3),
1494                 MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1495                    Close
1496                      (Var("v",CTy"PSR"),
1497                       MB(MU(Dest("C",bTy,Var("v",CTy"PSR")),qTy),
1498                          Close
1499                            (bVar"b",
1500                             ITE(bVar"b",
1501                                 MB(MR(Close
1502                                         (qVar"s",
1503                                          Dest("CPSR",CTy"PSR",qVar"s"))),
1504                                    Close
1505                                      (Var("v",CTy"PSR"),
1506                                       MB(MU(Dest
1507                                               ("Z",bTy,Var("v",CTy"PSR")),
1508                                             qTy),
1509                                          Close
1510                                            (bVar"v",
1511                                             MU(Mop(Not,bVar"v"),qTy))))),
1512                                 MU(LF,qTy))))))),
1513                (LW(5,3),
1514                 MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1515                    Close
1516                      (Var("v",CTy"PSR"),
1517                       MB(MU(Dest("N",bTy,Var("v",CTy"PSR")),qTy),
1518                          Close
1519                            (bVar"v",
1520                             MB(MR(Close
1521                                     (qVar"s",
1522                                      Dest("CPSR",CTy"PSR",qVar"s"))),
1523                                Close
1524                                  (Var("v0",CTy"PSR"),
1525                                   MB(MU(Dest("V",bTy,Var("v0",CTy"PSR")),
1526                                         qTy),
1527                                      Close
1528                                        (bVar"v0",
1529                                         MU(EQ(bVar"v",bVar"v0"),qTy)))))))))),
1530                (LW(6,3),
1531                 MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1532                    Close
1533                      (Var("v",CTy"PSR"),
1534                       MB(MB(MU(Dest("N",bTy,Var("v",CTy"PSR")),qTy),
1535                             Close
1536                               (bVar"v",
1537                                MB(MR(Close
1538                                        (qVar"s",
1539                                         Dest("CPSR",CTy"PSR",qVar"s"))),
1540                                   Close
1541                                     (Var("v0",CTy"PSR"),
1542                                      MB(MU(Dest
1543                                              ("V",bTy,Var("v0",CTy"PSR")),
1544                                            qTy),
1545                                         Close
1546                                           (bVar"v0",
1547                                            MU(EQ(bVar"v",bVar"v0"),qTy))))))),
1548                          Close
1549                            (bVar"b",
1550                             ITE(bVar"b",
1551                                 MB(MR(Close
1552                                         (qVar"s",
1553                                          Dest("CPSR",CTy"PSR",qVar"s"))),
1554                                    Close
1555                                      (Var("v",CTy"PSR"),
1556                                       MB(MU(Dest
1557                                               ("Z",bTy,Var("v",CTy"PSR")),
1558                                             qTy),
1559                                          Close
1560                                            (bVar"v",
1561                                             MU(Mop(Not,bVar"v"),qTy))))),
1562                                 MU(LF,qTy))))))),(LW(7,3),MU(LT,qTy))]),
1563            Close
1564              (bVar"result",
1565               MU(ITE(Bop(And,Bop(Bit,Var("cond",F4),LN 0),
1566                          Mop(Not,EQ(Var("cond",F4),LW(15,4)))),
1567                      Mop(Not,bVar"result"),bVar"result"),qTy))))))
1568;
1569val SPSR_def = Def0
1570  ("SPSR",
1571   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1572      Close
1573        (Var("v",CTy"PSR"),
1574         MB(MB(MU(Dest("M",FTy 5,Var("v",CTy"PSR")),qTy),
1575               Close
1576                 (Var("v",FTy 5),
1577                  Call("BadMode",ATy(qTy,PTy(bTy,qTy)),Var("v",FTy 5)))),
1578            Close
1579              (bVar"b",
1580               ITE(bVar"b",
1581                   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1582                      Close
1583                        (Var("v",CTy"PSR"),
1584                         MB(MB(MB(MB(MU(Dest("M",FTy 5,Var("v",CTy"PSR")),
1585                                        qTy),
1586                                     Close
1587                                       (Var("v",FTy 5),
1588                                        MU(Mop(Cast sTy,Var("v",FTy 5)),
1589                                           qTy))),
1590                                  Close
1591                                    (sVar"v",
1592                                     MU(CC[LS"SPSR: BadMode: ",sVar"v"],
1593                                        qTy))),
1594                               Close
1595                                 (sVar"v",
1596                                  MU(Call
1597                                       ("UNPREDICTABLE",CTy"exception",
1598                                        sVar"v"),qTy))),
1599                            Close
1600                              (Var("v",CTy"exception"),
1601                               Call
1602                                 ("raise'exception",
1603                                  ATy(qTy,PTy(CTy"PSR",qTy)),
1604                                  Var("v",CTy"exception")))))),
1605                   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1606                      Close
1607                        (Var("v",CTy"PSR"),
1608                         MB(MU(Dest("M",FTy 5,Var("v",CTy"PSR")),qTy),
1609                            Close
1610                              (Var("x",FTy 5),
1611                               CS(Var("x",FTy 5),
1612                                  [(LW(17,5),
1613                                    MR(Close
1614                                         (qVar"s",
1615                                          Dest
1616                                            ("SPSR_fiq",CTy"PSR",qVar"s")))),
1617                                   (LW(18,5),
1618                                    MR(Close
1619                                         (qVar"s",
1620                                          Dest
1621                                            ("SPSR_irq",CTy"PSR",qVar"s")))),
1622                                   (LW(19,5),
1623                                    MR(Close
1624                                         (qVar"s",
1625                                          Dest
1626                                            ("SPSR_svc",CTy"PSR",qVar"s")))),
1627                                   (LW(22,5),
1628                                    MR(Close
1629                                         (qVar"s",
1630                                          Dest
1631                                            ("SPSR_mon",CTy"PSR",qVar"s")))),
1632                                   (LW(23,5),
1633                                    MR(Close
1634                                         (qVar"s",
1635                                          Dest
1636                                            ("SPSR_abt",CTy"PSR",qVar"s")))),
1637                                   (LW(26,5),
1638                                    MR(Close
1639                                         (qVar"s",
1640                                          Dest
1641                                            ("SPSR_hyp",CTy"PSR",qVar"s")))),
1642                                   (LW(27,5),
1643                                    MR(Close
1644                                         (qVar"s",
1645                                          Dest
1646                                            ("SPSR_und",CTy"PSR",qVar"s")))),
1647                                   (AVar(FTy 5),
1648                                    Call
1649                                      ("raise'exception",
1650                                       ATy(qTy,PTy(CTy"PSR",qTy)),
1651                                       Call
1652                                         ("UNPREDICTABLE",CTy"exception",
1653                                          LS"SPSR")))])))))))))))
1654;
1655val write'SPSR_def = Def
1656  ("write'SPSR",Var("value",CTy"PSR"),
1657   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1658      Close
1659        (Var("v",CTy"PSR"),
1660         MB(MB(MU(Dest("M",FTy 5,Var("v",CTy"PSR")),qTy),
1661               Close
1662                 (Var("v",FTy 5),
1663                  Call("BadMode",ATy(qTy,PTy(bTy,qTy)),Var("v",FTy 5)))),
1664            Close
1665              (bVar"b",
1666               ITE(bVar"b",
1667                   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1668                      Close
1669                        (Var("v",CTy"PSR"),
1670                         MB(MB(MB(MB(MU(Dest("M",FTy 5,Var("v",CTy"PSR")),
1671                                        qTy),
1672                                     Close
1673                                       (Var("v",FTy 5),
1674                                        MU(Mop(Cast sTy,Var("v",FTy 5)),
1675                                           qTy))),
1676                                  Close
1677                                    (sVar"v",
1678                                     MU(CC[LS"SPSR: BadMode: ",sVar"v"],
1679                                        qTy))),
1680                               Close
1681                                 (sVar"v",
1682                                  MU(Call
1683                                       ("UNPREDICTABLE",CTy"exception",
1684                                        sVar"v"),qTy))),
1685                            Close
1686                              (Var("v",CTy"exception"),
1687                               Call
1688                                 ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
1689                                  Var("v",CTy"exception")))))),
1690                   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1691                      Close
1692                        (Var("v",CTy"PSR"),
1693                         MB(MU(Dest("M",FTy 5,Var("v",CTy"PSR")),qTy),
1694                            Close
1695                              (Var("x",FTy 5),
1696                               CS(Var("x",FTy 5),
1697                                  [(LW(17,5),
1698                                    MW(Close
1699                                         (qVar"s",
1700                                          Rupd
1701                                            ("SPSR_fiq",
1702                                             TP[qVar"s",
1703                                                Var("value",CTy"PSR")])))),
1704                                   (LW(18,5),
1705                                    MW(Close
1706                                         (qVar"s",
1707                                          Rupd
1708                                            ("SPSR_irq",
1709                                             TP[qVar"s",
1710                                                Var("value",CTy"PSR")])))),
1711                                   (LW(19,5),
1712                                    MW(Close
1713                                         (qVar"s",
1714                                          Rupd
1715                                            ("SPSR_svc",
1716                                             TP[qVar"s",
1717                                                Var("value",CTy"PSR")])))),
1718                                   (LW(22,5),
1719                                    MW(Close
1720                                         (qVar"s",
1721                                          Rupd
1722                                            ("SPSR_mon",
1723                                             TP[qVar"s",
1724                                                Var("value",CTy"PSR")])))),
1725                                   (LW(23,5),
1726                                    MW(Close
1727                                         (qVar"s",
1728                                          Rupd
1729                                            ("SPSR_abt",
1730                                             TP[qVar"s",
1731                                                Var("value",CTy"PSR")])))),
1732                                   (LW(26,5),
1733                                    MW(Close
1734                                         (qVar"s",
1735                                          Rupd
1736                                            ("SPSR_hyp",
1737                                             TP[qVar"s",
1738                                                Var("value",CTy"PSR")])))),
1739                                   (LW(27,5),
1740                                    MW(Close
1741                                         (qVar"s",
1742                                          Rupd
1743                                            ("SPSR_und",
1744                                             TP[qVar"s",
1745                                                Var("value",CTy"PSR")])))),
1746                                   (AVar(FTy 5),
1747                                    Call
1748                                      ("raise'exception",
1749                                       ATy(qTy,PTy(uTy,qTy)),
1750                                       Call
1751                                         ("UNPREDICTABLE",CTy"exception",
1752                                          LS"SPSR")))])))))))))))
1753;
1754val CPSRWriteByInstr_def = Def
1755  ("CPSRWriteByInstr",
1756   TP[Var("value",F32),Var("bytemask",F4),bVar"is_excpt_return"],
1757   MB(Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU),
1758      Close
1759        (bVar"privileged",
1760         MB(MR(Close(qVar"s",Dest("CP15",CTy"CP15",qVar"s"))),
1761            Close
1762              (Var("v",CTy"CP15"),
1763               MB(MB(MU(Dest("SCTLR",CTy"SCTLR",Var("v",CTy"CP15")),qTy),
1764                     Close
1765                       (Var("v",CTy"SCTLR"),
1766                        MU(Dest("NMFI",bTy,Var("v",CTy"SCTLR")),qTy))),
1767                  Close
1768                    (bVar"nmfi",
1769                     MB(ITE(Bop(Bit,Var("bytemask",F4),LN 3),
1770                            MB(MR(Close
1771                                    (qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
1772                               Close
1773                                 (Var("v",CTy"PSR"),
1774                                  MB(MB(MU(Call
1775                                             ("reg'PSR",F32,
1776                                              Var("v",CTy"PSR")),qTy),
1777                                        Close
1778                                          (Var("w",F32),
1779                                           MB(MR(Close
1780                                                   (qVar"s",
1781                                                    Dest
1782                                                      ("CPSR",CTy"PSR",
1783                                                       qVar"s"))),
1784                                              Close
1785                                                (Var("v",CTy"PSR"),
1786                                                 MB(MB(MU(TP[Var("v",
1787                                                                 CTy"PSR"),
1788                                                             BFI(LN 31,
1789                                                                 LN 27,
1790                                                                 EX(Var("value",
1791                                                                        F32),
1792                                                                    LN 31,
1793                                                                    LN 27,
1794                                                                    FTy 5),
1795                                                                 Var("w",
1796                                                                     F32))],
1797                                                          qTy),
1798                                                       Close
1799                                                         (Var("v",
1800                                                              PTy(CTy"PSR",
1801                                                                  F32)),
1802                                                          MU(Call
1803                                                               ("write'reg'PSR",
1804                                                                CTy"PSR",
1805                                                                Var("v",
1806                                                                    PTy(CTy"PSR",
1807                                                                        F32))),
1808                                                             qTy))),
1809                                                    Close
1810                                                      (Var("v",CTy"PSR"),
1811                                                       MW(Close
1812                                                            (qVar"s",
1813                                                             Rupd
1814                                                               ("CPSR",
1815                                                                TP[qVar"s",
1816                                                                   Var("v",
1817                                                                       CTy"PSR")]))))))))),
1818                                     Close
1819                                       (AVar uTy,
1820                                        ITE(bVar"is_excpt_return",
1821                                            MB(MR(Close
1822                                                    (qVar"s",
1823                                                     Dest
1824                                                       ("CPSR",CTy"PSR",
1825                                                        qVar"s"))),
1826                                               Close
1827                                                 (Var("v",CTy"PSR"),
1828                                                  MB(MU(Call
1829                                                          ("reg'PSR",F32,
1830                                                           Var("v",
1831                                                               CTy"PSR")),
1832                                                        qTy),
1833                                                     Close
1834                                                       (Var("w",F32),
1835                                                        MB(MR(Close
1836                                                                (qVar"s",
1837                                                                 Dest
1838                                                                   ("CPSR",
1839                                                                    CTy"PSR",
1840                                                                    qVar"s"))),
1841                                                           Close
1842                                                             (Var("v",
1843                                                                  CTy"PSR"),
1844                                                              MB(MB(MU(TP[Var("v",
1845                                                                              CTy"PSR"),
1846                                                                          BFI(LN
1847                                                                               26,
1848                                                                              LN
1849                                                                               24,
1850                                                                              EX(Var("value",
1851                                                                                     F32),
1852                                                                                 LN
1853                                                                                  26,
1854                                                                                 LN
1855                                                                                  24,
1856                                                                                 FTy 3),
1857                                                                              Var("w",
1858                                                                                  F32))],
1859                                                                       qTy),
1860                                                                    Close
1861                                                                      (Var("v",
1862                                                                           PTy(CTy"PSR",
1863                                                                               F32)),
1864                                                                       MU(Call
1865                                                                            ("write'reg'PSR",
1866                                                                             CTy"PSR",
1867                                                                             Var("v",
1868                                                                                 PTy(CTy"PSR",
1869                                                                                     F32))),
1870                                                                          qTy))),
1871                                                                 Close
1872                                                                   (Var("v",
1873                                                                        CTy"PSR"),
1874                                                                    MW(Close
1875                                                                         (qVar"s",
1876                                                                          Rupd
1877                                                                            ("CPSR",
1878                                                                             TP[qVar"s",
1879                                                                                Var("v",
1880                                                                                    CTy"PSR")]))))))))))),
1881                                            MU(LU,qTy)))))),MU(LU,qTy)),
1882                        Close
1883                          (AVar uTy,
1884                           MB(ITE(Bop(Bit,Var("bytemask",F4),LN 2),
1885                                  MB(MR(Close
1886                                          (qVar"s",
1887                                           Dest("CPSR",CTy"PSR",qVar"s"))),
1888                                     Close
1889                                       (Var("v",CTy"PSR"),
1890                                        MB(MU(Call
1891                                                ("reg'PSR",F32,
1892                                                 Var("v",CTy"PSR")),qTy),
1893                                           Close
1894                                             (Var("w",F32),
1895                                              MB(MR(Close
1896                                                      (qVar"s",
1897                                                       Dest
1898                                                         ("CPSR",CTy"PSR",
1899                                                          qVar"s"))),
1900                                                 Close
1901                                                   (Var("v",CTy"PSR"),
1902                                                    MB(MB(MU(TP[Var("v",
1903                                                                    CTy"PSR"),
1904                                                                BFI(LN 19,
1905                                                                    LN 16,
1906                                                                    EX(Var("value",
1907                                                                           F32),
1908                                                                       LN
1909                                                                        19,
1910                                                                       LN
1911                                                                        16,
1912                                                                       F4),
1913                                                                    Var("w",
1914                                                                        F32))],
1915                                                             qTy),
1916                                                          Close
1917                                                            (Var("v",
1918                                                                 PTy(CTy"PSR",
1919                                                                     F32)),
1920                                                             MU(Call
1921                                                                  ("write'reg'PSR",
1922                                                                   CTy"PSR",
1923                                                                   Var("v",
1924                                                                       PTy(CTy"PSR",
1925                                                                           F32))),
1926                                                                qTy))),
1927                                                       Close
1928                                                         (Var("v",CTy"PSR"),
1929                                                          MW(Close
1930                                                               (qVar"s",
1931                                                                Rupd
1932                                                                  ("CPSR",
1933                                                                   TP[qVar"s",
1934                                                                      Var("v",
1935                                                                          CTy"PSR")]))))))))))),
1936                                  MU(LU,qTy)),
1937                              Close
1938                                (AVar uTy,
1939                                 MB(ITE(Bop(Bit,Var("bytemask",F4),LN 1),
1940                                        MB(ITE(bVar"is_excpt_return",
1941                                               MB(MR(Close
1942                                                       (qVar"s",
1943                                                        Dest
1944                                                          ("CPSR",
1945                                                           CTy"PSR",
1946                                                           qVar"s"))),
1947                                                  Close
1948                                                    (Var("v",CTy"PSR"),
1949                                                     MB(MU(Call
1950                                                             ("reg'PSR",
1951                                                              F32,
1952                                                              Var("v",
1953                                                                  CTy"PSR")),
1954                                                           qTy),
1955                                                        Close
1956                                                          (Var("w",F32),
1957                                                           MB(MR(Close
1958                                                                   (qVar"s",
1959                                                                    Dest
1960                                                                      ("CPSR",
1961                                                                       CTy"PSR",
1962                                                                       qVar"s"))),
1963                                                              Close
1964                                                                (Var("v",
1965                                                                     CTy"PSR"),
1966                                                                 MB(MB(MU(TP[Var("v",
1967                                                                                 CTy"PSR"),
1968                                                                             BFI(LN
1969                                                                                  15,
1970                                                                                 LN
1971                                                                                  10,
1972                                                                                 EX(Var("value",
1973                                                                                        F32),
1974                                                                                    LN
1975                                                                                     15,
1976                                                                                    LN
1977                                                                                     10,
1978                                                                                    FTy 6),
1979                                                                                 Var("w",
1980                                                                                     F32))],
1981                                                                          qTy),
1982                                                                       Close
1983                                                                         (Var("v",
1984                                                                              PTy(CTy"PSR",
1985                                                                                  F32)),
1986                                                                          MU(Call
1987                                                                               ("write'reg'PSR",
1988                                                                                CTy"PSR",
1989                                                                                Var("v",
1990                                                                                    PTy(CTy"PSR",
1991                                                                                        F32))),
1992                                                                             qTy))),
1993                                                                    Close
1994                                                                      (Var("v",
1995                                                                           CTy"PSR"),
1996                                                                       MW(Close
1997                                                                            (qVar"s",
1998                                                                             Rupd
1999                                                                               ("CPSR",
2000                                                                                TP[qVar"s",
2001                                                                                   Var("v",
2002                                                                                       CTy"PSR")]))))))))))),
2003                                               MU(LU,qTy)),
2004                                           Close
2005                                             (AVar uTy,
2006                                              MB(MR(Close
2007                                                      (qVar"s",
2008                                                       Dest
2009                                                         ("CPSR",CTy"PSR",
2010                                                          qVar"s"))),
2011                                                 Close
2012                                                   (Var("v",CTy"PSR"),
2013                                                    MB(MB(MU(Call
2014                                                               ("reg'PSR",
2015                                                                F32,
2016                                                                Var("v",
2017                                                                    CTy"PSR")),
2018                                                             qTy),
2019                                                          Close
2020                                                            (Var("w",F32),
2021                                                             MB(MR(Close
2022                                                                     (qVar"s",
2023                                                                      Dest
2024                                                                        ("CPSR",
2025                                                                         CTy"PSR",
2026                                                                         qVar"s"))),
2027                                                                Close
2028                                                                  (Var("v",
2029                                                                       CTy"PSR"),
2030                                                                   MB(MB(MU(TP[Var("v",
2031                                                                                   CTy"PSR"),
2032                                                                               BFI(LN
2033                                                                                    9,
2034                                                                                   LN
2035                                                                                    9,
2036                                                                                   Mop(Cast
2037                                                                                         F1,
2038                                                                                       Bop(Bit,
2039                                                                                           Var("value",
2040                                                                                               F32),
2041                                                                                           LN
2042                                                                                            9)),
2043                                                                                   Var("w",
2044                                                                                       F32))],
2045                                                                            qTy),
2046                                                                         Close
2047                                                                           (Var("v",
2048                                                                                PTy(CTy"PSR",
2049                                                                                    F32)),
2050                                                                            MU(Call
2051                                                                                 ("write'reg'PSR",
2052                                                                                  CTy"PSR",
2053                                                                                  Var("v",
2054                                                                                      PTy(CTy"PSR",
2055                                                                                          F32))),
2056                                                                               qTy))),
2057                                                                      Close
2058                                                                        (Var("v",
2059                                                                             CTy"PSR"),
2060                                                                         MW(Close
2061                                                                              (qVar"s",
2062                                                                               Rupd
2063                                                                                 ("CPSR",
2064                                                                                  TP[qVar"s",
2065                                                                                     Var("v",
2066                                                                                         CTy"PSR")]))))))))),
2067                                                       Close
2068                                                         (AVar uTy,
2069                                                          MB(Call
2070                                                               ("IsSecure",
2071                                                                ATy(qTy,
2072                                                                    PTy(bTy,
2073                                                                        qTy)),
2074                                                                LU),
2075                                                             Close
2076                                                               (bVar"v",
2077                                                                MB(MB(ITE(bVar"v",
2078                                                                          MU(LT,
2079                                                                             qTy),
2080                                                                          MB(MR(Close
2081                                                                                  (qVar"s",
2082                                                                                   Dest
2083                                                                                     ("CP15",
2084                                                                                      CTy"CP15",
2085                                                                                      qVar"s"))),
2086                                                                             Close
2087                                                                               (Var("v",
2088                                                                                    CTy"CP15"),
2089                                                                                MB(MU(Dest
2090                                                                                        ("SCR",
2091                                                                                         CTy"SCR",
2092                                                                                         Var("v",
2093                                                                                             CTy"CP15")),
2094                                                                                      qTy),
2095                                                                                   Close
2096                                                                                     (Var("v",
2097                                                                                          CTy"SCR"),
2098                                                                                      MU(Dest
2099                                                                                           ("AW",
2100                                                                                            bTy,
2101                                                                                            Var("v",
2102                                                                                                CTy"SCR")),
2103                                                                                         qTy)))))),
2104                                                                      Close
2105                                                                        (bVar"v",
2106                                                                         MU(Bop(And,
2107                                                                                bVar"privileged",
2108                                                                                bVar"v"),
2109                                                                            qTy))),
2110                                                                   Close
2111                                                                     (bVar"b",
2112                                                                      ITE(bVar"b",
2113                                                                          MB(MR(Close
2114                                                                                  (qVar"s",
2115                                                                                   Dest
2116                                                                                     ("CPSR",
2117                                                                                      CTy"PSR",
2118                                                                                      qVar"s"))),
2119                                                                             Close
2120                                                                               (Var("v",
2121                                                                                    CTy"PSR"),
2122                                                                                MB(MU(Call
2123                                                                                        ("reg'PSR",
2124                                                                                         F32,
2125                                                                                         Var("v",
2126                                                                                             CTy"PSR")),
2127                                                                                      qTy),
2128                                                                                   Close
2129                                                                                     (Var("w",
2130                                                                                          F32),
2131                                                                                      MB(MR(Close
2132                                                                                              (qVar"s",
2133                                                                                               Dest
2134                                                                                                 ("CPSR",
2135                                                                                                  CTy"PSR",
2136                                                                                                  qVar"s"))),
2137                                                                                         Close
2138                                                                                           (Var("v",
2139                                                                                                CTy"PSR"),
2140                                                                                            MB(MB(MU(TP[Var("v",
2141                                                                                                            CTy"PSR"),
2142                                                                                                        BFI(LN
2143                                                                                                             8,
2144                                                                                                            LN
2145                                                                                                             8,
2146                                                                                                            Mop(Cast
2147                                                                                                                  F1,
2148                                                                                                                Bop(Bit,
2149                                                                                                                    Var("value",
2150                                                                                                                        F32),
2151                                                                                                                    LN
2152                                                                                                                     8)),
2153                                                                                                            Var("w",
2154                                                                                                                F32))],
2155                                                                                                     qTy),
2156                                                                                                  Close
2157                                                                                                    (Var("v",
2158                                                                                                         PTy(CTy"PSR",
2159                                                                                                             F32)),
2160                                                                                                     MU(Call
2161                                                                                                          ("write'reg'PSR",
2162                                                                                                           CTy"PSR",
2163                                                                                                           Var("v",
2164                                                                                                               PTy(CTy"PSR",
2165                                                                                                                   F32))),
2166                                                                                                        qTy))),
2167                                                                                               Close
2168                                                                                                 (Var("v",
2169                                                                                                      CTy"PSR"),
2170                                                                                                  MW(Close
2171                                                                                                       (qVar"s",
2172                                                                                                        Rupd
2173                                                                                                          ("CPSR",
2174                                                                                                           TP[qVar"s",
2175                                                                                                              Var("v",
2176                                                                                                                  CTy"PSR")]))))))))))),
2177                                                                          MU(LU,
2178                                                                             qTy)))))))))))),
2179                                        MU(LU,qTy)),
2180                                    Close
2181                                      (AVar uTy,
2182                                       ITE(Bop(Bit,Var("bytemask",F4),LN 0),
2183                                           MB(ITE(bVar"privileged",
2184                                                  MB(MR(Close
2185                                                          (qVar"s",
2186                                                           Dest
2187                                                             ("CPSR",
2188                                                              CTy"PSR",
2189                                                              qVar"s"))),
2190                                                     Close
2191                                                       (Var("v",CTy"PSR"),
2192                                                        MB(MU(Call
2193                                                                ("reg'PSR",
2194                                                                 F32,
2195                                                                 Var("v",
2196                                                                     CTy"PSR")),
2197                                                              qTy),
2198                                                           Close
2199                                                             (Var("w",F32),
2200                                                              MB(MR(Close
2201                                                                      (qVar"s",
2202                                                                       Dest
2203                                                                         ("CPSR",
2204                                                                          CTy"PSR",
2205                                                                          qVar"s"))),
2206                                                                 Close
2207                                                                   (Var("v",
2208                                                                        CTy"PSR"),
2209                                                                    MB(MB(MU(TP[Var("v",
2210                                                                                    CTy"PSR"),
2211                                                                                BFI(LN
2212                                                                                     7,
2213                                                                                    LN
2214                                                                                     7,
2215                                                                                    Mop(Cast
2216                                                                                          F1,
2217                                                                                        Bop(Bit,
2218                                                                                            Var("value",
2219                                                                                                F32),
2220                                                                                            LN
2221                                                                                             7)),
2222                                                                                    Var("w",
2223                                                                                        F32))],
2224                                                                             qTy),
2225                                                                          Close
2226                                                                            (Var("v",
2227                                                                                 PTy(CTy"PSR",
2228                                                                                     F32)),
2229                                                                             MU(Call
2230                                                                                  ("write'reg'PSR",
2231                                                                                   CTy"PSR",
2232                                                                                   Var("v",
2233                                                                                       PTy(CTy"PSR",
2234                                                                                           F32))),
2235                                                                                qTy))),
2236                                                                       Close
2237                                                                         (Var("v",
2238                                                                              CTy"PSR"),
2239                                                                          MW(Close
2240                                                                               (qVar"s",
2241                                                                                Rupd
2242                                                                                  ("CPSR",
2243                                                                                   TP[qVar"s",
2244                                                                                      Var("v",
2245                                                                                          CTy"PSR")]))))))))))),
2246                                                  MU(LU,qTy)),
2247                                              Close
2248                                                (AVar uTy,
2249                                                 MB(Call
2250                                                      ("IsSecure",
2251                                                       ATy(qTy,
2252                                                           PTy(bTy,qTy)),
2253                                                       LU),
2254                                                    Close
2255                                                      (bVar"v",
2256                                                       MB(MB(MB(MB(ITE(bVar"v",
2257                                                                       MU(LT,
2258                                                                          qTy),
2259                                                                       MB(MR(Close
2260                                                                               (qVar"s",
2261                                                                                Dest
2262                                                                                  ("CP15",
2263                                                                                   CTy"CP15",
2264                                                                                   qVar"s"))),
2265                                                                          Close
2266                                                                            (Var("v",
2267                                                                                 CTy"CP15"),
2268                                                                             MB(MU(Dest
2269                                                                                     ("SCR",
2270                                                                                      CTy"SCR",
2271                                                                                      Var("v",
2272                                                                                          CTy"CP15")),
2273                                                                                   qTy),
2274                                                                                Close
2275                                                                                  (Var("v",
2276                                                                                       CTy"SCR"),
2277                                                                                   MU(Dest
2278                                                                                        ("FW",
2279                                                                                         bTy,
2280                                                                                         Var("v",
2281                                                                                             CTy"SCR")),
2282                                                                                      qTy)))))),
2283                                                                   Close
2284                                                                     (bVar"b",
2285                                                                      ITE(bVar"b",
2286                                                                          MU(LT,
2287                                                                             qTy),
2288                                                                          Call
2289                                                                            ("HaveVirtExt",
2290                                                                             ATy(qTy,
2291                                                                                 PTy(bTy,
2292                                                                                     qTy)),
2293                                                                             LU)))),
2294                                                                Close
2295                                                                  (bVar"v",
2296                                                                   MU(Bop(And,
2297                                                                          Bop(And,
2298                                                                              bVar"privileged",
2299                                                                              Bop(Or,
2300                                                                                  Mop(Not,
2301                                                                                      bVar"nmfi"),
2302                                                                                  Mop(Not,
2303                                                                                      Bop(Bit,
2304                                                                                          Var("value",
2305                                                                                              F32),
2306                                                                                          LN
2307                                                                                           6)))),
2308                                                                          bVar"v"),
2309                                                                      qTy))),
2310                                                             Close
2311                                                               (bVar"b",
2312                                                                ITE(bVar"b",
2313                                                                    MB(MR(Close
2314                                                                            (qVar"s",
2315                                                                             Dest
2316                                                                               ("CPSR",
2317                                                                                CTy"PSR",
2318                                                                                qVar"s"))),
2319                                                                       Close
2320                                                                         (Var("v",
2321                                                                              CTy"PSR"),
2322                                                                          MB(MU(Call
2323                                                                                  ("reg'PSR",
2324                                                                                   F32,
2325                                                                                   Var("v",
2326                                                                                       CTy"PSR")),
2327                                                                                qTy),
2328                                                                             Close
2329                                                                               (Var("w",
2330                                                                                    F32),
2331                                                                                MB(MR(Close
2332                                                                                        (qVar"s",
2333                                                                                         Dest
2334                                                                                           ("CPSR",
2335                                                                                            CTy"PSR",
2336                                                                                            qVar"s"))),
2337                                                                                   Close
2338                                                                                     (Var("v",
2339                                                                                          CTy"PSR"),
2340                                                                                      MB(MB(MU(TP[Var("v",
2341                                                                                                      CTy"PSR"),
2342                                                                                                  BFI(LN
2343                                                                                                       6,
2344                                                                                                      LN
2345                                                                                                       6,
2346                                                                                                      Mop(Cast
2347                                                                                                            F1,
2348                                                                                                          Bop(Bit,
2349                                                                                                              Var("value",
2350                                                                                                                  F32),
2351                                                                                                              LN
2352                                                                                                               6)),
2353                                                                                                      Var("w",
2354                                                                                                          F32))],
2355                                                                                               qTy),
2356                                                                                            Close
2357                                                                                              (Var("v",
2358                                                                                                   PTy(CTy"PSR",
2359                                                                                                       F32)),
2360                                                                                               MU(Call
2361                                                                                                    ("write'reg'PSR",
2362                                                                                                     CTy"PSR",
2363                                                                                                     Var("v",
2364                                                                                                         PTy(CTy"PSR",
2365                                                                                                             F32))),
2366                                                                                                  qTy))),
2367                                                                                         Close
2368                                                                                           (Var("v",
2369                                                                                                CTy"PSR"),
2370                                                                                            MW(Close
2371                                                                                                 (qVar"s",
2372                                                                                                  Rupd
2373                                                                                                    ("CPSR",
2374                                                                                                     TP[qVar"s",
2375                                                                                                        Var("v",
2376                                                                                                            CTy"PSR")]))))))))))),
2377                                                                    MU(LU,
2378                                                                       qTy)))),
2379                                                          Close
2380                                                            (AVar uTy,
2381                                                             MB(ITE(bVar"is_excpt_return",
2382                                                                    MB(MR(Close
2383                                                                            (qVar"s",
2384                                                                             Dest
2385                                                                               ("CPSR",
2386                                                                                CTy"PSR",
2387                                                                                qVar"s"))),
2388                                                                       Close
2389                                                                         (Var("v",
2390                                                                              CTy"PSR"),
2391                                                                          MB(MU(Call
2392                                                                                  ("reg'PSR",
2393                                                                                   F32,
2394                                                                                   Var("v",
2395                                                                                       CTy"PSR")),
2396                                                                                qTy),
2397                                                                             Close
2398                                                                               (Var("w",
2399                                                                                    F32),
2400                                                                                MB(MR(Close
2401                                                                                        (qVar"s",
2402                                                                                         Dest
2403                                                                                           ("CPSR",
2404                                                                                            CTy"PSR",
2405                                                                                            qVar"s"))),
2406                                                                                   Close
2407                                                                                     (Var("v",
2408                                                                                          CTy"PSR"),
2409                                                                                      MB(MB(MU(TP[Var("v",
2410                                                                                                      CTy"PSR"),
2411                                                                                                  BFI(LN
2412                                                                                                       5,
2413                                                                                                      LN
2414                                                                                                       5,
2415                                                                                                      Mop(Cast
2416                                                                                                            F1,
2417                                                                                                          Bop(Bit,
2418                                                                                                              Var("value",
2419                                                                                                                  F32),
2420                                                                                                              LN
2421                                                                                                               5)),
2422                                                                                                      Var("w",
2423                                                                                                          F32))],
2424                                                                                               qTy),
2425                                                                                            Close
2426                                                                                              (Var("v",
2427                                                                                                   PTy(CTy"PSR",
2428                                                                                                       F32)),
2429                                                                                               MU(Call
2430                                                                                                    ("write'reg'PSR",
2431                                                                                                     CTy"PSR",
2432                                                                                                     Var("v",
2433                                                                                                         PTy(CTy"PSR",
2434                                                                                                             F32))),
2435                                                                                                  qTy))),
2436                                                                                         Close
2437                                                                                           (Var("v",
2438                                                                                                CTy"PSR"),
2439                                                                                            MW(Close
2440                                                                                                 (qVar"s",
2441                                                                                                  Rupd
2442                                                                                                    ("CPSR",
2443                                                                                                     TP[qVar"s",
2444                                                                                                        Var("v",
2445                                                                                                            CTy"PSR")]))))))))))),
2446                                                                    MU(LU,
2447                                                                       qTy)),
2448                                                                Close
2449                                                                  (AVar
2450                                                                     uTy,
2451                                                                   ITE(bVar"privileged",
2452                                                                       MB(Call
2453                                                                            ("BadMode",
2454                                                                             ATy(qTy,
2455                                                                                 PTy(bTy,
2456                                                                                     qTy)),
2457                                                                             EX(Var("value",
2458                                                                                    F32),
2459                                                                                LN
2460                                                                                 4,
2461                                                                                LN
2462                                                                                 0,
2463                                                                                FTy 5)),
2464                                                                          Close
2465                                                                            (bVar"b",
2466                                                                             ITE(bVar"b",
2467                                                                                 Call
2468                                                                                   ("raise'exception",
2469                                                                                    ATy(qTy,
2470                                                                                        PTy(uTy,
2471                                                                                            qTy)),
2472                                                                                    Call
2473                                                                                      ("UNPREDICTABLE",
2474                                                                                       CTy"exception",
2475                                                                                       CC[LS
2476                                                                                           "CPSRWriteByInstr: BadMode: ",
2477                                                                                          Mop(Cast
2478                                                                                                sTy,
2479                                                                                              EX(Var("value",
2480                                                                                                     F32),
2481                                                                                                 LN
2482                                                                                                  4,
2483                                                                                                 LN
2484                                                                                                  0,
2485                                                                                                 FTy 5))])),
2486                                                                                 MB(Call
2487                                                                                      ("IsSecure",
2488                                                                                       ATy(qTy,
2489                                                                                           PTy(bTy,
2490                                                                                               qTy)),
2491                                                                                       LU),
2492                                                                                    Close
2493                                                                                      (bVar"v",
2494                                                                                       MB(MB(MB(MU(Mop(Not,
2495                                                                                                       bVar"v"),
2496                                                                                                   qTy),
2497                                                                                                Close
2498                                                                                                  (bVar"b",
2499                                                                                                   MU(Bop(And,
2500                                                                                                          bVar"b",
2501                                                                                                          EQ(EX(Var("value",
2502                                                                                                                    F32),
2503                                                                                                                LN
2504                                                                                                                 4,
2505                                                                                                                LN
2506                                                                                                                 0,
2507                                                                                                                FTy 5),
2508                                                                                                             LW(22,
2509                                                                                                                5))),
2510                                                                                                      qTy))),
2511                                                                                             Close
2512                                                                                               (bVar"b",
2513                                                                                                ITE(bVar"b",
2514                                                                                                    Call
2515                                                                                                      ("raise'exception",
2516                                                                                                       ATy(qTy,
2517                                                                                                           PTy(uTy,
2518                                                                                                               qTy)),
2519                                                                                                       Call
2520                                                                                                         ("UNPREDICTABLE",
2521                                                                                                          CTy"exception",
2522                                                                                                          LS
2523                                                                                                           "CPSRWriteByInstr")),
2524                                                                                                    MU(LU,
2525                                                                                                       qTy)))),
2526                                                                                          Close
2527                                                                                            (AVar
2528                                                                                               uTy,
2529                                                                                             MB(Call
2530                                                                                                  ("IsSecure",
2531                                                                                                   ATy(qTy,
2532                                                                                                       PTy(bTy,
2533                                                                                                           qTy)),
2534                                                                                                   LU),
2535                                                                                                Close
2536                                                                                                  (bVar"v",
2537                                                                                                   MB(MB(MB(MB(MU(Mop(Not,
2538                                                                                                                      bVar"v"),
2539                                                                                                                  qTy),
2540                                                                                                               Close
2541                                                                                                                 (bVar"b",
2542                                                                                                                  MU(Bop(And,
2543                                                                                                                         bVar"b",
2544                                                                                                                         EQ(EX(Var("value",
2545                                                                                                                                   F32),
2546                                                                                                                               LN
2547                                                                                                                                4,
2548                                                                                                                               LN
2549                                                                                                                                0,
2550                                                                                                                               FTy 5),
2551                                                                                                                            LW(17,
2552                                                                                                                               5))),
2553                                                                                                                     qTy))),
2554                                                                                                            Close
2555                                                                                                              (bVar"b",
2556                                                                                                               ITE(bVar"b",
2557                                                                                                                   MB(MR(Close
2558                                                                                                                           (qVar"s",
2559                                                                                                                            Dest
2560                                                                                                                              ("CP15",
2561                                                                                                                               CTy"CP15",
2562                                                                                                                               qVar"s"))),
2563                                                                                                                      Close
2564                                                                                                                        (Var("v",
2565                                                                                                                             CTy"CP15"),
2566                                                                                                                         MB(MU(Dest
2567                                                                                                                                 ("NSACR",
2568                                                                                                                                  CTy"NSACR",
2569                                                                                                                                  Var("v",
2570                                                                                                                                      CTy"CP15")),
2571                                                                                                                               qTy),
2572                                                                                                                            Close
2573                                                                                                                              (Var("v",
2574                                                                                                                                   CTy"NSACR"),
2575                                                                                                                               MU(Dest
2576                                                                                                                                    ("RFR",
2577                                                                                                                                     bTy,
2578                                                                                                                                     Var("v",
2579                                                                                                                                         CTy"NSACR")),
2580                                                                                                                                  qTy))))),
2581                                                                                                                   MU(LF,
2582                                                                                                                      qTy)))),
2583                                                                                                         Close
2584                                                                                                           (bVar"b",
2585                                                                                                            ITE(bVar"b",
2586                                                                                                                Call
2587                                                                                                                  ("raise'exception",
2588                                                                                                                   ATy(qTy,
2589                                                                                                                       PTy(uTy,
2590                                                                                                                           qTy)),
2591                                                                                                                   Call
2592                                                                                                                     ("UNPREDICTABLE",
2593                                                                                                                      CTy"exception",
2594                                                                                                                      LS
2595                                                                                                                       "CPSRWriteByInstr")),
2596                                                                                                                MU(LU,
2597                                                                                                                   qTy)))),
2598                                                                                                      Close
2599                                                                                                        (AVar
2600                                                                                                           uTy,
2601                                                                                                         MB(MR(Close
2602                                                                                                                 (qVar"s",
2603                                                                                                                  Dest
2604                                                                                                                    ("CP15",
2605                                                                                                                     CTy"CP15",
2606                                                                                                                     qVar"s"))),
2607                                                                                                            Close
2608                                                                                                              (Var("v",
2609                                                                                                                   CTy"CP15"),
2610                                                                                                               MB(MB(MB(MB(MB(MU(Dest
2611                                                                                                                                   ("SCR",
2612                                                                                                                                    CTy"SCR",
2613                                                                                                                                    Var("v",
2614                                                                                                                                        CTy"CP15")),
2615                                                                                                                                 qTy),
2616                                                                                                                              Close
2617                                                                                                                                (Var("v",
2618                                                                                                                                     CTy"SCR"),
2619                                                                                                                                 MU(Dest
2620                                                                                                                                      ("NS",
2621                                                                                                                                       bTy,
2622                                                                                                                                       Var("v",
2623                                                                                                                                           CTy"SCR")),
2624                                                                                                                                    qTy))),
2625                                                                                                                           Close
2626                                                                                                                             (bVar"v",
2627                                                                                                                              MU(Mop(Not,
2628                                                                                                                                     bVar"v"),
2629                                                                                                                                 qTy))),
2630                                                                                                                        Close
2631                                                                                                                          (bVar"b",
2632                                                                                                                           MU(Bop(And,
2633                                                                                                                                  bVar"b",
2634                                                                                                                                  EQ(EX(Var("value",
2635                                                                                                                                            F32),
2636                                                                                                                                        LN
2637                                                                                                                                         4,
2638                                                                                                                                        LN
2639                                                                                                                                         0,
2640                                                                                                                                        FTy 5),
2641                                                                                                                                     LW(26,
2642                                                                                                                                        5))),
2643                                                                                                                              qTy))),
2644                                                                                                                     Close
2645                                                                                                                       (bVar"b",
2646                                                                                                                        ITE(bVar"b",
2647                                                                                                                            Call
2648                                                                                                                              ("raise'exception",
2649                                                                                                                               ATy(qTy,
2650                                                                                                                                   PTy(uTy,
2651                                                                                                                                       qTy)),
2652                                                                                                                               Call
2653                                                                                                                                 ("UNPREDICTABLE",
2654                                                                                                                                  CTy"exception",
2655                                                                                                                                  LS
2656                                                                                                                                   "CPSRWriteByInstr")),
2657                                                                                                                            MU(LU,
2658                                                                                                                               qTy)))),
2659                                                                                                                  Close
2660                                                                                                                    (AVar
2661                                                                                                                       uTy,
2662                                                                                                                     MB(Call
2663                                                                                                                          ("IsSecure",
2664                                                                                                                           ATy(qTy,
2665                                                                                                                               PTy(bTy,
2666                                                                                                                                   qTy)),
2667                                                                                                                           LU),
2668                                                                                                                        Close
2669                                                                                                                          (bVar"v",
2670                                                                                                                           MB(MB(MB(MB(MU(Mop(Not,
2671                                                                                                                                              bVar"v"),
2672                                                                                                                                          qTy),
2673                                                                                                                                       Close
2674                                                                                                                                         (bVar"b",
2675                                                                                                                                          ITE(bVar"b",
2676                                                                                                                                              MB(MR(Close
2677                                                                                                                                                      (qVar"s",
2678                                                                                                                                                       Dest
2679                                                                                                                                                         ("CPSR",
2680                                                                                                                                                          CTy"PSR",
2681                                                                                                                                                          qVar"s"))),
2682                                                                                                                                                 Close
2683                                                                                                                                                   (Var("v",
2684                                                                                                                                                        CTy"PSR"),
2685                                                                                                                                                    MB(MB(MU(Dest
2686                                                                                                                                                               ("M",
2687                                                                                                                                                                FTy 5,
2688                                                                                                                                                                Var("v",
2689                                                                                                                                                                    CTy"PSR")),
2690                                                                                                                                                             qTy),
2691                                                                                                                                                          Close
2692                                                                                                                                                            (Var("v",
2693                                                                                                                                                                 FTy 5),
2694                                                                                                                                                             MU(EQ(Var("v",
2695                                                                                                                                                                       FTy 5),
2696                                                                                                                                                                   LW(26,
2697                                                                                                                                                                      5)),
2698                                                                                                                                                                qTy))),
2699                                                                                                                                                       Close
2700                                                                                                                                                         (bVar"v",
2701                                                                                                                                                          MU(Mop(Not,
2702                                                                                                                                                                 bVar"v"),
2703                                                                                                                                                             qTy))))),
2704                                                                                                                                              MU(LF,
2705                                                                                                                                                 qTy)))),
2706                                                                                                                                    Close
2707                                                                                                                                      (bVar"b",
2708                                                                                                                                       MU(Bop(And,
2709                                                                                                                                              bVar"b",
2710                                                                                                                                              EQ(EX(Var("value",
2711                                                                                                                                                        F32),
2712                                                                                                                                                    LN
2713                                                                                                                                                     4,
2714                                                                                                                                                    LN
2715                                                                                                                                                     0,
2716                                                                                                                                                    FTy 5),
2717                                                                                                                                                 LW(26,
2718                                                                                                                                                    5))),
2719                                                                                                                                          qTy))),
2720                                                                                                                                 Close
2721                                                                                                                                   (bVar"b",
2722                                                                                                                                    ITE(bVar"b",
2723                                                                                                                                        Call
2724                                                                                                                                          ("raise'exception",
2725                                                                                                                                           ATy(qTy,
2726                                                                                                                                               PTy(uTy,
2727                                                                                                                                                   qTy)),
2728                                                                                                                                           Call
2729                                                                                                                                             ("UNPREDICTABLE",
2730                                                                                                                                              CTy"exception",
2731                                                                                                                                              LS
2732                                                                                                                                               "CPSRWriteByInstr")),
2733                                                                                                                                        MU(LU,
2734                                                                                                                                           qTy)))),
2735                                                                                                                              Close
2736                                                                                                                                (AVar
2737                                                                                                                                   uTy,
2738                                                                                                                                 MB(MR(Close
2739                                                                                                                                         (qVar"s",
2740                                                                                                                                          Dest
2741                                                                                                                                            ("CPSR",
2742                                                                                                                                             CTy"PSR",
2743                                                                                                                                             qVar"s"))),
2744                                                                                                                                    Close
2745                                                                                                                                      (Var("v",
2746                                                                                                                                           CTy"PSR"),
2747                                                                                                                                       MB(MB(MB(MB(MB(MU(Dest
2748                                                                                                                                                           ("M",
2749                                                                                                                                                            FTy 5,
2750                                                                                                                                                            Var("v",
2751                                                                                                                                                                CTy"PSR")),
2752                                                                                                                                                         qTy),
2753                                                                                                                                                      Close
2754                                                                                                                                                        (Var("v",
2755                                                                                                                                                             FTy 5),
2756                                                                                                                                                         MU(EQ(Var("v",
2757                                                                                                                                                                   FTy 5),
2758                                                                                                                                                               LW(26,
2759                                                                                                                                                                  5)),
2760                                                                                                                                                            qTy))),
2761                                                                                                                                                   Close
2762                                                                                                                                                     (bVar"b",
2763                                                                                                                                                      MU(Bop(And,
2764                                                                                                                                                             bVar"b",
2765                                                                                                                                                             Mop(Not,
2766                                                                                                                                                                 EQ(EX(Var("value",
2767                                                                                                                                                                           F32),
2768                                                                                                                                                                       LN
2769                                                                                                                                                                        4,
2770                                                                                                                                                                       LN
2771                                                                                                                                                                        0,
2772                                                                                                                                                                       FTy 5),
2773                                                                                                                                                                    LW(26,
2774                                                                                                                                                                       5)))),
2775                                                                                                                                                         qTy))),
2776                                                                                                                                                Close
2777                                                                                                                                                  (bVar"b",
2778                                                                                                                                                   MU(Bop(And,
2779                                                                                                                                                          bVar"b",
2780                                                                                                                                                          Mop(Not,
2781                                                                                                                                                              bVar"is_excpt_return")),
2782                                                                                                                                                      qTy))),
2783                                                                                                                                             Close
2784                                                                                                                                               (bVar"b",
2785                                                                                                                                                ITE(bVar"b",
2786                                                                                                                                                    Call
2787                                                                                                                                                      ("raise'exception",
2788                                                                                                                                                       ATy(qTy,
2789                                                                                                                                                           PTy(uTy,
2790                                                                                                                                                               qTy)),
2791                                                                                                                                                       Call
2792                                                                                                                                                         ("UNPREDICTABLE",
2793                                                                                                                                                          CTy"exception",
2794                                                                                                                                                          LS
2795                                                                                                                                                           "CPSRWriteByInstr")),
2796                                                                                                                                                    MU(LU,
2797                                                                                                                                                       qTy)))),
2798                                                                                                                                          Close
2799                                                                                                                                            (AVar
2800                                                                                                                                               uTy,
2801                                                                                                                                             MB(MR(Close
2802                                                                                                                                                     (qVar"s",
2803                                                                                                                                                      Dest
2804                                                                                                                                                        ("CPSR",
2805                                                                                                                                                         CTy"PSR",
2806                                                                                                                                                         qVar"s"))),
2807                                                                                                                                                Close
2808                                                                                                                                                  (Var("v",
2809                                                                                                                                                       CTy"PSR"),
2810                                                                                                                                                   MB(MU(Call
2811                                                                                                                                                           ("reg'PSR",
2812                                                                                                                                                            F32,
2813                                                                                                                                                            Var("v",
2814                                                                                                                                                                CTy"PSR")),
2815                                                                                                                                                         qTy),
2816                                                                                                                                                      Close
2817                                                                                                                                                        (Var("w",
2818                                                                                                                                                             F32),
2819                                                                                                                                                         MB(MR(Close
2820                                                                                                                                                                 (qVar"s",
2821                                                                                                                                                                  Dest
2822                                                                                                                                                                    ("CPSR",
2823                                                                                                                                                                     CTy"PSR",
2824                                                                                                                                                                     qVar"s"))),
2825                                                                                                                                                            Close
2826                                                                                                                                                              (Var("v",
2827                                                                                                                                                                   CTy"PSR"),
2828                                                                                                                                                               MB(MB(MU(TP[Var("v",
2829                                                                                                                                                                               CTy"PSR"),
2830                                                                                                                                                                           BFI(LN
2831                                                                                                                                                                                4,
2832                                                                                                                                                                               LN
2833                                                                                                                                                                                0,
2834                                                                                                                                                                               EX(Var("value",
2835                                                                                                                                                                                      F32),
2836                                                                                                                                                                                  LN
2837                                                                                                                                                                                   4,
2838                                                                                                                                                                                  LN
2839                                                                                                                                                                                   0,
2840                                                                                                                                                                                  FTy 5),
2841                                                                                                                                                                               Var("w",
2842                                                                                                                                                                                   F32))],
2843                                                                                                                                                                        qTy),
2844                                                                                                                                                                     Close
2845                                                                                                                                                                       (Var("v",
2846                                                                                                                                                                            PTy(CTy"PSR",
2847                                                                                                                                                                                F32)),
2848                                                                                                                                                                        MU(Call
2849                                                                                                                                                                             ("write'reg'PSR",
2850                                                                                                                                                                              CTy"PSR",
2851                                                                                                                                                                              Var("v",
2852                                                                                                                                                                                  PTy(CTy"PSR",
2853                                                                                                                                                                                      F32))),
2854                                                                                                                                                                           qTy))),
2855                                                                                                                                                                  Close
2856                                                                                                                                                                    (Var("v",
2857                                                                                                                                                                         CTy"PSR"),
2858                                                                                                                                                                     MW(Close
2859                                                                                                                                                                          (qVar"s",
2860                                                                                                                                                                           Rupd
2861                                                                                                                                                                             ("CPSR",
2862                                                                                                                                                                              TP[qVar"s",
2863                                                                                                                                                                                 Var("v",
2864                                                                                                                                                                                     CTy"PSR")])))))))))))))))))))))))))))))))))),
2865                                                                       MU(LU,
2866                                                                          qTy)))))))))),
2867                                           MU(LU,qTy)))))))))))))))
2868;
2869val SPSRWriteByInstr_def = Def
2870  ("SPSRWriteByInstr",TP[Var("value",F32),Var("bytemask",F4)],
2871   MB(Call("CurrentModeIsUserOrSystem",ATy(qTy,PTy(bTy,qTy)),LU),
2872      Close
2873        (bVar"v",
2874         MB(ITE(bVar"v",
2875                Call
2876                  ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
2877                   Call
2878                     ("UNPREDICTABLE",CTy"exception",LS"SPSRWriteByInstr")),
2879                MU(LU,qTy)),
2880            Close
2881              (AVar uTy,
2882               MB(ITE(Bop(Bit,Var("bytemask",F4),LN 3),
2883                      MB(Const("SPSR",ATy(qTy,PTy(CTy"PSR",qTy))),
2884                         Close
2885                           (Var("x",CTy"PSR"),
2886                            Call
2887                              ("write'SPSR",ATy(qTy,PTy(uTy,qTy)),
2888                               Call
2889                                 ("write'reg'PSR",CTy"PSR",
2890                                  TP[Var("x",CTy"PSR"),
2891                                     BFI(LN 31,LN 24,
2892                                         EX(Var("value",F32),LN 31,LN 24,
2893                                            F8),
2894                                         Call
2895                                           ("reg'PSR",F32,
2896                                            Var("x",CTy"PSR")))])))),
2897                      MU(LU,qTy)),
2898                  Close
2899                    (AVar uTy,
2900                     MB(ITE(Bop(Bit,Var("bytemask",F4),LN 2),
2901                            MB(Const("SPSR",ATy(qTy,PTy(CTy"PSR",qTy))),
2902                               Close
2903                                 (Var("x",CTy"PSR"),
2904                                  Call
2905                                    ("write'SPSR",ATy(qTy,PTy(uTy,qTy)),
2906                                     Call
2907                                       ("write'reg'PSR",CTy"PSR",
2908                                        TP[Var("x",CTy"PSR"),
2909                                           BFI(LN 19,LN 16,
2910                                               EX(Var("value",F32),LN 19,
2911                                                  LN 16,F4),
2912                                               Call
2913                                                 ("reg'PSR",F32,
2914                                                  Var("x",CTy"PSR")))])))),
2915                            MU(LU,qTy)),
2916                        Close
2917                          (AVar uTy,
2918                           MB(ITE(Bop(Bit,Var("bytemask",F4),LN 1),
2919                                  MB(Const
2920                                       ("SPSR",ATy(qTy,PTy(CTy"PSR",qTy))),
2921                                     Close
2922                                       (Var("x",CTy"PSR"),
2923                                        Call
2924                                          ("write'SPSR",
2925                                           ATy(qTy,PTy(uTy,qTy)),
2926                                           Call
2927                                             ("write'reg'PSR",CTy"PSR",
2928                                              TP[Var("x",CTy"PSR"),
2929                                                 BFI(LN 15,LN 8,
2930                                                     EX(Var("value",F32),
2931                                                        LN 15,LN 8,F8),
2932                                                     Call
2933                                                       ("reg'PSR",F32,
2934                                                        Var("x",CTy"PSR")))])))),
2935                                  MU(LU,qTy)),
2936                              Close
2937                                (AVar uTy,
2938                                 ITE(Bop(Bit,Var("bytemask",F4),LN 0),
2939                                     MB(Const
2940                                          ("SPSR",
2941                                           ATy(qTy,PTy(CTy"PSR",qTy))),
2942                                        Close
2943                                          (Var("v",CTy"PSR"),
2944                                           MB(Call
2945                                                ("write'SPSR",
2946                                                 ATy(qTy,PTy(uTy,qTy)),
2947                                                 Call
2948                                                   ("write'reg'PSR",
2949                                                    CTy"PSR",
2950                                                    TP[Var("v",CTy"PSR"),
2951                                                       BFI(LN 7,LN 5,
2952                                                           EX(Var("value",
2953                                                                  F32),
2954                                                              LN 7,LN 5,
2955                                                              FTy 3),
2956                                                           Call
2957                                                             ("reg'PSR",
2958                                                              F32,
2959                                                              Var("v",
2960                                                                  CTy"PSR")))])),
2961                                              Close
2962                                                (AVar uTy,
2963                                                 MB(Call
2964                                                      ("BadMode",
2965                                                       ATy(qTy,
2966                                                           PTy(bTy,qTy)),
2967                                                       EX(Var("value",F32),
2968                                                          LN 4,LN 0,FTy 5)),
2969                                                    Close
2970                                                      (bVar"b",
2971                                                       ITE(bVar"b",
2972                                                           Call
2973                                                             ("raise'exception",
2974                                                              ATy(qTy,
2975                                                                  PTy(uTy,
2976                                                                      qTy)),
2977                                                              Call
2978                                                                ("UNPREDICTABLE",
2979                                                                 CTy"exception",
2980                                                                 CC[LS
2981                                                                     "SPSRWriteByInstr: BadMode: ",
2982                                                                    Mop(Cast
2983                                                                          sTy,
2984                                                                        EX(Var("value",
2985                                                                               F32),
2986                                                                           LN
2987                                                                            4,
2988                                                                           LN
2989                                                                            0,
2990                                                                           FTy 5))])),
2991                                                           MB(Const
2992                                                                ("SPSR",
2993                                                                 ATy(qTy,
2994                                                                     PTy(CTy"PSR",
2995                                                                         qTy))),
2996                                                              Close
2997                                                                (Var("x",
2998                                                                     CTy"PSR"),
2999                                                                 Call
3000                                                                   ("write'SPSR",
3001                                                                    ATy(qTy,
3002                                                                        PTy(uTy,
3003                                                                            qTy)),
3004                                                                    Call
3005                                                                      ("write'reg'PSR",
3006                                                                       CTy"PSR",
3007                                                                       TP[Var("x",
3008                                                                              CTy"PSR"),
3009                                                                          BFI(LN
3010                                                                               4,
3011                                                                              LN
3012                                                                               0,
3013                                                                              EX(Var("value",
3014                                                                                     F32),
3015                                                                                 LN
3016                                                                                  4,
3017                                                                                 LN
3018                                                                                  0,
3019                                                                                 FTy 5),
3020                                                                              Call
3021                                                                                ("reg'PSR",
3022                                                                                 F32,
3023                                                                                 Var("x",
3024                                                                                     CTy"PSR")))]))))))))))),
3025                                     MU(LU,qTy)))))))))))))
3026;
3027val RBankSelect_def = Def
3028  ("RBankSelect",
3029   TP[Var("mode",FTy 5),Var("usr",CTy"RName"),Var("fiq",CTy"RName"),
3030      Var("irq",CTy"RName"),Var("svc",CTy"RName"),Var("abt",CTy"RName"),
3031      Var("und",CTy"RName"),Var("mon",CTy"RName"),Var("hyp",CTy"RName")],
3032   MB(Call("BadMode",ATy(qTy,PTy(bTy,qTy)),Var("mode",FTy 5)),
3033      Close
3034        (bVar"b",
3035         ITE(bVar"b",
3036             Call
3037               ("raise'exception",ATy(qTy,PTy(CTy"RName",qTy)),
3038                Call
3039                  ("UNPREDICTABLE",CTy"exception",
3040                   CC[LS"RBankSelect: BadMode",
3041                      Mop(Cast sTy,Var("mode",FTy 5))])),
3042             MU(CS(Var("mode",FTy 5),
3043                   [(LW(16,5),Var("usr",CTy"RName")),
3044                    (LW(17,5),Var("fiq",CTy"RName")),
3045                    (LW(18,5),Var("irq",CTy"RName")),
3046                    (LW(19,5),Var("svc",CTy"RName")),
3047                    (LW(22,5),Var("mon",CTy"RName")),
3048                    (LW(23,5),Var("abt",CTy"RName")),
3049                    (LW(26,5),Var("hyp",CTy"RName")),
3050                    (LW(27,5),Var("und",CTy"RName")),
3051                    (LW(31,5),Var("usr",CTy"RName"))]),qTy)))))
3052;
3053val RfiqBankSelect_def = Def
3054  ("RfiqBankSelect",
3055   TP[Var("mode",FTy 5),Var("usr",CTy"RName"),Var("fiq",CTy"RName")],
3056   Call
3057     ("RBankSelect",ATy(qTy,PTy(CTy"RName",qTy)),
3058      TP[Var("mode",FTy 5),Var("usr",CTy"RName"),Var("fiq",CTy"RName"),
3059         Var("usr",CTy"RName"),Var("usr",CTy"RName"),
3060         Var("usr",CTy"RName"),Var("usr",CTy"RName"),
3061         Var("usr",CTy"RName"),Var("usr",CTy"RName")]))
3062;
3063val LookUpRName_def = Def
3064  ("LookUpRName",TP[Var("n",F4),Var("mode",FTy 5)],
3065   CS(Var("n",F4),
3066      [(LW(0,4),MU(LC("RName_0usr",CTy"RName"),qTy)),
3067       (LW(1,4),MU(LC("RName_1usr",CTy"RName"),qTy)),
3068       (LW(2,4),MU(LC("RName_2usr",CTy"RName"),qTy)),
3069       (LW(3,4),MU(LC("RName_3usr",CTy"RName"),qTy)),
3070       (LW(4,4),MU(LC("RName_4usr",CTy"RName"),qTy)),
3071       (LW(5,4),MU(LC("RName_5usr",CTy"RName"),qTy)),
3072       (LW(6,4),MU(LC("RName_6usr",CTy"RName"),qTy)),
3073       (LW(7,4),MU(LC("RName_7usr",CTy"RName"),qTy)),
3074       (LW(8,4),
3075        Call
3076          ("RfiqBankSelect",ATy(qTy,PTy(CTy"RName",qTy)),
3077           TP[Var("mode",FTy 5),LC("RName_8usr",CTy"RName"),
3078              LC("RName_8fiq",CTy"RName")])),
3079       (LW(9,4),
3080        Call
3081          ("RfiqBankSelect",ATy(qTy,PTy(CTy"RName",qTy)),
3082           TP[Var("mode",FTy 5),LC("RName_9usr",CTy"RName"),
3083              LC("RName_9fiq",CTy"RName")])),
3084       (LW(10,4),
3085        Call
3086          ("RfiqBankSelect",ATy(qTy,PTy(CTy"RName",qTy)),
3087           TP[Var("mode",FTy 5),LC("RName_10usr",CTy"RName"),
3088              LC("RName_10fiq",CTy"RName")])),
3089       (LW(11,4),
3090        Call
3091          ("RfiqBankSelect",ATy(qTy,PTy(CTy"RName",qTy)),
3092           TP[Var("mode",FTy 5),LC("RName_11usr",CTy"RName"),
3093              LC("RName_11fiq",CTy"RName")])),
3094       (LW(12,4),
3095        Call
3096          ("RfiqBankSelect",ATy(qTy,PTy(CTy"RName",qTy)),
3097           TP[Var("mode",FTy 5),LC("RName_12usr",CTy"RName"),
3098              LC("RName_12fiq",CTy"RName")])),
3099       (LW(13,4),
3100        Call
3101          ("RBankSelect",ATy(qTy,PTy(CTy"RName",qTy)),
3102           TP[Var("mode",FTy 5),LC("RName_SPusr",CTy"RName"),
3103              LC("RName_SPfiq",CTy"RName"),LC("RName_SPirq",CTy"RName"),
3104              LC("RName_SPsvc",CTy"RName"),LC("RName_SPabt",CTy"RName"),
3105              LC("RName_SPund",CTy"RName"),LC("RName_SPmon",CTy"RName"),
3106              LC("RName_SPhyp",CTy"RName")])),
3107       (LW(14,4),
3108        Call
3109          ("RBankSelect",ATy(qTy,PTy(CTy"RName",qTy)),
3110           TP[Var("mode",FTy 5),LC("RName_LRusr",CTy"RName"),
3111              LC("RName_LRfiq",CTy"RName"),LC("RName_LRirq",CTy"RName"),
3112              LC("RName_LRsvc",CTy"RName"),LC("RName_LRabt",CTy"RName"),
3113              LC("RName_LRund",CTy"RName"),LC("RName_LRmon",CTy"RName"),
3114              LC("RName_LRusr",CTy"RName")])),
3115       (LW(15,4),
3116        Call
3117          ("raise'exception",ATy(qTy,PTy(CTy"RName",qTy)),
3118           Call
3119             ("ASSERT",CTy"exception",LS"LookUpRName: n >= 0 and n <= 14")))]))
3120;
3121val Rmode_def = Def
3122  ("Rmode",TP[Var("n",F4),Var("mode",FTy 5)],
3123   MB(Call("IsSecure",ATy(qTy,PTy(bTy,qTy)),LU),
3124      Close
3125        (bVar"v",
3126         MB(MU(Mop(Not,bVar"v"),qTy),
3127            Close
3128              (bVar"notSecure",
3129               MB(ITE(Bop(And,bVar"notSecure",
3130                          EQ(Var("mode",FTy 5),LW(22,5))),
3131                      Call
3132                        ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
3133                         Call("UNPREDICTABLE",CTy"exception",LS"Rmode")),
3134                      MU(LU,qTy)),
3135                  Close
3136                    (AVar uTy,
3137                     MB(MR(Close(qVar"s",Dest("CP15",CTy"CP15",qVar"s"))),
3138                        Close
3139                          (Var("v",CTy"CP15"),
3140                           MB(MB(MB(MB(MU(Dest
3141                                            ("NSACR",CTy"NSACR",
3142                                             Var("v",CTy"CP15")),qTy),
3143                                       Close
3144                                         (Var("v",CTy"NSACR"),
3145                                          MU(Dest
3146                                               ("RFR",bTy,
3147                                                Var("v",CTy"NSACR")),qTy))),
3148                                    Close
3149                                      (bVar"v",
3150                                       MU(Bop(And,
3151                                              Bop(And,bVar"notSecure",
3152                                                  EQ(Var("mode",FTy 5),
3153                                                     LW(17,5))),bVar"v"),
3154                                          qTy))),
3155                                 Close
3156                                   (bVar"b",
3157                                    ITE(bVar"b",
3158                                        Call
3159                                          ("raise'exception",
3160                                           ATy(qTy,PTy(uTy,qTy)),
3161                                           Call
3162                                             ("UNPREDICTABLE",
3163                                              CTy"exception",LS"Rmode")),
3164                                        MU(LU,qTy)))),
3165                              Close
3166                                (AVar uTy,
3167                                 MB(MR(Close
3168                                         (qVar"s",
3169                                          Dest
3170                                            ("REG",ATy(CTy"RName",F32),
3171                                             qVar"s"))),
3172                                    Close
3173                                      (Var("v",ATy(CTy"RName",F32)),
3174                                       MB(Call
3175                                            ("LookUpRName",
3176                                             ATy(qTy,PTy(CTy"RName",qTy)),
3177                                             TP[Var("n",F4),
3178                                                Var("mode",FTy 5)]),
3179                                          Close
3180                                            (Var("v0",CTy"RName"),
3181                                             MU(Apply
3182                                                  (Var("v",
3183                                                       ATy(CTy"RName",F32)),
3184                                                   Var("v0",CTy"RName")),
3185                                                qTy))))))))))))))))
3186;
3187val write'Rmode_def = Def
3188  ("write'Rmode",TP[Var("value",F32),Var("n",F4),Var("mode",FTy 5)],
3189   MB(MR(Close(qVar"s",Dest("data_abort",bTy,qVar"s"))),
3190      Close
3191        (bVar"v",
3192         MB(MU(Mop(Not,bVar"v"),qTy),
3193            Close
3194              (bVar"b",
3195               ITE(bVar"b",
3196                   MB(Call("IsSecure",ATy(qTy,PTy(bTy,qTy)),LU),
3197                      Close
3198                        (bVar"v",
3199                         MB(MU(Mop(Not,bVar"v"),qTy),
3200                            Close
3201                              (bVar"notSecure",
3202                               MB(ITE(Bop(And,bVar"notSecure",
3203                                          EQ(Var("mode",FTy 5),LW(22,5))),
3204                                      Call
3205                                        ("raise'exception",
3206                                         ATy(qTy,PTy(uTy,qTy)),
3207                                         Call
3208                                           ("UNPREDICTABLE",
3209                                            CTy"exception",LS"Rmode")),
3210                                      MU(LU,qTy)),
3211                                  Close
3212                                    (AVar uTy,
3213                                     MB(MR(Close
3214                                             (qVar"s",
3215                                              Dest
3216                                                ("CP15",CTy"CP15",qVar"s"))),
3217                                        Close
3218                                          (Var("v",CTy"CP15"),
3219                                           MB(MB(MB(MB(MU(Dest
3220                                                            ("NSACR",
3221                                                             CTy"NSACR",
3222                                                             Var("v",
3223                                                                 CTy"CP15")),
3224                                                          qTy),
3225                                                       Close
3226                                                         (Var("v",
3227                                                              CTy"NSACR"),
3228                                                          MU(Dest
3229                                                               ("RFR",bTy,
3230                                                                Var("v",
3231                                                                    CTy"NSACR")),
3232                                                             qTy))),
3233                                                    Close
3234                                                      (bVar"v",
3235                                                       MU(Bop(And,
3236                                                              Bop(And,
3237                                                                  bVar"notSecure",
3238                                                                  EQ(Var("mode",
3239                                                                         FTy 5),
3240                                                                     LW(17,
3241                                                                        5))),
3242                                                              bVar"v"),qTy))),
3243                                                 Close
3244                                                   (bVar"b",
3245                                                    ITE(bVar"b",
3246                                                        Call
3247                                                          ("raise'exception",
3248                                                           ATy(qTy,
3249                                                               PTy(uTy,qTy)),
3250                                                           Call
3251                                                             ("UNPREDICTABLE",
3252                                                              CTy"exception",
3253                                                              LS"Rmode")),
3254                                                        MU(LU,qTy)))),
3255                                              Close
3256                                                (AVar uTy,
3257                                                 MB(Call
3258                                                      ("CurrentInstrSet",
3259                                                       ATy(qTy,
3260                                                           PTy(CTy"InstrSet",
3261                                                               qTy)),LU),
3262                                                    Close
3263                                                      (Var("v",
3264                                                           CTy"InstrSet"),
3265                                                       MB(MB(MB(MB(MU(EQ(Var("v",
3266                                                                             CTy"InstrSet"),
3267                                                                         LC("InstrSet_ARM",
3268                                                                            CTy"InstrSet")),
3269                                                                      qTy),
3270                                                                   Close
3271                                                                     (bVar"v",
3272                                                                      MU(Mop(Not,
3273                                                                             bVar"v"),
3274                                                                         qTy))),
3275                                                                Close
3276                                                                  (bVar"v",
3277                                                                   MU(Bop(And,
3278                                                                          Bop(And,
3279                                                                              EQ(Var("n",
3280                                                                                     F4),
3281                                                                                 LW(13,
3282                                                                                    4)),
3283                                                                              Mop(Not,
3284                                                                                  EQ(EX(Var("value",
3285                                                                                            F32),
3286                                                                                        LN
3287                                                                                         1,
3288                                                                                        LN
3289                                                                                         0,
3290                                                                                        FTy 2),
3291                                                                                     LW(0,
3292                                                                                        2)))),
3293                                                                          bVar"v"),
3294                                                                      qTy))),
3295                                                             Close
3296                                                               (bVar"b",
3297                                                                ITE(bVar"b",
3298                                                                    Call
3299                                                                      ("raise'exception",
3300                                                                       ATy(qTy,
3301                                                                           PTy(uTy,
3302                                                                               qTy)),
3303                                                                       Call
3304                                                                         ("UNPREDICTABLE",
3305                                                                          CTy"exception",
3306                                                                          LS
3307                                                                           "Rmode")),
3308                                                                    MU(LU,
3309                                                                       qTy)))),
3310                                                          Close
3311                                                            (AVar uTy,
3312                                                             MB(Call
3313                                                                  ("LookUpRName",
3314                                                                   ATy(qTy,
3315                                                                       PTy(CTy"RName",
3316                                                                           qTy)),
3317                                                                   TP[Var("n",
3318                                                                          F4),
3319                                                                      Var("mode",
3320                                                                          FTy 5)]),
3321                                                                Close
3322                                                                  (Var("x",
3323                                                                       CTy"RName"),
3324                                                                   MB(MR(Close
3325                                                                           (qVar"s",
3326                                                                            Dest
3327                                                                              ("REG",
3328                                                                               ATy(CTy"RName",
3329                                                                                   F32),
3330                                                                               qVar"s"))),
3331                                                                      Close
3332                                                                        (Var("v",
3333                                                                             ATy(CTy"RName",
3334                                                                                 F32)),
3335                                                                         MB(MU(Fupd
3336                                                                                 (Var("v",
3337                                                                                      ATy(CTy"RName",
3338                                                                                          F32)),
3339                                                                                  Var("x",
3340                                                                                      CTy"RName"),
3341                                                                                  Var("value",
3342                                                                                      F32)),
3343                                                                               qTy),
3344                                                                            Close
3345                                                                              (Var("v",
3346                                                                                   ATy(CTy"RName",
3347                                                                                       F32)),
3348                                                                               MW(Close
3349                                                                                    (qVar"s",
3350                                                                                     Rupd
3351                                                                                       ("REG",
3352                                                                                        TP[qVar"s",
3353                                                                                           Var("v",
3354                                                                                               ATy(CTy"RName",
3355                                                                                                   F32))]))))))))))))))))))))))),
3356                   MU(LU,qTy)))))))
3357;
3358val R_def = Def
3359  ("R",Var("n",F4),
3360   ITE(EQ(Var("n",F4),LW(15,4)),
3361       MB(Call("CurrentInstrSet",ATy(qTy,PTy(CTy"InstrSet",qTy)),LU),
3362          Close
3363            (Var("v",CTy"InstrSet"),
3364             MB(MB(MU(EQ(Var("v",CTy"InstrSet"),
3365                         LC("InstrSet_ARM",CTy"InstrSet")),qTy),
3366                   Close(bVar"b",MU(ITE(bVar"b",LW(8,32),LW(4,32)),qTy))),
3367                Close
3368                  (Var("offset",F32),
3369                   MB(MR(Close
3370                           (qVar"s",
3371                            Dest("REG",ATy(CTy"RName",F32),qVar"s"))),
3372                      Close
3373                        (Var("v",ATy(CTy"RName",F32)),
3374                         MB(MU(Apply
3375                                 (Var("v",ATy(CTy"RName",F32)),
3376                                  LC("RName_PC",CTy"RName")),qTy),
3377                            Close
3378                              (Var("v",F32),
3379                               MU(Bop(Add,Var("v",F32),Var("offset",F32)),
3380                                  qTy))))))))),
3381       MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
3382          Close
3383            (Var("v",CTy"PSR"),
3384             MB(MB(MU(Dest("M",FTy 5,Var("v",CTy"PSR")),qTy),
3385                   Close
3386                     (Var("v",FTy 5),
3387                      MU(TP[Var("n",F4),Var("v",FTy 5)],qTy))),
3388                Close
3389                  (Var("v",PTy(F4,FTy 5)),
3390                   Call
3391                     ("Rmode",ATy(qTy,PTy(F32,qTy)),Var("v",PTy(F4,FTy 5)))))))))
3392;
3393val write'R_def = Def
3394  ("write'R",TP[Var("value",F32),Var("n",F4)],
3395   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
3396      Close
3397        (Var("v",CTy"PSR"),
3398         MB(MB(MU(Dest("M",FTy 5,Var("v",CTy"PSR")),qTy),
3399               Close
3400                 (Var("v",FTy 5),MU(TP[Var("n",F4),Var("v",FTy 5)],qTy))),
3401            Close
3402              (Var("x",PTy(F4,FTy 5)),
3403               Call
3404                 ("write'Rmode",ATy(qTy,PTy(uTy,qTy)),
3405                  TP[Var("value",F32),Var("x",PTy(F4,FTy 5))]))))))
3406;
3407val SP_def = Def0 ("SP",Call("R",ATy(qTy,PTy(F32,qTy)),LW(13,4)))
3408;
3409val write'SP_def = Def
3410  ("write'SP",Var("value",F32),
3411   Call("write'R",ATy(qTy,PTy(uTy,qTy)),TP[Var("value",F32),LW(13,4)]))
3412;
3413val LR_def = Def0 ("LR",Call("R",ATy(qTy,PTy(F32,qTy)),LW(14,4)))
3414;
3415val write'LR_def = Def
3416  ("write'LR",Var("value",F32),
3417   Call("write'R",ATy(qTy,PTy(uTy,qTy)),TP[Var("value",F32),LW(14,4)]))
3418;
3419val PC_def = Def0 ("PC",Call("R",ATy(qTy,PTy(F32,qTy)),LW(15,4)))
3420;
3421val BranchTo_def = Def
3422  ("BranchTo",Var("address",F32),
3423   MB(MR(Close(qVar"s",Dest("REG",ATy(CTy"RName",F32),qVar"s"))),
3424      Close
3425        (Var("v",ATy(CTy"RName",F32)),
3426         MB(MU(Fupd
3427                 (Var("v",ATy(CTy"RName",F32)),LC("RName_PC",CTy"RName"),
3428                  Var("address",F32)),qTy),
3429            Close
3430              (Var("v",ATy(CTy"RName",F32)),
3431               MW(Close
3432                    (qVar"s",
3433                     Rupd("REG",TP[qVar"s",Var("v",ATy(CTy"RName",F32))]))))))))
3434;
3435val PCStoreValue_def = Def
3436  ("PCStoreValue",AVar uTy,Const("PC",ATy(qTy,PTy(F32,qTy))))
3437;
3438val BranchWritePC_def = Def
3439  ("BranchWritePC",Var("address",F32),
3440   MB(Call("CurrentInstrSet",ATy(qTy,PTy(CTy"InstrSet",qTy)),LU),
3441      Close
3442        (Var("v",CTy"InstrSet"),
3443         MB(MU(EQ(Var("v",CTy"InstrSet"),LC("InstrSet_ARM",CTy"InstrSet")),
3444               qTy),
3445            Close
3446              (bVar"b",
3447               ITE(bVar"b",
3448                   MB(Call("ArchVersion",ATy(qTy,PTy(nTy,qTy)),LU),
3449                      Close
3450                        (nVar"v",
3451                         MB(MB(MB(MU(Bop(Lt,nVar"v",LN 6),qTy),
3452                                  Close
3453                                    (bVar"b",
3454                                     MU(Bop(And,bVar"b",
3455                                            Mop(Not,
3456                                                EQ(EX(Var("address",F32),
3457                                                      LN 1,LN 0,FTy 2),
3458                                                   LW(0,2)))),qTy))),
3459                               Close
3460                                 (bVar"b",
3461                                  ITE(bVar"b",
3462                                      Call
3463                                        ("raise'exception",
3464                                         ATy(qTy,PTy(uTy,qTy)),
3465                                         Call
3466                                           ("UNPREDICTABLE",
3467                                            CTy"exception",
3468                                            LS"BranchWritePC")),MU(LU,qTy)))),
3469                            Close
3470                              (AVar uTy,
3471                               Call
3472                                 ("BranchTo",ATy(qTy,PTy(uTy,qTy)),
3473                                  CC[EX(Var("address",F32),LN 31,LN 2,
3474                                        FTy 30),LW(0,2)]))))),
3475                   Call
3476                     ("BranchTo",ATy(qTy,PTy(uTy,qTy)),
3477                      CC[EX(Var("address",F32),LN 31,LN 1,FTy 31),LW(0,1)])))))))
3478;
3479val BXWritePC_def = Def
3480  ("BXWritePC",Var("address",F32),
3481   MB(Call("CurrentInstrSet",ATy(qTy,PTy(CTy"InstrSet",qTy)),LU),
3482      Close
3483        (Var("v",CTy"InstrSet"),
3484         MB(MU(EQ(Var("v",CTy"InstrSet"),
3485                  LC("InstrSet_ThumbEE",CTy"InstrSet")),qTy),
3486            Close
3487              (bVar"b",
3488               ITB([(bVar"b",
3489                     ITE(Bop(Bit,Var("address",F32),LN 0),
3490                         Call
3491                           ("BranchTo",ATy(qTy,PTy(uTy,qTy)),
3492                            CC[EX(Var("address",F32),LN 31,LN 1,FTy 31),
3493                               LW(0,1)]),
3494                         Call
3495                           ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
3496                            Call
3497                              ("UNPREDICTABLE",CTy"exception",
3498                               LS"BXWritePC")))),
3499                    (Bop(Bit,Var("address",F32),LN 0),
3500                     MB(Call
3501                          ("SelectInstrSet",ATy(qTy,PTy(uTy,qTy)),
3502                           LC("InstrSet_Thumb",CTy"InstrSet")),
3503                        Close
3504                          (AVar uTy,
3505                           Call
3506                             ("BranchTo",ATy(qTy,PTy(uTy,qTy)),
3507                              CC[EX(Var("address",F32),LN 31,LN 1,FTy 31),
3508                                 LW(0,1)])))),
3509                    (Mop(Not,Bop(Bit,Var("address",F32),LN 1)),
3510                     MB(Call
3511                          ("SelectInstrSet",ATy(qTy,PTy(uTy,qTy)),
3512                           LC("InstrSet_ARM",CTy"InstrSet")),
3513                        Close
3514                          (AVar uTy,
3515                           Call
3516                             ("BranchTo",ATy(qTy,PTy(uTy,qTy)),
3517                              Var("address",F32)))))],
3518                   Call
3519                     ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
3520                      Call("UNPREDICTABLE",CTy"exception",LS"BXWritePC"))))))))
3521;
3522val LoadWritePC_def = Def
3523  ("LoadWritePC",Var("address",F32),
3524   MB(Call("ArchVersion",ATy(qTy,PTy(nTy,qTy)),LU),
3525      Close
3526        (nVar"v",
3527         MB(MU(Bop(Ge,nVar"v",LN 5),qTy),
3528            Close
3529              (bVar"b",
3530               ITE(bVar"b",
3531                   Call
3532                     ("BXWritePC",ATy(qTy,PTy(uTy,qTy)),Var("address",F32)),
3533                   Call
3534                     ("BranchWritePC",ATy(qTy,PTy(uTy,qTy)),
3535                      Var("address",F32))))))))
3536;
3537val ALUWritePC_def = Def
3538  ("ALUWritePC",Var("address",F32),
3539   MB(Call("ArchVersion",ATy(qTy,PTy(nTy,qTy)),LU),
3540      Close
3541        (nVar"v",
3542         MB(MB(MU(Bop(Ge,nVar"v",LN 7),qTy),
3543               Close
3544                 (bVar"b",
3545                  ITE(bVar"b",
3546                      MB(Call
3547                           ("CurrentInstrSet",
3548                            ATy(qTy,PTy(CTy"InstrSet",qTy)),LU),
3549                         Close
3550                           (Var("v",CTy"InstrSet"),
3551                            MU(EQ(Var("v",CTy"InstrSet"),
3552                                  LC("InstrSet_ARM",CTy"InstrSet")),qTy))),
3553                      MU(LF,qTy)))),
3554            Close
3555              (bVar"b",
3556               ITE(bVar"b",
3557                   Call
3558                     ("BXWritePC",ATy(qTy,PTy(uTy,qTy)),Var("address",F32)),
3559                   Call
3560                     ("BranchWritePC",ATy(qTy,PTy(uTy,qTy)),
3561                      Var("address",F32))))))))
3562;
3563val ThisInstrLength_def = Def
3564  ("ThisInstrLength",AVar uTy,
3565   MB(MR(Close(qVar"s",Dest("Encoding",CTy"Encoding",qVar"s"))),
3566      Close
3567        (Var("v",CTy"Encoding"),
3568         MB(MU(EQ(Var("v",CTy"Encoding"),
3569                  LC("Encoding_Thumb",CTy"Encoding")),qTy),
3570            Close(bVar"b",MU(ITE(bVar"b",LN 16,LN 32),qTy))))))
3571;
3572val IncPC_def = Def
3573  ("IncPC",AVar uTy,
3574   MB(MR(Close(qVar"s",Dest("REG",ATy(CTy"RName",F32),qVar"s"))),
3575      Close
3576        (Var("v",ATy(CTy"RName",F32)),
3577         MB(MB(MU(Apply
3578                    (Var("v",ATy(CTy"RName",F32)),
3579                     LC("RName_PC",CTy"RName")),qTy),
3580               Close
3581                 (Var("v",F32),
3582                  MB(Call("ThisInstrLength",ATy(qTy,PTy(nTy,qTy)),LU),
3583                     Close
3584                       (nVar"v0",
3585                        MB(MB(MU(EQ(nVar"v0",LN 16),qTy),
3586                              Close
3587                                (bVar"b",
3588                                 MU(ITE(bVar"b",LW(2,32),LW(4,32)),qTy))),
3589                           Close
3590                             (Var("v0",F32),
3591                              MU(Bop(Add,Var("v",F32),Var("v0",F32)),qTy))))))),
3592            Close
3593              (Var("v",F32),
3594               Call("BranchTo",ATy(qTy,PTy(uTy,qTy)),Var("v",F32)))))))
3595;
3596val TranslateAddress_def = Def
3597  ("TranslateAddress",
3598   TP[Var("VA",F32),bVar"privileged",bVar"iswrite",nVar"size"],
3599   MB(ITE(bVar"iswrite",
3600          MU(SL[LC("ReadWritePermit",CTy"rights"),
3601                LC("XNeverReadWrite",CTy"rights")],qTy),
3602          MB(MR(Close(qVar"s",Dest("isfetch",bTy,qVar"s"))),
3603             Close
3604               (bVar"b",
3605                MU(ITE(bVar"b",
3606                       SL[LC("ReadPermit",CTy"rights"),
3607                          LC("ReadWritePermit",CTy"rights")],
3608                       SL[LC("ReadPermit",CTy"rights"),
3609                          LC("ReadWritePermit",CTy"rights"),
3610                          LC("XNeverRead",CTy"rights"),
3611                          LC("XNeverReadWrite",CTy"rights")]),qTy)))),
3612      Close
3613        (Var("rights",STy(CTy"rights")),
3614         MB(For(TP[LN 0,Bop(Sub,nVar"size",LN 1),
3615                   Close
3616                     (nVar"i",
3617                      MB(MR(Close(qVar"s",Dest("data_abort",bTy,qVar"s"))),
3618                         Close
3619                           (bVar"v",
3620                            MB(MB(MR(Close
3621                                       (qVar"s",
3622                                        Dest
3623                                          ("rights_map",
3624                                           ATy(F32,CTy"rights"),qVar"s"))),
3625                                  Close
3626                                    (Var("v0",ATy(F32,CTy"rights")),
3627                                     MB(MB(MB(MU(Apply
3628                                                   (Var("v0",
3629                                                        ATy(F32,
3630                                                            CTy"rights")),
3631                                                    Bop(Add,Var("VA",F32),
3632                                                        Mop(Cast F32,
3633                                                            nVar"i"))),qTy),
3634                                              Close
3635                                                (Var("v",CTy"rights"),
3636                                                 MU(Bop(In,
3637                                                        Var("v",
3638                                                            CTy"rights"),
3639                                                        Var("rights",
3640                                                            STy(CTy"rights"))),
3641                                                    qTy))),
3642                                           Close
3643                                             (bVar"v",
3644                                              MU(Mop(Not,bVar"v"),qTy))),
3645                                        Close
3646                                          (bVar"v0",
3647                                           MU(Bop(Or,bVar"v",bVar"v0"),qTy))))),
3648                               Close
3649                                 (bVar"v",
3650                                  MW(Close
3651                                       (qVar"s",
3652                                        Rupd
3653                                          ("data_abort",
3654                                           TP[qVar"s",bVar"v"]))))))))]),
3655            Close
3656              (AVar uTy,
3657               MB(MR(Close
3658                       (qVar"s",
3659                        Dest("translate_address",ATy(F32,OTy F32),qVar"s"))),
3660                  Close
3661                    (Var("v",ATy(F32,OTy F32)),
3662                     MB(MU(Apply(Var("v",ATy(F32,OTy F32)),Var("VA",F32)),
3663                           qTy),
3664                        Close
3665                          (Var("x",OTy F32),
3666                           CS(Var("x",OTy F32),
3667                              [(Mop(Some,Var("PA",F32)),
3668                                MU(Var("PA",F32),qTy)),
3669                               (LO F32,
3670                                MB(MW(Close
3671                                        (qVar"s",
3672                                         Rupd("data_abort",TP[qVar"s",LT]))),
3673                                   Close(AVar uTy,MU(LX F32,qTy))))]))))))))))
3674;
3675val mem1_def = Def
3676  ("mem1",Var("address",F32),
3677   MB(MR(Close(qVar"s",Dest("MEM",ATy(F32,F8),qVar"s"))),
3678      Close
3679        (Var("v",ATy(F32,F8)),
3680         MB(MU(Apply(Var("v",ATy(F32,F8)),Var("address",F32)),qTy),
3681            Close(Var("v",F8),MU(Mop(Cast vTy,Var("v",F8)),qTy))))))
3682;
3683val mem_def = Def
3684  ("mem",TP[Var("address",F32),nVar"size"],
3685   MB(MR(Close(qVar"s",Dest("data_abort",bTy,qVar"s"))),
3686      Close
3687        (bVar"b",
3688         ITE(bVar"b",MU(LX vTy,qTy),
3689             CS(nVar"size",
3690                [(LN 1,
3691                  MB(Call
3692                       ("mem1",ATy(qTy,PTy(vTy,qTy)),
3693                        Bop(Add,Var("address",F32),LW(0,32))),
3694                     Close(vVar"v",MU(EX(vVar"v",LN 7,LN 0,vTy),qTy)))),
3695                 (LN 2,
3696                  MB(Call
3697                       ("mem1",ATy(qTy,PTy(vTy,qTy)),
3698                        Bop(Add,Var("address",F32),LW(1,32))),
3699                     Close
3700                       (vVar"v",
3701                        MB(MB(Call
3702                                ("mem1",ATy(qTy,PTy(vTy,qTy)),
3703                                 Bop(Add,Var("address",F32),LW(0,32))),
3704                              Close(vVar"v0",MU(CC[vVar"v",vVar"v0"],qTy))),
3705                           Close
3706                             (vVar"v",MU(EX(vVar"v",LN 15,LN 0,vTy),qTy)))))),
3707                 (LN 4,
3708                  MB(Call
3709                       ("mem1",ATy(qTy,PTy(vTy,qTy)),
3710                        Bop(Add,Var("address",F32),LW(3,32))),
3711                     Close
3712                       (vVar"v",
3713                        MB(MB(Call
3714                                ("mem1",ATy(qTy,PTy(vTy,qTy)),
3715                                 Bop(Add,Var("address",F32),LW(2,32))),
3716                              Close
3717                                (vVar"v0",
3718                                 MB(MB(Call
3719                                         ("mem1",ATy(qTy,PTy(vTy,qTy)),
3720                                          Bop(Add,Var("address",F32),
3721                                              LW(1,32))),
3722                                       Close
3723                                         (vVar"v1",
3724                                          MB(MB(Call
3725                                                  ("mem1",
3726                                                   ATy(qTy,PTy(vTy,qTy)),
3727                                                   Bop(Add,
3728                                                       Var("address",F32),
3729                                                       LW(0,32))),
3730                                                Close
3731                                                  (vVar"v2",
3732                                                   MU(CC[vVar"v1",vVar"v2"],
3733                                                      qTy))),
3734                                             Close
3735                                               (vVar"v1",
3736                                                MU(CC[vVar"v0",vVar"v1"],
3737                                                   qTy))))),
3738                                    Close
3739                                      (vVar"v0",
3740                                       MU(CC[vVar"v",vVar"v0"],qTy))))),
3741                           Close
3742                             (vVar"v",MU(EX(vVar"v",LN 31,LN 0,vTy),qTy)))))),
3743                 (LN 8,
3744                  MB(Call
3745                       ("mem1",ATy(qTy,PTy(vTy,qTy)),
3746                        Bop(Add,Var("address",F32),LW(7,32))),
3747                     Close
3748                       (vVar"v",
3749                        MB(MB(Call
3750                                ("mem1",ATy(qTy,PTy(vTy,qTy)),
3751                                 Bop(Add,Var("address",F32),LW(6,32))),
3752                              Close
3753                                (vVar"v0",
3754                                 MB(MB(Call
3755                                         ("mem1",ATy(qTy,PTy(vTy,qTy)),
3756                                          Bop(Add,Var("address",F32),
3757                                              LW(5,32))),
3758                                       Close
3759                                         (vVar"v1",
3760                                          MB(MB(Call
3761                                                  ("mem1",
3762                                                   ATy(qTy,PTy(vTy,qTy)),
3763                                                   Bop(Add,
3764                                                       Var("address",F32),
3765                                                       LW(4,32))),
3766                                                Close
3767                                                  (vVar"v2",
3768                                                   MB(MB(Call
3769                                                           ("mem1",
3770                                                            ATy(qTy,
3771                                                                PTy(vTy,
3772                                                                    qTy)),
3773                                                            Bop(Add,
3774                                                                Var("address",
3775                                                                    F32),
3776                                                                LW(3,32))),
3777                                                         Close
3778                                                           (vVar"v3",
3779                                                            MB(MB(Call
3780                                                                    ("mem1",
3781                                                                     ATy(qTy,
3782                                                                         PTy(vTy,
3783                                                                             qTy)),
3784                                                                     Bop(Add,
3785                                                                         Var("address",
3786                                                                             F32),
3787                                                                         LW(2,
3788                                                                            32))),
3789                                                                  Close
3790                                                                    (vVar"v4",
3791                                                                     MB(MB(Call
3792                                                                             ("mem1",
3793                                                                              ATy(qTy,
3794                                                                                  PTy(vTy,
3795                                                                                      qTy)),
3796                                                                              Bop(Add,
3797                                                                                  Var("address",
3798                                                                                      F32),
3799                                                                                  LW(1,
3800                                                                                     32))),
3801                                                                           Close
3802                                                                             (vVar"v5",
3803                                                                              MB(MB(Call
3804                                                                                      ("mem1",
3805                                                                                       ATy(qTy,
3806                                                                                           PTy(vTy,
3807                                                                                               qTy)),
3808                                                                                       Bop(Add,
3809                                                                                           Var("address",
3810                                                                                               F32),
3811                                                                                           LW(0,
3812                                                                                              32))),
3813                                                                                    Close
3814                                                                                      (vVar"v6",
3815                                                                                       MU(CC[vVar"v5",
3816                                                                                             vVar"v6"],
3817                                                                                          qTy))),
3818                                                                                 Close
3819                                                                                   (vVar"v5",
3820                                                                                    MU(CC[vVar"v4",
3821                                                                                          vVar"v5"],
3822                                                                                       qTy))))),
3823                                                                        Close
3824                                                                          (vVar"v4",
3825                                                                           MU(CC[vVar"v3",
3826                                                                                 vVar"v4"],
3827                                                                              qTy))))),
3828                                                               Close
3829                                                                 (vVar"v3",
3830                                                                  MU(CC[vVar"v2",
3831                                                                        vVar"v3"],
3832                                                                     qTy))))),
3833                                                      Close
3834                                                        (vVar"v2",
3835                                                         MU(CC[vVar"v1",
3836                                                               vVar"v2"],
3837                                                            qTy))))),
3838                                             Close
3839                                               (vVar"v1",
3840                                                MU(CC[vVar"v0",vVar"v1"],
3841                                                   qTy))))),
3842                                    Close
3843                                      (vVar"v0",
3844                                       MU(CC[vVar"v",vVar"v0"],qTy))))),
3845                           Close
3846                             (vVar"v",MU(EX(vVar"v",LN 63,LN 0,vTy),qTy)))))),
3847                 (AVar nTy,
3848                  Call
3849                    ("raise'exception",ATy(qTy,PTy(vTy,qTy)),
3850                     Call
3851                       ("ASSERT",CTy"exception",
3852                        LS"mem: size in {1, 2, 4, 8}")))])))))
3853;
3854val write'mem_def = Def
3855  ("write'mem",TP[vVar"value",Var("address",F32),nVar"size"],
3856   MB(MR(Close(qVar"s",Dest("data_abort",bTy,qVar"s"))),
3857      Close
3858        (bVar"v",
3859         MB(MU(Mop(Not,bVar"v"),qTy),
3860            Close
3861              (bVar"b",
3862               ITE(bVar"b",
3863                   CS(nVar"size",
3864                      [(LN 1,
3865                        MB(MR(Close
3866                                (qVar"s",Dest("MEM",ATy(F32,F8),qVar"s"))),
3867                           Close
3868                             (Var("v",ATy(F32,F8)),
3869                              MB(MU(Fupd
3870                                      (Var("v",ATy(F32,F8)),
3871                                       Bop(Add,Var("address",F32),LW(0,32)),
3872                                       Mop(Cast F8,
3873                                           EX(vVar"value",LN 7,LN 0,vTy))),
3874                                    qTy),
3875                                 Close
3876                                   (Var("v",ATy(F32,F8)),
3877                                    MW(Close
3878                                         (qVar"s",
3879                                          Rupd
3880                                            ("MEM",
3881                                             TP[qVar"s",
3882                                                Var("v",ATy(F32,F8))])))))))),
3883                       (LN 2,
3884                        MB(MB(MR(Close
3885                                   (qVar"s",
3886                                    Dest("MEM",ATy(F32,F8),qVar"s"))),
3887                              Close
3888                                (Var("v",ATy(F32,F8)),
3889                                 MB(MU(Fupd
3890                                         (Var("v",ATy(F32,F8)),
3891                                          Bop(Add,Var("address",F32),
3892                                              LW(0,32)),
3893                                          Mop(Cast F8,
3894                                              EX(vVar"value",LN 7,LN 0,vTy))),
3895                                       qTy),
3896                                    Close
3897                                      (Var("v",ATy(F32,F8)),
3898                                       MW(Close
3899                                            (qVar"s",
3900                                             Rupd
3901                                               ("MEM",
3902                                                TP[qVar"s",
3903                                                   Var("v",ATy(F32,F8))]))))))),
3904                           Close
3905                             (AVar uTy,
3906                              MB(MR(Close
3907                                      (qVar"s",
3908                                       Dest("MEM",ATy(F32,F8),qVar"s"))),
3909                                 Close
3910                                   (Var("v",ATy(F32,F8)),
3911                                    MB(MU(Fupd
3912                                            (Var("v",ATy(F32,F8)),
3913                                             Bop(Add,Var("address",F32),
3914                                                 LW(1,32)),
3915                                             Mop(Cast F8,
3916                                                 EX(vVar"value",LN 15,
3917                                                    LN 8,vTy))),qTy),
3918                                       Close
3919                                         (Var("v",ATy(F32,F8)),
3920                                          MW(Close
3921                                               (qVar"s",
3922                                                Rupd
3923                                                  ("MEM",
3924                                                   TP[qVar"s",
3925                                                      Var("v",ATy(F32,F8))])))))))))),
3926                       (LN 4,
3927                        MB(MB(MR(Close
3928                                   (qVar"s",
3929                                    Dest("MEM",ATy(F32,F8),qVar"s"))),
3930                              Close
3931                                (Var("v",ATy(F32,F8)),
3932                                 MB(MU(Fupd
3933                                         (Var("v",ATy(F32,F8)),
3934                                          Bop(Add,Var("address",F32),
3935                                              LW(0,32)),
3936                                          Mop(Cast F8,
3937                                              EX(vVar"value",LN 7,LN 0,vTy))),
3938                                       qTy),
3939                                    Close
3940                                      (Var("v",ATy(F32,F8)),
3941                                       MW(Close
3942                                            (qVar"s",
3943                                             Rupd
3944                                               ("MEM",
3945                                                TP[qVar"s",
3946                                                   Var("v",ATy(F32,F8))]))))))),
3947                           Close
3948                             (AVar uTy,
3949                              MB(MB(MR(Close
3950                                         (qVar"s",
3951                                          Dest("MEM",ATy(F32,F8),qVar"s"))),
3952                                    Close
3953                                      (Var("v",ATy(F32,F8)),
3954                                       MB(MU(Fupd
3955                                               (Var("v",ATy(F32,F8)),
3956                                                Bop(Add,
3957                                                    Var("address",F32),
3958                                                    LW(1,32)),
3959                                                Mop(Cast F8,
3960                                                    EX(vVar"value",LN 15,
3961                                                       LN 8,vTy))),qTy),
3962                                          Close
3963                                            (Var("v",ATy(F32,F8)),
3964                                             MW(Close
3965                                                  (qVar"s",
3966                                                   Rupd
3967                                                     ("MEM",
3968                                                      TP[qVar"s",
3969                                                         Var("v",
3970                                                             ATy(F32,F8))]))))))),
3971                                 Close
3972                                   (AVar uTy,
3973                                    MB(MB(MR(Close
3974                                               (qVar"s",
3975                                                Dest
3976                                                  ("MEM",ATy(F32,F8),
3977                                                   qVar"s"))),
3978                                          Close
3979                                            (Var("v",ATy(F32,F8)),
3980                                             MB(MU(Fupd
3981                                                     (Var("v",ATy(F32,F8)),
3982                                                      Bop(Add,
3983                                                          Var("address",
3984                                                              F32),
3985                                                          LW(2,32)),
3986                                                      Mop(Cast F8,
3987                                                          EX(vVar"value",
3988                                                             LN 23,LN 16,
3989                                                             vTy))),qTy),
3990                                                Close
3991                                                  (Var("v",ATy(F32,F8)),
3992                                                   MW(Close
3993                                                        (qVar"s",
3994                                                         Rupd
3995                                                           ("MEM",
3996                                                            TP[qVar"s",
3997                                                               Var("v",
3998                                                                   ATy(F32,
3999                                                                       F8))]))))))),
4000                                       Close
4001                                         (AVar uTy,
4002                                          MB(MR(Close
4003                                                  (qVar"s",
4004                                                   Dest
4005                                                     ("MEM",ATy(F32,F8),
4006                                                      qVar"s"))),
4007                                             Close
4008                                               (Var("v",ATy(F32,F8)),
4009                                                MB(MU(Fupd
4010                                                        (Var("v",
4011                                                             ATy(F32,F8)),
4012                                                         Bop(Add,
4013                                                             Var("address",
4014                                                                 F32),
4015                                                             LW(3,32)),
4016                                                         Mop(Cast F8,
4017                                                             EX(vVar"value",
4018                                                                LN 31,
4019                                                                LN 24,vTy))),
4020                                                      qTy),
4021                                                   Close
4022                                                     (Var("v",ATy(F32,F8)),
4023                                                      MW(Close
4024                                                           (qVar"s",
4025                                                            Rupd
4026                                                              ("MEM",
4027                                                               TP[qVar"s",
4028                                                                  Var("v",
4029                                                                      ATy(F32,
4030                                                                          F8))])))))))))))))),
4031                       (LN 8,
4032                        MB(MB(MR(Close
4033                                   (qVar"s",
4034                                    Dest("MEM",ATy(F32,F8),qVar"s"))),
4035                              Close
4036                                (Var("v",ATy(F32,F8)),
4037                                 MB(MU(Fupd
4038                                         (Var("v",ATy(F32,F8)),
4039                                          Bop(Add,Var("address",F32),
4040                                              LW(0,32)),
4041                                          Mop(Cast F8,
4042                                              EX(vVar"value",LN 7,LN 0,vTy))),
4043                                       qTy),
4044                                    Close
4045                                      (Var("v",ATy(F32,F8)),
4046                                       MW(Close
4047                                            (qVar"s",
4048                                             Rupd
4049                                               ("MEM",
4050                                                TP[qVar"s",
4051                                                   Var("v",ATy(F32,F8))]))))))),
4052                           Close
4053                             (AVar uTy,
4054                              MB(MB(MR(Close
4055                                         (qVar"s",
4056                                          Dest("MEM",ATy(F32,F8),qVar"s"))),
4057                                    Close
4058                                      (Var("v",ATy(F32,F8)),
4059                                       MB(MU(Fupd
4060                                               (Var("v",ATy(F32,F8)),
4061                                                Bop(Add,
4062                                                    Var("address",F32),
4063                                                    LW(1,32)),
4064                                                Mop(Cast F8,
4065                                                    EX(vVar"value",LN 15,
4066                                                       LN 8,vTy))),qTy),
4067                                          Close
4068                                            (Var("v",ATy(F32,F8)),
4069                                             MW(Close
4070                                                  (qVar"s",
4071                                                   Rupd
4072                                                     ("MEM",
4073                                                      TP[qVar"s",
4074                                                         Var("v",
4075                                                             ATy(F32,F8))]))))))),
4076                                 Close
4077                                   (AVar uTy,
4078                                    MB(MB(MR(Close
4079                                               (qVar"s",
4080                                                Dest
4081                                                  ("MEM",ATy(F32,F8),
4082                                                   qVar"s"))),
4083                                          Close
4084                                            (Var("v",ATy(F32,F8)),
4085                                             MB(MU(Fupd
4086                                                     (Var("v",ATy(F32,F8)),
4087                                                      Bop(Add,
4088                                                          Var("address",
4089                                                              F32),
4090                                                          LW(2,32)),
4091                                                      Mop(Cast F8,
4092                                                          EX(vVar"value",
4093                                                             LN 23,LN 16,
4094                                                             vTy))),qTy),
4095                                                Close
4096                                                  (Var("v",ATy(F32,F8)),
4097                                                   MW(Close
4098                                                        (qVar"s",
4099                                                         Rupd
4100                                                           ("MEM",
4101                                                            TP[qVar"s",
4102                                                               Var("v",
4103                                                                   ATy(F32,
4104                                                                       F8))]))))))),
4105                                       Close
4106                                         (AVar uTy,
4107                                          MB(MB(MR(Close
4108                                                     (qVar"s",
4109                                                      Dest
4110                                                        ("MEM",
4111                                                         ATy(F32,F8),
4112                                                         qVar"s"))),
4113                                                Close
4114                                                  (Var("v",ATy(F32,F8)),
4115                                                   MB(MU(Fupd
4116                                                           (Var("v",
4117                                                                ATy(F32,F8)),
4118                                                            Bop(Add,
4119                                                                Var("address",
4120                                                                    F32),
4121                                                                LW(3,32)),
4122                                                            Mop(Cast F8,
4123                                                                EX(vVar"value",
4124                                                                   LN 31,
4125                                                                   LN 24,
4126                                                                   vTy))),
4127                                                         qTy),
4128                                                      Close
4129                                                        (Var("v",
4130                                                             ATy(F32,F8)),
4131                                                         MW(Close
4132                                                              (qVar"s",
4133                                                               Rupd
4134                                                                 ("MEM",
4135                                                                  TP[qVar"s",
4136                                                                     Var("v",
4137                                                                         ATy(F32,
4138                                                                             F8))]))))))),
4139                                             Close
4140                                               (AVar uTy,
4141                                                MB(MB(MR(Close
4142                                                           (qVar"s",
4143                                                            Dest
4144                                                              ("MEM",
4145                                                               ATy(F32,F8),
4146                                                               qVar"s"))),
4147                                                      Close
4148                                                        (Var("v",
4149                                                             ATy(F32,F8)),
4150                                                         MB(MU(Fupd
4151                                                                 (Var("v",
4152                                                                      ATy(F32,
4153                                                                          F8)),
4154                                                                  Bop(Add,
4155                                                                      Var("address",
4156                                                                          F32),
4157                                                                      LW(4,
4158                                                                         32)),
4159                                                                  Mop(Cast
4160                                                                        F8,
4161                                                                      EX(vVar"value",
4162                                                                         LN
4163                                                                          39,
4164                                                                         LN
4165                                                                          32,
4166                                                                         vTy))),
4167                                                               qTy),
4168                                                            Close
4169                                                              (Var("v",
4170                                                                   ATy(F32,
4171                                                                       F8)),
4172                                                               MW(Close
4173                                                                    (qVar"s",
4174                                                                     Rupd
4175                                                                       ("MEM",
4176                                                                        TP[qVar"s",
4177                                                                           Var("v",
4178                                                                               ATy(F32,
4179                                                                                   F8))]))))))),
4180                                                   Close
4181                                                     (AVar uTy,
4182                                                      MB(MB(MR(Close
4183                                                                 (qVar"s",
4184                                                                  Dest
4185                                                                    ("MEM",
4186                                                                     ATy(F32,
4187                                                                         F8),
4188                                                                     qVar"s"))),
4189                                                            Close
4190                                                              (Var("v",
4191                                                                   ATy(F32,
4192                                                                       F8)),
4193                                                               MB(MU(Fupd
4194                                                                       (Var("v",
4195                                                                            ATy(F32,
4196                                                                                F8)),
4197                                                                        Bop(Add,
4198                                                                            Var("address",
4199                                                                                F32),
4200                                                                            LW(5,
4201                                                                               32)),
4202                                                                        Mop(Cast
4203                                                                              F8,
4204                                                                            EX(vVar"value",
4205                                                                               LN
4206                                                                                47,
4207                                                                               LN
4208                                                                                40,
4209                                                                               vTy))),
4210                                                                     qTy),
4211                                                                  Close
4212                                                                    (Var("v",
4213                                                                         ATy(F32,
4214                                                                             F8)),
4215                                                                     MW(Close
4216                                                                          (qVar"s",
4217                                                                           Rupd
4218                                                                             ("MEM",
4219                                                                              TP[qVar"s",
4220                                                                                 Var("v",
4221                                                                                     ATy(F32,
4222                                                                                         F8))]))))))),
4223                                                         Close
4224                                                           (AVar uTy,
4225                                                            MB(MB(MR(Close
4226                                                                       (qVar"s",
4227                                                                        Dest
4228                                                                          ("MEM",
4229                                                                           ATy(F32,
4230                                                                               F8),
4231                                                                           qVar"s"))),
4232                                                                  Close
4233                                                                    (Var("v",
4234                                                                         ATy(F32,
4235                                                                             F8)),
4236                                                                     MB(MU(Fupd
4237                                                                             (Var("v",
4238                                                                                  ATy(F32,
4239                                                                                      F8)),
4240                                                                              Bop(Add,
4241                                                                                  Var("address",
4242                                                                                      F32),
4243                                                                                  LW(6,
4244                                                                                     32)),
4245                                                                              Mop(Cast
4246                                                                                    F8,
4247                                                                                  EX(vVar"value",
4248                                                                                     LN
4249                                                                                      55,
4250                                                                                     LN
4251                                                                                      48,
4252                                                                                     vTy))),
4253                                                                           qTy),
4254                                                                        Close
4255                                                                          (Var("v",
4256                                                                               ATy(F32,
4257                                                                                   F8)),
4258                                                                           MW(Close
4259                                                                                (qVar"s",
4260                                                                                 Rupd
4261                                                                                   ("MEM",
4262                                                                                    TP[qVar"s",
4263                                                                                       Var("v",
4264                                                                                           ATy(F32,
4265                                                                                               F8))]))))))),
4266                                                               Close
4267                                                                 (AVar uTy,
4268                                                                  MB(MR(Close
4269                                                                          (qVar"s",
4270                                                                           Dest
4271                                                                             ("MEM",
4272                                                                              ATy(F32,
4273                                                                                  F8),
4274                                                                              qVar"s"))),
4275                                                                     Close
4276                                                                       (Var("v",
4277                                                                            ATy(F32,
4278                                                                                F8)),
4279                                                                        MB(MU(Fupd
4280                                                                                (Var("v",
4281                                                                                     ATy(F32,
4282                                                                                         F8)),
4283                                                                                 Bop(Add,
4284                                                                                     Var("address",
4285                                                                                         F32),
4286                                                                                     LW(7,
4287                                                                                        32)),
4288                                                                                 Mop(Cast
4289                                                                                       F8,
4290                                                                                     EX(vVar"value",
4291                                                                                        LN
4292                                                                                         63,
4293                                                                                        LN
4294                                                                                         56,
4295                                                                                        vTy))),
4296                                                                              qTy),
4297                                                                           Close
4298                                                                             (Var("v",
4299                                                                                  ATy(F32,
4300                                                                                      F8)),
4301                                                                              MW(Close
4302                                                                                   (qVar"s",
4303                                                                                    Rupd
4304                                                                                      ("MEM",
4305                                                                                       TP[qVar"s",
4306                                                                                          Var("v",
4307                                                                                              ATy(F32,
4308                                                                                                  F8))])))))))))))))))))))))),
4309                       (AVar nTy,
4310                        Call
4311                          ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
4312                           Call
4313                             ("ASSERT",CTy"exception",
4314                              LS"mem: size in {1, 2, 4, 8}")))]),
4315                   MU(LU,qTy)))))))
4316;
4317val BigEndianReverse_def = Def
4318  ("BigEndianReverse",TP[vVar"value",nVar"n"],
4319   CS(nVar"n",
4320      [(LN 1,MU(EX(vVar"value",LN 7,LN 0,vTy),qTy)),
4321       (LN 2,
4322        MU(CC[EX(vVar"value",LN 7,LN 0,vTy),EX(vVar"value",LN 15,LN 8,vTy)],
4323           qTy)),
4324       (LN 4,
4325        MU(CC[EX(vVar"value",LN 7,LN 0,vTy),
4326              EX(vVar"value",LN 15,LN 8,vTy),
4327              EX(vVar"value",LN 23,LN 16,vTy),
4328              EX(vVar"value",LN 31,LN 24,vTy)],qTy)),
4329       (LN 8,
4330        MU(CC[EX(vVar"value",LN 7,LN 0,vTy),
4331              EX(vVar"value",LN 15,LN 8,vTy),
4332              EX(vVar"value",LN 23,LN 16,vTy),
4333              EX(vVar"value",LN 31,LN 24,vTy),
4334              EX(vVar"value",LN 39,LN 32,vTy),
4335              EX(vVar"value",LN 47,LN 40,vTy),
4336              EX(vVar"value",LN 55,LN 48,vTy),
4337              EX(vVar"value",LN 63,LN 56,vTy)],qTy)),
4338       (AVar nTy,
4339        Call
4340          ("raise'exception",ATy(qTy,PTy(vTy,qTy)),
4341           Call
4342             ("ASSERT",CTy"exception",
4343              LS"BigEndianReverse: n in {1, 2, 4, 8}")))]))
4344;
4345val Align_def = Def
4346  ("Align",TP[Var("w",BTy"N"),nVar"n"],
4347   Mop(Cast(BTy"N"),
4348       Bop(Mul,nVar"n",Bop(Div,Mop(Cast nTy,Var("w",BTy"N")),nVar"n"))))
4349;
4350val Aligned_def = Def
4351  ("Aligned",TP[Var("w",BTy"N"),nVar"n"],
4352   EQ(Var("w",BTy"N"),Call("Align",BTy"N",TP[Var("w",BTy"N"),nVar"n"])))
4353;
4354val AlignmentFault_def = Def
4355  ("AlignmentFault",Var("address",F32),
4356   MW(Close(qVar"s",Rupd("data_abort",TP[qVar"s",LT]))))
4357;
4358val MemA_with_priv_def = Def
4359  ("MemA_with_priv",TP[Var("address",F32),nVar"size",bVar"privileged"],
4360   MN(LX F32,
4361      MB(ITE(Call("Aligned",bTy,TP[Var("address",F32),nVar"size"]),
4362             MW(Close
4363                  (Var("s",PTy(F32,qTy)),
4364                   TP[Var("address",F32),Mop(Snd,Var("s",PTy(F32,qTy)))])),
4365             MB(MR(Close
4366                     (Var("s",PTy(F32,qTy)),
4367                      Dest
4368                        ("CP15",CTy"CP15",Mop(Snd,Var("s",PTy(F32,qTy)))))),
4369                Close
4370                  (Var("v",CTy"CP15"),
4371                   MB(MB(MB(MU(Dest("SCTLR",CTy"SCTLR",Var("v",CTy"CP15")),
4372                               PTy(F32,qTy)),
4373                            Close
4374                              (Var("v",CTy"SCTLR"),
4375                               MU(Dest("A",bTy,Var("v",CTy"SCTLR")),
4376                                  PTy(F32,qTy)))),
4377                         Close
4378                           (bVar"b",
4379                            ITE(bVar"b",MU(LT,PTy(F32,qTy)),
4380                                MB(MR(Close
4381                                        (Var("s",PTy(F32,qTy)),
4382                                         Dest
4383                                           ("CP15",CTy"CP15",
4384                                            Mop(Snd,Var("s",PTy(F32,qTy)))))),
4385                                   Close
4386                                     (Var("v",CTy"CP15"),
4387                                      MB(MU(Dest
4388                                              ("SCTLR",CTy"SCTLR",
4389                                               Var("v",CTy"CP15")),
4390                                            PTy(F32,qTy)),
4391                                         Close
4392                                           (Var("v",CTy"SCTLR"),
4393                                            MU(Dest
4394                                                 ("U",bTy,
4395                                                  Var("v",CTy"SCTLR")),
4396                                               PTy(F32,qTy))))))))),
4397                      Close
4398                        (bVar"b",
4399                         ITE(bVar"b",
4400                             MD(Call
4401                                  ("AlignmentFault",ATy(qTy,PTy(uTy,qTy)),
4402                                   Var("address",F32)),F32),
4403                             MW(Close
4404                                  (Var("s",PTy(F32,qTy)),
4405                                   TP[Call
4406                                        ("Align",F32,
4407                                         TP[Var("address",F32),nVar"size"]),
4408                                      Mop(Snd,Var("s",PTy(F32,qTy)))])))))))),
4409         Close
4410           (AVar uTy,
4411            MB(MR(Close
4412                    (Var("s",PTy(F32,qTy)),Mop(Fst,Var("s",PTy(F32,qTy))))),
4413               Close
4414                 (Var("v",F32),
4415                  MB(MB(MU(TP[Var("v",F32),bVar"privileged",LF,nVar"size"],
4416                           PTy(F32,qTy)),
4417                        Close
4418                          (Var("v",PTy(F32,PTy(bTy,PTy(bTy,nTy)))),
4419                           MD(Call
4420                                ("TranslateAddress",ATy(qTy,PTy(F32,qTy)),
4421                                 Var("v",PTy(F32,PTy(bTy,PTy(bTy,nTy))))),
4422                              F32))),
4423                     Close
4424                       (Var("memaddrdesc",F32),
4425                        MB(MD(Call
4426                                ("mem",ATy(qTy,PTy(vTy,qTy)),
4427                                 TP[Var("memaddrdesc",F32),nVar"size"]),
4428                              F32),
4429                           Close
4430                             (vVar"v",
4431                              MN(vVar"v",
4432                                 MB(MR(Close
4433                                         (Var("s",PTy(vTy,PTy(F32,qTy))),
4434                                          Dest
4435                                            ("isfetch",bTy,
4436                                             Mop(Snd,
4437                                                 Mop(Snd,
4438                                                     Var("s",
4439                                                         PTy(vTy,
4440                                                             PTy(F32,qTy)))))))),
4441                                    Close
4442                                      (bVar"v",
4443                                       MB(ITE(bVar"v",
4444                                              MB(MR(Close
4445                                                      (Var("s",
4446                                                           PTy(vTy,
4447                                                               PTy(F32,qTy))),
4448                                                       Dest
4449                                                         ("CP15",
4450                                                          CTy"CP15",
4451                                                          Mop(Snd,
4452                                                              Mop(Snd,
4453                                                                  Var("s",
4454                                                                      PTy(vTy,
4455                                                                          PTy(F32,
4456                                                                              qTy)))))))),
4457                                                 Close
4458                                                   (Var("v",CTy"CP15"),
4459                                                    MB(MU(Dest
4460                                                            ("SCTLR",
4461                                                             CTy"SCTLR",
4462                                                             Var("v",
4463                                                                 CTy"CP15")),
4464                                                          PTy(vTy,
4465                                                              PTy(F32,qTy))),
4466                                                       Close
4467                                                         (Var("v",
4468                                                              CTy"SCTLR"),
4469                                                          MU(Dest
4470                                                               ("IE",bTy,
4471                                                                Var("v",
4472                                                                    CTy"SCTLR")),
4473                                                             PTy(vTy,
4474                                                                 PTy(F32,
4475                                                                     qTy))))))),
4476                                              MB(MR(Close
4477                                                      (Var("s",
4478                                                           PTy(vTy,
4479                                                               PTy(F32,qTy))),
4480                                                       Dest
4481                                                         ("CPSR",CTy"PSR",
4482                                                          Mop(Snd,
4483                                                              Mop(Snd,
4484                                                                  Var("s",
4485                                                                      PTy(vTy,
4486                                                                          PTy(F32,
4487                                                                              qTy)))))))),
4488                                                 Close
4489                                                   (Var("v",CTy"PSR"),
4490                                                    MU(Dest
4491                                                         ("E",bTy,
4492                                                          Var("v",CTy"PSR")),
4493                                                       PTy(vTy,
4494                                                           PTy(F32,qTy)))))),
4495                                          Close
4496                                            (bVar"bigend",
4497                                             MB(ITE(bVar"bigend",
4498                                                    MB(MR(Close
4499                                                            (Var("s",
4500                                                                 PTy(vTy,
4501                                                                     PTy(F32,
4502                                                                         qTy))),
4503                                                             Mop(Fst,
4504                                                                 Var("s",
4505                                                                     PTy(vTy,
4506                                                                         PTy(F32,
4507                                                                             qTy)))))),
4508                                                       Close
4509                                                         (vVar"v",
4510                                                          MB(MB(MU(TP[vVar"v",
4511                                                                      nVar"size"],
4512                                                                   PTy(vTy,
4513                                                                       PTy(F32,
4514                                                                           qTy))),
4515                                                                Close
4516                                                                  (Var("v",
4517                                                                       PTy(vTy,
4518                                                                           nTy)),
4519                                                                   MD(MD(Call
4520                                                                           ("BigEndianReverse",
4521                                                                            ATy(qTy,
4522                                                                                PTy(vTy,
4523                                                                                    qTy)),
4524                                                                            Var("v",
4525                                                                                PTy(vTy,
4526                                                                                    nTy))),
4527                                                                         F32),
4528                                                                      vTy))),
4529                                                             Close
4530                                                               (vVar"v",
4531                                                                MW(Close
4532                                                                     (Var("s",
4533                                                                          PTy(vTy,
4534                                                                              PTy(F32,
4535                                                                                  qTy))),
4536                                                                      TP[vVar"v",
4537                                                                         Mop(Snd,
4538                                                                             Var("s",
4539                                                                                 PTy(vTy,
4540                                                                                     PTy(F32,
4541                                                                                         qTy))))])))))),
4542                                                    MU(LU,
4543                                                       PTy(vTy,
4544                                                           PTy(F32,qTy)))),
4545                                                Close
4546                                                  (AVar uTy,
4547                                                   MB(MR(Close
4548                                                           (Var("s",
4549                                                                PTy(vTy,
4550                                                                    PTy(F32,
4551                                                                        qTy))),
4552                                                            Mop(Fst,
4553                                                                Var("s",
4554                                                                    PTy(vTy,
4555                                                                        PTy(F32,
4556                                                                            qTy)))))),
4557                                                      Close
4558                                                        (vVar"v",
4559                                                         MU(Mop(Cast
4560                                                                  (BTy"N"),
4561                                                                vVar"v"),
4562                                                            PTy(vTy,
4563                                                                PTy(F32,
4564                                                                    qTy))))))))))))))))))))))
4565;
4566val write'MemA_with_priv_def = Def
4567  ("write'MemA_with_priv",
4568   TP[Var("value",BTy"N"),Var("address",F32),nVar"size",bVar"privileged"],
4569   MN(LX F32,
4570      MB(ITE(Call("Aligned",bTy,TP[Var("address",F32),nVar"size"]),
4571             MW(Close
4572                  (Var("s",PTy(F32,qTy)),
4573                   TP[Var("address",F32),Mop(Snd,Var("s",PTy(F32,qTy)))])),
4574             MB(MR(Close
4575                     (Var("s",PTy(F32,qTy)),
4576                      Dest
4577                        ("CP15",CTy"CP15",Mop(Snd,Var("s",PTy(F32,qTy)))))),
4578                Close
4579                  (Var("v",CTy"CP15"),
4580                   MB(MB(MB(MU(Dest("SCTLR",CTy"SCTLR",Var("v",CTy"CP15")),
4581                               PTy(F32,qTy)),
4582                            Close
4583                              (Var("v",CTy"SCTLR"),
4584                               MU(Dest("A",bTy,Var("v",CTy"SCTLR")),
4585                                  PTy(F32,qTy)))),
4586                         Close
4587                           (bVar"b",
4588                            ITE(bVar"b",MU(LT,PTy(F32,qTy)),
4589                                MB(MR(Close
4590                                        (Var("s",PTy(F32,qTy)),
4591                                         Dest
4592                                           ("CP15",CTy"CP15",
4593                                            Mop(Snd,Var("s",PTy(F32,qTy)))))),
4594                                   Close
4595                                     (Var("v",CTy"CP15"),
4596                                      MB(MU(Dest
4597                                              ("SCTLR",CTy"SCTLR",
4598                                               Var("v",CTy"CP15")),
4599                                            PTy(F32,qTy)),
4600                                         Close
4601                                           (Var("v",CTy"SCTLR"),
4602                                            MU(Dest
4603                                                 ("U",bTy,
4604                                                  Var("v",CTy"SCTLR")),
4605                                               PTy(F32,qTy))))))))),
4606                      Close
4607                        (bVar"b",
4608                         ITE(bVar"b",
4609                             MD(Call
4610                                  ("AlignmentFault",ATy(qTy,PTy(uTy,qTy)),
4611                                   Var("address",F32)),F32),
4612                             MW(Close
4613                                  (Var("s",PTy(F32,qTy)),
4614                                   TP[Call
4615                                        ("Align",F32,
4616                                         TP[Var("address",F32),nVar"size"]),
4617                                      Mop(Snd,Var("s",PTy(F32,qTy)))])))))))),
4618         Close
4619           (AVar uTy,
4620            MB(MR(Close
4621                    (Var("s",PTy(F32,qTy)),Mop(Fst,Var("s",PTy(F32,qTy))))),
4622               Close
4623                 (Var("v",F32),
4624                  MB(MB(MU(TP[Var("v",F32),bVar"privileged",LT,nVar"size"],
4625                           PTy(F32,qTy)),
4626                        Close
4627                          (Var("v",PTy(F32,PTy(bTy,PTy(bTy,nTy)))),
4628                           MD(Call
4629                                ("TranslateAddress",ATy(qTy,PTy(F32,qTy)),
4630                                 Var("v",PTy(F32,PTy(bTy,PTy(bTy,nTy))))),
4631                              F32))),
4632                     Close
4633                       (Var("memaddrdesc",F32),
4634                        MB(MR(Close
4635                                (Var("s",PTy(F32,qTy)),
4636                                 Dest
4637                                   ("isfetch",bTy,
4638                                    Mop(Snd,Var("s",PTy(F32,qTy)))))),
4639                           Close
4640                             (bVar"v",
4641                              MB(ITE(bVar"v",
4642                                     MB(MR(Close
4643                                             (Var("s",PTy(F32,qTy)),
4644                                              Dest
4645                                                ("CP15",CTy"CP15",
4646                                                 Mop(Snd,
4647                                                     Var("s",PTy(F32,qTy)))))),
4648                                        Close
4649                                          (Var("v",CTy"CP15"),
4650                                           MB(MU(Dest
4651                                                   ("SCTLR",CTy"SCTLR",
4652                                                    Var("v",CTy"CP15")),
4653                                                 PTy(F32,qTy)),
4654                                              Close
4655                                                (Var("v",CTy"SCTLR"),
4656                                                 MU(Dest
4657                                                      ("IE",bTy,
4658                                                       Var("v",CTy"SCTLR")),
4659                                                    PTy(F32,qTy)))))),
4660                                     MB(MR(Close
4661                                             (Var("s",PTy(F32,qTy)),
4662                                              Dest
4663                                                ("CPSR",CTy"PSR",
4664                                                 Mop(Snd,
4665                                                     Var("s",PTy(F32,qTy)))))),
4666                                        Close
4667                                          (Var("v",CTy"PSR"),
4668                                           MU(Dest
4669                                                ("E",bTy,Var("v",CTy"PSR")),
4670                                              PTy(F32,qTy))))),
4671                                 Close
4672                                   (bVar"bigend",
4673                                    MB(ITE(bVar"bigend",
4674                                           MD(Call
4675                                                ("BigEndianReverse",
4676                                                 ATy(qTy,PTy(vTy,qTy)),
4677                                                 TP[Mop(Cast vTy,
4678                                                        Var("value",BTy"N")),
4679                                                    nVar"size"]),F32),
4680                                           MU(Mop(Cast vTy,
4681                                                  Var("value",BTy"N")),
4682                                              PTy(F32,qTy))),
4683                                       Close
4684                                         (vVar"value",
4685                                          MD(Call
4686                                               ("write'mem",
4687                                                ATy(qTy,PTy(uTy,qTy)),
4688                                                TP[vVar"value",
4689                                                   Var("memaddrdesc",F32),
4690                                                   nVar"size"]),F32)))))))))))))))
4691;
4692val MemA_unpriv_def = Def
4693  ("MemA_unpriv",TP[Var("address",F32),nVar"size"],
4694   Call
4695     ("MemA_with_priv",ATy(qTy,PTy(BTy"N",qTy)),
4696      TP[Var("address",F32),nVar"size",LF]))
4697;
4698val write'MemA_unpriv_def = Def
4699  ("write'MemA_unpriv",
4700   TP[Var("value",BTy"N"),Var("address",F32),nVar"size"],
4701   Call
4702     ("write'MemA_with_priv",ATy(qTy,PTy(uTy,qTy)),
4703      TP[Var("value",BTy"N"),Var("address",F32),nVar"size",LF]))
4704;
4705val MemA_def = Def
4706  ("MemA",TP[Var("address",F32),nVar"size"],
4707   MB(Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU),
4708      Close
4709        (bVar"v",
4710         MB(MB(MU(TP[nVar"size",bVar"v"],qTy),
4711               Close
4712                 (Var("v",PTy(nTy,bTy)),
4713                  MU(TP[Var("address",F32),Var("v",PTy(nTy,bTy))],qTy))),
4714            Close
4715              (Var("v",PTy(F32,PTy(nTy,bTy))),
4716               Call
4717                 ("MemA_with_priv",ATy(qTy,PTy(BTy"N",qTy)),
4718                  Var("v",PTy(F32,PTy(nTy,bTy)))))))))
4719;
4720val write'MemA_def = Def
4721  ("write'MemA",TP[Var("value",BTy"N"),Var("address",F32),nVar"size"],
4722   MB(Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU),
4723      Close
4724        (bVar"v",
4725         MB(MB(MU(TP[nVar"size",bVar"v"],qTy),
4726               Close
4727                 (Var("v",PTy(nTy,bTy)),
4728                  MU(TP[Var("address",F32),Var("v",PTy(nTy,bTy))],qTy))),
4729            Close
4730              (Var("x",PTy(F32,PTy(nTy,bTy))),
4731               Call
4732                 ("write'MemA_with_priv",ATy(qTy,PTy(uTy,qTy)),
4733                  TP[Var("value",BTy"N"),Var("x",PTy(F32,PTy(nTy,bTy)))]))))))
4734;
4735val MemU_with_priv_def = Def
4736  ("MemU_with_priv",TP[Var("address",F32),nVar"size",bVar"privileged"],
4737   MN(Bop(Rep,LV"0",LN 64),
4738      MB(MR(Close
4739              (Var("s",PTy(vTy,qTy)),
4740               Dest("CP15",CTy"CP15",Mop(Snd,Var("s",PTy(vTy,qTy)))))),
4741         Close
4742           (Var("v",CTy"CP15"),
4743            MB(MB(MB(MB(MB(MU(Dest("SCTLR",CTy"SCTLR",Var("v",CTy"CP15")),
4744                              PTy(vTy,qTy)),
4745                           Close
4746                             (Var("v",CTy"SCTLR"),
4747                              MU(Dest("A",bTy,Var("v",CTy"SCTLR")),
4748                                 PTy(vTy,qTy)))),
4749                        Close(bVar"v",MU(Mop(Not,bVar"v"),PTy(vTy,qTy)))),
4750                     Close
4751                       (bVar"b",
4752                        ITE(bVar"b",
4753                            MB(MR(Close
4754                                    (Var("s",PTy(vTy,qTy)),
4755                                     Dest
4756                                       ("CP15",CTy"CP15",
4757                                        Mop(Snd,Var("s",PTy(vTy,qTy)))))),
4758                               Close
4759                                 (Var("v",CTy"CP15"),
4760                                  MB(MB(MU(Dest
4761                                             ("SCTLR",CTy"SCTLR",
4762                                              Var("v",CTy"CP15")),
4763                                           PTy(vTy,qTy)),
4764                                        Close
4765                                          (Var("v",CTy"SCTLR"),
4766                                           MU(Dest
4767                                                ("U",bTy,
4768                                                 Var("v",CTy"SCTLR")),
4769                                              PTy(vTy,qTy)))),
4770                                     Close
4771                                       (bVar"v",
4772                                        MU(Mop(Not,bVar"v"),PTy(vTy,qTy)))))),
4773                            MU(LF,PTy(vTy,qTy))))),
4774                  Close
4775                    (bVar"b",
4776                     MU(ITE(bVar"b",
4777                            Call
4778                              ("Align",F32,
4779                               TP[Var("address",F32),nVar"size"]),
4780                            Var("address",F32)),PTy(vTy,qTy)))),
4781               Close
4782                 (Var("VA",F32),
4783                  MB(ITE(Call("Aligned",bTy,TP[Var("VA",F32),nVar"size"]),
4784                         MB(MD(Call
4785                                 ("MemA_with_priv",
4786                                  ATy(qTy,PTy(BTy"N",qTy)),
4787                                  TP[Var("VA",F32),nVar"size",
4788                                     bVar"privileged"]),vTy),
4789                            Close
4790                              (Var("v",BTy"N"),
4791                               MB(MU(Mop(Cast vTy,Var("v",BTy"N")),
4792                                     PTy(vTy,qTy)),
4793                                  Close
4794                                    (vVar"v",
4795                                     MW(Close
4796                                          (Var("s",PTy(vTy,qTy)),
4797                                           TP[vVar"v",
4798                                              Mop(Snd,
4799                                                  Var("s",PTy(vTy,qTy)))])))))),
4800                         MB(MR(Close
4801                                 (Var("s",PTy(vTy,qTy)),
4802                                  Dest
4803                                    ("CP15",CTy"CP15",
4804                                     Mop(Snd,Var("s",PTy(vTy,qTy)))))),
4805                            Close
4806                              (Var("v",CTy"CP15"),
4807                               MB(MB(MU(Dest
4808                                          ("SCTLR",CTy"SCTLR",
4809                                           Var("v",CTy"CP15")),
4810                                        PTy(vTy,qTy)),
4811                                     Close
4812                                       (Var("v",CTy"SCTLR"),
4813                                        MU(Dest
4814                                             ("A",bTy,Var("v",CTy"SCTLR")),
4815                                           PTy(vTy,qTy)))),
4816                                  Close
4817                                    (bVar"b",
4818                                     ITE(bVar"b",
4819                                         MB(MW(Close
4820                                                 (Var("s",PTy(vTy,qTy)),
4821                                                  TP[LX vTy,
4822                                                     Mop(Snd,
4823                                                         Var("s",
4824                                                             PTy(vTy,qTy)))])),
4825                                            Close
4826                                              (AVar uTy,
4827                                               MD(Call
4828                                                    ("AlignmentFault",
4829                                                     ATy(qTy,PTy(uTy,qTy)),
4830                                                     Var("address",F32)),
4831                                                  vTy))),
4832                                         MB(For(TP[LN 0,
4833                                                   Bop(Sub,nVar"size",LN 1),
4834                                                   Close
4835                                                     (nVar"i",
4836                                                      MB(MR(Close
4837                                                              (Var("s",
4838                                                                   PTy(vTy,
4839                                                                       qTy)),
4840                                                               Mop(Fst,
4841                                                                   Var("s",
4842                                                                       PTy(vTy,
4843                                                                           qTy))))),
4844                                                         Close
4845                                                           (vVar"v",
4846                                                            MB(MB(MD(Call
4847                                                                       ("MemA_with_priv",
4848                                                                        ATy(qTy,
4849                                                                            PTy(F8,
4850                                                                                qTy)),
4851                                                                        TP[Bop(Add,
4852                                                                               Var("VA",
4853                                                                                   F32),
4854                                                                               Mop(Cast
4855                                                                                     F32,
4856                                                                                   nVar"i")),
4857                                                                           LN
4858                                                                            1,
4859                                                                           bVar"privileged"]),
4860                                                                     vTy),
4861                                                                  Close
4862                                                                    (Var("v0",
4863                                                                         F8),
4864                                                                     MB(MU(Mop(Cast
4865                                                                                 vTy,
4866                                                                               Var("v0",
4867                                                                                   F8)),
4868                                                                           PTy(vTy,
4869                                                                               qTy)),
4870                                                                        Close
4871                                                                          (vVar"v0",
4872                                                                           MU(BFI(Bop(Add,
4873                                                                                      Bop(Mul,
4874                                                                                          LN
4875                                                                                           8,
4876                                                                                          nVar"i"),
4877                                                                                      LN
4878                                                                                       7),
4879                                                                                  Bop(Mul,
4880                                                                                      LN
4881                                                                                       8,
4882                                                                                      nVar"i"),
4883                                                                                  vVar"v0",
4884                                                                                  vVar"v"),
4885                                                                              PTy(vTy,
4886                                                                                  qTy)))))),
4887                                                               Close
4888                                                                 (vVar"v",
4889                                                                  MW(Close
4890                                                                       (Var("s",
4891                                                                            PTy(vTy,
4892                                                                                qTy)),
4893                                                                        TP[vVar"v",
4894                                                                           Mop(Snd,
4895                                                                               Var("s",
4896                                                                                   PTy(vTy,
4897                                                                                       qTy)))])))))))]),
4898                                            Close
4899                                              (AVar uTy,
4900                                               MB(MR(Close
4901                                                       (Var("s",
4902                                                            PTy(vTy,qTy)),
4903                                                        Dest
4904                                                          ("CPSR",
4905                                                           CTy"PSR",
4906                                                           Mop(Snd,
4907                                                               Var("s",
4908                                                                   PTy(vTy,
4909                                                                       qTy)))))),
4910                                                  Close
4911                                                    (Var("v",CTy"PSR"),
4912                                                     MB(MU(Dest
4913                                                             ("E",bTy,
4914                                                              Var("v",
4915                                                                  CTy"PSR")),
4916                                                           PTy(vTy,qTy)),
4917                                                        Close
4918                                                          (bVar"b",
4919                                                           ITE(bVar"b",
4920                                                               MB(MR(Close
4921                                                                       (Var("s",
4922                                                                            PTy(vTy,
4923                                                                                qTy)),
4924                                                                        Mop(Fst,
4925                                                                            Var("s",
4926                                                                                PTy(vTy,
4927                                                                                    qTy))))),
4928                                                                  Close
4929                                                                    (vVar"v",
4930                                                                     MB(MB(MU(TP[vVar"v",
4931                                                                                 nVar"size"],
4932                                                                              PTy(vTy,
4933                                                                                  qTy)),
4934                                                                           Close
4935                                                                             (Var("v",
4936                                                                                  PTy(vTy,
4937                                                                                      nTy)),
4938                                                                              MD(Call
4939                                                                                   ("BigEndianReverse",
4940                                                                                    ATy(qTy,
4941                                                                                        PTy(vTy,
4942                                                                                            qTy)),
4943                                                                                    Var("v",
4944                                                                                        PTy(vTy,
4945                                                                                            nTy))),
4946                                                                                 vTy))),
4947                                                                        Close
4948                                                                          (vVar"v",
4949                                                                           MW(Close
4950                                                                                (Var("s",
4951                                                                                     PTy(vTy,
4952                                                                                         qTy)),
4953                                                                                 TP[vVar"v",
4954                                                                                    Mop(Snd,
4955                                                                                        Var("s",
4956                                                                                            PTy(vTy,
4957                                                                                                qTy)))])))))),
4958                                                               MU(LU,
4959                                                                  PTy(vTy,
4960                                                                      qTy))))))))))))))),
4961                     Close
4962                       (AVar uTy,
4963                        MB(MR(Close
4964                                (Var("s",PTy(vTy,qTy)),
4965                                 Mop(Fst,Var("s",PTy(vTy,qTy))))),
4966                           Close
4967                             (vVar"v",
4968                              MU(Mop(Cast(BTy"N"),vVar"v"),PTy(vTy,qTy))))))))))))
4969;
4970val write'MemU_with_priv_def = Def
4971  ("write'MemU_with_priv",
4972   TP[Var("value",BTy"N"),Var("address",F32),nVar"size",bVar"privileged"],
4973   MB(MR(Close(qVar"s",Dest("CP15",CTy"CP15",qVar"s"))),
4974      Close
4975        (Var("v",CTy"CP15"),
4976         MB(MB(MB(MB(MB(MU(Dest("SCTLR",CTy"SCTLR",Var("v",CTy"CP15")),qTy),
4977                        Close
4978                          (Var("v",CTy"SCTLR"),
4979                           MU(Dest("A",bTy,Var("v",CTy"SCTLR")),qTy))),
4980                     Close(bVar"v",MU(Mop(Not,bVar"v"),qTy))),
4981                  Close
4982                    (bVar"b",
4983                     ITE(bVar"b",
4984                         MB(MR(Close
4985                                 (qVar"s",Dest("CP15",CTy"CP15",qVar"s"))),
4986                            Close
4987                              (Var("v",CTy"CP15"),
4988                               MB(MB(MU(Dest
4989                                          ("SCTLR",CTy"SCTLR",
4990                                           Var("v",CTy"CP15")),qTy),
4991                                     Close
4992                                       (Var("v",CTy"SCTLR"),
4993                                        MU(Dest
4994                                             ("U",bTy,Var("v",CTy"SCTLR")),
4995                                           qTy))),
4996                                  Close(bVar"v",MU(Mop(Not,bVar"v"),qTy))))),
4997                         MU(LF,qTy)))),
4998               Close
4999                 (bVar"b",
5000                  MU(ITE(bVar"b",
5001                         Call
5002                           ("Align",F32,TP[Var("address",F32),nVar"size"]),
5003                         Var("address",F32)),qTy))),
5004            Close
5005              (Var("VA",F32),
5006               ITE(Call("Aligned",bTy,TP[Var("VA",F32),nVar"size"]),
5007                   Call
5008                     ("write'MemA_with_priv",ATy(qTy,PTy(uTy,qTy)),
5009                      TP[Var("value",BTy"N"),Var("VA",F32),nVar"size",
5010                         bVar"privileged"]),
5011                   MB(MR(Close(qVar"s",Dest("CP15",CTy"CP15",qVar"s"))),
5012                      Close
5013                        (Var("v",CTy"CP15"),
5014                         MB(MB(MU(Dest
5015                                    ("SCTLR",CTy"SCTLR",Var("v",CTy"CP15")),
5016                                  qTy),
5017                               Close
5018                                 (Var("v",CTy"SCTLR"),
5019                                  MU(Dest("A",bTy,Var("v",CTy"SCTLR")),qTy))),
5020                            Close
5021                              (bVar"b",
5022                               ITE(bVar"b",
5023                                   Call
5024                                     ("AlignmentFault",
5025                                      ATy(qTy,PTy(uTy,qTy)),
5026                                      Var("address",F32)),
5027                                   MB(MR(Close
5028                                           (qVar"s",
5029                                            Dest("CPSR",CTy"PSR",qVar"s"))),
5030                                      Close
5031                                        (Var("v",CTy"PSR"),
5032                                         MB(MB(MU(Dest
5033                                                    ("E",bTy,
5034                                                     Var("v",CTy"PSR")),
5035                                                  qTy),
5036                                               Close
5037                                                 (bVar"b",
5038                                                  ITE(bVar"b",
5039                                                      Call
5040                                                        ("BigEndianReverse",
5041                                                         ATy(qTy,
5042                                                             PTy(vTy,qTy)),
5043                                                         TP[Mop(Cast vTy,
5044                                                                Var("value",
5045                                                                    BTy"N")),
5046                                                            nVar"size"]),
5047                                                      MU(Mop(Cast vTy,
5048                                                             Var("value",
5049                                                                 BTy"N")),
5050                                                         qTy)))),
5051                                            Close
5052                                              (vVar"v",
5053                                               For(TP[LN 0,
5054                                                      Bop(Sub,nVar"size",
5055                                                          LN 1),
5056                                                      Close
5057                                                        (nVar"i",
5058                                                         Call
5059                                                           ("write'MemA_with_priv",
5060                                                            ATy(qTy,
5061                                                                PTy(uTy,
5062                                                                    qTy)),
5063                                                            TP[Mop(Cast F8,
5064                                                                   EX(vVar"v",
5065                                                                      Bop(Add,
5066                                                                          Bop(Mul,
5067                                                                              LN
5068                                                                               8,
5069                                                                              nVar"i"),
5070                                                                          LN
5071                                                                           7),
5072                                                                      Bop(Mul,
5073                                                                          LN
5074                                                                           8,
5075                                                                          nVar"i"),
5076                                                                      vTy)),
5077                                                               Bop(Add,
5078                                                                   Var("VA",
5079                                                                       F32),
5080                                                                   Mop(Cast
5081                                                                         F32,
5082                                                                       nVar"i")),
5083                                                               LN 1,
5084                                                               bVar"privileged"]))]))))))))))))))))
5085;
5086val MemU_unpriv_def = Def
5087  ("MemU_unpriv",TP[Var("address",F32),nVar"size"],
5088   Call
5089     ("MemU_with_priv",ATy(qTy,PTy(BTy"N",qTy)),
5090      TP[Var("address",F32),nVar"size",LF]))
5091;
5092val write'MemU_unpriv_def = Def
5093  ("write'MemU_unpriv",
5094   TP[Var("value",BTy"N"),Var("address",F32),nVar"size"],
5095   Call
5096     ("write'MemU_with_priv",ATy(qTy,PTy(uTy,qTy)),
5097      TP[Var("value",BTy"N"),Var("address",F32),nVar"size",LF]))
5098;
5099val MemU_def = Def
5100  ("MemU",TP[Var("address",F32),nVar"size"],
5101   MB(Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU),
5102      Close
5103        (bVar"v",
5104         MB(MB(MU(TP[nVar"size",bVar"v"],qTy),
5105               Close
5106                 (Var("v",PTy(nTy,bTy)),
5107                  MU(TP[Var("address",F32),Var("v",PTy(nTy,bTy))],qTy))),
5108            Close
5109              (Var("v",PTy(F32,PTy(nTy,bTy))),
5110               Call
5111                 ("MemU_with_priv",ATy(qTy,PTy(BTy"N",qTy)),
5112                  Var("v",PTy(F32,PTy(nTy,bTy)))))))))
5113;
5114val write'MemU_def = Def
5115  ("write'MemU",TP[Var("value",BTy"N"),Var("address",F32),nVar"size"],
5116   MB(Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU),
5117      Close
5118        (bVar"v",
5119         MB(MB(MU(TP[nVar"size",bVar"v"],qTy),
5120               Close
5121                 (Var("v",PTy(nTy,bTy)),
5122                  MU(TP[Var("address",F32),Var("v",PTy(nTy,bTy))],qTy))),
5123            Close
5124              (Var("x",PTy(F32,PTy(nTy,bTy))),
5125               Call
5126                 ("write'MemU_with_priv",ATy(qTy,PTy(uTy,qTy)),
5127                  TP[Var("value",BTy"N"),Var("x",PTy(F32,PTy(nTy,bTy)))]))))))
5128;
5129val NullCheckIfThumbEE_def = Def
5130  ("NullCheckIfThumbEE",Var("n",F4),
5131   MN(LF,
5132      MB(MD(Call("CurrentInstrSet",ATy(qTy,PTy(CTy"InstrSet",qTy)),LU),bTy),
5133         Close
5134           (Var("v",CTy"InstrSet"),
5135            MB(MB(MU(EQ(Var("v",CTy"InstrSet"),
5136                        LC("InstrSet_ThumbEE",CTy"InstrSet")),PTy(bTy,qTy)),
5137                  Close
5138                    (bVar"b",
5139                     ITE(bVar"b",
5140                         ITB([(EQ(Var("n",F4),LW(15,4)),
5141                               MB(MD(Const("PC",ATy(qTy,PTy(F32,qTy))),bTy),
5142                                  Close
5143                                    (Var("v",F32),
5144                                     MB(MB(MB(MU(TP[Var("v",F32),LN 4],
5145                                                 PTy(bTy,qTy)),
5146                                              Close
5147                                                (Var("v",PTy(F32,nTy)),
5148                                                 MU(Call
5149                                                      ("Align",F32,
5150                                                       Var("v",
5151                                                           PTy(F32,nTy))),
5152                                                    PTy(bTy,qTy)))),
5153                                           Close
5154                                             (Var("v",F32),
5155                                              MU(EQ(Var("v",F32),LW(0,32)),
5156                                                 PTy(bTy,qTy)))),
5157                                        Close
5158                                          (bVar"b",
5159                                           ITE(bVar"b",
5160                                               MD(Call
5161                                                    ("raise'exception",
5162                                                     ATy(qTy,PTy(uTy,qTy)),
5163                                                     Call
5164                                                       ("UNPREDICTABLE",
5165                                                        CTy"exception",
5166                                                        LS
5167                                                         "NullCheckIfThumbEE")),
5168                                                  bTy),MU(LU,PTy(bTy,qTy)))))))),
5169                              (EQ(Var("n",F4),LW(13,4)),
5170                               MB(MD(Const("SP",ATy(qTy,PTy(F32,qTy))),bTy),
5171                                  Close
5172                                    (Var("v",F32),
5173                                     MB(MU(EQ(Var("v",F32),LW(0,32)),
5174                                           PTy(bTy,qTy)),
5175                                        Close
5176                                          (bVar"b",
5177                                           ITE(bVar"b",
5178                                               MD(Call
5179                                                    ("raise'exception",
5180                                                     ATy(qTy,PTy(uTy,qTy)),
5181                                                     Call
5182                                                       ("UNPREDICTABLE",
5183                                                        CTy"exception",
5184                                                        LS
5185                                                         "NullCheckIfThumbEE")),
5186                                                  bTy),MU(LU,PTy(bTy,qTy))))))))],
5187                             MB(MD(Call
5188                                     ("R",ATy(qTy,PTy(F32,qTy)),
5189                                      Var("n",F4)),bTy),
5190                                Close
5191                                  (Var("v",F32),
5192                                   MB(MU(EQ(Var("v",F32),LW(0,32)),
5193                                         PTy(bTy,qTy)),
5194                                      Close
5195                                        (bVar"b",
5196                                         ITE(bVar"b",
5197                                             MB(MD(Const
5198                                                     ("PC",
5199                                                      ATy(qTy,PTy(F32,qTy))),
5200                                                   bTy),
5201                                                Close
5202                                                  (Var("v",F32),
5203                                                   MB(MB(MB(MU(EX(Var("v",
5204                                                                      F32),
5205                                                                  LN 31,
5206                                                                  LN 1,
5207                                                                  FTy 31),
5208                                                               PTy(bTy,qTy)),
5209                                                            Close
5210                                                              (Var("v",
5211                                                                   FTy 31),
5212                                                               MU(CC[Var("v",
5213                                                                         FTy 31),
5214                                                                     LW(1,
5215                                                                        1)],
5216                                                                  PTy(bTy,
5217                                                                      qTy)))),
5218                                                         Close
5219                                                           (Var("v",F32),
5220                                                            MD(Call
5221                                                                 ("write'LR",
5222                                                                  ATy(qTy,
5223                                                                      PTy(uTy,
5224                                                                          qTy)),
5225                                                                  Var("v",
5226                                                                      F32)),
5227                                                               bTy))),
5228                                                      Close
5229                                                        (AVar uTy,
5230                                                         MB(MD(Call
5231                                                                 ("write'ITSTATE",
5232                                                                  ATy(qTy,
5233                                                                      PTy(uTy,
5234                                                                          qTy)),
5235                                                                  LW(0,8)),
5236                                                               bTy),
5237                                                            Close
5238                                                              (AVar uTy,
5239                                                               MB(MR(Close
5240                                                                       (Var("s",
5241                                                                            PTy(bTy,
5242                                                                                qTy)),
5243                                                                        Dest
5244                                                                          ("CP14",
5245                                                                           CTy"CP14",
5246                                                                           Mop(Snd,
5247                                                                               Var("s",
5248                                                                                   PTy(bTy,
5249                                                                                       qTy)))))),
5250                                                                  Close
5251                                                                    (Var("v",
5252                                                                         CTy"CP14"),
5253                                                                     MB(MB(MB(MU(Dest
5254                                                                                   ("TEEHBR",
5255                                                                                    F32,
5256                                                                                    Var("v",
5257                                                                                        CTy"CP14")),
5258                                                                                 PTy(bTy,
5259                                                                                     qTy)),
5260                                                                              Close
5261                                                                                (Var("v",
5262                                                                                     F32),
5263                                                                                 MU(Bop(Sub,
5264                                                                                        Var("v",
5265                                                                                            F32),
5266                                                                                        LW(4,
5267                                                                                           32)),
5268                                                                                    PTy(bTy,
5269                                                                                        qTy)))),
5270                                                                           Close
5271                                                                             (Var("v",
5272                                                                                  F32),
5273                                                                              MD(Call
5274                                                                                   ("BranchWritePC",
5275                                                                                    ATy(qTy,
5276                                                                                        PTy(uTy,
5277                                                                                            qTy)),
5278                                                                                    Var("v",
5279                                                                                        F32)),
5280                                                                                 bTy))),
5281                                                                        Close
5282                                                                          (AVar
5283                                                                             uTy,
5284                                                                           MW(Close
5285                                                                                (Var("s",
5286                                                                                     PTy(bTy,
5287                                                                                         qTy)),
5288                                                                                 TP[LT,
5289                                                                                    Mop(Snd,
5290                                                                                        Var("s",
5291                                                                                            PTy(bTy,
5292                                                                                                qTy)))])))))))))))),
5293                                             MU(LU,PTy(bTy,qTy)))))))),
5294                         MU(LU,PTy(bTy,qTy))))),
5295               Close
5296                 (AVar uTy,
5297                  MB(MR(Close
5298                          (Var("s",PTy(bTy,qTy)),
5299                           Mop(Fst,Var("s",PTy(bTy,qTy))))),
5300                     Close(bVar"v",MU(Mop(Not,bVar"v"),PTy(bTy,qTy))))))))))
5301;
5302val HighestSetBit_def = Def
5303  ("HighestSetBit",Var("w",BTy"N"),
5304   ITE(EQ(Var("w",BTy"N"),LY(0,"N")),Mop(Neg,LI 1),
5305       Mop(Cast iTy,Mop(Log,Var("w",BTy"N")))))
5306;
5307val CountLeadingZeroBits_def = Def
5308  ("CountLeadingZeroBits",Var("w",BTy"N"),
5309   Mop(Cast nTy,
5310       Bop(Sub,Bop(Sub,Mop(Cast iTy,Mop(Size,LY(0,"N"))),LI 1),
5311           Call("HighestSetBit",iTy,Var("w",BTy"N")))))
5312;
5313val LowestSetBit_def = Def
5314  ("LowestSetBit",Var("w",BTy"N"),
5315   Call("CountLeadingZeroBits",nTy,Mop(Rev,Var("w",BTy"N"))))
5316;
5317val BitCount_def = Def
5318  ("BitCount",Var("w",BTy"N"),
5319   MN(LN 0,
5320      MB(For(TP[LN 0,Bop(Sub,Mop(Size,LY(0,"N")),LN 1),
5321                Close
5322                  (nVar"i",
5323                   ITE(Bop(Bit,Var("w",BTy"N"),nVar"i"),
5324                       MB(MR(Close
5325                               (Var("s",PTy(nTy,qTy)),
5326                                Mop(Fst,Var("s",PTy(nTy,qTy))))),
5327                          Close
5328                            (nVar"v",
5329                             MB(MU(Bop(Add,nVar"v",LN 1),PTy(nTy,qTy)),
5330                                Close
5331                                  (nVar"v",
5332                                   MW(Close
5333                                        (Var("s",PTy(nTy,qTy)),
5334                                         TP[nVar"v",
5335                                            Mop(Snd,Var("s",PTy(nTy,qTy)))])))))),
5336                       MU(LU,PTy(nTy,qTy))))]),
5337         Close
5338           (AVar uTy,
5339            MR(Close(Var("s",PTy(nTy,qTy)),Mop(Fst,Var("s",PTy(nTy,qTy)))))))))
5340;
5341val SignExtendFrom_def = Def
5342  ("SignExtendFrom",TP[Var("w",BTy"N"),nVar"p"],
5343   Let(nVar"s",Bop(Sub,Mop(Size,LY(0,"N")),nVar"p"),
5344       Bop(Asr,Bop(Lsl,Var("w",BTy"N"),nVar"s"),nVar"s")))
5345;
5346val Extend_def = Def
5347  ("Extend",TP[bVar"unsigned",Var("w",BTy"M")],
5348   ITE(bVar"unsigned",Mop(Cast(BTy"N"),Var("w",BTy"M")),
5349       Mop(SE(BTy"N"),Var("w",BTy"M"))))
5350;
5351val UInt_def = Def
5352  ("UInt",Var("w",BTy"N"),Mop(Cast iTy,Mop(Cast nTy,Var("w",BTy"N"))))
5353;
5354val SignedSatQ_def = Def
5355  ("SignedSatQ",TP[iVar"i",nVar"N"],
5356   MB(ITE(Bop(Lt,Mop(Size,LY(0,"M")),nVar"N"),
5357          Call
5358            ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
5359             Call("ASSERT",CTy"exception",LS"SignedSatQ: M < N")),
5360          MU(LU,qTy)),
5361      Close
5362        (AVar uTy,
5363         MU(Let(iVar"max",
5364                Mop(Cast iTy,
5365                    Bop(Sub,Bop(Exp,LN 2,Bop(Sub,nVar"N",LN 1)),LN 1)),
5366                ITB([(Bop(Gt,iVar"i",iVar"max"),
5367                      TP[Mop(Cast(BTy"M"),iVar"max"),LT]),
5368                     (Bop(Lt,iVar"i",Mop(Neg,iVar"max")),
5369                      TP[Mop(Neg,Mop(Cast(BTy"M"),iVar"max")),LT])],
5370                    TP[Mop(Cast(BTy"M"),iVar"i"),LF])),qTy))))
5371;
5372val UnsignedSatQ_def = Def
5373  ("UnsignedSatQ",TP[iVar"i",nVar"N"],
5374   MB(ITE(Bop(Lt,Mop(Size,LY(0,"M")),nVar"N"),
5375          Call
5376            ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
5377             Call("ASSERT",CTy"exception",LS"UnsignedSatQ: M < N")),
5378          MU(LU,qTy)),
5379      Close
5380        (AVar uTy,
5381         MU(Let(iVar"max",
5382                Mop(Cast iTy,Bop(Sub,Bop(Exp,LN 2,nVar"N"),LN 1)),
5383                ITB([(Bop(Gt,iVar"i",iVar"max"),
5384                      TP[Mop(Cast(BTy"M"),iVar"max"),LT]),
5385                     (Bop(Lt,iVar"i",LI 0),TP[LY(0,"M"),LT])],
5386                    TP[Mop(Cast(BTy"M"),iVar"i"),LF])),qTy))))
5387;
5388val SignedSat_def = Def
5389  ("SignedSat",TP[iVar"i",nVar"N"],
5390   MB(Call
5391        ("SignedSatQ",ATy(qTy,PTy(PTy(BTy"M",bTy),qTy)),
5392         TP[iVar"i",nVar"N"]),
5393      Close
5394        (Var("v",PTy(BTy"M",bTy)),
5395         MU(Mop(Fst,Var("v",PTy(BTy"M",bTy))),qTy))))
5396;
5397val UnsignedSat_def = Def
5398  ("UnsignedSat",TP[iVar"i",nVar"N"],
5399   MB(Call
5400        ("UnsignedSatQ",ATy(qTy,PTy(PTy(BTy"M",bTy),qTy)),
5401         TP[iVar"i",nVar"N"]),
5402      Close
5403        (Var("v",PTy(BTy"M",bTy)),
5404         MU(Mop(Fst,Var("v",PTy(BTy"M",bTy))),qTy))))
5405;
5406val LSL_C_def = Def
5407  ("LSL_C",TP[Var("x",BTy"N"),nVar"shift"],
5408   MB(ITE(EQ(nVar"shift",LN 0),
5409          Call
5410            ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
5411             Call("ASSERT",CTy"exception",LS"LSL_C")),MU(LU,qTy)),
5412      Close
5413        (AVar uTy,
5414         MU(TP[Bop(Lsl,Var("x",BTy"N"),nVar"shift"),
5415               Bop(Bit,
5416                   CC[Mop(Cast vTy,Var("x",BTy"N")),
5417                      Bop(Rep,LV"0",nVar"shift")],Mop(Size,LY(0,"N")))],
5418            qTy))))
5419;
5420val LSL_def = Def
5421  ("LSL",TP[Var("x",BTy"N"),nVar"shift"],
5422   ITE(EQ(nVar"shift",LN 0),MU(Var("x",BTy"N"),qTy),
5423       MB(Call
5424            ("LSL_C",ATy(qTy,PTy(PTy(BTy"N",bTy),qTy)),
5425             TP[Var("x",BTy"N"),nVar"shift"]),
5426          Close
5427            (Var("v",PTy(BTy"N",bTy)),
5428             MU(Mop(Fst,Var("v",PTy(BTy"N",bTy))),qTy)))))
5429;
5430val LSR_C_def = Def
5431  ("LSR_C",TP[Var("x",BTy"N"),nVar"shift"],
5432   MB(ITE(EQ(nVar"shift",LN 0),
5433          Call
5434            ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
5435             Call("ASSERT",CTy"exception",LS"LSR_C")),MU(LU,qTy)),
5436      Close
5437        (AVar uTy,
5438         MU(TP[Bop(Lsr,Var("x",BTy"N"),nVar"shift"),
5439               Bop(And,Bop(Le,nVar"shift",Mop(Size,LY(0,"N"))),
5440                   Bop(Bit,Var("x",BTy"N"),Bop(Sub,nVar"shift",LN 1)))],
5441            qTy))))
5442;
5443val LSR_def = Def
5444  ("LSR",TP[Var("x",BTy"N"),nVar"shift"],
5445   ITE(EQ(nVar"shift",LN 0),MU(Var("x",BTy"N"),qTy),
5446       MB(Call
5447            ("LSR_C",ATy(qTy,PTy(PTy(BTy"N",bTy),qTy)),
5448             TP[Var("x",BTy"N"),nVar"shift"]),
5449          Close
5450            (Var("v",PTy(BTy"N",bTy)),
5451             MU(Mop(Fst,Var("v",PTy(BTy"N",bTy))),qTy)))))
5452;
5453val ASR_C_def = Def
5454  ("ASR_C",TP[Var("x",BTy"N"),nVar"shift"],
5455   MB(ITE(EQ(nVar"shift",LN 0),
5456          Call
5457            ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
5458             Call("ASSERT",CTy"exception",LS"ASR_C")),MU(LU,qTy)),
5459      Close
5460        (AVar uTy,
5461         MU(TP[Bop(Asr,Var("x",BTy"N"),nVar"shift"),
5462               Bop(Bit,Var("x",BTy"N"),
5463                   Bop(Sub,Mop(Min,TP[Mop(Size,LY(0,"N")),nVar"shift"]),
5464                       LN 1))],qTy))))
5465;
5466val ASR_def = Def
5467  ("ASR",TP[Var("x",BTy"N"),nVar"shift"],
5468   ITE(EQ(nVar"shift",LN 0),MU(Var("x",BTy"N"),qTy),
5469       MB(Call
5470            ("ASR_C",ATy(qTy,PTy(PTy(BTy"N",bTy),qTy)),
5471             TP[Var("x",BTy"N"),nVar"shift"]),
5472          Close
5473            (Var("v",PTy(BTy"N",bTy)),
5474             MU(Mop(Fst,Var("v",PTy(BTy"N",bTy))),qTy)))))
5475;
5476val ROR_C_def = Def
5477  ("ROR_C",TP[Var("x",BTy"N"),nVar"shift"],
5478   MB(ITE(EQ(nVar"shift",LN 0),
5479          Call
5480            ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
5481             Call("ASSERT",CTy"exception",LS"ROR_C")),MU(LU,qTy)),
5482      Close
5483        (AVar uTy,
5484         MU(Let(Var("result",BTy"N"),Bop(Ror,Var("x",BTy"N"),nVar"shift"),
5485                TP[Var("result",BTy"N"),Mop(Msb,Var("result",BTy"N"))]),
5486            qTy))))
5487;
5488val ROR_def = Def
5489  ("ROR",TP[Var("x",BTy"N"),nVar"shift"],
5490   ITE(EQ(nVar"shift",LN 0),MU(Var("x",BTy"N"),qTy),
5491       MB(Call
5492            ("ROR_C",ATy(qTy,PTy(PTy(BTy"N",bTy),qTy)),
5493             TP[Var("x",BTy"N"),nVar"shift"]),
5494          Close
5495            (Var("v",PTy(BTy"N",bTy)),
5496             MU(Mop(Fst,Var("v",PTy(BTy"N",bTy))),qTy)))))
5497;
5498val RRX_C_def = Def
5499  ("RRX_C",TP[Var("x",BTy"N"),bVar"carry_in"],
5500   TP[Mop(Cast(BTy"N"),
5501          CC[Mop(Cast vTy,bVar"carry_in"),
5502             EX(Mop(Cast vTy,Var("x",BTy"N")),
5503                Bop(Sub,Mop(Size,LY(0,"N")),LN 1),LN 1,vTy)]),
5504      Bop(Bit,Var("x",BTy"N"),LN 0)])
5505;
5506val RRX_def = Def
5507  ("RRX",TP[Var("x",BTy"N"),bVar"carry_in"],
5508   Mop(Fst,
5509       Call("RRX_C",PTy(BTy"N",bTy),TP[Var("x",BTy"N"),bVar"carry_in"])))
5510;
5511val DecodeImmShift_def = Def
5512  ("DecodeImmShift",TP[Var("typ",FTy 2),Var("imm5",FTy 5)],
5513   CS(Var("typ",FTy 2),
5514      [(LW(0,2),
5515        TP[LC("SRType_LSL",CTy"SRType"),Mop(Cast nTy,Var("imm5",FTy 5))]),
5516       (LW(1,2),
5517        TP[LC("SRType_LSR",CTy"SRType"),
5518           ITE(EQ(Var("imm5",FTy 5),LW(0,5)),LN 32,
5519               Mop(Cast nTy,Var("imm5",FTy 5)))]),
5520       (LW(2,2),
5521        TP[LC("SRType_ASR",CTy"SRType"),
5522           ITE(EQ(Var("imm5",FTy 5),LW(0,5)),LN 32,
5523               Mop(Cast nTy,Var("imm5",FTy 5)))]),
5524       (LW(3,2),
5525        ITE(EQ(Var("imm5",FTy 5),LW(0,5)),
5526            TP[LC("SRType_RRX",CTy"SRType"),LN 1],
5527            TP[LC("SRType_ROR",CTy"SRType"),
5528               Mop(Cast nTy,Var("imm5",FTy 5))]))]))
5529;
5530val DecodeRegShift_def = Def
5531  ("DecodeRegShift",Var("typ",FTy 2),
5532   CS(Var("typ",FTy 2),
5533      [(LW(0,2),LC("SRType_LSL",CTy"SRType")),
5534       (LW(1,2),LC("SRType_LSR",CTy"SRType")),
5535       (LW(2,2),LC("SRType_ASR",CTy"SRType")),
5536       (LW(3,2),LC("SRType_ROR",CTy"SRType"))]))
5537;
5538val Shift_C_def = Def
5539  ("Shift_C",
5540   TP[Var("value",BTy"N"),Var("typ",CTy"SRType"),nVar"amount",
5541      bVar"carry_in"],
5542   ITE(EQ(nVar"amount",LN 0),
5543       MU(TP[Var("value",BTy"N"),bVar"carry_in"],qTy),
5544       CS(Var("typ",CTy"SRType"),
5545          [(LC("SRType_LSL",CTy"SRType"),
5546            Call
5547              ("LSL_C",ATy(qTy,PTy(PTy(BTy"N",bTy),qTy)),
5548               TP[Var("value",BTy"N"),nVar"amount"])),
5549           (LC("SRType_LSR",CTy"SRType"),
5550            Call
5551              ("LSR_C",ATy(qTy,PTy(PTy(BTy"N",bTy),qTy)),
5552               TP[Var("value",BTy"N"),nVar"amount"])),
5553           (LC("SRType_ASR",CTy"SRType"),
5554            Call
5555              ("ASR_C",ATy(qTy,PTy(PTy(BTy"N",bTy),qTy)),
5556               TP[Var("value",BTy"N"),nVar"amount"])),
5557           (LC("SRType_ROR",CTy"SRType"),
5558            Call
5559              ("ROR_C",ATy(qTy,PTy(PTy(BTy"N",bTy),qTy)),
5560               TP[Var("value",BTy"N"),nVar"amount"])),
5561           (LC("SRType_RRX",CTy"SRType"),
5562            MU(Call
5563                 ("RRX_C",PTy(BTy"N",bTy),
5564                  TP[Var("value",BTy"N"),bVar"carry_in"]),qTy))])))
5565;
5566val Shift_def = Def
5567  ("Shift",
5568   TP[Var("value",BTy"N"),Var("typ",CTy"SRType"),nVar"amount",
5569      bVar"carry_in"],
5570   MB(Call
5571        ("Shift_C",ATy(qTy,PTy(PTy(BTy"N",bTy),qTy)),
5572         TP[Var("value",BTy"N"),Var("typ",CTy"SRType"),nVar"amount",
5573            bVar"carry_in"]),
5574      Close
5575        (Var("v",PTy(BTy"N",bTy)),
5576         MU(Mop(Fst,Var("v",PTy(BTy"N",bTy))),qTy))))
5577;
5578val ARMExpandImm_C_def = Def
5579  ("ARMExpandImm_C",TP[Var("imm12",FTy 12),bVar"carry_in"],
5580   Call
5581     ("Shift_C",ATy(qTy,PTy(PTy(F32,bTy),qTy)),
5582      TP[Mop(Cast F32,EX(Var("imm12",FTy 12),LN 7,LN 0,F8)),
5583         LC("SRType_ROR",CTy"SRType"),
5584         Bop(Mul,LN 2,Mop(Cast nTy,EX(Var("imm12",FTy 12),LN 11,LN 8,F4))),
5585         bVar"carry_in"]))
5586;
5587val ARMExpandImm_def = Def
5588  ("ARMExpandImm",Var("imm12",FTy 12),
5589   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
5590      Close
5591        (Var("v",CTy"PSR"),
5592         MB(MB(MB(MU(Dest("C",bTy,Var("v",CTy"PSR")),qTy),
5593                  Close(bVar"v",MU(TP[Var("imm12",FTy 12),bVar"v"],qTy))),
5594               Close
5595                 (Var("v",PTy(FTy 12,bTy)),
5596                  Call
5597                    ("ARMExpandImm_C",ATy(qTy,PTy(PTy(F32,bTy),qTy)),
5598                     Var("v",PTy(FTy 12,bTy))))),
5599            Close
5600              (Var("v",PTy(F32,bTy)),
5601               MU(Mop(Fst,Var("v",PTy(F32,bTy))),qTy))))))
5602;
5603val ThumbExpandImm_C_def = Def
5604  ("ThumbExpandImm_C",TP[Var("imm12",FTy 12),bVar"carry_in"],
5605   ITE(EQ(EX(Var("imm12",FTy 12),LN 11,LN 10,FTy 2),LW(0,2)),
5606       MB(CS(EX(Var("imm12",FTy 12),LN 9,LN 8,FTy 2),
5607             [(LW(0,2),
5608               MU(Mop(Cast F32,EX(Var("imm12",FTy 12),LN 7,LN 0,F8)),qTy)),
5609              (LW(1,2),
5610               ITE(EQ(EX(Var("imm12",FTy 12),LN 7,LN 0,F8),LW(0,8)),
5611                   Call
5612                     ("raise'exception",ATy(qTy,PTy(F32,qTy)),
5613                      Call
5614                        ("UNPREDICTABLE",CTy"exception",
5615                         LS"ThumbExpandImm_C")),
5616                   MU(CC[LW(0,8),EX(Var("imm12",FTy 12),LN 7,LN 0,F8),
5617                         LW(0,8),EX(Var("imm12",FTy 12),LN 7,LN 0,F8)],qTy))),
5618              (LW(2,2),
5619               ITE(EQ(EX(Var("imm12",FTy 12),LN 7,LN 0,F8),LW(0,8)),
5620                   Call
5621                     ("raise'exception",ATy(qTy,PTy(F32,qTy)),
5622                      Call
5623                        ("UNPREDICTABLE",CTy"exception",
5624                         LS"ThumbExpandImm_C")),
5625                   MU(CC[EX(Var("imm12",FTy 12),LN 7,LN 0,F8),LW(0,8),
5626                         EX(Var("imm12",FTy 12),LN 7,LN 0,F8),LW(0,8)],qTy))),
5627              (LW(3,2),
5628               ITE(EQ(EX(Var("imm12",FTy 12),LN 7,LN 0,F8),LW(0,8)),
5629                   Call
5630                     ("raise'exception",ATy(qTy,PTy(F32,qTy)),
5631                      Call
5632                        ("UNPREDICTABLE",CTy"exception",
5633                         LS"ThumbExpandImm_C")),
5634                   MU(CC[EX(Var("imm12",FTy 12),LN 7,LN 0,F8),
5635                         EX(Var("imm12",FTy 12),LN 7,LN 0,F8),
5636                         EX(Var("imm12",FTy 12),LN 7,LN 0,F8),
5637                         EX(Var("imm12",FTy 12),LN 7,LN 0,F8)],qTy)))]),
5638          Close
5639            (Var("imm32",F32),MU(TP[Var("imm32",F32),bVar"carry_in"],qTy))),
5640       Call
5641         ("ROR_C",ATy(qTy,PTy(PTy(F32,bTy),qTy)),
5642          TP[Mop(Cast F32,
5643                 CC[LW(1,1),EX(Var("imm12",FTy 12),LN 6,LN 0,FTy 7)]),
5644             Mop(Cast nTy,EX(Var("imm12",FTy 12),LN 11,LN 7,FTy 5))])))
5645;
5646val ExpandImm_C_def = Def
5647  ("ExpandImm_C",TP[Var("imm12",FTy 12),bVar"carry_in"],
5648   MB(MR(Close(qVar"s",Dest("Encoding",CTy"Encoding",qVar"s"))),
5649      Close
5650        (Var("v",CTy"Encoding"),
5651         MB(MU(EQ(Var("v",CTy"Encoding"),
5652                  LC("Encoding_Thumb2",CTy"Encoding")),qTy),
5653            Close
5654              (bVar"b",
5655               ITE(bVar"b",
5656                   Call
5657                     ("ThumbExpandImm_C",ATy(qTy,PTy(PTy(F32,bTy),qTy)),
5658                      TP[Var("imm12",FTy 12),bVar"carry_in"]),
5659                   Call
5660                     ("ARMExpandImm_C",ATy(qTy,PTy(PTy(F32,bTy),qTy)),
5661                      TP[Var("imm12",FTy 12),bVar"carry_in"])))))))
5662;
5663val AddWithCarry_def = Def
5664  ("AddWithCarry",TP[Var("x",BTy"N"),Var("y",BTy"N"),bVar"carry_in"],
5665   Let(nVar"unsigned_sum",
5666       Bop(Add,
5667           Bop(Add,Mop(Cast nTy,Var("x",BTy"N")),
5668               Mop(Cast nTy,Var("y",BTy"N"))),Mop(Cast nTy,bVar"carry_in")),
5669       Let(Var("result",BTy"N"),Mop(Cast(BTy"N"),nVar"unsigned_sum"),
5670           TP[Var("result",BTy"N"),
5671              Mop(Not,
5672                  EQ(Mop(Cast nTy,Var("result",BTy"N")),nVar"unsigned_sum")),
5673              Mop(Not,
5674                  EQ(Mop(Cast iTy,Var("result",BTy"N")),
5675                     Bop(Add,
5676                         Bop(Add,Mop(Cast iTy,Var("x",BTy"N")),
5677                             Mop(Cast iTy,Var("y",BTy"N"))),
5678                         Mop(Cast iTy,bVar"carry_in"))))])))
5679;
5680val DataProcessingALU_def = Def
5681  ("DataProcessingALU",
5682   TP[Var("opc",F4),Var("a",F32),Var("b",F32),bVar"c"],
5683   CS(Var("opc",F4),
5684      [(LW(0,4),TP[Bop(BAnd,Var("a",F32),Var("b",F32)),bVar"c",LX bTy]),
5685       (LW(8,4),TP[Bop(BAnd,Var("a",F32),Var("b",F32)),bVar"c",LX bTy]),
5686       (LW(1,4),TP[Bop(BXor,Var("a",F32),Var("b",F32)),bVar"c",LX bTy]),
5687       (LW(9,4),TP[Bop(BXor,Var("a",F32),Var("b",F32)),bVar"c",LX bTy]),
5688       (LW(2,4),
5689        Call
5690          ("AddWithCarry",PTy(F32,PTy(bTy,bTy)),
5691           TP[Var("a",F32),Mop(BNot,Var("b",F32)),LT])),
5692       (LW(10,4),
5693        Call
5694          ("AddWithCarry",PTy(F32,PTy(bTy,bTy)),
5695           TP[Var("a",F32),Mop(BNot,Var("b",F32)),LT])),
5696       (LW(3,4),
5697        Call
5698          ("AddWithCarry",PTy(F32,PTy(bTy,bTy)),
5699           TP[Mop(BNot,Var("a",F32)),Var("b",F32),LT])),
5700       (LW(4,4),
5701        Call
5702          ("AddWithCarry",PTy(F32,PTy(bTy,bTy)),
5703           TP[Var("a",F32),Var("b",F32),LF])),
5704       (LW(11,4),
5705        Call
5706          ("AddWithCarry",PTy(F32,PTy(bTy,bTy)),
5707           TP[Var("a",F32),Var("b",F32),LF])),
5708       (LW(5,4),
5709        Call
5710          ("AddWithCarry",PTy(F32,PTy(bTy,bTy)),
5711           TP[Var("a",F32),Var("b",F32),bVar"c"])),
5712       (LW(6,4),
5713        Call
5714          ("AddWithCarry",PTy(F32,PTy(bTy,bTy)),
5715           TP[Var("a",F32),Mop(BNot,Var("b",F32)),bVar"c"])),
5716       (LW(7,4),
5717        Call
5718          ("AddWithCarry",PTy(F32,PTy(bTy,bTy)),
5719           TP[Mop(BNot,Var("a",F32)),Var("b",F32),bVar"c"])),
5720       (LW(12,4),TP[Bop(BOr,Var("a",F32),Var("b",F32)),bVar"c",LX bTy]),
5721       (LW(13,4),TP[Var("b",F32),bVar"c",LX bTy]),
5722       (LW(14,4),
5723        TP[Bop(BAnd,Var("a",F32),Mop(BNot,Var("b",F32))),bVar"c",LX bTy]),
5724       (LW(15,4),
5725        TP[Bop(BOr,Var("a",F32),Mop(BNot,Var("b",F32))),bVar"c",LX bTy])]))
5726;
5727val ArithmeticOpcode_def = Def
5728  ("ArithmeticOpcode",Var("opc",F4),
5729   Bop(And,
5730       Bop(Or,Bop(Bit,Var("opc",F4),LN 2),Bop(Bit,Var("opc",F4),LN 1)),
5731       Mop(Not,
5732           Bop(And,Bop(Bit,Var("opc",F4),LN 3),Bop(Bit,Var("opc",F4),LN 2)))))
5733;
5734val ExcVectorBase_def = Def
5735  ("ExcVectorBase",AVar uTy,
5736   MB(MR(Close(qVar"s",Dest("CP15",CTy"CP15",qVar"s"))),
5737      Close
5738        (Var("v",CTy"CP15"),
5739         MB(MB(MU(Dest("SCTLR",CTy"SCTLR",Var("v",CTy"CP15")),qTy),
5740               Close
5741                 (Var("v",CTy"SCTLR"),
5742                  MU(Dest("V",bTy,Var("v",CTy"SCTLR")),qTy))),
5743            Close
5744              (bVar"b",
5745               ITE(bVar"b",MU(LW(268431360,32),qTy),
5746                   MB(Call("HaveSecurityExt",ATy(qTy,PTy(bTy,qTy)),LU),
5747                      Close
5748                        (bVar"b",
5749                         ITE(bVar"b",
5750                             MB(MR(Close
5751                                     (qVar"s",
5752                                      Dest("CP15",CTy"CP15",qVar"s"))),
5753                                Close
5754                                  (Var("v",CTy"CP15"),
5755                                   MU(Dest("VBAR",F32,Var("v",CTy"CP15")),
5756                                      qTy))),MU(LW(0,32),qTy))))))))))
5757;
5758val EnterMonitorMode_def = Def
5759  ("EnterMonitorMode",
5760   TP[Var("new_spsr_value",CTy"PSR"),Var("new_lr_value",F32),
5761      Var("vect_offset",F32)],
5762   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
5763      Close
5764        (Var("v",CTy"PSR"),
5765         MB(MB(MB(MU(TP[Var("v",CTy"PSR"),LW(22,5)],qTy),
5766                  Close
5767                    (Var("v",PTy(CTy"PSR",FTy 5)),
5768                     MU(Rupd("M",Var("v",PTy(CTy"PSR",FTy 5))),qTy))),
5769               Close
5770                 (Var("v",CTy"PSR"),
5771                  MW(Close
5772                       (qVar"s",Rupd("CPSR",TP[qVar"s",Var("v",CTy"PSR")]))))),
5773            Close
5774              (AVar uTy,
5775               MB(Call
5776                    ("write'SPSR",ATy(qTy,PTy(uTy,qTy)),
5777                     Var("new_spsr_value",CTy"PSR")),
5778                  Close
5779                    (AVar uTy,
5780                     MB(Call
5781                          ("write'R",ATy(qTy,PTy(uTy,qTy)),
5782                           TP[Var("new_lr_value",F32),LW(14,4)]),
5783                        Close
5784                          (AVar uTy,
5785                           MB(MR(Close
5786                                   (qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
5787                              Close
5788                                (Var("v",CTy"PSR"),
5789                                 MB(MB(MB(MU(TP[Var("v",CTy"PSR"),LF],qTy),
5790                                          Close
5791                                            (Var("v",PTy(CTy"PSR",bTy)),
5792                                             MU(Rupd
5793                                                  ("J",
5794                                                   Var("v",
5795                                                       PTy(CTy"PSR",bTy))),
5796                                                qTy))),
5797                                       Close
5798                                         (Var("v",CTy"PSR"),
5799                                          MW(Close
5800                                               (qVar"s",
5801                                                Rupd
5802                                                  ("CPSR",
5803                                                   TP[qVar"s",
5804                                                      Var("v",CTy"PSR")]))))),
5805                                    Close
5806                                      (AVar uTy,
5807                                       MB(MR(Close
5808                                               (qVar"s",
5809                                                Dest
5810                                                  ("CPSR",CTy"PSR",qVar"s"))),
5811                                          Close
5812                                            (Var("v",CTy"PSR"),
5813                                             MB(MB(MB(MB(MR(Close
5814                                                              (qVar"s",
5815                                                               Dest
5816                                                                 ("CP15",
5817                                                                  CTy"CP15",
5818                                                                  qVar"s"))),
5819                                                         Close
5820                                                           (Var("v0",
5821                                                                CTy"CP15"),
5822                                                            MB(MB(MU(Dest
5823                                                                       ("SCTLR",
5824                                                                        CTy"SCTLR",
5825                                                                        Var("v0",
5826                                                                            CTy"CP15")),
5827                                                                     qTy),
5828                                                                  Close
5829                                                                    (Var("v",
5830                                                                         CTy"SCTLR"),
5831                                                                     MU(Dest
5832                                                                          ("TE",
5833                                                                           bTy,
5834                                                                           Var("v",
5835                                                                               CTy"SCTLR")),
5836                                                                        qTy))),
5837                                                               Close
5838                                                                 (bVar"v0",
5839                                                                  MU(TP[Var("v",
5840                                                                            CTy"PSR"),
5841                                                                        bVar"v0"],
5842                                                                     qTy))))),
5843                                                      Close
5844                                                        (Var("v",
5845                                                             PTy(CTy"PSR",
5846                                                                 bTy)),
5847                                                         MU(Rupd
5848                                                              ("T",
5849                                                               Var("v",
5850                                                                   PTy(CTy"PSR",
5851                                                                       bTy))),
5852                                                            qTy))),
5853                                                   Close
5854                                                     (Var("v",CTy"PSR"),
5855                                                      MW(Close
5856                                                           (qVar"s",
5857                                                            Rupd
5858                                                              ("CPSR",
5859                                                               TP[qVar"s",
5860                                                                  Var("v",
5861                                                                      CTy"PSR")]))))),
5862                                                Close
5863                                                  (AVar uTy,
5864                                                   MB(MR(Close
5865                                                           (qVar"s",
5866                                                            Dest
5867                                                              ("CPSR",
5868                                                               CTy"PSR",
5869                                                               qVar"s"))),
5870                                                      Close
5871                                                        (Var("v",CTy"PSR"),
5872                                                         MB(MB(MB(MB(MR(Close
5873                                                                          (qVar"s",
5874                                                                           Dest
5875                                                                             ("CP15",
5876                                                                              CTy"CP15",
5877                                                                              qVar"s"))),
5878                                                                     Close
5879                                                                       (Var("v0",
5880                                                                            CTy"CP15"),
5881                                                                        MB(MB(MU(Dest
5882                                                                                   ("SCTLR",
5883                                                                                    CTy"SCTLR",
5884                                                                                    Var("v0",
5885                                                                                        CTy"CP15")),
5886                                                                                 qTy),
5887                                                                              Close
5888                                                                                (Var("v",
5889                                                                                     CTy"SCTLR"),
5890                                                                                 MU(Dest
5891                                                                                      ("EE",
5892                                                                                       bTy,
5893                                                                                       Var("v",
5894                                                                                           CTy"SCTLR")),
5895                                                                                    qTy))),
5896                                                                           Close
5897                                                                             (bVar"v0",
5898                                                                              MU(TP[Var("v",
5899                                                                                        CTy"PSR"),
5900                                                                                    bVar"v0"],
5901                                                                                 qTy))))),
5902                                                                  Close
5903                                                                    (Var("v",
5904                                                                         PTy(CTy"PSR",
5905                                                                             bTy)),
5906                                                                     MU(Rupd
5907                                                                          ("E",
5908                                                                           Var("v",
5909                                                                               PTy(CTy"PSR",
5910                                                                                   bTy))),
5911                                                                        qTy))),
5912                                                               Close
5913                                                                 (Var("v",
5914                                                                      CTy"PSR"),
5915                                                                  MW(Close
5916                                                                       (qVar"s",
5917                                                                        Rupd
5918                                                                          ("CPSR",
5919                                                                           TP[qVar"s",
5920                                                                              Var("v",
5921                                                                                  CTy"PSR")]))))),
5922                                                            Close
5923                                                              (AVar uTy,
5924                                                               MB(MR(Close
5925                                                                       (qVar"s",
5926                                                                        Dest
5927                                                                          ("CPSR",
5928                                                                           CTy"PSR",
5929                                                                           qVar"s"))),
5930                                                                  Close
5931                                                                    (Var("v",
5932                                                                         CTy"PSR"),
5933                                                                     MB(MB(MB(MU(TP[Var("v",
5934                                                                                        CTy"PSR"),
5935                                                                                    LT],
5936                                                                                 qTy),
5937                                                                              Close
5938                                                                                (Var("v",
5939                                                                                     PTy(CTy"PSR",
5940                                                                                         bTy)),
5941                                                                                 MU(Rupd
5942                                                                                      ("A",
5943                                                                                       Var("v",
5944                                                                                           PTy(CTy"PSR",
5945                                                                                               bTy))),
5946                                                                                    qTy))),
5947                                                                           Close
5948                                                                             (Var("v",
5949                                                                                  CTy"PSR"),
5950                                                                              MW(Close
5951                                                                                   (qVar"s",
5952                                                                                    Rupd
5953                                                                                      ("CPSR",
5954                                                                                       TP[qVar"s",
5955                                                                                          Var("v",
5956                                                                                              CTy"PSR")]))))),
5957                                                                        Close
5958                                                                          (AVar
5959                                                                             uTy,
5960                                                                           MB(MR(Close
5961                                                                                   (qVar"s",
5962                                                                                    Dest
5963                                                                                      ("CPSR",
5964                                                                                       CTy"PSR",
5965                                                                                       qVar"s"))),
5966                                                                              Close
5967                                                                                (Var("v",
5968                                                                                     CTy"PSR"),
5969                                                                                 MB(MB(MB(MU(TP[Var("v",
5970                                                                                                    CTy"PSR"),
5971                                                                                                LT],
5972                                                                                             qTy),
5973                                                                                          Close
5974                                                                                            (Var("v",
5975                                                                                                 PTy(CTy"PSR",
5976                                                                                                     bTy)),
5977                                                                                             MU(Rupd
5978                                                                                                  ("F",
5979                                                                                                   Var("v",
5980                                                                                                       PTy(CTy"PSR",
5981                                                                                                           bTy))),
5982                                                                                                qTy))),
5983                                                                                       Close
5984                                                                                         (Var("v",
5985                                                                                              CTy"PSR"),
5986                                                                                          MW(Close
5987                                                                                               (qVar"s",
5988                                                                                                Rupd
5989                                                                                                  ("CPSR",
5990                                                                                                   TP[qVar"s",
5991                                                                                                      Var("v",
5992                                                                                                          CTy"PSR")]))))),
5993                                                                                    Close
5994                                                                                      (AVar
5995                                                                                         uTy,
5996                                                                                       MB(MR(Close
5997                                                                                               (qVar"s",
5998                                                                                                Dest
5999                                                                                                  ("CPSR",
6000                                                                                                   CTy"PSR",
6001                                                                                                   qVar"s"))),
6002                                                                                          Close
6003                                                                                            (Var("v",
6004                                                                                                 CTy"PSR"),
6005                                                                                             MB(MB(MB(MU(TP[Var("v",
6006                                                                                                                CTy"PSR"),
6007                                                                                                            LT],
6008                                                                                                         qTy),
6009                                                                                                      Close
6010                                                                                                        (Var("v",
6011                                                                                                             PTy(CTy"PSR",
6012                                                                                                                 bTy)),
6013                                                                                                         MU(Rupd
6014                                                                                                              ("I",
6015                                                                                                               Var("v",
6016                                                                                                                   PTy(CTy"PSR",
6017                                                                                                                       bTy))),
6018                                                                                                            qTy))),
6019                                                                                                   Close
6020                                                                                                     (Var("v",
6021                                                                                                          CTy"PSR"),
6022                                                                                                      MW(Close
6023                                                                                                           (qVar"s",
6024                                                                                                            Rupd
6025                                                                                                              ("CPSR",
6026                                                                                                               TP[qVar"s",
6027                                                                                                                  Var("v",
6028                                                                                                                      CTy"PSR")]))))),
6029                                                                                                Close
6030                                                                                                  (AVar
6031                                                                                                     uTy,
6032                                                                                                   MB(MR(Close
6033                                                                                                           (qVar"s",
6034                                                                                                            Dest
6035                                                                                                              ("CPSR",
6036                                                                                                               CTy"PSR",
6037                                                                                                               qVar"s"))),
6038                                                                                                      Close
6039                                                                                                        (Var("v",
6040                                                                                                             CTy"PSR"),
6041                                                                                                         MB(MB(MB(MU(TP[Var("v",
6042                                                                                                                            CTy"PSR"),
6043                                                                                                                        LW(0,
6044                                                                                                                           8)],
6045                                                                                                                     qTy),
6046                                                                                                                  Close
6047                                                                                                                    (Var("v",
6048                                                                                                                         PTy(CTy"PSR",
6049                                                                                                                             F8)),
6050                                                                                                                     MU(Rupd
6051                                                                                                                          ("IT",
6052                                                                                                                           Var("v",
6053                                                                                                                               PTy(CTy"PSR",
6054                                                                                                                                   F8))),
6055                                                                                                                        qTy))),
6056                                                                                                               Close
6057                                                                                                                 (Var("v",
6058                                                                                                                      CTy"PSR"),
6059                                                                                                                  MW(Close
6060                                                                                                                       (qVar"s",
6061                                                                                                                        Rupd
6062                                                                                                                          ("CPSR",
6063                                                                                                                           TP[qVar"s",
6064                                                                                                                              Var("v",
6065                                                                                                                                  CTy"PSR")]))))),
6066                                                                                                            Close
6067                                                                                                              (AVar
6068                                                                                                                 uTy,
6069                                                                                                               MB(MR(Close
6070                                                                                                                       (qVar"s",
6071                                                                                                                        Dest
6072                                                                                                                          ("CP15",
6073                                                                                                                           CTy"CP15",
6074                                                                                                                           qVar"s"))),
6075                                                                                                                  Close
6076                                                                                                                    (Var("v",
6077                                                                                                                         CTy"CP15"),
6078                                                                                                                     MB(MB(MU(Dest
6079                                                                                                                                ("MVBAR",
6080                                                                                                                                 F32,
6081                                                                                                                                 Var("v",
6082                                                                                                                                     CTy"CP15")),
6083                                                                                                                              qTy),
6084                                                                                                                           Close
6085                                                                                                                             (Var("v",
6086                                                                                                                                  F32),
6087                                                                                                                              MU(Bop(Add,
6088                                                                                                                                     Var("v",
6089                                                                                                                                         F32),
6090                                                                                                                                     Var("vect_offset",
6091                                                                                                                                         F32)),
6092                                                                                                                                 qTy))),
6093                                                                                                                        Close
6094                                                                                                                          (Var("v",
6095                                                                                                                               F32),
6096                                                                                                                           Call
6097                                                                                                                             ("BranchTo",
6098                                                                                                                              ATy(qTy,
6099                                                                                                                                  PTy(uTy,
6100                                                                                                                                      qTy)),
6101                                                                                                                              Var("v",
6102                                                                                                                                  F32)))))))))))))))))))))))))))))))))))))))))))
6103;
6104val EnterHypMode_def = Def
6105  ("EnterHypMode",
6106   TP[Var("new_spsr_value",CTy"PSR"),Var("new_lr_value",F32),
6107      Var("vect_offset",F32)],
6108   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
6109      Close
6110        (Var("v",CTy"PSR"),
6111         MB(MB(MB(MU(TP[Var("v",CTy"PSR"),LW(26,5)],qTy),
6112                  Close
6113                    (Var("v",PTy(CTy"PSR",FTy 5)),
6114                     MU(Rupd("M",Var("v",PTy(CTy"PSR",FTy 5))),qTy))),
6115               Close
6116                 (Var("v",CTy"PSR"),
6117                  MW(Close
6118                       (qVar"s",Rupd("CPSR",TP[qVar"s",Var("v",CTy"PSR")]))))),
6119            Close
6120              (AVar uTy,
6121               MB(Call
6122                    ("write'SPSR",ATy(qTy,PTy(uTy,qTy)),
6123                     Var("new_spsr_value",CTy"PSR")),
6124                  Close
6125                    (AVar uTy,
6126                     MB(Call
6127                          ("write'R",ATy(qTy,PTy(uTy,qTy)),
6128                           TP[Var("new_lr_value",F32),LW(14,4)]),
6129                        Close
6130                          (AVar uTy,
6131                           MB(MR(Close
6132                                   (qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
6133                              Close
6134                                (Var("v",CTy"PSR"),
6135                                 MB(MB(MB(MU(TP[Var("v",CTy"PSR"),LF],qTy),
6136                                          Close
6137                                            (Var("v",PTy(CTy"PSR",bTy)),
6138                                             MU(Rupd
6139                                                  ("J",
6140                                                   Var("v",
6141                                                       PTy(CTy"PSR",bTy))),
6142                                                qTy))),
6143                                       Close
6144                                         (Var("v",CTy"PSR"),
6145                                          MW(Close
6146                                               (qVar"s",
6147                                                Rupd
6148                                                  ("CPSR",
6149                                                   TP[qVar"s",
6150                                                      Var("v",CTy"PSR")]))))),
6151                                    Close
6152                                      (AVar uTy,
6153                                       MB(MR(Close
6154                                               (qVar"s",
6155                                                Dest
6156                                                  ("CPSR",CTy"PSR",qVar"s"))),
6157                                          Close
6158                                            (Var("v",CTy"PSR"),
6159                                             MB(MB(MB(MB(MR(Close
6160                                                              (qVar"s",
6161                                                               Dest
6162                                                                 ("CP15",
6163                                                                  CTy"CP15",
6164                                                                  qVar"s"))),
6165                                                         Close
6166                                                           (Var("v0",
6167                                                                CTy"CP15"),
6168                                                            MB(MB(MU(Dest
6169                                                                       ("SCTLR",
6170                                                                        CTy"SCTLR",
6171                                                                        Var("v0",
6172                                                                            CTy"CP15")),
6173                                                                     qTy),
6174                                                                  Close
6175                                                                    (Var("v",
6176                                                                         CTy"SCTLR"),
6177                                                                     MU(Dest
6178                                                                          ("TE",
6179                                                                           bTy,
6180                                                                           Var("v",
6181                                                                               CTy"SCTLR")),
6182                                                                        qTy))),
6183                                                               Close
6184                                                                 (bVar"v0",
6185                                                                  MU(TP[Var("v",
6186                                                                            CTy"PSR"),
6187                                                                        bVar"v0"],
6188                                                                     qTy))))),
6189                                                      Close
6190                                                        (Var("v",
6191                                                             PTy(CTy"PSR",
6192                                                                 bTy)),
6193                                                         MU(Rupd
6194                                                              ("T",
6195                                                               Var("v",
6196                                                                   PTy(CTy"PSR",
6197                                                                       bTy))),
6198                                                            qTy))),
6199                                                   Close
6200                                                     (Var("v",CTy"PSR"),
6201                                                      MW(Close
6202                                                           (qVar"s",
6203                                                            Rupd
6204                                                              ("CPSR",
6205                                                               TP[qVar"s",
6206                                                                  Var("v",
6207                                                                      CTy"PSR")]))))),
6208                                                Close
6209                                                  (AVar uTy,
6210                                                   MB(MR(Close
6211                                                           (qVar"s",
6212                                                            Dest
6213                                                              ("CPSR",
6214                                                               CTy"PSR",
6215                                                               qVar"s"))),
6216                                                      Close
6217                                                        (Var("v",CTy"PSR"),
6218                                                         MB(MB(MB(MB(MR(Close
6219                                                                          (qVar"s",
6220                                                                           Dest
6221                                                                             ("CP15",
6222                                                                              CTy"CP15",
6223                                                                              qVar"s"))),
6224                                                                     Close
6225                                                                       (Var("v0",
6226                                                                            CTy"CP15"),
6227                                                                        MB(MB(MU(Dest
6228                                                                                   ("SCTLR",
6229                                                                                    CTy"SCTLR",
6230                                                                                    Var("v0",
6231                                                                                        CTy"CP15")),
6232                                                                                 qTy),
6233                                                                              Close
6234                                                                                (Var("v",
6235                                                                                     CTy"SCTLR"),
6236                                                                                 MU(Dest
6237                                                                                      ("EE",
6238                                                                                       bTy,
6239                                                                                       Var("v",
6240                                                                                           CTy"SCTLR")),
6241                                                                                    qTy))),
6242                                                                           Close
6243                                                                             (bVar"v0",
6244                                                                              MU(TP[Var("v",
6245                                                                                        CTy"PSR"),
6246                                                                                    bVar"v0"],
6247                                                                                 qTy))))),
6248                                                                  Close
6249                                                                    (Var("v",
6250                                                                         PTy(CTy"PSR",
6251                                                                             bTy)),
6252                                                                     MU(Rupd
6253                                                                          ("E",
6254                                                                           Var("v",
6255                                                                               PTy(CTy"PSR",
6256                                                                                   bTy))),
6257                                                                        qTy))),
6258                                                               Close
6259                                                                 (Var("v",
6260                                                                      CTy"PSR"),
6261                                                                  MW(Close
6262                                                                       (qVar"s",
6263                                                                        Rupd
6264                                                                          ("CPSR",
6265                                                                           TP[qVar"s",
6266                                                                              Var("v",
6267                                                                                  CTy"PSR")]))))),
6268                                                            Close
6269                                                              (AVar uTy,
6270                                                               MB(MR(Close
6271                                                                       (qVar"s",
6272                                                                        Dest
6273                                                                          ("CPSR",
6274                                                                           CTy"PSR",
6275                                                                           qVar"s"))),
6276                                                                  Close
6277                                                                    (Var("v",
6278                                                                         CTy"PSR"),
6279                                                                     MB(MB(MB(MU(TP[Var("v",
6280                                                                                        CTy"PSR"),
6281                                                                                    LT],
6282                                                                                 qTy),
6283                                                                              Close
6284                                                                                (Var("v",
6285                                                                                     PTy(CTy"PSR",
6286                                                                                         bTy)),
6287                                                                                 MU(Rupd
6288                                                                                      ("A",
6289                                                                                       Var("v",
6290                                                                                           PTy(CTy"PSR",
6291                                                                                               bTy))),
6292                                                                                    qTy))),
6293                                                                           Close
6294                                                                             (Var("v",
6295                                                                                  CTy"PSR"),
6296                                                                              MW(Close
6297                                                                                   (qVar"s",
6298                                                                                    Rupd
6299                                                                                      ("CPSR",
6300                                                                                       TP[qVar"s",
6301                                                                                          Var("v",
6302                                                                                              CTy"PSR")]))))),
6303                                                                        Close
6304                                                                          (AVar
6305                                                                             uTy,
6306                                                                           MB(MR(Close
6307                                                                                   (qVar"s",
6308                                                                                    Dest
6309                                                                                      ("CPSR",
6310                                                                                       CTy"PSR",
6311                                                                                       qVar"s"))),
6312                                                                              Close
6313                                                                                (Var("v",
6314                                                                                     CTy"PSR"),
6315                                                                                 MB(MB(MB(MU(TP[Var("v",
6316                                                                                                    CTy"PSR"),
6317                                                                                                LT],
6318                                                                                             qTy),
6319                                                                                          Close
6320                                                                                            (Var("v",
6321                                                                                                 PTy(CTy"PSR",
6322                                                                                                     bTy)),
6323                                                                                             MU(Rupd
6324                                                                                                  ("F",
6325                                                                                                   Var("v",
6326                                                                                                       PTy(CTy"PSR",
6327                                                                                                           bTy))),
6328                                                                                                qTy))),
6329                                                                                       Close
6330                                                                                         (Var("v",
6331                                                                                              CTy"PSR"),
6332                                                                                          MW(Close
6333                                                                                               (qVar"s",
6334                                                                                                Rupd
6335                                                                                                  ("CPSR",
6336                                                                                                   TP[qVar"s",
6337                                                                                                      Var("v",
6338                                                                                                          CTy"PSR")]))))),
6339                                                                                    Close
6340                                                                                      (AVar
6341                                                                                         uTy,
6342                                                                                       MB(MR(Close
6343                                                                                               (qVar"s",
6344                                                                                                Dest
6345                                                                                                  ("CPSR",
6346                                                                                                   CTy"PSR",
6347                                                                                                   qVar"s"))),
6348                                                                                          Close
6349                                                                                            (Var("v",
6350                                                                                                 CTy"PSR"),
6351                                                                                             MB(MB(MB(MU(TP[Var("v",
6352                                                                                                                CTy"PSR"),
6353                                                                                                            LT],
6354                                                                                                         qTy),
6355                                                                                                      Close
6356                                                                                                        (Var("v",
6357                                                                                                             PTy(CTy"PSR",
6358                                                                                                                 bTy)),
6359                                                                                                         MU(Rupd
6360                                                                                                              ("I",
6361                                                                                                               Var("v",
6362                                                                                                                   PTy(CTy"PSR",
6363                                                                                                                       bTy))),
6364                                                                                                            qTy))),
6365                                                                                                   Close
6366                                                                                                     (Var("v",
6367                                                                                                          CTy"PSR"),
6368                                                                                                      MW(Close
6369                                                                                                           (qVar"s",
6370                                                                                                            Rupd
6371                                                                                                              ("CPSR",
6372                                                                                                               TP[qVar"s",
6373                                                                                                                  Var("v",
6374                                                                                                                      CTy"PSR")]))))),
6375                                                                                                Close
6376                                                                                                  (AVar
6377                                                                                                     uTy,
6378                                                                                                   MB(MR(Close
6379                                                                                                           (qVar"s",
6380                                                                                                            Dest
6381                                                                                                              ("CPSR",
6382                                                                                                               CTy"PSR",
6383                                                                                                               qVar"s"))),
6384                                                                                                      Close
6385                                                                                                        (Var("v",
6386                                                                                                             CTy"PSR"),
6387                                                                                                         MB(MB(MB(MU(TP[Var("v",
6388                                                                                                                            CTy"PSR"),
6389                                                                                                                        LW(0,
6390                                                                                                                           8)],
6391                                                                                                                     qTy),
6392                                                                                                                  Close
6393                                                                                                                    (Var("v",
6394                                                                                                                         PTy(CTy"PSR",
6395                                                                                                                             F8)),
6396                                                                                                                     MU(Rupd
6397                                                                                                                          ("IT",
6398                                                                                                                           Var("v",
6399                                                                                                                               PTy(CTy"PSR",
6400                                                                                                                                   F8))),
6401                                                                                                                        qTy))),
6402                                                                                                               Close
6403                                                                                                                 (Var("v",
6404                                                                                                                      CTy"PSR"),
6405                                                                                                                  MW(Close
6406                                                                                                                       (qVar"s",
6407                                                                                                                        Rupd
6408                                                                                                                          ("CPSR",
6409                                                                                                                           TP[qVar"s",
6410                                                                                                                              Var("v",
6411                                                                                                                                  CTy"PSR")]))))),
6412                                                                                                            Close
6413                                                                                                              (AVar
6414                                                                                                                 uTy,
6415                                                                                                               MB(MR(Close
6416                                                                                                                       (qVar"s",
6417                                                                                                                        Dest
6418                                                                                                                          ("CP15",
6419                                                                                                                           CTy"CP15",
6420                                                                                                                           qVar"s"))),
6421                                                                                                                  Close
6422                                                                                                                    (Var("v",
6423                                                                                                                         CTy"CP15"),
6424                                                                                                                     MB(MB(MU(Dest
6425                                                                                                                                ("MVBAR",
6426                                                                                                                                 F32,
6427                                                                                                                                 Var("v",
6428                                                                                                                                     CTy"CP15")),
6429                                                                                                                              qTy),
6430                                                                                                                           Close
6431                                                                                                                             (Var("v",
6432                                                                                                                                  F32),
6433                                                                                                                              MU(Bop(Add,
6434                                                                                                                                     Var("v",
6435                                                                                                                                         F32),
6436                                                                                                                                     Var("vect_offset",
6437                                                                                                                                         F32)),
6438                                                                                                                                 qTy))),
6439                                                                                                                        Close
6440                                                                                                                          (Var("v",
6441                                                                                                                               F32),
6442                                                                                                                           Call
6443                                                                                                                             ("BranchTo",
6444                                                                                                                              ATy(qTy,
6445                                                                                                                                  PTy(uTy,
6446                                                                                                                                      qTy)),
6447                                                                                                                              Var("v",
6448                                                                                                                                  F32)))))))))))))))))))))))))))))))))))))))))))
6449;
6450val TakeReset_def = Def
6451  ("TakeReset",AVar uTy,
6452   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
6453      Close
6454        (Var("v",CTy"PSR"),
6455         MB(MB(MB(MU(TP[Var("v",CTy"PSR"),LW(19,5)],qTy),
6456                  Close
6457                    (Var("v",PTy(CTy"PSR",FTy 5)),
6458                     MU(Rupd("M",Var("v",PTy(CTy"PSR",FTy 5))),qTy))),
6459               Close
6460                 (Var("v",CTy"PSR"),
6461                  MW(Close
6462                       (qVar"s",Rupd("CPSR",TP[qVar"s",Var("v",CTy"PSR")]))))),
6463            Close
6464              (AVar uTy,
6465               MB(Call("HaveSecurityExt",ATy(qTy,PTy(bTy,qTy)),LU),
6466                  Close
6467                    (bVar"v",
6468                     MB(ITE(bVar"v",
6469                            MB(MR(Close
6470                                    (qVar"s",
6471                                     Dest("CP15",CTy"CP15",qVar"s"))),
6472                               Close
6473                                 (Var("v",CTy"CP15"),
6474                                  MB(MU(Dest
6475                                          ("SCR",CTy"SCR",
6476                                           Var("v",CTy"CP15")),qTy),
6477                                     Close
6478                                       (Var("x0",CTy"SCR"),
6479                                        MB(MR(Close
6480                                                (qVar"s",
6481                                                 Dest
6482                                                   ("CP15",CTy"CP15",
6483                                                    qVar"s"))),
6484                                           Close
6485                                             (Var("v",CTy"CP15"),
6486                                              MB(MB(MU(TP[Var("v",
6487                                                              CTy"CP15"),
6488                                                          Rupd
6489                                                            ("NS",
6490                                                             TP[Var("x0",
6491                                                                    CTy"SCR"),
6492                                                                LF])],qTy),
6493                                                    Close
6494                                                      (Var("v",
6495                                                           PTy(CTy"CP15",
6496                                                               CTy"SCR")),
6497                                                       MU(Rupd
6498                                                            ("SCR",
6499                                                             Var("v",
6500                                                                 PTy(CTy"CP15",
6501                                                                     CTy"SCR"))),
6502                                                          qTy))),
6503                                                 Close
6504                                                   (Var("v",CTy"CP15"),
6505                                                    MW(Close
6506                                                         (qVar"s",
6507                                                          Rupd
6508                                                            ("CP15",
6509                                                             TP[qVar"s",
6510                                                                Var("v",
6511                                                                    CTy"CP15")]))))))))))),
6512                            MU(LU,qTy)),
6513                        Close
6514                          (AVar uTy,
6515                           MB(MR(Close
6516                                   (qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
6517                              Close
6518                                (Var("v",CTy"PSR"),
6519                                 MB(MB(MB(MU(TP[Var("v",CTy"PSR"),LT],qTy),
6520                                          Close
6521                                            (Var("v",PTy(CTy"PSR",bTy)),
6522                                             MU(Rupd
6523                                                  ("I",
6524                                                   Var("v",
6525                                                       PTy(CTy"PSR",bTy))),
6526                                                qTy))),
6527                                       Close
6528                                         (Var("v",CTy"PSR"),
6529                                          MW(Close
6530                                               (qVar"s",
6531                                                Rupd
6532                                                  ("CPSR",
6533                                                   TP[qVar"s",
6534                                                      Var("v",CTy"PSR")]))))),
6535                                    Close
6536                                      (AVar uTy,
6537                                       MB(MR(Close
6538                                               (qVar"s",
6539                                                Dest
6540                                                  ("CPSR",CTy"PSR",qVar"s"))),
6541                                          Close
6542                                            (Var("v",CTy"PSR"),
6543                                             MB(MB(MB(MU(TP[Var("v",
6544                                                                CTy"PSR"),
6545                                                            LT],qTy),
6546                                                      Close
6547                                                        (Var("v",
6548                                                             PTy(CTy"PSR",
6549                                                                 bTy)),
6550                                                         MU(Rupd
6551                                                              ("F",
6552                                                               Var("v",
6553                                                                   PTy(CTy"PSR",
6554                                                                       bTy))),
6555                                                            qTy))),
6556                                                   Close
6557                                                     (Var("v",CTy"PSR"),
6558                                                      MW(Close
6559                                                           (qVar"s",
6560                                                            Rupd
6561                                                              ("CPSR",
6562                                                               TP[qVar"s",
6563                                                                  Var("v",
6564                                                                      CTy"PSR")]))))),
6565                                                Close
6566                                                  (AVar uTy,
6567                                                   MB(MR(Close
6568                                                           (qVar"s",
6569                                                            Dest
6570                                                              ("CPSR",
6571                                                               CTy"PSR",
6572                                                               qVar"s"))),
6573                                                      Close
6574                                                        (Var("v",CTy"PSR"),
6575                                                         MB(MB(MB(MU(TP[Var("v",
6576                                                                            CTy"PSR"),
6577                                                                        LT],
6578                                                                     qTy),
6579                                                                  Close
6580                                                                    (Var("v",
6581                                                                         PTy(CTy"PSR",
6582                                                                             bTy)),
6583                                                                     MU(Rupd
6584                                                                          ("A",
6585                                                                           Var("v",
6586                                                                               PTy(CTy"PSR",
6587                                                                                   bTy))),
6588                                                                        qTy))),
6589                                                               Close
6590                                                                 (Var("v",
6591                                                                      CTy"PSR"),
6592                                                                  MW(Close
6593                                                                       (qVar"s",
6594                                                                        Rupd
6595                                                                          ("CPSR",
6596                                                                           TP[qVar"s",
6597                                                                              Var("v",
6598                                                                                  CTy"PSR")]))))),
6599                                                            Close
6600                                                              (AVar uTy,
6601                                                               MB(MR(Close
6602                                                                       (qVar"s",
6603                                                                        Dest
6604                                                                          ("CPSR",
6605                                                                           CTy"PSR",
6606                                                                           qVar"s"))),
6607                                                                  Close
6608                                                                    (Var("v",
6609                                                                         CTy"PSR"),
6610                                                                     MB(MB(MB(MU(TP[Var("v",
6611                                                                                        CTy"PSR"),
6612                                                                                    LW(0,
6613                                                                                       8)],
6614                                                                                 qTy),
6615                                                                              Close
6616                                                                                (Var("v",
6617                                                                                     PTy(CTy"PSR",
6618                                                                                         F8)),
6619                                                                                 MU(Rupd
6620                                                                                      ("IT",
6621                                                                                       Var("v",
6622                                                                                           PTy(CTy"PSR",
6623                                                                                               F8))),
6624                                                                                    qTy))),
6625                                                                           Close
6626                                                                             (Var("v",
6627                                                                                  CTy"PSR"),
6628                                                                              MW(Close
6629                                                                                   (qVar"s",
6630                                                                                    Rupd
6631                                                                                      ("CPSR",
6632                                                                                       TP[qVar"s",
6633                                                                                          Var("v",
6634                                                                                              CTy"PSR")]))))),
6635                                                                        Close
6636                                                                          (AVar
6637                                                                             uTy,
6638                                                                           MB(MR(Close
6639                                                                                   (qVar"s",
6640                                                                                    Dest
6641                                                                                      ("CPSR",
6642                                                                                       CTy"PSR",
6643                                                                                       qVar"s"))),
6644                                                                              Close
6645                                                                                (Var("v",
6646                                                                                     CTy"PSR"),
6647                                                                                 MB(MB(MB(MU(TP[Var("v",
6648                                                                                                    CTy"PSR"),
6649                                                                                                LF],
6650                                                                                             qTy),
6651                                                                                          Close
6652                                                                                            (Var("v",
6653                                                                                                 PTy(CTy"PSR",
6654                                                                                                     bTy)),
6655                                                                                             MU(Rupd
6656                                                                                                  ("J",
6657                                                                                                   Var("v",
6658                                                                                                       PTy(CTy"PSR",
6659                                                                                                           bTy))),
6660                                                                                                qTy))),
6661                                                                                       Close
6662                                                                                         (Var("v",
6663                                                                                              CTy"PSR"),
6664                                                                                          MW(Close
6665                                                                                               (qVar"s",
6666                                                                                                Rupd
6667                                                                                                  ("CPSR",
6668                                                                                                   TP[qVar"s",
6669                                                                                                      Var("v",
6670                                                                                                          CTy"PSR")]))))),
6671                                                                                    Close
6672                                                                                      (AVar
6673                                                                                         uTy,
6674                                                                                       MB(MR(Close
6675                                                                                               (qVar"s",
6676                                                                                                Dest
6677                                                                                                  ("CPSR",
6678                                                                                                   CTy"PSR",
6679                                                                                                   qVar"s"))),
6680                                                                                          Close
6681                                                                                            (Var("v",
6682                                                                                                 CTy"PSR"),
6683                                                                                             MB(MB(MB(MB(MR(Close
6684                                                                                                              (qVar"s",
6685                                                                                                               Dest
6686                                                                                                                 ("CP15",
6687                                                                                                                  CTy"CP15",
6688                                                                                                                  qVar"s"))),
6689                                                                                                         Close
6690                                                                                                           (Var("v0",
6691                                                                                                                CTy"CP15"),
6692                                                                                                            MB(MB(MU(Dest
6693                                                                                                                       ("SCTLR",
6694                                                                                                                        CTy"SCTLR",
6695                                                                                                                        Var("v0",
6696                                                                                                                            CTy"CP15")),
6697                                                                                                                     qTy),
6698                                                                                                                  Close
6699                                                                                                                    (Var("v",
6700                                                                                                                         CTy"SCTLR"),
6701                                                                                                                     MU(Dest
6702                                                                                                                          ("TE",
6703                                                                                                                           bTy,
6704                                                                                                                           Var("v",
6705                                                                                                                               CTy"SCTLR")),
6706                                                                                                                        qTy))),
6707                                                                                                               Close
6708                                                                                                                 (bVar"v0",
6709                                                                                                                  MU(TP[Var("v",
6710                                                                                                                            CTy"PSR"),
6711                                                                                                                        bVar"v0"],
6712                                                                                                                     qTy))))),
6713                                                                                                      Close
6714                                                                                                        (Var("v",
6715                                                                                                             PTy(CTy"PSR",
6716                                                                                                                 bTy)),
6717                                                                                                         MU(Rupd
6718                                                                                                              ("T",
6719                                                                                                               Var("v",
6720                                                                                                                   PTy(CTy"PSR",
6721                                                                                                                       bTy))),
6722                                                                                                            qTy))),
6723                                                                                                   Close
6724                                                                                                     (Var("v",
6725                                                                                                          CTy"PSR"),
6726                                                                                                      MW(Close
6727                                                                                                           (qVar"s",
6728                                                                                                            Rupd
6729                                                                                                              ("CPSR",
6730                                                                                                               TP[qVar"s",
6731                                                                                                                  Var("v",
6732                                                                                                                      CTy"PSR")]))))),
6733                                                                                                Close
6734                                                                                                  (AVar
6735                                                                                                     uTy,
6736                                                                                                   MB(MR(Close
6737                                                                                                           (qVar"s",
6738                                                                                                            Dest
6739                                                                                                              ("CPSR",
6740                                                                                                               CTy"PSR",
6741                                                                                                               qVar"s"))),
6742                                                                                                      Close
6743                                                                                                        (Var("v",
6744                                                                                                             CTy"PSR"),
6745                                                                                                         MB(MB(MB(MB(MR(Close
6746                                                                                                                          (qVar"s",
6747                                                                                                                           Dest
6748                                                                                                                             ("CP15",
6749                                                                                                                              CTy"CP15",
6750                                                                                                                              qVar"s"))),
6751                                                                                                                     Close
6752                                                                                                                       (Var("v0",
6753                                                                                                                            CTy"CP15"),
6754                                                                                                                        MB(MB(MU(Dest
6755                                                                                                                                   ("SCTLR",
6756                                                                                                                                    CTy"SCTLR",
6757                                                                                                                                    Var("v0",
6758                                                                                                                                        CTy"CP15")),
6759                                                                                                                                 qTy),
6760                                                                                                                              Close
6761                                                                                                                                (Var("v",
6762                                                                                                                                     CTy"SCTLR"),
6763                                                                                                                                 MU(Dest
6764                                                                                                                                      ("EE",
6765                                                                                                                                       bTy,
6766                                                                                                                                       Var("v",
6767                                                                                                                                           CTy"SCTLR")),
6768                                                                                                                                    qTy))),
6769                                                                                                                           Close
6770                                                                                                                             (bVar"v0",
6771                                                                                                                              MU(TP[Var("v",
6772                                                                                                                                        CTy"PSR"),
6773                                                                                                                                    bVar"v0"],
6774                                                                                                                                 qTy))))),
6775                                                                                                                  Close
6776                                                                                                                    (Var("v",
6777                                                                                                                         PTy(CTy"PSR",
6778                                                                                                                             bTy)),
6779                                                                                                                     MU(Rupd
6780                                                                                                                          ("E",
6781                                                                                                                           Var("v",
6782                                                                                                                               PTy(CTy"PSR",
6783                                                                                                                                   bTy))),
6784                                                                                                                        qTy))),
6785                                                                                                               Close
6786                                                                                                                 (Var("v",
6787                                                                                                                      CTy"PSR"),
6788                                                                                                                  MW(Close
6789                                                                                                                       (qVar"s",
6790                                                                                                                        Rupd
6791                                                                                                                          ("CPSR",
6792                                                                                                                           TP[qVar"s",
6793                                                                                                                              Var("v",
6794                                                                                                                                  CTy"PSR")]))))),
6795                                                                                                            Close
6796                                                                                                              (AVar
6797                                                                                                                 uTy,
6798                                                                                                               MB(Call
6799                                                                                                                    ("ExcVectorBase",
6800                                                                                                                     ATy(qTy,
6801                                                                                                                         PTy(F32,
6802                                                                                                                             qTy)),
6803                                                                                                                     LU),
6804                                                                                                                  Close
6805                                                                                                                    (Var("v",
6806                                                                                                                         F32),
6807                                                                                                                     MB(MU(Bop(Add,
6808                                                                                                                               Var("v",
6809                                                                                                                                   F32),
6810                                                                                                                               LW(0,
6811                                                                                                                                  32)),
6812                                                                                                                           qTy),
6813                                                                                                                        Close
6814                                                                                                                          (Var("v",
6815                                                                                                                               F32),
6816                                                                                                                           Call
6817                                                                                                                             ("BranchTo",
6818                                                                                                                              ATy(qTy,
6819                                                                                                                                  PTy(uTy,
6820                                                                                                                                      qTy)),
6821                                                                                                                              Var("v",
6822                                                                                                                                  F32)))))))))))))))))))))))))))))))))))))))))))
6823;
6824val TakeUndefInstrException_def = Def
6825  ("TakeUndefInstrException",AVar uTy,
6826   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
6827      Close
6828        (Var("v",CTy"PSR"),
6829         MB(MB(MU(Dest("T",bTy,Var("v",CTy"PSR")),qTy),
6830               Close
6831                 (bVar"b",
6832                  ITE(bVar"b",
6833                      MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
6834                         Close
6835                           (Var("v",F32),
6836                            MU(Bop(Sub,Var("v",F32),LW(2,32)),qTy))),
6837                      MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
6838                         Close
6839                           (Var("v",F32),
6840                            MU(Bop(Sub,Var("v",F32),LW(4,32)),qTy)))))),
6841            Close
6842              (Var("new_lr_value",F32),
6843               MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
6844                  Close
6845                    (Var("new_spsr_value",CTy"PSR"),
6846                     Let(Var("vect_offset",F32),LW(4,32),
6847                         MB(Call("HaveVirtExt",ATy(qTy,PTy(bTy,qTy)),LU),
6848                            Close
6849                              (bVar"v",
6850                               MB(MB(MB(ITE(bVar"v",
6851                                            Call
6852                                              ("HaveSecurityExt",
6853                                               ATy(qTy,PTy(bTy,qTy)),LU),
6854                                            MU(LF,qTy)),
6855                                        Close
6856                                          (bVar"b",
6857                                           ITE(bVar"b",
6858                                               MB(MR(Close
6859                                                       (qVar"s",
6860                                                        Dest
6861                                                          ("CP15",
6862                                                           CTy"CP15",
6863                                                           qVar"s"))),
6864                                                  Close
6865                                                    (Var("v",CTy"CP15"),
6866                                                     MB(MU(Dest
6867                                                             ("SCR",
6868                                                              CTy"SCR",
6869                                                              Var("v",
6870                                                                  CTy"CP15")),
6871                                                           qTy),
6872                                                        Close
6873                                                          (Var("v",
6874                                                               CTy"SCR"),
6875                                                           MU(Dest
6876                                                                ("NS",bTy,
6877                                                                 Var("v",
6878                                                                     CTy"SCR")),
6879                                                              qTy))))),
6880                                               MU(LF,qTy)))),
6881                                     Close
6882                                       (bVar"b",
6883                                        ITE(bVar"b",
6884                                            MB(MR(Close
6885                                                    (qVar"s",
6886                                                     Dest
6887                                                       ("CPSR",CTy"PSR",
6888                                                        qVar"s"))),
6889                                               Close
6890                                                 (Var("v",CTy"PSR"),
6891                                                  MB(MU(Dest
6892                                                          ("M",FTy 5,
6893                                                           Var("v",
6894                                                               CTy"PSR")),
6895                                                        qTy),
6896                                                     Close
6897                                                       (Var("v",FTy 5),
6898                                                        MU(EQ(Var("v",
6899                                                                  FTy 5),
6900                                                              LW(26,5)),
6901                                                           qTy))))),
6902                                            MU(LF,qTy)))),
6903                                  Close
6904                                    (bVar"take_to_hyp",
6905                                     MB(Call
6906                                          ("HaveVirtExt",
6907                                           ATy(qTy,PTy(bTy,qTy)),LU),
6908                                        Close
6909                                          (bVar"v",
6910                                           MB(MB(MB(MB(ITE(bVar"v",
6911                                                           Call
6912                                                             ("HaveSecurityExt",
6913                                                              ATy(qTy,
6914                                                                  PTy(bTy,
6915                                                                      qTy)),
6916                                                              LU),
6917                                                           MU(LF,qTy)),
6918                                                       Close
6919                                                         (bVar"b",
6920                                                          ITE(bVar"b",
6921                                                              MB(Call
6922                                                                   ("IsSecure",
6923                                                                    ATy(qTy,
6924                                                                        PTy(bTy,
6925                                                                            qTy)),
6926                                                                    LU),
6927                                                                 Close
6928                                                                   (bVar"v",
6929                                                                    MU(Mop(Not,
6930                                                                           bVar"v"),
6931                                                                       qTy))),
6932                                                              MU(LF,qTy)))),
6933                                                    Close
6934                                                      (bVar"b",
6935                                                       ITE(bVar"b",
6936                                                           MB(MR(Close
6937                                                                   (qVar"s",
6938                                                                    Dest
6939                                                                      ("CP15",
6940                                                                       CTy"CP15",
6941                                                                       qVar"s"))),
6942                                                              Close
6943                                                                (Var("v",
6944                                                                     CTy"CP15"),
6945                                                                 MB(MU(Dest
6946                                                                         ("HCR",
6947                                                                          CTy"HCR",
6948                                                                          Var("v",
6949                                                                              CTy"CP15")),
6950                                                                       qTy),
6951                                                                    Close
6952                                                                      (Var("v",
6953                                                                           CTy"HCR"),
6954                                                                       MU(Dest
6955                                                                            ("TGE",
6956                                                                             bTy,
6957                                                                             Var("v",
6958                                                                                 CTy"HCR")),
6959                                                                          qTy))))),
6960                                                           MU(LF,qTy)))),
6961                                                 Close
6962                                                   (bVar"b",
6963                                                    ITE(bVar"b",
6964                                                        MB(MR(Close
6965                                                                (qVar"s",
6966                                                                 Dest
6967                                                                   ("CPSR",
6968                                                                    CTy"PSR",
6969                                                                    qVar"s"))),
6970                                                           Close
6971                                                             (Var("v",
6972                                                                  CTy"PSR"),
6973                                                              MB(MU(Dest
6974                                                                      ("M",
6975                                                                       FTy 5,
6976                                                                       Var("v",
6977                                                                           CTy"PSR")),
6978                                                                    qTy),
6979                                                                 Close
6980                                                                   (Var("v",
6981                                                                        FTy 5),
6982                                                                    MU(EQ(Var("v",
6983                                                                              FTy 5),
6984                                                                          LW(16,
6985                                                                             5)),
6986                                                                       qTy))))),
6987                                                        MU(LF,qTy)))),
6988                                              Close
6989                                                (bVar"route_to_hyp",
6990                                                 MB(MR(Close
6991                                                         (qVar"s",
6992                                                          Dest
6993                                                            ("CPSR",
6994                                                             CTy"PSR",
6995                                                             qVar"s"))),
6996                                                    Close
6997                                                      (Var("v",CTy"PSR"),
6998                                                       MB(MB(MU(Dest
6999                                                                  ("T",
7000                                                                   bTy,
7001                                                                   Var("v",
7002                                                                       CTy"PSR")),
7003                                                                qTy),
7004                                                             Close
7005                                                               (bVar"b",
7006                                                                MU(ITE(bVar"b",
7007                                                                       LW(2,
7008                                                                          32),
7009                                                                       LW(4,
7010                                                                          32)),
7011                                                                   qTy))),
7012                                                          Close
7013                                                            (Var("return_offset",
7014                                                                 F32),
7015                                                             Let(Var("preferred_exceptn_return",
7016                                                                     F32),
7017                                                                 Bop(Sub,
7018                                                                     Var("new_lr_value",
7019                                                                         F32),
7020                                                                     Var("return_offset",
7021                                                                         F32)),
7022                                                                 ITB([(bVar"take_to_hyp",
7023                                                                       Call
7024                                                                         ("EnterHypMode",
7025                                                                          ATy(qTy,
7026                                                                              PTy(uTy,
7027                                                                                  qTy)),
7028                                                                          TP[Var("new_spsr_value",
7029                                                                                 CTy"PSR"),
7030                                                                             Var("preferred_exceptn_return",
7031                                                                                 F32),
7032                                                                             Var("vect_offset",
7033                                                                                 F32)])),
7034                                                                      (bVar"route_to_hyp",
7035                                                                       Call
7036                                                                         ("EnterHypMode",
7037                                                                          ATy(qTy,
7038                                                                              PTy(uTy,
7039                                                                                  qTy)),
7040                                                                          TP[Var("new_spsr_value",
7041                                                                                 CTy"PSR"),
7042                                                                             Var("preferred_exceptn_return",
7043                                                                                 F32),
7044                                                                             LW(20,
7045                                                                                32)]))],
7046                                                                     MB(MR(Close
7047                                                                             (qVar"s",
7048                                                                              Dest
7049                                                                                ("CPSR",
7050                                                                                 CTy"PSR",
7051                                                                                 qVar"s"))),
7052                                                                        Close
7053                                                                          (Var("v",
7054                                                                               CTy"PSR"),
7055                                                                           MB(MB(MB(MU(Dest
7056                                                                                         ("M",
7057                                                                                          FTy 5,
7058                                                                                          Var("v",
7059                                                                                              CTy"PSR")),
7060                                                                                       qTy),
7061                                                                                    Close
7062                                                                                      (Var("v",
7063                                                                                           FTy 5),
7064                                                                                       MU(EQ(Var("v",
7065                                                                                                 FTy 5),
7066                                                                                             LW(22,
7067                                                                                                5)),
7068                                                                                          qTy))),
7069                                                                                 Close
7070                                                                                   (bVar"b",
7071                                                                                    ITE(bVar"b",
7072                                                                                        MB(MR(Close
7073                                                                                                (qVar"s",
7074                                                                                                 Dest
7075                                                                                                   ("CP15",
7076                                                                                                    CTy"CP15",
7077                                                                                                    qVar"s"))),
7078                                                                                           Close
7079                                                                                             (Var("v",
7080                                                                                                  CTy"CP15"),
7081                                                                                              MB(MU(Dest
7082                                                                                                      ("SCR",
7083                                                                                                       CTy"SCR",
7084                                                                                                       Var("v",
7085                                                                                                           CTy"CP15")),
7086                                                                                                    qTy),
7087                                                                                                 Close
7088                                                                                                   (Var("x0",
7089                                                                                                        CTy"SCR"),
7090                                                                                                    MB(MR(Close
7091                                                                                                            (qVar"s",
7092                                                                                                             Dest
7093                                                                                                               ("CP15",
7094                                                                                                                CTy"CP15",
7095                                                                                                                qVar"s"))),
7096                                                                                                       Close
7097                                                                                                         (Var("v",
7098                                                                                                              CTy"CP15"),
7099                                                                                                          MB(MB(MU(TP[Var("v",
7100                                                                                                                          CTy"CP15"),
7101                                                                                                                      Rupd
7102                                                                                                                        ("NS",
7103                                                                                                                         TP[Var("x0",
7104                                                                                                                                CTy"SCR"),
7105                                                                                                                            LF])],
7106                                                                                                                   qTy),
7107                                                                                                                Close
7108                                                                                                                  (Var("v",
7109                                                                                                                       PTy(CTy"CP15",
7110                                                                                                                           CTy"SCR")),
7111                                                                                                                   MU(Rupd
7112                                                                                                                        ("SCR",
7113                                                                                                                         Var("v",
7114                                                                                                                             PTy(CTy"CP15",
7115                                                                                                                                 CTy"SCR"))),
7116                                                                                                                      qTy))),
7117                                                                                                             Close
7118                                                                                                               (Var("v",
7119                                                                                                                    CTy"CP15"),
7120                                                                                                                MW(Close
7121                                                                                                                     (qVar"s",
7122                                                                                                                      Rupd
7123                                                                                                                        ("CP15",
7124                                                                                                                         TP[qVar"s",
7125                                                                                                                            Var("v",
7126                                                                                                                                CTy"CP15")]))))))))))),
7127                                                                                        MU(LU,
7128                                                                                           qTy)))),
7129                                                                              Close
7130                                                                                (AVar
7131                                                                                   uTy,
7132                                                                                 MB(MR(Close
7133                                                                                         (qVar"s",
7134                                                                                          Dest
7135                                                                                            ("CPSR",
7136                                                                                             CTy"PSR",
7137                                                                                             qVar"s"))),
7138                                                                                    Close
7139                                                                                      (Var("v",
7140                                                                                           CTy"PSR"),
7141                                                                                       MB(MB(MB(MU(TP[Var("v",
7142                                                                                                          CTy"PSR"),
7143                                                                                                      LW(27,
7144                                                                                                         5)],
7145                                                                                                   qTy),
7146                                                                                                Close
7147                                                                                                  (Var("v",
7148                                                                                                       PTy(CTy"PSR",
7149                                                                                                           FTy 5)),
7150                                                                                                   MU(Rupd
7151                                                                                                        ("M",
7152                                                                                                         Var("v",
7153                                                                                                             PTy(CTy"PSR",
7154                                                                                                                 FTy 5))),
7155                                                                                                      qTy))),
7156                                                                                             Close
7157                                                                                               (Var("v",
7158                                                                                                    CTy"PSR"),
7159                                                                                                MW(Close
7160                                                                                                     (qVar"s",
7161                                                                                                      Rupd
7162                                                                                                        ("CPSR",
7163                                                                                                         TP[qVar"s",
7164                                                                                                            Var("v",
7165                                                                                                                CTy"PSR")]))))),
7166                                                                                          Close
7167                                                                                            (AVar
7168                                                                                               uTy,
7169                                                                                             MB(Call
7170                                                                                                  ("write'SPSR",
7171                                                                                                   ATy(qTy,
7172                                                                                                       PTy(uTy,
7173                                                                                                           qTy)),
7174                                                                                                   Var("new_spsr_value",
7175                                                                                                       CTy"PSR")),
7176                                                                                                Close
7177                                                                                                  (AVar
7178                                                                                                     uTy,
7179                                                                                                   MB(Call
7180                                                                                                        ("write'R",
7181                                                                                                         ATy(qTy,
7182                                                                                                             PTy(uTy,
7183                                                                                                                 qTy)),
7184                                                                                                         TP[Var("new_lr_value",
7185                                                                                                                F32),
7186                                                                                                            LW(14,
7187                                                                                                               4)]),
7188                                                                                                      Close
7189                                                                                                        (AVar
7190                                                                                                           uTy,
7191                                                                                                         MB(MR(Close
7192                                                                                                                 (qVar"s",
7193                                                                                                                  Dest
7194                                                                                                                    ("CPSR",
7195                                                                                                                     CTy"PSR",
7196                                                                                                                     qVar"s"))),
7197                                                                                                            Close
7198                                                                                                              (Var("v",
7199                                                                                                                   CTy"PSR"),
7200                                                                                                               MB(MB(MB(MU(TP[Var("v",
7201                                                                                                                                  CTy"PSR"),
7202                                                                                                                              LT],
7203                                                                                                                           qTy),
7204                                                                                                                        Close
7205                                                                                                                          (Var("v",
7206                                                                                                                               PTy(CTy"PSR",
7207                                                                                                                                   bTy)),
7208                                                                                                                           MU(Rupd
7209                                                                                                                                ("I",
7210                                                                                                                                 Var("v",
7211                                                                                                                                     PTy(CTy"PSR",
7212                                                                                                                                         bTy))),
7213                                                                                                                              qTy))),
7214                                                                                                                     Close
7215                                                                                                                       (Var("v",
7216                                                                                                                            CTy"PSR"),
7217                                                                                                                        MW(Close
7218                                                                                                                             (qVar"s",
7219                                                                                                                              Rupd
7220                                                                                                                                ("CPSR",
7221                                                                                                                                 TP[qVar"s",
7222                                                                                                                                    Var("v",
7223                                                                                                                                        CTy"PSR")]))))),
7224                                                                                                                  Close
7225                                                                                                                    (AVar
7226                                                                                                                       uTy,
7227                                                                                                                     MB(MR(Close
7228                                                                                                                             (qVar"s",
7229                                                                                                                              Dest
7230                                                                                                                                ("CPSR",
7231                                                                                                                                 CTy"PSR",
7232                                                                                                                                 qVar"s"))),
7233                                                                                                                        Close
7234                                                                                                                          (Var("v",
7235                                                                                                                               CTy"PSR"),
7236                                                                                                                           MB(MB(MB(MU(TP[Var("v",
7237                                                                                                                                              CTy"PSR"),
7238                                                                                                                                          LW(0,
7239                                                                                                                                             8)],
7240                                                                                                                                       qTy),
7241                                                                                                                                    Close
7242                                                                                                                                      (Var("v",
7243                                                                                                                                           PTy(CTy"PSR",
7244                                                                                                                                               F8)),
7245                                                                                                                                       MU(Rupd
7246                                                                                                                                            ("IT",
7247                                                                                                                                             Var("v",
7248                                                                                                                                                 PTy(CTy"PSR",
7249                                                                                                                                                     F8))),
7250                                                                                                                                          qTy))),
7251                                                                                                                                 Close
7252                                                                                                                                   (Var("v",
7253                                                                                                                                        CTy"PSR"),
7254                                                                                                                                    MW(Close
7255                                                                                                                                         (qVar"s",
7256                                                                                                                                          Rupd
7257                                                                                                                                            ("CPSR",
7258                                                                                                                                             TP[qVar"s",
7259                                                                                                                                                Var("v",
7260                                                                                                                                                    CTy"PSR")]))))),
7261                                                                                                                              Close
7262                                                                                                                                (AVar
7263                                                                                                                                   uTy,
7264                                                                                                                                 MB(MR(Close
7265                                                                                                                                         (qVar"s",
7266                                                                                                                                          Dest
7267                                                                                                                                            ("CPSR",
7268                                                                                                                                             CTy"PSR",
7269                                                                                                                                             qVar"s"))),
7270                                                                                                                                    Close
7271                                                                                                                                      (Var("v",
7272                                                                                                                                           CTy"PSR"),
7273                                                                                                                                       MB(MB(MB(MU(TP[Var("v",
7274                                                                                                                                                          CTy"PSR"),
7275                                                                                                                                                      LF],
7276                                                                                                                                                   qTy),
7277                                                                                                                                                Close
7278                                                                                                                                                  (Var("v",
7279                                                                                                                                                       PTy(CTy"PSR",
7280                                                                                                                                                           bTy)),
7281                                                                                                                                                   MU(Rupd
7282                                                                                                                                                        ("J",
7283                                                                                                                                                         Var("v",
7284                                                                                                                                                             PTy(CTy"PSR",
7285                                                                                                                                                                 bTy))),
7286                                                                                                                                                      qTy))),
7287                                                                                                                                             Close
7288                                                                                                                                               (Var("v",
7289                                                                                                                                                    CTy"PSR"),
7290                                                                                                                                                MW(Close
7291                                                                                                                                                     (qVar"s",
7292                                                                                                                                                      Rupd
7293                                                                                                                                                        ("CPSR",
7294                                                                                                                                                         TP[qVar"s",
7295                                                                                                                                                            Var("v",
7296                                                                                                                                                                CTy"PSR")]))))),
7297                                                                                                                                          Close
7298                                                                                                                                            (AVar
7299                                                                                                                                               uTy,
7300                                                                                                                                             MB(MR(Close
7301                                                                                                                                                     (qVar"s",
7302                                                                                                                                                      Dest
7303                                                                                                                                                        ("CPSR",
7304                                                                                                                                                         CTy"PSR",
7305                                                                                                                                                         qVar"s"))),
7306                                                                                                                                                Close
7307                                                                                                                                                  (Var("v",
7308                                                                                                                                                       CTy"PSR"),
7309                                                                                                                                                   MB(MB(MB(MB(MR(Close
7310                                                                                                                                                                    (qVar"s",
7311                                                                                                                                                                     Dest
7312                                                                                                                                                                       ("CP15",
7313                                                                                                                                                                        CTy"CP15",
7314                                                                                                                                                                        qVar"s"))),
7315                                                                                                                                                               Close
7316                                                                                                                                                                 (Var("v0",
7317                                                                                                                                                                      CTy"CP15"),
7318                                                                                                                                                                  MB(MB(MU(Dest
7319                                                                                                                                                                             ("SCTLR",
7320                                                                                                                                                                              CTy"SCTLR",
7321                                                                                                                                                                              Var("v0",
7322                                                                                                                                                                                  CTy"CP15")),
7323                                                                                                                                                                           qTy),
7324                                                                                                                                                                        Close
7325                                                                                                                                                                          (Var("v",
7326                                                                                                                                                                               CTy"SCTLR"),
7327                                                                                                                                                                           MU(Dest
7328                                                                                                                                                                                ("TE",
7329                                                                                                                                                                                 bTy,
7330                                                                                                                                                                                 Var("v",
7331                                                                                                                                                                                     CTy"SCTLR")),
7332                                                                                                                                                                              qTy))),
7333                                                                                                                                                                     Close
7334                                                                                                                                                                       (bVar"v0",
7335                                                                                                                                                                        MU(TP[Var("v",
7336                                                                                                                                                                                  CTy"PSR"),
7337                                                                                                                                                                              bVar"v0"],
7338                                                                                                                                                                           qTy))))),
7339                                                                                                                                                            Close
7340                                                                                                                                                              (Var("v",
7341                                                                                                                                                                   PTy(CTy"PSR",
7342                                                                                                                                                                       bTy)),
7343                                                                                                                                                               MU(Rupd
7344                                                                                                                                                                    ("T",
7345                                                                                                                                                                     Var("v",
7346                                                                                                                                                                         PTy(CTy"PSR",
7347                                                                                                                                                                             bTy))),
7348                                                                                                                                                                  qTy))),
7349                                                                                                                                                         Close
7350                                                                                                                                                           (Var("v",
7351                                                                                                                                                                CTy"PSR"),
7352                                                                                                                                                            MW(Close
7353                                                                                                                                                                 (qVar"s",
7354                                                                                                                                                                  Rupd
7355                                                                                                                                                                    ("CPSR",
7356                                                                                                                                                                     TP[qVar"s",
7357                                                                                                                                                                        Var("v",
7358                                                                                                                                                                            CTy"PSR")]))))),
7359                                                                                                                                                      Close
7360                                                                                                                                                        (AVar
7361                                                                                                                                                           uTy,
7362                                                                                                                                                         MB(MR(Close
7363                                                                                                                                                                 (qVar"s",
7364                                                                                                                                                                  Dest
7365                                                                                                                                                                    ("CPSR",
7366                                                                                                                                                                     CTy"PSR",
7367                                                                                                                                                                     qVar"s"))),
7368                                                                                                                                                            Close
7369                                                                                                                                                              (Var("v",
7370                                                                                                                                                                   CTy"PSR"),
7371                                                                                                                                                               MB(MB(MB(MB(MR(Close
7372                                                                                                                                                                                (qVar"s",
7373                                                                                                                                                                                 Dest
7374                                                                                                                                                                                   ("CP15",
7375                                                                                                                                                                                    CTy"CP15",
7376                                                                                                                                                                                    qVar"s"))),
7377                                                                                                                                                                           Close
7378                                                                                                                                                                             (Var("v0",
7379                                                                                                                                                                                  CTy"CP15"),
7380                                                                                                                                                                              MB(MB(MU(Dest
7381                                                                                                                                                                                         ("SCTLR",
7382                                                                                                                                                                                          CTy"SCTLR",
7383                                                                                                                                                                                          Var("v0",
7384                                                                                                                                                                                              CTy"CP15")),
7385                                                                                                                                                                                       qTy),
7386                                                                                                                                                                                    Close
7387                                                                                                                                                                                      (Var("v",
7388                                                                                                                                                                                           CTy"SCTLR"),
7389                                                                                                                                                                                       MU(Dest
7390                                                                                                                                                                                            ("EE",
7391                                                                                                                                                                                             bTy,
7392                                                                                                                                                                                             Var("v",
7393                                                                                                                                                                                                 CTy"SCTLR")),
7394                                                                                                                                                                                          qTy))),
7395                                                                                                                                                                                 Close
7396                                                                                                                                                                                   (bVar"v0",
7397                                                                                                                                                                                    MU(TP[Var("v",
7398                                                                                                                                                                                              CTy"PSR"),
7399                                                                                                                                                                                          bVar"v0"],
7400                                                                                                                                                                                       qTy))))),
7401                                                                                                                                                                        Close
7402                                                                                                                                                                          (Var("v",
7403                                                                                                                                                                               PTy(CTy"PSR",
7404                                                                                                                                                                                   bTy)),
7405                                                                                                                                                                           MU(Rupd
7406                                                                                                                                                                                ("E",
7407                                                                                                                                                                                 Var("v",
7408                                                                                                                                                                                     PTy(CTy"PSR",
7409                                                                                                                                                                                         bTy))),
7410                                                                                                                                                                              qTy))),
7411                                                                                                                                                                     Close
7412                                                                                                                                                                       (Var("v",
7413                                                                                                                                                                            CTy"PSR"),
7414                                                                                                                                                                        MW(Close
7415                                                                                                                                                                             (qVar"s",
7416                                                                                                                                                                              Rupd
7417                                                                                                                                                                                ("CPSR",
7418                                                                                                                                                                                 TP[qVar"s",
7419                                                                                                                                                                                    Var("v",
7420                                                                                                                                                                                        CTy"PSR")]))))),
7421                                                                                                                                                                  Close
7422                                                                                                                                                                    (AVar
7423                                                                                                                                                                       uTy,
7424                                                                                                                                                                     MB(Call
7425                                                                                                                                                                          ("ExcVectorBase",
7426                                                                                                                                                                           ATy(qTy,
7427                                                                                                                                                                               PTy(F32,
7428                                                                                                                                                                                   qTy)),
7429                                                                                                                                                                           LU),
7430                                                                                                                                                                        Close
7431                                                                                                                                                                          (Var("v",
7432                                                                                                                                                                               F32),
7433                                                                                                                                                                           MB(MU(Bop(Add,
7434                                                                                                                                                                                     Var("v",
7435                                                                                                                                                                                         F32),
7436                                                                                                                                                                                     Var("vect_offset",
7437                                                                                                                                                                                         F32)),
7438                                                                                                                                                                                 qTy),
7439                                                                                                                                                                              Close
7440                                                                                                                                                                                (Var("v",
7441                                                                                                                                                                                     F32),
7442                                                                                                                                                                                 Call
7443                                                                                                                                                                                   ("BranchTo",
7444                                                                                                                                                                                    ATy(qTy,
7445                                                                                                                                                                                        PTy(uTy,
7446                                                                                                                                                                                            qTy)),
7447                                                                                                                                                                                    Var("v",
7448                                                                                                                                                                                        F32))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
7449;
7450val TakeSVCException_def = Def
7451  ("TakeSVCException",AVar uTy,
7452   MB(Call("ITAdvance",ATy(qTy,PTy(uTy,qTy)),LU),
7453      Close
7454        (AVar uTy,
7455         MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
7456            Close
7457              (Var("v",CTy"PSR"),
7458               MB(MB(MU(Dest("T",bTy,Var("v",CTy"PSR")),qTy),
7459                     Close
7460                       (bVar"b",
7461                        ITE(bVar"b",
7462                            MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
7463                               Close
7464                                 (Var("v",F32),
7465                                  MU(Bop(Sub,Var("v",F32),LW(2,32)),qTy))),
7466                            MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
7467                               Close
7468                                 (Var("v",F32),
7469                                  MU(Bop(Sub,Var("v",F32),LW(4,32)),qTy)))))),
7470                  Close
7471                    (Var("new_lr_value",F32),
7472                     MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
7473                        Close
7474                          (Var("new_spsr_value",CTy"PSR"),
7475                           Let(Var("vect_offset",F32),LW(8,32),
7476                               MB(Call
7477                                    ("HaveVirtExt",ATy(qTy,PTy(bTy,qTy)),
7478                                     LU),
7479                                  Close
7480                                    (bVar"v",
7481                                     MB(MB(MB(ITE(bVar"v",
7482                                                  Call
7483                                                    ("HaveSecurityExt",
7484                                                     ATy(qTy,PTy(bTy,qTy)),
7485                                                     LU),MU(LF,qTy)),
7486                                              Close
7487                                                (bVar"b",
7488                                                 ITE(bVar"b",
7489                                                     MB(MR(Close
7490                                                             (qVar"s",
7491                                                              Dest
7492                                                                ("CP15",
7493                                                                 CTy"CP15",
7494                                                                 qVar"s"))),
7495                                                        Close
7496                                                          (Var("v",
7497                                                               CTy"CP15"),
7498                                                           MB(MU(Dest
7499                                                                   ("SCR",
7500                                                                    CTy"SCR",
7501                                                                    Var("v",
7502                                                                        CTy"CP15")),
7503                                                                 qTy),
7504                                                              Close
7505                                                                (Var("v",
7506                                                                     CTy"SCR"),
7507                                                                 MU(Dest
7508                                                                      ("NS",
7509                                                                       bTy,
7510                                                                       Var("v",
7511                                                                           CTy"SCR")),
7512                                                                    qTy))))),
7513                                                     MU(LF,qTy)))),
7514                                           Close
7515                                             (bVar"b",
7516                                              ITE(bVar"b",
7517                                                  MB(MR(Close
7518                                                          (qVar"s",
7519                                                           Dest
7520                                                             ("CPSR",
7521                                                              CTy"PSR",
7522                                                              qVar"s"))),
7523                                                     Close
7524                                                       (Var("v",CTy"PSR"),
7525                                                        MB(MU(Dest
7526                                                                ("M",
7527                                                                 FTy 5,
7528                                                                 Var("v",
7529                                                                     CTy"PSR")),
7530                                                              qTy),
7531                                                           Close
7532                                                             (Var("v",
7533                                                                  FTy 5),
7534                                                              MU(EQ(Var("v",
7535                                                                        FTy 5),
7536                                                                    LW(26,
7537                                                                       5)),
7538                                                                 qTy))))),
7539                                                  MU(LF,qTy)))),
7540                                        Close
7541                                          (bVar"take_to_hyp",
7542                                           MB(Call
7543                                                ("HaveVirtExt",
7544                                                 ATy(qTy,PTy(bTy,qTy)),LU),
7545                                              Close
7546                                                (bVar"v",
7547                                                 MB(MB(MB(MB(ITE(bVar"v",
7548                                                                 Call
7549                                                                   ("HaveSecurityExt",
7550                                                                    ATy(qTy,
7551                                                                        PTy(bTy,
7552                                                                            qTy)),
7553                                                                    LU),
7554                                                                 MU(LF,qTy)),
7555                                                             Close
7556                                                               (bVar"b",
7557                                                                ITE(bVar"b",
7558                                                                    MB(Call
7559                                                                         ("IsSecure",
7560                                                                          ATy(qTy,
7561                                                                              PTy(bTy,
7562                                                                                  qTy)),
7563                                                                          LU),
7564                                                                       Close
7565                                                                         (bVar"v",
7566                                                                          MU(Mop(Not,
7567                                                                                 bVar"v"),
7568                                                                             qTy))),
7569                                                                    MU(LF,
7570                                                                       qTy)))),
7571                                                          Close
7572                                                            (bVar"b",
7573                                                             ITE(bVar"b",
7574                                                                 MB(MR(Close
7575                                                                         (qVar"s",
7576                                                                          Dest
7577                                                                            ("CP15",
7578                                                                             CTy"CP15",
7579                                                                             qVar"s"))),
7580                                                                    Close
7581                                                                      (Var("v",
7582                                                                           CTy"CP15"),
7583                                                                       MB(MU(Dest
7584                                                                               ("HCR",
7585                                                                                CTy"HCR",
7586                                                                                Var("v",
7587                                                                                    CTy"CP15")),
7588                                                                             qTy),
7589                                                                          Close
7590                                                                            (Var("v",
7591                                                                                 CTy"HCR"),
7592                                                                             MU(Dest
7593                                                                                  ("TGE",
7594                                                                                   bTy,
7595                                                                                   Var("v",
7596                                                                                       CTy"HCR")),
7597                                                                                qTy))))),
7598                                                                 MU(LF,qTy)))),
7599                                                       Close
7600                                                         (bVar"b",
7601                                                          ITE(bVar"b",
7602                                                              MB(MR(Close
7603                                                                      (qVar"s",
7604                                                                       Dest
7605                                                                         ("CPSR",
7606                                                                          CTy"PSR",
7607                                                                          qVar"s"))),
7608                                                                 Close
7609                                                                   (Var("v",
7610                                                                        CTy"PSR"),
7611                                                                    MB(MU(Dest
7612                                                                            ("M",
7613                                                                             FTy 5,
7614                                                                             Var("v",
7615                                                                                 CTy"PSR")),
7616                                                                          qTy),
7617                                                                       Close
7618                                                                         (Var("v",
7619                                                                              FTy 5),
7620                                                                          MU(EQ(Var("v",
7621                                                                                    FTy 5),
7622                                                                                LW(16,
7623                                                                                   5)),
7624                                                                             qTy))))),
7625                                                              MU(LF,qTy)))),
7626                                                    Close
7627                                                      (bVar"route_to_hyp",
7628                                                       ITB([(bVar"take_to_hyp",
7629                                                             Call
7630                                                               ("EnterHypMode",
7631                                                                ATy(qTy,
7632                                                                    PTy(uTy,
7633                                                                        qTy)),
7634                                                                TP[Var("new_spsr_value",
7635                                                                       CTy"PSR"),
7636                                                                   Var("new_lr_value",
7637                                                                       F32),
7638                                                                   Var("vect_offset",
7639                                                                       F32)])),
7640                                                            (bVar"route_to_hyp",
7641                                                             Call
7642                                                               ("EnterHypMode",
7643                                                                ATy(qTy,
7644                                                                    PTy(uTy,
7645                                                                        qTy)),
7646                                                                TP[Var("new_spsr_value",
7647                                                                       CTy"PSR"),
7648                                                                   Var("new_lr_value",
7649                                                                       F32),
7650                                                                   LW(20,
7651                                                                      32)]))],
7652                                                           MB(MR(Close
7653                                                                   (qVar"s",
7654                                                                    Dest
7655                                                                      ("CPSR",
7656                                                                       CTy"PSR",
7657                                                                       qVar"s"))),
7658                                                              Close
7659                                                                (Var("v",
7660                                                                     CTy"PSR"),
7661                                                                 MB(MB(MB(MU(Dest
7662                                                                               ("M",
7663                                                                                FTy 5,
7664                                                                                Var("v",
7665                                                                                    CTy"PSR")),
7666                                                                             qTy),
7667                                                                          Close
7668                                                                            (Var("v",
7669                                                                                 FTy 5),
7670                                                                             MU(EQ(Var("v",
7671                                                                                       FTy 5),
7672                                                                                   LW(22,
7673                                                                                      5)),
7674                                                                                qTy))),
7675                                                                       Close
7676                                                                         (bVar"b",
7677                                                                          ITE(bVar"b",
7678                                                                              MB(MR(Close
7679                                                                                      (qVar"s",
7680                                                                                       Dest
7681                                                                                         ("CP15",
7682                                                                                          CTy"CP15",
7683                                                                                          qVar"s"))),
7684                                                                                 Close
7685                                                                                   (Var("v",
7686                                                                                        CTy"CP15"),
7687                                                                                    MB(MU(Dest
7688                                                                                            ("SCR",
7689                                                                                             CTy"SCR",
7690                                                                                             Var("v",
7691                                                                                                 CTy"CP15")),
7692                                                                                          qTy),
7693                                                                                       Close
7694                                                                                         (Var("x0",
7695                                                                                              CTy"SCR"),
7696                                                                                          MB(MR(Close
7697                                                                                                  (qVar"s",
7698                                                                                                   Dest
7699                                                                                                     ("CP15",
7700                                                                                                      CTy"CP15",
7701                                                                                                      qVar"s"))),
7702                                                                                             Close
7703                                                                                               (Var("v",
7704                                                                                                    CTy"CP15"),
7705                                                                                                MB(MB(MU(TP[Var("v",
7706                                                                                                                CTy"CP15"),
7707                                                                                                            Rupd
7708                                                                                                              ("NS",
7709                                                                                                               TP[Var("x0",
7710                                                                                                                      CTy"SCR"),
7711                                                                                                                  LF])],
7712                                                                                                         qTy),
7713                                                                                                      Close
7714                                                                                                        (Var("v",
7715                                                                                                             PTy(CTy"CP15",
7716                                                                                                                 CTy"SCR")),
7717                                                                                                         MU(Rupd
7718                                                                                                              ("SCR",
7719                                                                                                               Var("v",
7720                                                                                                                   PTy(CTy"CP15",
7721                                                                                                                       CTy"SCR"))),
7722                                                                                                            qTy))),
7723                                                                                                   Close
7724                                                                                                     (Var("v",
7725                                                                                                          CTy"CP15"),
7726                                                                                                      MW(Close
7727                                                                                                           (qVar"s",
7728                                                                                                            Rupd
7729                                                                                                              ("CP15",
7730                                                                                                               TP[qVar"s",
7731                                                                                                                  Var("v",
7732                                                                                                                      CTy"CP15")]))))))))))),
7733                                                                              MU(LU,
7734                                                                                 qTy)))),
7735                                                                    Close
7736                                                                      (AVar
7737                                                                         uTy,
7738                                                                       MB(MR(Close
7739                                                                               (qVar"s",
7740                                                                                Dest
7741                                                                                  ("CPSR",
7742                                                                                   CTy"PSR",
7743                                                                                   qVar"s"))),
7744                                                                          Close
7745                                                                            (Var("v",
7746                                                                                 CTy"PSR"),
7747                                                                             MB(MB(MB(MU(TP[Var("v",
7748                                                                                                CTy"PSR"),
7749                                                                                            LW(19,
7750                                                                                               5)],
7751                                                                                         qTy),
7752                                                                                      Close
7753                                                                                        (Var("v",
7754                                                                                             PTy(CTy"PSR",
7755                                                                                                 FTy 5)),
7756                                                                                         MU(Rupd
7757                                                                                              ("M",
7758                                                                                               Var("v",
7759                                                                                                   PTy(CTy"PSR",
7760                                                                                                       FTy 5))),
7761                                                                                            qTy))),
7762                                                                                   Close
7763                                                                                     (Var("v",
7764                                                                                          CTy"PSR"),
7765                                                                                      MW(Close
7766                                                                                           (qVar"s",
7767                                                                                            Rupd
7768                                                                                              ("CPSR",
7769                                                                                               TP[qVar"s",
7770                                                                                                  Var("v",
7771                                                                                                      CTy"PSR")]))))),
7772                                                                                Close
7773                                                                                  (AVar
7774                                                                                     uTy,
7775                                                                                   MB(Call
7776                                                                                        ("write'SPSR",
7777                                                                                         ATy(qTy,
7778                                                                                             PTy(uTy,
7779                                                                                                 qTy)),
7780                                                                                         Var("new_spsr_value",
7781                                                                                             CTy"PSR")),
7782                                                                                      Close
7783                                                                                        (AVar
7784                                                                                           uTy,
7785                                                                                         MB(Call
7786                                                                                              ("write'R",
7787                                                                                               ATy(qTy,
7788                                                                                                   PTy(uTy,
7789                                                                                                       qTy)),
7790                                                                                               TP[Var("new_lr_value",
7791                                                                                                      F32),
7792                                                                                                  LW(14,
7793                                                                                                     4)]),
7794                                                                                            Close
7795                                                                                              (AVar
7796                                                                                                 uTy,
7797                                                                                               MB(MR(Close
7798                                                                                                       (qVar"s",
7799                                                                                                        Dest
7800                                                                                                          ("CPSR",
7801                                                                                                           CTy"PSR",
7802                                                                                                           qVar"s"))),
7803                                                                                                  Close
7804                                                                                                    (Var("v",
7805                                                                                                         CTy"PSR"),
7806                                                                                                     MB(MB(MB(MU(TP[Var("v",
7807                                                                                                                        CTy"PSR"),
7808                                                                                                                    LT],
7809                                                                                                                 qTy),
7810                                                                                                              Close
7811                                                                                                                (Var("v",
7812                                                                                                                     PTy(CTy"PSR",
7813                                                                                                                         bTy)),
7814                                                                                                                 MU(Rupd
7815                                                                                                                      ("I",
7816                                                                                                                       Var("v",
7817                                                                                                                           PTy(CTy"PSR",
7818                                                                                                                               bTy))),
7819                                                                                                                    qTy))),
7820                                                                                                           Close
7821                                                                                                             (Var("v",
7822                                                                                                                  CTy"PSR"),
7823                                                                                                              MW(Close
7824                                                                                                                   (qVar"s",
7825                                                                                                                    Rupd
7826                                                                                                                      ("CPSR",
7827                                                                                                                       TP[qVar"s",
7828                                                                                                                          Var("v",
7829                                                                                                                              CTy"PSR")]))))),
7830                                                                                                        Close
7831                                                                                                          (AVar
7832                                                                                                             uTy,
7833                                                                                                           MB(MR(Close
7834                                                                                                                   (qVar"s",
7835                                                                                                                    Dest
7836                                                                                                                      ("CPSR",
7837                                                                                                                       CTy"PSR",
7838                                                                                                                       qVar"s"))),
7839                                                                                                              Close
7840                                                                                                                (Var("v",
7841                                                                                                                     CTy"PSR"),
7842                                                                                                                 MB(MB(MB(MU(TP[Var("v",
7843                                                                                                                                    CTy"PSR"),
7844                                                                                                                                LW(0,
7845                                                                                                                                   8)],
7846                                                                                                                             qTy),
7847                                                                                                                          Close
7848                                                                                                                            (Var("v",
7849                                                                                                                                 PTy(CTy"PSR",
7850                                                                                                                                     F8)),
7851                                                                                                                             MU(Rupd
7852                                                                                                                                  ("IT",
7853                                                                                                                                   Var("v",
7854                                                                                                                                       PTy(CTy"PSR",
7855                                                                                                                                           F8))),
7856                                                                                                                                qTy))),
7857                                                                                                                       Close
7858                                                                                                                         (Var("v",
7859                                                                                                                              CTy"PSR"),
7860                                                                                                                          MW(Close
7861                                                                                                                               (qVar"s",
7862                                                                                                                                Rupd
7863                                                                                                                                  ("CPSR",
7864                                                                                                                                   TP[qVar"s",
7865                                                                                                                                      Var("v",
7866                                                                                                                                          CTy"PSR")]))))),
7867                                                                                                                    Close
7868                                                                                                                      (AVar
7869                                                                                                                         uTy,
7870                                                                                                                       MB(MR(Close
7871                                                                                                                               (qVar"s",
7872                                                                                                                                Dest
7873                                                                                                                                  ("CPSR",
7874                                                                                                                                   CTy"PSR",
7875                                                                                                                                   qVar"s"))),
7876                                                                                                                          Close
7877                                                                                                                            (Var("v",
7878                                                                                                                                 CTy"PSR"),
7879                                                                                                                             MB(MB(MB(MU(TP[Var("v",
7880                                                                                                                                                CTy"PSR"),
7881                                                                                                                                            LF],
7882                                                                                                                                         qTy),
7883                                                                                                                                      Close
7884                                                                                                                                        (Var("v",
7885                                                                                                                                             PTy(CTy"PSR",
7886                                                                                                                                                 bTy)),
7887                                                                                                                                         MU(Rupd
7888                                                                                                                                              ("J",
7889                                                                                                                                               Var("v",
7890                                                                                                                                                   PTy(CTy"PSR",
7891                                                                                                                                                       bTy))),
7892                                                                                                                                            qTy))),
7893                                                                                                                                   Close
7894                                                                                                                                     (Var("v",
7895                                                                                                                                          CTy"PSR"),
7896                                                                                                                                      MW(Close
7897                                                                                                                                           (qVar"s",
7898                                                                                                                                            Rupd
7899                                                                                                                                              ("CPSR",
7900                                                                                                                                               TP[qVar"s",
7901                                                                                                                                                  Var("v",
7902                                                                                                                                                      CTy"PSR")]))))),
7903                                                                                                                                Close
7904                                                                                                                                  (AVar
7905                                                                                                                                     uTy,
7906                                                                                                                                   MB(MR(Close
7907                                                                                                                                           (qVar"s",
7908                                                                                                                                            Dest
7909                                                                                                                                              ("CPSR",
7910                                                                                                                                               CTy"PSR",
7911                                                                                                                                               qVar"s"))),
7912                                                                                                                                      Close
7913                                                                                                                                        (Var("v",
7914                                                                                                                                             CTy"PSR"),
7915                                                                                                                                         MB(MB(MB(MB(MR(Close
7916                                                                                                                                                          (qVar"s",
7917                                                                                                                                                           Dest
7918                                                                                                                                                             ("CP15",
7919                                                                                                                                                              CTy"CP15",
7920                                                                                                                                                              qVar"s"))),
7921                                                                                                                                                     Close
7922                                                                                                                                                       (Var("v0",
7923                                                                                                                                                            CTy"CP15"),
7924                                                                                                                                                        MB(MB(MU(Dest
7925                                                                                                                                                                   ("SCTLR",
7926                                                                                                                                                                    CTy"SCTLR",
7927                                                                                                                                                                    Var("v0",
7928                                                                                                                                                                        CTy"CP15")),
7929                                                                                                                                                                 qTy),
7930                                                                                                                                                              Close
7931                                                                                                                                                                (Var("v",
7932                                                                                                                                                                     CTy"SCTLR"),
7933                                                                                                                                                                 MU(Dest
7934                                                                                                                                                                      ("TE",
7935                                                                                                                                                                       bTy,
7936                                                                                                                                                                       Var("v",
7937                                                                                                                                                                           CTy"SCTLR")),
7938                                                                                                                                                                    qTy))),
7939                                                                                                                                                           Close
7940                                                                                                                                                             (bVar"v0",
7941                                                                                                                                                              MU(TP[Var("v",
7942                                                                                                                                                                        CTy"PSR"),
7943                                                                                                                                                                    bVar"v0"],
7944                                                                                                                                                                 qTy))))),
7945                                                                                                                                                  Close
7946                                                                                                                                                    (Var("v",
7947                                                                                                                                                         PTy(CTy"PSR",
7948                                                                                                                                                             bTy)),
7949                                                                                                                                                     MU(Rupd
7950                                                                                                                                                          ("T",
7951                                                                                                                                                           Var("v",
7952                                                                                                                                                               PTy(CTy"PSR",
7953                                                                                                                                                                   bTy))),
7954                                                                                                                                                        qTy))),
7955                                                                                                                                               Close
7956                                                                                                                                                 (Var("v",
7957                                                                                                                                                      CTy"PSR"),
7958                                                                                                                                                  MW(Close
7959                                                                                                                                                       (qVar"s",
7960                                                                                                                                                        Rupd
7961                                                                                                                                                          ("CPSR",
7962                                                                                                                                                           TP[qVar"s",
7963                                                                                                                                                              Var("v",
7964                                                                                                                                                                  CTy"PSR")]))))),
7965                                                                                                                                            Close
7966                                                                                                                                              (AVar
7967                                                                                                                                                 uTy,
7968                                                                                                                                               MB(MR(Close
7969                                                                                                                                                       (qVar"s",
7970                                                                                                                                                        Dest
7971                                                                                                                                                          ("CPSR",
7972                                                                                                                                                           CTy"PSR",
7973                                                                                                                                                           qVar"s"))),
7974                                                                                                                                                  Close
7975                                                                                                                                                    (Var("v",
7976                                                                                                                                                         CTy"PSR"),
7977                                                                                                                                                     MB(MB(MB(MB(MR(Close
7978                                                                                                                                                                      (qVar"s",
7979                                                                                                                                                                       Dest
7980                                                                                                                                                                         ("CP15",
7981                                                                                                                                                                          CTy"CP15",
7982                                                                                                                                                                          qVar"s"))),
7983                                                                                                                                                                 Close
7984                                                                                                                                                                   (Var("v0",
7985                                                                                                                                                                        CTy"CP15"),
7986                                                                                                                                                                    MB(MB(MU(Dest
7987                                                                                                                                                                               ("SCTLR",
7988                                                                                                                                                                                CTy"SCTLR",
7989                                                                                                                                                                                Var("v0",
7990                                                                                                                                                                                    CTy"CP15")),
7991                                                                                                                                                                             qTy),
7992                                                                                                                                                                          Close
7993                                                                                                                                                                            (Var("v",
7994                                                                                                                                                                                 CTy"SCTLR"),
7995                                                                                                                                                                             MU(Dest
7996                                                                                                                                                                                  ("EE",
7997                                                                                                                                                                                   bTy,
7998                                                                                                                                                                                   Var("v",
7999                                                                                                                                                                                       CTy"SCTLR")),
8000                                                                                                                                                                                qTy))),
8001                                                                                                                                                                       Close
8002                                                                                                                                                                         (bVar"v0",
8003                                                                                                                                                                          MU(TP[Var("v",
8004                                                                                                                                                                                    CTy"PSR"),
8005                                                                                                                                                                                bVar"v0"],
8006                                                                                                                                                                             qTy))))),
8007                                                                                                                                                              Close
8008                                                                                                                                                                (Var("v",
8009                                                                                                                                                                     PTy(CTy"PSR",
8010                                                                                                                                                                         bTy)),
8011                                                                                                                                                                 MU(Rupd
8012                                                                                                                                                                      ("E",
8013                                                                                                                                                                       Var("v",
8014                                                                                                                                                                           PTy(CTy"PSR",
8015                                                                                                                                                                               bTy))),
8016                                                                                                                                                                    qTy))),
8017                                                                                                                                                           Close
8018                                                                                                                                                             (Var("v",
8019                                                                                                                                                                  CTy"PSR"),
8020                                                                                                                                                              MW(Close
8021                                                                                                                                                                   (qVar"s",
8022                                                                                                                                                                    Rupd
8023                                                                                                                                                                      ("CPSR",
8024                                                                                                                                                                       TP[qVar"s",
8025                                                                                                                                                                          Var("v",
8026                                                                                                                                                                              CTy"PSR")]))))),
8027                                                                                                                                                        Close
8028                                                                                                                                                          (AVar
8029                                                                                                                                                             uTy,
8030                                                                                                                                                           MB(Call
8031                                                                                                                                                                ("ExcVectorBase",
8032                                                                                                                                                                 ATy(qTy,
8033                                                                                                                                                                     PTy(F32,
8034                                                                                                                                                                         qTy)),
8035                                                                                                                                                                 LU),
8036                                                                                                                                                              Close
8037                                                                                                                                                                (Var("v",
8038                                                                                                                                                                     F32),
8039                                                                                                                                                                 MB(MU(Bop(Add,
8040                                                                                                                                                                           Var("v",
8041                                                                                                                                                                               F32),
8042                                                                                                                                                                           Var("vect_offset",
8043                                                                                                                                                                               F32)),
8044                                                                                                                                                                       qTy),
8045                                                                                                                                                                    Close
8046                                                                                                                                                                      (Var("v",
8047                                                                                                                                                                           F32),
8048                                                                                                                                                                       Call
8049                                                                                                                                                                         ("BranchTo",
8050                                                                                                                                                                          ATy(qTy,
8051                                                                                                                                                                              PTy(uTy,
8052                                                                                                                                                                                  qTy)),
8053                                                                                                                                                                          Var("v",
8054                                                                                                                                                                              F32)))))))))))))))))))))))))))))))))))))))))))))))))))))))))
8055;
8056val TakeSMCException_def = Def
8057  ("TakeSMCException",AVar uTy,
8058   MB(Call("ITAdvance",ATy(qTy,PTy(uTy,qTy)),LU),
8059      Close
8060        (AVar uTy,
8061         MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
8062            Close
8063              (Var("v",CTy"PSR"),
8064               MB(MB(MU(Dest("T",bTy,Var("v",CTy"PSR")),qTy),
8065                     Close
8066                       (bVar"b",
8067                        ITE(bVar"b",Const("PC",ATy(qTy,PTy(F32,qTy))),
8068                            MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
8069                               Close
8070                                 (Var("v",F32),
8071                                  MU(Bop(Sub,Var("v",F32),LW(4,32)),qTy)))))),
8072                  Close
8073                    (Var("new_lr_value",F32),
8074                     MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
8075                        Close
8076                          (Var("new_spsr_value",CTy"PSR"),
8077                           MB(MR(Close
8078                                   (qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
8079                              Close
8080                                (Var("v",CTy"PSR"),
8081                                 MB(MB(MB(MU(Dest
8082                                               ("M",FTy 5,
8083                                                Var("v",CTy"PSR")),qTy),
8084                                          Close
8085                                            (Var("v",FTy 5),
8086                                             MU(EQ(Var("v",FTy 5),LW(22,5)),
8087                                                qTy))),
8088                                       Close
8089                                         (bVar"b",
8090                                          ITE(bVar"b",
8091                                              MB(MR(Close
8092                                                      (qVar"s",
8093                                                       Dest
8094                                                         ("CP15",
8095                                                          CTy"CP15",
8096                                                          qVar"s"))),
8097                                                 Close
8098                                                   (Var("v",CTy"CP15"),
8099                                                    MB(MU(Dest
8100                                                            ("SCR",
8101                                                             CTy"SCR",
8102                                                             Var("v",
8103                                                                 CTy"CP15")),
8104                                                          qTy),
8105                                                       Close
8106                                                         (Var("x0",
8107                                                              CTy"SCR"),
8108                                                          MB(MR(Close
8109                                                                  (qVar"s",
8110                                                                   Dest
8111                                                                     ("CP15",
8112                                                                      CTy"CP15",
8113                                                                      qVar"s"))),
8114                                                             Close
8115                                                               (Var("v",
8116                                                                    CTy"CP15"),
8117                                                                MB(MB(MU(TP[Var("v",
8118                                                                                CTy"CP15"),
8119                                                                            Rupd
8120                                                                              ("NS",
8121                                                                               TP[Var("x0",
8122                                                                                      CTy"SCR"),
8123                                                                                  LF])],
8124                                                                         qTy),
8125                                                                      Close
8126                                                                        (Var("v",
8127                                                                             PTy(CTy"CP15",
8128                                                                                 CTy"SCR")),
8129                                                                         MU(Rupd
8130                                                                              ("SCR",
8131                                                                               Var("v",
8132                                                                                   PTy(CTy"CP15",
8133                                                                                       CTy"SCR"))),
8134                                                                            qTy))),
8135                                                                   Close
8136                                                                     (Var("v",
8137                                                                          CTy"CP15"),
8138                                                                      MW(Close
8139                                                                           (qVar"s",
8140                                                                            Rupd
8141                                                                              ("CP15",
8142                                                                               TP[qVar"s",
8143                                                                                  Var("v",
8144                                                                                      CTy"CP15")]))))))))))),
8145                                              MU(LU,qTy)))),
8146                                    Close
8147                                      (AVar uTy,
8148                                       MB(MR(Close
8149                                               (qVar"s",
8150                                                Dest
8151                                                  ("CPSR",CTy"PSR",qVar"s"))),
8152                                          Close
8153                                            (Var("v",CTy"PSR"),
8154                                             MB(MB(MB(MU(TP[Var("v",
8155                                                                CTy"PSR"),
8156                                                            LW(22,5)],qTy),
8157                                                      Close
8158                                                        (Var("v",
8159                                                             PTy(CTy"PSR",
8160                                                                 FTy 5)),
8161                                                         MU(Rupd
8162                                                              ("M",
8163                                                               Var("v",
8164                                                                   PTy(CTy"PSR",
8165                                                                       FTy 5))),
8166                                                            qTy))),
8167                                                   Close
8168                                                     (Var("v",CTy"PSR"),
8169                                                      MW(Close
8170                                                           (qVar"s",
8171                                                            Rupd
8172                                                              ("CPSR",
8173                                                               TP[qVar"s",
8174                                                                  Var("v",
8175                                                                      CTy"PSR")]))))),
8176                                                Close
8177                                                  (AVar uTy,
8178                                                   Call
8179                                                     ("EnterMonitorMode",
8180                                                      ATy(qTy,PTy(uTy,qTy)),
8181                                                      TP[Var("new_spsr_value",
8182                                                             CTy"PSR"),
8183                                                         Var("new_lr_value",
8184                                                             F32),LW(8,32)]))))))))))))))))))
8185;
8186val TakeHVCException_def = Def
8187  ("TakeHVCException",AVar uTy,
8188   MB(Call("ITAdvance",ATy(qTy,PTy(uTy,qTy)),LU),
8189      Close
8190        (AVar uTy,
8191         MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
8192            Close
8193              (Var("v",CTy"PSR"),
8194               MB(MB(MU(Dest("T",bTy,Var("v",CTy"PSR")),qTy),
8195                     Close
8196                       (bVar"b",
8197                        ITE(bVar"b",Const("PC",ATy(qTy,PTy(F32,qTy))),
8198                            MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
8199                               Close
8200                                 (Var("v",F32),
8201                                  MU(Bop(Sub,Var("v",F32),LW(4,32)),qTy)))))),
8202                  Close
8203                    (Var("preferred_exceptn_return",F32),
8204                     MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
8205                        Close
8206                          (Var("new_spsr_value",CTy"PSR"),
8207                           MB(MR(Close
8208                                   (qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
8209                              Close
8210                                (Var("v",CTy"PSR"),
8211                                 MB(MB(MU(Dest
8212                                            ("M",FTy 5,Var("v",CTy"PSR")),
8213                                          qTy),
8214                                       Close
8215                                         (Var("v",FTy 5),
8216                                          MU(EQ(Var("v",FTy 5),LW(26,5)),
8217                                             qTy))),
8218                                    Close
8219                                      (bVar"b",
8220                                       ITE(bVar"b",
8221                                           Call
8222                                             ("EnterHypMode",
8223                                              ATy(qTy,PTy(uTy,qTy)),
8224                                              TP[Var("new_spsr_value",
8225                                                     CTy"PSR"),
8226                                                 Var("preferred_exceptn_return",
8227                                                     F32),LW(8,32)]),
8228                                           Call
8229                                             ("EnterHypMode",
8230                                              ATy(qTy,PTy(uTy,qTy)),
8231                                              TP[Var("new_spsr_value",
8232                                                     CTy"PSR"),
8233                                                 Var("preferred_exceptn_return",
8234                                                     F32),LW(20,32)])))))))))))))))
8235;
8236val TakeDataAbortException_def = Def
8237  ("TakeDataAbortException",AVar uTy,
8238   MB(MW(Close(qVar"s",Rupd("data_abort",TP[qVar"s",LF]))),
8239      Close
8240        (AVar uTy,
8241         MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
8242            Close
8243              (Var("v",CTy"PSR"),
8244               MB(MB(MU(Dest("T",bTy,Var("v",CTy"PSR")),qTy),
8245                     Close
8246                       (bVar"b",
8247                        ITE(bVar"b",
8248                            MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
8249                               Close
8250                                 (Var("v",F32),
8251                                  MU(Bop(Add,Var("v",F32),LW(4,32)),qTy))),
8252                            Const("PC",ATy(qTy,PTy(F32,qTy)))))),
8253                  Close
8254                    (Var("new_lr_value",F32),
8255                     MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
8256                        Close
8257                          (Var("new_spsr_value",CTy"PSR"),
8258                           Let(Var("vect_offset",F32),LW(16,32),
8259                               Let(Var("preferred_exceptn_return",F32),
8260                                   Bop(Sub,Var("new_lr_value",F32),
8261                                       LW(8,32)),
8262                                   MB(Call
8263                                        ("HaveSecurityExt",
8264                                         ATy(qTy,PTy(bTy,qTy)),LU),
8265                                      Close
8266                                        (bVar"v",
8267                                         MB(MB(ITE(bVar"v",
8268                                                   MB(MR(Close
8269                                                           (qVar"s",
8270                                                            Dest
8271                                                              ("CP15",
8272                                                               CTy"CP15",
8273                                                               qVar"s"))),
8274                                                      Close
8275                                                        (Var("v",CTy"CP15"),
8276                                                         MB(MU(Dest
8277                                                                 ("SCR",
8278                                                                  CTy"SCR",
8279                                                                  Var("v",
8280                                                                      CTy"CP15")),
8281                                                               qTy),
8282                                                            Close
8283                                                              (Var("v",
8284                                                                   CTy"SCR"),
8285                                                               MU(Dest
8286                                                                    ("EA",
8287                                                                     bTy,
8288                                                                     Var("v",
8289                                                                         CTy"SCR")),
8290                                                                  qTy))))),
8291                                                   MU(LF,qTy)),
8292                                               Close
8293                                                 (bVar"b",
8294                                                  ITE(bVar"b",
8295                                                      Call
8296                                                        ("IsExternalAbort",
8297                                                         ATy(qTy,
8298                                                             PTy(bTy,qTy)),
8299                                                         LU),MU(LF,qTy)))),
8300                                            Close
8301                                              (bVar"route_to_monitor",
8302                                               MB(Call
8303                                                    ("HaveVirtExt",
8304                                                     ATy(qTy,PTy(bTy,qTy)),
8305                                                     LU),
8306                                                  Close
8307                                                    (bVar"v",
8308                                                     MB(MB(MB(ITE(bVar"v",
8309                                                                  Call
8310                                                                    ("HaveSecurityExt",
8311                                                                     ATy(qTy,
8312                                                                         PTy(bTy,
8313                                                                             qTy)),
8314                                                                     LU),
8315                                                                  MU(LF,
8316                                                                     qTy)),
8317                                                              Close
8318                                                                (bVar"b",
8319                                                                 ITE(bVar"b",
8320                                                                     MB(MR(Close
8321                                                                             (qVar"s",
8322                                                                              Dest
8323                                                                                ("CP15",
8324                                                                                 CTy"CP15",
8325                                                                                 qVar"s"))),
8326                                                                        Close
8327                                                                          (Var("v",
8328                                                                               CTy"CP15"),
8329                                                                           MB(MU(Dest
8330                                                                                   ("SCR",
8331                                                                                    CTy"SCR",
8332                                                                                    Var("v",
8333                                                                                        CTy"CP15")),
8334                                                                                 qTy),
8335                                                                              Close
8336                                                                                (Var("v",
8337                                                                                     CTy"SCR"),
8338                                                                                 MU(Dest
8339                                                                                      ("NS",
8340                                                                                       bTy,
8341                                                                                       Var("v",
8342                                                                                           CTy"SCR")),
8343                                                                                    qTy))))),
8344                                                                     MU(LF,
8345                                                                        qTy)))),
8346                                                           Close
8347                                                             (bVar"b",
8348                                                              ITE(bVar"b",
8349                                                                  MB(MR(Close
8350                                                                          (qVar"s",
8351                                                                           Dest
8352                                                                             ("CPSR",
8353                                                                              CTy"PSR",
8354                                                                              qVar"s"))),
8355                                                                     Close
8356                                                                       (Var("v",
8357                                                                            CTy"PSR"),
8358                                                                        MB(MU(Dest
8359                                                                                ("M",
8360                                                                                 FTy 5,
8361                                                                                 Var("v",
8362                                                                                     CTy"PSR")),
8363                                                                              qTy),
8364                                                                           Close
8365                                                                             (Var("v",
8366                                                                                  FTy 5),
8367                                                                              MU(EQ(Var("v",
8368                                                                                        FTy 5),
8369                                                                                    LW(26,
8370                                                                                       5)),
8371                                                                                 qTy))))),
8372                                                                  MU(LF,
8373                                                                     qTy)))),
8374                                                        Close
8375                                                          (bVar"take_to_hyp",
8376                                                           MB(ITB([(bVar"route_to_monitor",
8377                                                                    MB(MR(Close
8378                                                                            (qVar"s",
8379                                                                             Dest
8380                                                                               ("CPSR",
8381                                                                                CTy"PSR",
8382                                                                                qVar"s"))),
8383                                                                       Close
8384                                                                         (Var("v",
8385                                                                              CTy"PSR"),
8386                                                                          MB(MB(MB(MU(Dest
8387                                                                                        ("M",
8388                                                                                         FTy 5,
8389                                                                                         Var("v",
8390                                                                                             CTy"PSR")),
8391                                                                                      qTy),
8392                                                                                   Close
8393                                                                                     (Var("v",
8394                                                                                          FTy 5),
8395                                                                                      MU(EQ(Var("v",
8396                                                                                                FTy 5),
8397                                                                                            LW(22,
8398                                                                                               5)),
8399                                                                                         qTy))),
8400                                                                                Close
8401                                                                                  (bVar"b",
8402                                                                                   ITE(bVar"b",
8403                                                                                       MB(MR(Close
8404                                                                                               (qVar"s",
8405                                                                                                Dest
8406                                                                                                  ("CP15",
8407                                                                                                   CTy"CP15",
8408                                                                                                   qVar"s"))),
8409                                                                                          Close
8410                                                                                            (Var("v",
8411                                                                                                 CTy"CP15"),
8412                                                                                             MB(MU(Dest
8413                                                                                                     ("SCR",
8414                                                                                                      CTy"SCR",
8415                                                                                                      Var("v",
8416                                                                                                          CTy"CP15")),
8417                                                                                                   qTy),
8418                                                                                                Close
8419                                                                                                  (Var("x0",
8420                                                                                                       CTy"SCR"),
8421                                                                                                   MB(MR(Close
8422                                                                                                           (qVar"s",
8423                                                                                                            Dest
8424                                                                                                              ("CP15",
8425                                                                                                               CTy"CP15",
8426                                                                                                               qVar"s"))),
8427                                                                                                      Close
8428                                                                                                        (Var("v",
8429                                                                                                             CTy"CP15"),
8430                                                                                                         MB(MB(MU(TP[Var("v",
8431                                                                                                                         CTy"CP15"),
8432                                                                                                                     Rupd
8433                                                                                                                       ("NS",
8434                                                                                                                        TP[Var("x0",
8435                                                                                                                               CTy"SCR"),
8436                                                                                                                           LF])],
8437                                                                                                                  qTy),
8438                                                                                                               Close
8439                                                                                                                 (Var("v",
8440                                                                                                                      PTy(CTy"CP15",
8441                                                                                                                          CTy"SCR")),
8442                                                                                                                  MU(Rupd
8443                                                                                                                       ("SCR",
8444                                                                                                                        Var("v",
8445                                                                                                                            PTy(CTy"CP15",
8446                                                                                                                                CTy"SCR"))),
8447                                                                                                                     qTy))),
8448                                                                                                            Close
8449                                                                                                              (Var("v",
8450                                                                                                                   CTy"CP15"),
8451                                                                                                               MW(Close
8452                                                                                                                    (qVar"s",
8453                                                                                                                     Rupd
8454                                                                                                                       ("CP15",
8455                                                                                                                        TP[qVar"s",
8456                                                                                                                           Var("v",
8457                                                                                                                               CTy"CP15")]))))))))))),
8458                                                                                       MU(LU,
8459                                                                                          qTy)))),
8460                                                                             Close
8461                                                                               (AVar
8462                                                                                  uTy,
8463                                                                                Call
8464                                                                                  ("EnterMonitorMode",
8465                                                                                   ATy(qTy,
8466                                                                                       PTy(uTy,
8467                                                                                           qTy)),
8468                                                                                   TP[Var("new_spsr_value",
8469                                                                                          CTy"PSR"),
8470                                                                                      Var("new_lr_value",
8471                                                                                          F32),
8472                                                                                      Var("vect_offset",
8473                                                                                          F32)])))))),
8474                                                                   (bVar"take_to_hyp",
8475                                                                    Call
8476                                                                      ("EnterHypMode",
8477                                                                       ATy(qTy,
8478                                                                           PTy(uTy,
8479                                                                               qTy)),
8480                                                                       TP[Var("new_spsr_value",
8481                                                                              CTy"PSR"),
8482                                                                          Var("preferred_exceptn_return",
8483                                                                              F32),
8484                                                                          Var("vect_offset",
8485                                                                              F32)])),
8486                                                                   (LF,
8487                                                                    Call
8488                                                                      ("EnterHypMode",
8489                                                                       ATy(qTy,
8490                                                                           PTy(uTy,
8491                                                                               qTy)),
8492                                                                       TP[Var("new_spsr_value",
8493                                                                              CTy"PSR"),
8494                                                                          Var("preferred_exceptn_return",
8495                                                                              F32),
8496                                                                          LW(20,
8497                                                                             32)]))],
8498                                                                  MB(Call
8499                                                                       ("HaveSecurityExt",
8500                                                                        ATy(qTy,
8501                                                                            PTy(bTy,
8502                                                                                qTy)),
8503                                                                        LU),
8504                                                                     Close
8505                                                                       (bVar"v",
8506                                                                        MB(MB(ITE(bVar"v",
8507                                                                                  MB(MR(Close
8508                                                                                          (qVar"s",
8509                                                                                           Dest
8510                                                                                             ("CPSR",
8511                                                                                              CTy"PSR",
8512                                                                                              qVar"s"))),
8513                                                                                     Close
8514                                                                                       (Var("v",
8515                                                                                            CTy"PSR"),
8516                                                                                        MB(MU(Dest
8517                                                                                                ("M",
8518                                                                                                 FTy 5,
8519                                                                                                 Var("v",
8520                                                                                                     CTy"PSR")),
8521                                                                                              qTy),
8522                                                                                           Close
8523                                                                                             (Var("v",
8524                                                                                                  FTy 5),
8525                                                                                              MU(EQ(Var("v",
8526                                                                                                        FTy 5),
8527                                                                                                    LW(22,
8528                                                                                                       5)),
8529                                                                                                 qTy))))),
8530                                                                                  MU(LF,
8531                                                                                     qTy)),
8532                                                                              Close
8533                                                                                (bVar"b",
8534                                                                                 ITE(bVar"b",
8535                                                                                     MB(MR(Close
8536                                                                                             (qVar"s",
8537                                                                                              Dest
8538                                                                                                ("CP15",
8539                                                                                                 CTy"CP15",
8540                                                                                                 qVar"s"))),
8541                                                                                        Close
8542                                                                                          (Var("v",
8543                                                                                               CTy"CP15"),
8544                                                                                           MB(MU(Dest
8545                                                                                                   ("SCR",
8546                                                                                                    CTy"SCR",
8547                                                                                                    Var("v",
8548                                                                                                        CTy"CP15")),
8549                                                                                                 qTy),
8550                                                                                              Close
8551                                                                                                (Var("x0",
8552                                                                                                     CTy"SCR"),
8553                                                                                                 MB(MR(Close
8554                                                                                                         (qVar"s",
8555                                                                                                          Dest
8556                                                                                                            ("CP15",
8557                                                                                                             CTy"CP15",
8558                                                                                                             qVar"s"))),
8559                                                                                                    Close
8560                                                                                                      (Var("v",
8561                                                                                                           CTy"CP15"),
8562                                                                                                       MB(MB(MU(TP[Var("v",
8563                                                                                                                       CTy"CP15"),
8564                                                                                                                   Rupd
8565                                                                                                                     ("NS",
8566                                                                                                                      TP[Var("x0",
8567                                                                                                                             CTy"SCR"),
8568                                                                                                                         LF])],
8569                                                                                                                qTy),
8570                                                                                                             Close
8571                                                                                                               (Var("v",
8572                                                                                                                    PTy(CTy"CP15",
8573                                                                                                                        CTy"SCR")),
8574                                                                                                                MU(Rupd
8575                                                                                                                     ("SCR",
8576                                                                                                                      Var("v",
8577                                                                                                                          PTy(CTy"CP15",
8578                                                                                                                              CTy"SCR"))),
8579                                                                                                                   qTy))),
8580                                                                                                          Close
8581                                                                                                            (Var("v",
8582                                                                                                                 CTy"CP15"),
8583                                                                                                             MW(Close
8584                                                                                                                  (qVar"s",
8585                                                                                                                   Rupd
8586                                                                                                                     ("CP15",
8587                                                                                                                      TP[qVar"s",
8588                                                                                                                         Var("v",
8589                                                                                                                             CTy"CP15")]))))))))))),
8590                                                                                     MU(LU,
8591                                                                                        qTy)))),
8592                                                                           Close
8593                                                                             (AVar
8594                                                                                uTy,
8595                                                                              MB(MR(Close
8596                                                                                      (qVar"s",
8597                                                                                       Dest
8598                                                                                         ("CPSR",
8599                                                                                          CTy"PSR",
8600                                                                                          qVar"s"))),
8601                                                                                 Close
8602                                                                                   (Var("v",
8603                                                                                        CTy"PSR"),
8604                                                                                    MB(MB(MB(MU(TP[Var("v",
8605                                                                                                       CTy"PSR"),
8606                                                                                                   LW(23,
8607                                                                                                      5)],
8608                                                                                                qTy),
8609                                                                                             Close
8610                                                                                               (Var("v",
8611                                                                                                    PTy(CTy"PSR",
8612                                                                                                        FTy 5)),
8613                                                                                                MU(Rupd
8614                                                                                                     ("M",
8615                                                                                                      Var("v",
8616                                                                                                          PTy(CTy"PSR",
8617                                                                                                              FTy 5))),
8618                                                                                                   qTy))),
8619                                                                                          Close
8620                                                                                            (Var("v",
8621                                                                                                 CTy"PSR"),
8622                                                                                             MW(Close
8623                                                                                                  (qVar"s",
8624                                                                                                   Rupd
8625                                                                                                     ("CPSR",
8626                                                                                                      TP[qVar"s",
8627                                                                                                         Var("v",
8628                                                                                                             CTy"PSR")]))))),
8629                                                                                       Close
8630                                                                                         (AVar
8631                                                                                            uTy,
8632                                                                                          MB(Call
8633                                                                                               ("write'SPSR",
8634                                                                                                ATy(qTy,
8635                                                                                                    PTy(uTy,
8636                                                                                                        qTy)),
8637                                                                                                Var("new_spsr_value",
8638                                                                                                    CTy"PSR")),
8639                                                                                             Close
8640                                                                                               (AVar
8641                                                                                                  uTy,
8642                                                                                                MB(Call
8643                                                                                                     ("write'R",
8644                                                                                                      ATy(qTy,
8645                                                                                                          PTy(uTy,
8646                                                                                                              qTy)),
8647                                                                                                      TP[Var("new_lr_value",
8648                                                                                                             F32),
8649                                                                                                         LW(14,
8650                                                                                                            4)]),
8651                                                                                                   Close
8652                                                                                                     (AVar
8653                                                                                                        uTy,
8654                                                                                                      MB(MR(Close
8655                                                                                                              (qVar"s",
8656                                                                                                               Dest
8657                                                                                                                 ("CPSR",
8658                                                                                                                  CTy"PSR",
8659                                                                                                                  qVar"s"))),
8660                                                                                                         Close
8661                                                                                                           (Var("v",
8662                                                                                                                CTy"PSR"),
8663                                                                                                            MB(MB(MB(MU(TP[Var("v",
8664                                                                                                                               CTy"PSR"),
8665                                                                                                                           LT],
8666                                                                                                                        qTy),
8667                                                                                                                     Close
8668                                                                                                                       (Var("v",
8669                                                                                                                            PTy(CTy"PSR",
8670                                                                                                                                bTy)),
8671                                                                                                                        MU(Rupd
8672                                                                                                                             ("I",
8673                                                                                                                              Var("v",
8674                                                                                                                                  PTy(CTy"PSR",
8675                                                                                                                                      bTy))),
8676                                                                                                                           qTy))),
8677                                                                                                                  Close
8678                                                                                                                    (Var("v",
8679                                                                                                                         CTy"PSR"),
8680                                                                                                                     MW(Close
8681                                                                                                                          (qVar"s",
8682                                                                                                                           Rupd
8683                                                                                                                             ("CPSR",
8684                                                                                                                              TP[qVar"s",
8685                                                                                                                                 Var("v",
8686                                                                                                                                     CTy"PSR")]))))),
8687                                                                                                               Close
8688                                                                                                                 (AVar
8689                                                                                                                    uTy,
8690                                                                                                                  MB(Call
8691                                                                                                                       ("HaveSecurityExt",
8692                                                                                                                        ATy(qTy,
8693                                                                                                                            PTy(bTy,
8694                                                                                                                                qTy)),
8695                                                                                                                        LU),
8696                                                                                                                     Close
8697                                                                                                                       (bVar"v",
8698                                                                                                                        MB(MB(MB(MB(MB(MU(Mop(Not,
8699                                                                                                                                              bVar"v"),
8700                                                                                                                                          qTy),
8701                                                                                                                                       Close
8702                                                                                                                                         (bVar"b",
8703                                                                                                                                          ITE(bVar"b",
8704                                                                                                                                              MU(LT,
8705                                                                                                                                                 qTy),
8706                                                                                                                                              Call
8707                                                                                                                                                ("HaveVirtExt",
8708                                                                                                                                                 ATy(qTy,
8709                                                                                                                                                     PTy(bTy,
8710                                                                                                                                                         qTy)),
8711                                                                                                                                                 LU)))),
8712                                                                                                                                    Close
8713                                                                                                                                      (bVar"b",
8714                                                                                                                                       ITE(bVar"b",
8715                                                                                                                                           MU(LT,
8716                                                                                                                                              qTy),
8717                                                                                                                                           MB(MR(Close
8718                                                                                                                                                   (qVar"s",
8719                                                                                                                                                    Dest
8720                                                                                                                                                      ("CP15",
8721                                                                                                                                                       CTy"CP15",
8722                                                                                                                                                       qVar"s"))),
8723                                                                                                                                              Close
8724                                                                                                                                                (Var("v",
8725                                                                                                                                                     CTy"CP15"),
8726                                                                                                                                                 MB(MB(MU(Dest
8727                                                                                                                                                            ("SCR",
8728                                                                                                                                                             CTy"SCR",
8729                                                                                                                                                             Var("v",
8730                                                                                                                                                                 CTy"CP15")),
8731                                                                                                                                                          qTy),
8732                                                                                                                                                       Close
8733                                                                                                                                                         (Var("v",
8734                                                                                                                                                              CTy"SCR"),
8735                                                                                                                                                          MU(Dest
8736                                                                                                                                                               ("NS",
8737                                                                                                                                                                bTy,
8738                                                                                                                                                                Var("v",
8739                                                                                                                                                                    CTy"SCR")),
8740                                                                                                                                                             qTy))),
8741                                                                                                                                                    Close
8742                                                                                                                                                      (bVar"v",
8743                                                                                                                                                       MU(Mop(Not,
8744                                                                                                                                                              bVar"v"),
8745                                                                                                                                                          qTy)))))))),
8746                                                                                                                                 Close
8747                                                                                                                                   (bVar"b",
8748                                                                                                                                    ITE(bVar"b",
8749                                                                                                                                        MU(LT,
8750                                                                                                                                           qTy),
8751                                                                                                                                        MB(MR(Close
8752                                                                                                                                                (qVar"s",
8753                                                                                                                                                 Dest
8754                                                                                                                                                   ("CP15",
8755                                                                                                                                                    CTy"CP15",
8756                                                                                                                                                    qVar"s"))),
8757                                                                                                                                           Close
8758                                                                                                                                             (Var("v",
8759                                                                                                                                                  CTy"CP15"),
8760                                                                                                                                              MB(MU(Dest
8761                                                                                                                                                      ("SCR",
8762                                                                                                                                                       CTy"SCR",
8763                                                                                                                                                       Var("v",
8764                                                                                                                                                           CTy"CP15")),
8765                                                                                                                                                    qTy),
8766                                                                                                                                                 Close
8767                                                                                                                                                   (Var("v",
8768                                                                                                                                                        CTy"SCR"),
8769                                                                                                                                                    MU(Dest
8770                                                                                                                                                         ("AW",
8771                                                                                                                                                          bTy,
8772                                                                                                                                                          Var("v",
8773                                                                                                                                                              CTy"SCR")),
8774                                                                                                                                                       qTy)))))))),
8775                                                                                                                              Close
8776                                                                                                                                (bVar"b",
8777                                                                                                                                 ITE(bVar"b",
8778                                                                                                                                     MB(MR(Close
8779                                                                                                                                             (qVar"s",
8780                                                                                                                                              Dest
8781                                                                                                                                                ("CPSR",
8782                                                                                                                                                 CTy"PSR",
8783                                                                                                                                                 qVar"s"))),
8784                                                                                                                                        Close
8785                                                                                                                                          (Var("v",
8786                                                                                                                                               CTy"PSR"),
8787                                                                                                                                           MB(MB(MU(TP[Var("v",
8788                                                                                                                                                           CTy"PSR"),
8789                                                                                                                                                       LT],
8790                                                                                                                                                    qTy),
8791                                                                                                                                                 Close
8792                                                                                                                                                   (Var("v",
8793                                                                                                                                                        PTy(CTy"PSR",
8794                                                                                                                                                            bTy)),
8795                                                                                                                                                    MU(Rupd
8796                                                                                                                                                         ("A",
8797                                                                                                                                                          Var("v",
8798                                                                                                                                                              PTy(CTy"PSR",
8799                                                                                                                                                                  bTy))),
8800                                                                                                                                                       qTy))),
8801                                                                                                                                              Close
8802                                                                                                                                                (Var("v",
8803                                                                                                                                                     CTy"PSR"),
8804                                                                                                                                                 MW(Close
8805                                                                                                                                                      (qVar"s",
8806                                                                                                                                                       Rupd
8807                                                                                                                                                         ("CPSR",
8808                                                                                                                                                          TP[qVar"s",
8809                                                                                                                                                             Var("v",
8810                                                                                                                                                                 CTy"PSR")]))))))),
8811                                                                                                                                     MU(LU,
8812                                                                                                                                        qTy)))),
8813                                                                                                                           Close
8814                                                                                                                             (AVar
8815                                                                                                                                uTy,
8816                                                                                                                              MB(MR(Close
8817                                                                                                                                      (qVar"s",
8818                                                                                                                                       Dest
8819                                                                                                                                         ("CPSR",
8820                                                                                                                                          CTy"PSR",
8821                                                                                                                                          qVar"s"))),
8822                                                                                                                                 Close
8823                                                                                                                                   (Var("v",
8824                                                                                                                                        CTy"PSR"),
8825                                                                                                                                    MB(MB(MB(MU(TP[Var("v",
8826                                                                                                                                                       CTy"PSR"),
8827                                                                                                                                                   LW(0,
8828                                                                                                                                                      8)],
8829                                                                                                                                                qTy),
8830                                                                                                                                             Close
8831                                                                                                                                               (Var("v",
8832                                                                                                                                                    PTy(CTy"PSR",
8833                                                                                                                                                        F8)),
8834                                                                                                                                                MU(Rupd
8835                                                                                                                                                     ("IT",
8836                                                                                                                                                      Var("v",
8837                                                                                                                                                          PTy(CTy"PSR",
8838                                                                                                                                                              F8))),
8839                                                                                                                                                   qTy))),
8840                                                                                                                                          Close
8841                                                                                                                                            (Var("v",
8842                                                                                                                                                 CTy"PSR"),
8843                                                                                                                                             MW(Close
8844                                                                                                                                                  (qVar"s",
8845                                                                                                                                                   Rupd
8846                                                                                                                                                     ("CPSR",
8847                                                                                                                                                      TP[qVar"s",
8848                                                                                                                                                         Var("v",
8849                                                                                                                                                             CTy"PSR")]))))),
8850                                                                                                                                       Close
8851                                                                                                                                         (AVar
8852                                                                                                                                            uTy,
8853                                                                                                                                          MB(MR(Close
8854                                                                                                                                                  (qVar"s",
8855                                                                                                                                                   Dest
8856                                                                                                                                                     ("CPSR",
8857                                                                                                                                                      CTy"PSR",
8858                                                                                                                                                      qVar"s"))),
8859                                                                                                                                             Close
8860                                                                                                                                               (Var("v",
8861                                                                                                                                                    CTy"PSR"),
8862                                                                                                                                                MB(MB(MB(MU(TP[Var("v",
8863                                                                                                                                                                   CTy"PSR"),
8864                                                                                                                                                               LF],
8865                                                                                                                                                            qTy),
8866                                                                                                                                                         Close
8867                                                                                                                                                           (Var("v",
8868                                                                                                                                                                PTy(CTy"PSR",
8869                                                                                                                                                                    bTy)),
8870                                                                                                                                                            MU(Rupd
8871                                                                                                                                                                 ("J",
8872                                                                                                                                                                  Var("v",
8873                                                                                                                                                                      PTy(CTy"PSR",
8874                                                                                                                                                                          bTy))),
8875                                                                                                                                                               qTy))),
8876                                                                                                                                                      Close
8877                                                                                                                                                        (Var("v",
8878                                                                                                                                                             CTy"PSR"),
8879                                                                                                                                                         MW(Close
8880                                                                                                                                                              (qVar"s",
8881                                                                                                                                                               Rupd
8882                                                                                                                                                                 ("CPSR",
8883                                                                                                                                                                  TP[qVar"s",
8884                                                                                                                                                                     Var("v",
8885                                                                                                                                                                         CTy"PSR")]))))),
8886                                                                                                                                                   Close
8887                                                                                                                                                     (AVar
8888                                                                                                                                                        uTy,
8889                                                                                                                                                      MB(MR(Close
8890                                                                                                                                                              (qVar"s",
8891                                                                                                                                                               Dest
8892                                                                                                                                                                 ("CPSR",
8893                                                                                                                                                                  CTy"PSR",
8894                                                                                                                                                                  qVar"s"))),
8895                                                                                                                                                         Close
8896                                                                                                                                                           (Var("v",
8897                                                                                                                                                                CTy"PSR"),
8898                                                                                                                                                            MB(MB(MB(MB(MR(Close
8899                                                                                                                                                                             (qVar"s",
8900                                                                                                                                                                              Dest
8901                                                                                                                                                                                ("CP15",
8902                                                                                                                                                                                 CTy"CP15",
8903                                                                                                                                                                                 qVar"s"))),
8904                                                                                                                                                                        Close
8905                                                                                                                                                                          (Var("v0",
8906                                                                                                                                                                               CTy"CP15"),
8907                                                                                                                                                                           MB(MB(MU(Dest
8908                                                                                                                                                                                      ("SCTLR",
8909                                                                                                                                                                                       CTy"SCTLR",
8910                                                                                                                                                                                       Var("v0",
8911                                                                                                                                                                                           CTy"CP15")),
8912                                                                                                                                                                                    qTy),
8913                                                                                                                                                                                 Close
8914                                                                                                                                                                                   (Var("v",
8915                                                                                                                                                                                        CTy"SCTLR"),
8916                                                                                                                                                                                    MU(Dest
8917                                                                                                                                                                                         ("TE",
8918                                                                                                                                                                                          bTy,
8919                                                                                                                                                                                          Var("v",
8920                                                                                                                                                                                              CTy"SCTLR")),
8921                                                                                                                                                                                       qTy))),
8922                                                                                                                                                                              Close
8923                                                                                                                                                                                (bVar"v0",
8924                                                                                                                                                                                 MU(TP[Var("v",
8925                                                                                                                                                                                           CTy"PSR"),
8926                                                                                                                                                                                       bVar"v0"],
8927                                                                                                                                                                                    qTy))))),
8928                                                                                                                                                                     Close
8929                                                                                                                                                                       (Var("v",
8930                                                                                                                                                                            PTy(CTy"PSR",
8931                                                                                                                                                                                bTy)),
8932                                                                                                                                                                        MU(Rupd
8933                                                                                                                                                                             ("T",
8934                                                                                                                                                                              Var("v",
8935                                                                                                                                                                                  PTy(CTy"PSR",
8936                                                                                                                                                                                      bTy))),
8937                                                                                                                                                                           qTy))),
8938                                                                                                                                                                  Close
8939                                                                                                                                                                    (Var("v",
8940                                                                                                                                                                         CTy"PSR"),
8941                                                                                                                                                                     MW(Close
8942                                                                                                                                                                          (qVar"s",
8943                                                                                                                                                                           Rupd
8944                                                                                                                                                                             ("CPSR",
8945                                                                                                                                                                              TP[qVar"s",
8946                                                                                                                                                                                 Var("v",
8947                                                                                                                                                                                     CTy"PSR")]))))),
8948                                                                                                                                                               Close
8949                                                                                                                                                                 (AVar
8950                                                                                                                                                                    uTy,
8951                                                                                                                                                                  MB(MR(Close
8952                                                                                                                                                                          (qVar"s",
8953                                                                                                                                                                           Dest
8954                                                                                                                                                                             ("CPSR",
8955                                                                                                                                                                              CTy"PSR",
8956                                                                                                                                                                              qVar"s"))),
8957                                                                                                                                                                     Close
8958                                                                                                                                                                       (Var("v",
8959                                                                                                                                                                            CTy"PSR"),
8960                                                                                                                                                                        MB(MB(MB(MB(MR(Close
8961                                                                                                                                                                                         (qVar"s",
8962                                                                                                                                                                                          Dest
8963                                                                                                                                                                                            ("CP15",
8964                                                                                                                                                                                             CTy"CP15",
8965                                                                                                                                                                                             qVar"s"))),
8966                                                                                                                                                                                    Close
8967                                                                                                                                                                                      (Var("v0",
8968                                                                                                                                                                                           CTy"CP15"),
8969                                                                                                                                                                                       MB(MB(MU(Dest
8970                                                                                                                                                                                                  ("SCTLR",
8971                                                                                                                                                                                                   CTy"SCTLR",
8972                                                                                                                                                                                                   Var("v0",
8973                                                                                                                                                                                                       CTy"CP15")),
8974                                                                                                                                                                                                qTy),
8975                                                                                                                                                                                             Close
8976                                                                                                                                                                                               (Var("v",
8977                                                                                                                                                                                                    CTy"SCTLR"),
8978                                                                                                                                                                                                MU(Dest
8979                                                                                                                                                                                                     ("EE",
8980                                                                                                                                                                                                      bTy,
8981                                                                                                                                                                                                      Var("v",
8982                                                                                                                                                                                                          CTy"SCTLR")),
8983                                                                                                                                                                                                   qTy))),
8984                                                                                                                                                                                          Close
8985                                                                                                                                                                                            (bVar"v0",
8986                                                                                                                                                                                             MU(TP[Var("v",
8987                                                                                                                                                                                                       CTy"PSR"),
8988                                                                                                                                                                                                   bVar"v0"],
8989                                                                                                                                                                                                qTy))))),
8990                                                                                                                                                                                 Close
8991                                                                                                                                                                                   (Var("v",
8992                                                                                                                                                                                        PTy(CTy"PSR",
8993                                                                                                                                                                                            bTy)),
8994                                                                                                                                                                                    MU(Rupd
8995                                                                                                                                                                                         ("E",
8996                                                                                                                                                                                          Var("v",
8997                                                                                                                                                                                              PTy(CTy"PSR",
8998                                                                                                                                                                                                  bTy))),
8999                                                                                                                                                                                       qTy))),
9000                                                                                                                                                                              Close
9001                                                                                                                                                                                (Var("v",
9002                                                                                                                                                                                     CTy"PSR"),
9003                                                                                                                                                                                 MW(Close
9004                                                                                                                                                                                      (qVar"s",
9005                                                                                                                                                                                       Rupd
9006                                                                                                                                                                                         ("CPSR",
9007                                                                                                                                                                                          TP[qVar"s",
9008                                                                                                                                                                                             Var("v",
9009                                                                                                                                                                                                 CTy"PSR")]))))),
9010                                                                                                                                                                           Close
9011                                                                                                                                                                             (AVar
9012                                                                                                                                                                                uTy,
9013                                                                                                                                                                              MB(Call
9014                                                                                                                                                                                   ("ExcVectorBase",
9015                                                                                                                                                                                    ATy(qTy,
9016                                                                                                                                                                                        PTy(F32,
9017                                                                                                                                                                                            qTy)),
9018                                                                                                                                                                                    LU),
9019                                                                                                                                                                                 Close
9020                                                                                                                                                                                   (Var("v",
9021                                                                                                                                                                                        F32),
9022                                                                                                                                                                                    MB(MU(Bop(Add,
9023                                                                                                                                                                                              Var("v",
9024                                                                                                                                                                                                  F32),
9025                                                                                                                                                                                              Var("vect_offset",
9026                                                                                                                                                                                                  F32)),
9027                                                                                                                                                                                          qTy),
9028                                                                                                                                                                                       Close
9029                                                                                                                                                                                         (Var("v",
9030                                                                                                                                                                                              F32),
9031                                                                                                                                                                                          Call
9032                                                                                                                                                                                            ("BranchTo",
9033                                                                                                                                                                                             ATy(qTy,
9034                                                                                                                                                                                                 PTy(uTy,
9035                                                                                                                                                                                                     qTy)),
9036                                                                                                                                                                                             Var("v",
9037                                                                                                                                                                                                 F32))))))))))))))))))))))))))))))))))))))))))),
9038                                                              Close
9039                                                                (AVar uTy,
9040                                                                 MW(Close
9041                                                                      (qVar"s",
9042                                                                       Rupd
9043                                                                         ("data_abort",
9044                                                                          TP[qVar"s",
9045                                                                             LT]))))))))))))))))))))))))
9046;
9047val TakePrefetchAbortException_def = Def
9048  ("TakePrefetchAbortException",AVar uTy,
9049   MB(MW(Close(qVar"s",Rupd("data_abort",TP[qVar"s",LF]))),
9050      Close
9051        (AVar uTy,
9052         MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
9053            Close
9054              (Var("v",CTy"PSR"),
9055               MB(MB(MU(Dest("T",bTy,Var("v",CTy"PSR")),qTy),
9056                     Close
9057                       (bVar"b",
9058                        ITE(bVar"b",Const("PC",ATy(qTy,PTy(F32,qTy))),
9059                            MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
9060                               Close
9061                                 (Var("v",F32),
9062                                  MU(Bop(Sub,Var("v",F32),LW(4,32)),qTy)))))),
9063                  Close
9064                    (Var("new_lr_value",F32),
9065                     MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
9066                        Close
9067                          (Var("new_spsr_value",CTy"PSR"),
9068                           Let(Var("vect_offset",F32),LW(12,32),
9069                               Let(Var("preferred_exceptn_return",F32),
9070                                   Bop(Sub,Var("new_lr_value",F32),
9071                                       LW(4,32)),
9072                                   MB(Call
9073                                        ("HaveSecurityExt",
9074                                         ATy(qTy,PTy(bTy,qTy)),LU),
9075                                      Close
9076                                        (bVar"v",
9077                                         MB(MB(ITE(bVar"v",
9078                                                   MB(MR(Close
9079                                                           (qVar"s",
9080                                                            Dest
9081                                                              ("CP15",
9082                                                               CTy"CP15",
9083                                                               qVar"s"))),
9084                                                      Close
9085                                                        (Var("v",CTy"CP15"),
9086                                                         MB(MU(Dest
9087                                                                 ("SCR",
9088                                                                  CTy"SCR",
9089                                                                  Var("v",
9090                                                                      CTy"CP15")),
9091                                                               qTy),
9092                                                            Close
9093                                                              (Var("v",
9094                                                                   CTy"SCR"),
9095                                                               MU(Dest
9096                                                                    ("EA",
9097                                                                     bTy,
9098                                                                     Var("v",
9099                                                                         CTy"SCR")),
9100                                                                  qTy))))),
9101                                                   MU(LF,qTy)),
9102                                               Close
9103                                                 (bVar"b",
9104                                                  ITE(bVar"b",
9105                                                      Call
9106                                                        ("IsExternalAbort",
9107                                                         ATy(qTy,
9108                                                             PTy(bTy,qTy)),
9109                                                         LU),MU(LF,qTy)))),
9110                                            Close
9111                                              (bVar"route_to_monitor",
9112                                               MB(Call
9113                                                    ("HaveVirtExt",
9114                                                     ATy(qTy,PTy(bTy,qTy)),
9115                                                     LU),
9116                                                  Close
9117                                                    (bVar"v",
9118                                                     MB(MB(MB(ITE(bVar"v",
9119                                                                  Call
9120                                                                    ("HaveSecurityExt",
9121                                                                     ATy(qTy,
9122                                                                         PTy(bTy,
9123                                                                             qTy)),
9124                                                                     LU),
9125                                                                  MU(LF,
9126                                                                     qTy)),
9127                                                              Close
9128                                                                (bVar"b",
9129                                                                 ITE(bVar"b",
9130                                                                     MB(MR(Close
9131                                                                             (qVar"s",
9132                                                                              Dest
9133                                                                                ("CP15",
9134                                                                                 CTy"CP15",
9135                                                                                 qVar"s"))),
9136                                                                        Close
9137                                                                          (Var("v",
9138                                                                               CTy"CP15"),
9139                                                                           MB(MU(Dest
9140                                                                                   ("SCR",
9141                                                                                    CTy"SCR",
9142                                                                                    Var("v",
9143                                                                                        CTy"CP15")),
9144                                                                                 qTy),
9145                                                                              Close
9146                                                                                (Var("v",
9147                                                                                     CTy"SCR"),
9148                                                                                 MU(Dest
9149                                                                                      ("NS",
9150                                                                                       bTy,
9151                                                                                       Var("v",
9152                                                                                           CTy"SCR")),
9153                                                                                    qTy))))),
9154                                                                     MU(LF,
9155                                                                        qTy)))),
9156                                                           Close
9157                                                             (bVar"b",
9158                                                              ITE(bVar"b",
9159                                                                  MB(MR(Close
9160                                                                          (qVar"s",
9161                                                                           Dest
9162                                                                             ("CPSR",
9163                                                                              CTy"PSR",
9164                                                                              qVar"s"))),
9165                                                                     Close
9166                                                                       (Var("v",
9167                                                                            CTy"PSR"),
9168                                                                        MB(MU(Dest
9169                                                                                ("M",
9170                                                                                 FTy 5,
9171                                                                                 Var("v",
9172                                                                                     CTy"PSR")),
9173                                                                              qTy),
9174                                                                           Close
9175                                                                             (Var("v",
9176                                                                                  FTy 5),
9177                                                                              MU(EQ(Var("v",
9178                                                                                        FTy 5),
9179                                                                                    LW(26,
9180                                                                                       5)),
9181                                                                                 qTy))))),
9182                                                                  MU(LF,
9183                                                                     qTy)))),
9184                                                        Close
9185                                                          (bVar"take_to_hyp",
9186                                                           MB(ITB([(bVar"route_to_monitor",
9187                                                                    MB(MR(Close
9188                                                                            (qVar"s",
9189                                                                             Dest
9190                                                                               ("CPSR",
9191                                                                                CTy"PSR",
9192                                                                                qVar"s"))),
9193                                                                       Close
9194                                                                         (Var("v",
9195                                                                              CTy"PSR"),
9196                                                                          MB(MB(MB(MU(Dest
9197                                                                                        ("M",
9198                                                                                         FTy 5,
9199                                                                                         Var("v",
9200                                                                                             CTy"PSR")),
9201                                                                                      qTy),
9202                                                                                   Close
9203                                                                                     (Var("v",
9204                                                                                          FTy 5),
9205                                                                                      MU(EQ(Var("v",
9206                                                                                                FTy 5),
9207                                                                                            LW(22,
9208                                                                                               5)),
9209                                                                                         qTy))),
9210                                                                                Close
9211                                                                                  (bVar"b",
9212                                                                                   ITE(bVar"b",
9213                                                                                       MB(MR(Close
9214                                                                                               (qVar"s",
9215                                                                                                Dest
9216                                                                                                  ("CP15",
9217                                                                                                   CTy"CP15",
9218                                                                                                   qVar"s"))),
9219                                                                                          Close
9220                                                                                            (Var("v",
9221                                                                                                 CTy"CP15"),
9222                                                                                             MB(MU(Dest
9223                                                                                                     ("SCR",
9224                                                                                                      CTy"SCR",
9225                                                                                                      Var("v",
9226                                                                                                          CTy"CP15")),
9227                                                                                                   qTy),
9228                                                                                                Close
9229                                                                                                  (Var("x0",
9230                                                                                                       CTy"SCR"),
9231                                                                                                   MB(MR(Close
9232                                                                                                           (qVar"s",
9233                                                                                                            Dest
9234                                                                                                              ("CP15",
9235                                                                                                               CTy"CP15",
9236                                                                                                               qVar"s"))),
9237                                                                                                      Close
9238                                                                                                        (Var("v",
9239                                                                                                             CTy"CP15"),
9240                                                                                                         MB(MB(MU(TP[Var("v",
9241                                                                                                                         CTy"CP15"),
9242                                                                                                                     Rupd
9243                                                                                                                       ("NS",
9244                                                                                                                        TP[Var("x0",
9245                                                                                                                               CTy"SCR"),
9246                                                                                                                           LF])],
9247                                                                                                                  qTy),
9248                                                                                                               Close
9249                                                                                                                 (Var("v",
9250                                                                                                                      PTy(CTy"CP15",
9251                                                                                                                          CTy"SCR")),
9252                                                                                                                  MU(Rupd
9253                                                                                                                       ("SCR",
9254                                                                                                                        Var("v",
9255                                                                                                                            PTy(CTy"CP15",
9256                                                                                                                                CTy"SCR"))),
9257                                                                                                                     qTy))),
9258                                                                                                            Close
9259                                                                                                              (Var("v",
9260                                                                                                                   CTy"CP15"),
9261                                                                                                               MW(Close
9262                                                                                                                    (qVar"s",
9263                                                                                                                     Rupd
9264                                                                                                                       ("CP15",
9265                                                                                                                        TP[qVar"s",
9266                                                                                                                           Var("v",
9267                                                                                                                               CTy"CP15")]))))))))))),
9268                                                                                       MU(LU,
9269                                                                                          qTy)))),
9270                                                                             Close
9271                                                                               (AVar
9272                                                                                  uTy,
9273                                                                                Call
9274                                                                                  ("EnterMonitorMode",
9275                                                                                   ATy(qTy,
9276                                                                                       PTy(uTy,
9277                                                                                           qTy)),
9278                                                                                   TP[Var("new_spsr_value",
9279                                                                                          CTy"PSR"),
9280                                                                                      Var("new_lr_value",
9281                                                                                          F32),
9282                                                                                      Var("vect_offset",
9283                                                                                          F32)])))))),
9284                                                                   (bVar"take_to_hyp",
9285                                                                    Call
9286                                                                      ("EnterHypMode",
9287                                                                       ATy(qTy,
9288                                                                           PTy(uTy,
9289                                                                               qTy)),
9290                                                                       TP[Var("new_spsr_value",
9291                                                                              CTy"PSR"),
9292                                                                          Var("preferred_exceptn_return",
9293                                                                              F32),
9294                                                                          Var("vect_offset",
9295                                                                              F32)])),
9296                                                                   (LF,
9297                                                                    Call
9298                                                                      ("EnterHypMode",
9299                                                                       ATy(qTy,
9300                                                                           PTy(uTy,
9301                                                                               qTy)),
9302                                                                       TP[Var("new_spsr_value",
9303                                                                              CTy"PSR"),
9304                                                                          Var("preferred_exceptn_return",
9305                                                                              F32),
9306                                                                          LW(20,
9307                                                                             32)]))],
9308                                                                  MB(Call
9309                                                                       ("HaveSecurityExt",
9310                                                                        ATy(qTy,
9311                                                                            PTy(bTy,
9312                                                                                qTy)),
9313                                                                        LU),
9314                                                                     Close
9315                                                                       (bVar"v",
9316                                                                        MB(MB(ITE(bVar"v",
9317                                                                                  MB(MR(Close
9318                                                                                          (qVar"s",
9319                                                                                           Dest
9320                                                                                             ("CPSR",
9321                                                                                              CTy"PSR",
9322                                                                                              qVar"s"))),
9323                                                                                     Close
9324                                                                                       (Var("v",
9325                                                                                            CTy"PSR"),
9326                                                                                        MB(MU(Dest
9327                                                                                                ("M",
9328                                                                                                 FTy 5,
9329                                                                                                 Var("v",
9330                                                                                                     CTy"PSR")),
9331                                                                                              qTy),
9332                                                                                           Close
9333                                                                                             (Var("v",
9334                                                                                                  FTy 5),
9335                                                                                              MU(EQ(Var("v",
9336                                                                                                        FTy 5),
9337                                                                                                    LW(22,
9338                                                                                                       5)),
9339                                                                                                 qTy))))),
9340                                                                                  MU(LF,
9341                                                                                     qTy)),
9342                                                                              Close
9343                                                                                (bVar"b",
9344                                                                                 ITE(bVar"b",
9345                                                                                     MB(MR(Close
9346                                                                                             (qVar"s",
9347                                                                                              Dest
9348                                                                                                ("CP15",
9349                                                                                                 CTy"CP15",
9350                                                                                                 qVar"s"))),
9351                                                                                        Close
9352                                                                                          (Var("v",
9353                                                                                               CTy"CP15"),
9354                                                                                           MB(MU(Dest
9355                                                                                                   ("SCR",
9356                                                                                                    CTy"SCR",
9357                                                                                                    Var("v",
9358                                                                                                        CTy"CP15")),
9359                                                                                                 qTy),
9360                                                                                              Close
9361                                                                                                (Var("x0",
9362                                                                                                     CTy"SCR"),
9363                                                                                                 MB(MR(Close
9364                                                                                                         (qVar"s",
9365                                                                                                          Dest
9366                                                                                                            ("CP15",
9367                                                                                                             CTy"CP15",
9368                                                                                                             qVar"s"))),
9369                                                                                                    Close
9370                                                                                                      (Var("v",
9371                                                                                                           CTy"CP15"),
9372                                                                                                       MB(MB(MU(TP[Var("v",
9373                                                                                                                       CTy"CP15"),
9374                                                                                                                   Rupd
9375                                                                                                                     ("NS",
9376                                                                                                                      TP[Var("x0",
9377                                                                                                                             CTy"SCR"),
9378                                                                                                                         LF])],
9379                                                                                                                qTy),
9380                                                                                                             Close
9381                                                                                                               (Var("v",
9382                                                                                                                    PTy(CTy"CP15",
9383                                                                                                                        CTy"SCR")),
9384                                                                                                                MU(Rupd
9385                                                                                                                     ("SCR",
9386                                                                                                                      Var("v",
9387                                                                                                                          PTy(CTy"CP15",
9388                                                                                                                              CTy"SCR"))),
9389                                                                                                                   qTy))),
9390                                                                                                          Close
9391                                                                                                            (Var("v",
9392                                                                                                                 CTy"CP15"),
9393                                                                                                             MW(Close
9394                                                                                                                  (qVar"s",
9395                                                                                                                   Rupd
9396                                                                                                                     ("CP15",
9397                                                                                                                      TP[qVar"s",
9398                                                                                                                         Var("v",
9399                                                                                                                             CTy"CP15")]))))))))))),
9400                                                                                     MU(LU,
9401                                                                                        qTy)))),
9402                                                                           Close
9403                                                                             (AVar
9404                                                                                uTy,
9405                                                                              MB(MR(Close
9406                                                                                      (qVar"s",
9407                                                                                       Dest
9408                                                                                         ("CPSR",
9409                                                                                          CTy"PSR",
9410                                                                                          qVar"s"))),
9411                                                                                 Close
9412                                                                                   (Var("v",
9413                                                                                        CTy"PSR"),
9414                                                                                    MB(MB(MB(MU(TP[Var("v",
9415                                                                                                       CTy"PSR"),
9416                                                                                                   LW(23,
9417                                                                                                      5)],
9418                                                                                                qTy),
9419                                                                                             Close
9420                                                                                               (Var("v",
9421                                                                                                    PTy(CTy"PSR",
9422                                                                                                        FTy 5)),
9423                                                                                                MU(Rupd
9424                                                                                                     ("M",
9425                                                                                                      Var("v",
9426                                                                                                          PTy(CTy"PSR",
9427                                                                                                              FTy 5))),
9428                                                                                                   qTy))),
9429                                                                                          Close
9430                                                                                            (Var("v",
9431                                                                                                 CTy"PSR"),
9432                                                                                             MW(Close
9433                                                                                                  (qVar"s",
9434                                                                                                   Rupd
9435                                                                                                     ("CPSR",
9436                                                                                                      TP[qVar"s",
9437                                                                                                         Var("v",
9438                                                                                                             CTy"PSR")]))))),
9439                                                                                       Close
9440                                                                                         (AVar
9441                                                                                            uTy,
9442                                                                                          MB(Call
9443                                                                                               ("write'SPSR",
9444                                                                                                ATy(qTy,
9445                                                                                                    PTy(uTy,
9446                                                                                                        qTy)),
9447                                                                                                Var("new_spsr_value",
9448                                                                                                    CTy"PSR")),
9449                                                                                             Close
9450                                                                                               (AVar
9451                                                                                                  uTy,
9452                                                                                                MB(Call
9453                                                                                                     ("write'R",
9454                                                                                                      ATy(qTy,
9455                                                                                                          PTy(uTy,
9456                                                                                                              qTy)),
9457                                                                                                      TP[Var("new_lr_value",
9458                                                                                                             F32),
9459                                                                                                         LW(14,
9460                                                                                                            4)]),
9461                                                                                                   Close
9462                                                                                                     (AVar
9463                                                                                                        uTy,
9464                                                                                                      MB(MR(Close
9465                                                                                                              (qVar"s",
9466                                                                                                               Dest
9467                                                                                                                 ("CPSR",
9468                                                                                                                  CTy"PSR",
9469                                                                                                                  qVar"s"))),
9470                                                                                                         Close
9471                                                                                                           (Var("v",
9472                                                                                                                CTy"PSR"),
9473                                                                                                            MB(MB(MB(MU(TP[Var("v",
9474                                                                                                                               CTy"PSR"),
9475                                                                                                                           LT],
9476                                                                                                                        qTy),
9477                                                                                                                     Close
9478                                                                                                                       (Var("v",
9479                                                                                                                            PTy(CTy"PSR",
9480                                                                                                                                bTy)),
9481                                                                                                                        MU(Rupd
9482                                                                                                                             ("I",
9483                                                                                                                              Var("v",
9484                                                                                                                                  PTy(CTy"PSR",
9485                                                                                                                                      bTy))),
9486                                                                                                                           qTy))),
9487                                                                                                                  Close
9488                                                                                                                    (Var("v",
9489                                                                                                                         CTy"PSR"),
9490                                                                                                                     MW(Close
9491                                                                                                                          (qVar"s",
9492                                                                                                                           Rupd
9493                                                                                                                             ("CPSR",
9494                                                                                                                              TP[qVar"s",
9495                                                                                                                                 Var("v",
9496                                                                                                                                     CTy"PSR")]))))),
9497                                                                                                               Close
9498                                                                                                                 (AVar
9499                                                                                                                    uTy,
9500                                                                                                                  MB(Call
9501                                                                                                                       ("HaveSecurityExt",
9502                                                                                                                        ATy(qTy,
9503                                                                                                                            PTy(bTy,
9504                                                                                                                                qTy)),
9505                                                                                                                        LU),
9506                                                                                                                     Close
9507                                                                                                                       (bVar"v",
9508                                                                                                                        MB(MB(MB(MB(MB(MU(Mop(Not,
9509                                                                                                                                              bVar"v"),
9510                                                                                                                                          qTy),
9511                                                                                                                                       Close
9512                                                                                                                                         (bVar"b",
9513                                                                                                                                          ITE(bVar"b",
9514                                                                                                                                              MU(LT,
9515                                                                                                                                                 qTy),
9516                                                                                                                                              Call
9517                                                                                                                                                ("HaveVirtExt",
9518                                                                                                                                                 ATy(qTy,
9519                                                                                                                                                     PTy(bTy,
9520                                                                                                                                                         qTy)),
9521                                                                                                                                                 LU)))),
9522                                                                                                                                    Close
9523                                                                                                                                      (bVar"b",
9524                                                                                                                                       ITE(bVar"b",
9525                                                                                                                                           MU(LT,
9526                                                                                                                                              qTy),
9527                                                                                                                                           MB(MR(Close
9528                                                                                                                                                   (qVar"s",
9529                                                                                                                                                    Dest
9530                                                                                                                                                      ("CP15",
9531                                                                                                                                                       CTy"CP15",
9532                                                                                                                                                       qVar"s"))),
9533                                                                                                                                              Close
9534                                                                                                                                                (Var("v",
9535                                                                                                                                                     CTy"CP15"),
9536                                                                                                                                                 MB(MB(MU(Dest
9537                                                                                                                                                            ("SCR",
9538                                                                                                                                                             CTy"SCR",
9539                                                                                                                                                             Var("v",
9540                                                                                                                                                                 CTy"CP15")),
9541                                                                                                                                                          qTy),
9542                                                                                                                                                       Close
9543                                                                                                                                                         (Var("v",
9544                                                                                                                                                              CTy"SCR"),
9545                                                                                                                                                          MU(Dest
9546                                                                                                                                                               ("NS",
9547                                                                                                                                                                bTy,
9548                                                                                                                                                                Var("v",
9549                                                                                                                                                                    CTy"SCR")),
9550                                                                                                                                                             qTy))),
9551                                                                                                                                                    Close
9552                                                                                                                                                      (bVar"v",
9553                                                                                                                                                       MU(Mop(Not,
9554                                                                                                                                                              bVar"v"),
9555                                                                                                                                                          qTy)))))))),
9556                                                                                                                                 Close
9557                                                                                                                                   (bVar"b",
9558                                                                                                                                    ITE(bVar"b",
9559                                                                                                                                        MU(LT,
9560                                                                                                                                           qTy),
9561                                                                                                                                        MB(MR(Close
9562                                                                                                                                                (qVar"s",
9563                                                                                                                                                 Dest
9564                                                                                                                                                   ("CP15",
9565                                                                                                                                                    CTy"CP15",
9566                                                                                                                                                    qVar"s"))),
9567                                                                                                                                           Close
9568                                                                                                                                             (Var("v",
9569                                                                                                                                                  CTy"CP15"),
9570                                                                                                                                              MB(MU(Dest
9571                                                                                                                                                      ("SCR",
9572                                                                                                                                                       CTy"SCR",
9573                                                                                                                                                       Var("v",
9574                                                                                                                                                           CTy"CP15")),
9575                                                                                                                                                    qTy),
9576                                                                                                                                                 Close
9577                                                                                                                                                   (Var("v",
9578                                                                                                                                                        CTy"SCR"),
9579                                                                                                                                                    MU(Dest
9580                                                                                                                                                         ("AW",
9581                                                                                                                                                          bTy,
9582                                                                                                                                                          Var("v",
9583                                                                                                                                                              CTy"SCR")),
9584                                                                                                                                                       qTy)))))))),
9585                                                                                                                              Close
9586                                                                                                                                (bVar"b",
9587                                                                                                                                 ITE(bVar"b",
9588                                                                                                                                     MB(MR(Close
9589                                                                                                                                             (qVar"s",
9590                                                                                                                                              Dest
9591                                                                                                                                                ("CPSR",
9592                                                                                                                                                 CTy"PSR",
9593                                                                                                                                                 qVar"s"))),
9594                                                                                                                                        Close
9595                                                                                                                                          (Var("v",
9596                                                                                                                                               CTy"PSR"),
9597                                                                                                                                           MB(MB(MU(TP[Var("v",
9598                                                                                                                                                           CTy"PSR"),
9599                                                                                                                                                       LT],
9600                                                                                                                                                    qTy),
9601                                                                                                                                                 Close
9602                                                                                                                                                   (Var("v",
9603                                                                                                                                                        PTy(CTy"PSR",
9604                                                                                                                                                            bTy)),
9605                                                                                                                                                    MU(Rupd
9606                                                                                                                                                         ("A",
9607                                                                                                                                                          Var("v",
9608                                                                                                                                                              PTy(CTy"PSR",
9609                                                                                                                                                                  bTy))),
9610                                                                                                                                                       qTy))),
9611                                                                                                                                              Close
9612                                                                                                                                                (Var("v",
9613                                                                                                                                                     CTy"PSR"),
9614                                                                                                                                                 MW(Close
9615                                                                                                                                                      (qVar"s",
9616                                                                                                                                                       Rupd
9617                                                                                                                                                         ("CPSR",
9618                                                                                                                                                          TP[qVar"s",
9619                                                                                                                                                             Var("v",
9620                                                                                                                                                                 CTy"PSR")]))))))),
9621                                                                                                                                     MU(LU,
9622                                                                                                                                        qTy)))),
9623                                                                                                                           Close
9624                                                                                                                             (AVar
9625                                                                                                                                uTy,
9626                                                                                                                              MB(MR(Close
9627                                                                                                                                      (qVar"s",
9628                                                                                                                                       Dest
9629                                                                                                                                         ("CPSR",
9630                                                                                                                                          CTy"PSR",
9631                                                                                                                                          qVar"s"))),
9632                                                                                                                                 Close
9633                                                                                                                                   (Var("v",
9634                                                                                                                                        CTy"PSR"),
9635                                                                                                                                    MB(MB(MB(MU(TP[Var("v",
9636                                                                                                                                                       CTy"PSR"),
9637                                                                                                                                                   LW(0,
9638                                                                                                                                                      8)],
9639                                                                                                                                                qTy),
9640                                                                                                                                             Close
9641                                                                                                                                               (Var("v",
9642                                                                                                                                                    PTy(CTy"PSR",
9643                                                                                                                                                        F8)),
9644                                                                                                                                                MU(Rupd
9645                                                                                                                                                     ("IT",
9646                                                                                                                                                      Var("v",
9647                                                                                                                                                          PTy(CTy"PSR",
9648                                                                                                                                                              F8))),
9649                                                                                                                                                   qTy))),
9650                                                                                                                                          Close
9651                                                                                                                                            (Var("v",
9652                                                                                                                                                 CTy"PSR"),
9653                                                                                                                                             MW(Close
9654                                                                                                                                                  (qVar"s",
9655                                                                                                                                                   Rupd
9656                                                                                                                                                     ("CPSR",
9657                                                                                                                                                      TP[qVar"s",
9658                                                                                                                                                         Var("v",
9659                                                                                                                                                             CTy"PSR")]))))),
9660                                                                                                                                       Close
9661                                                                                                                                         (AVar
9662                                                                                                                                            uTy,
9663                                                                                                                                          MB(MR(Close
9664                                                                                                                                                  (qVar"s",
9665                                                                                                                                                   Dest
9666                                                                                                                                                     ("CPSR",
9667                                                                                                                                                      CTy"PSR",
9668                                                                                                                                                      qVar"s"))),
9669                                                                                                                                             Close
9670                                                                                                                                               (Var("v",
9671                                                                                                                                                    CTy"PSR"),
9672                                                                                                                                                MB(MB(MB(MU(TP[Var("v",
9673                                                                                                                                                                   CTy"PSR"),
9674                                                                                                                                                               LF],
9675                                                                                                                                                            qTy),
9676                                                                                                                                                         Close
9677                                                                                                                                                           (Var("v",
9678                                                                                                                                                                PTy(CTy"PSR",
9679                                                                                                                                                                    bTy)),
9680                                                                                                                                                            MU(Rupd
9681                                                                                                                                                                 ("J",
9682                                                                                                                                                                  Var("v",
9683                                                                                                                                                                      PTy(CTy"PSR",
9684                                                                                                                                                                          bTy))),
9685                                                                                                                                                               qTy))),
9686                                                                                                                                                      Close
9687                                                                                                                                                        (Var("v",
9688                                                                                                                                                             CTy"PSR"),
9689                                                                                                                                                         MW(Close
9690                                                                                                                                                              (qVar"s",
9691                                                                                                                                                               Rupd
9692                                                                                                                                                                 ("CPSR",
9693                                                                                                                                                                  TP[qVar"s",
9694                                                                                                                                                                     Var("v",
9695                                                                                                                                                                         CTy"PSR")]))))),
9696                                                                                                                                                   Close
9697                                                                                                                                                     (AVar
9698                                                                                                                                                        uTy,
9699                                                                                                                                                      MB(MR(Close
9700                                                                                                                                                              (qVar"s",
9701                                                                                                                                                               Dest
9702                                                                                                                                                                 ("CPSR",
9703                                                                                                                                                                  CTy"PSR",
9704                                                                                                                                                                  qVar"s"))),
9705                                                                                                                                                         Close
9706                                                                                                                                                           (Var("v",
9707                                                                                                                                                                CTy"PSR"),
9708                                                                                                                                                            MB(MB(MB(MB(MR(Close
9709                                                                                                                                                                             (qVar"s",
9710                                                                                                                                                                              Dest
9711                                                                                                                                                                                ("CP15",
9712                                                                                                                                                                                 CTy"CP15",
9713                                                                                                                                                                                 qVar"s"))),
9714                                                                                                                                                                        Close
9715                                                                                                                                                                          (Var("v0",
9716                                                                                                                                                                               CTy"CP15"),
9717                                                                                                                                                                           MB(MB(MU(Dest
9718                                                                                                                                                                                      ("SCTLR",
9719                                                                                                                                                                                       CTy"SCTLR",
9720                                                                                                                                                                                       Var("v0",
9721                                                                                                                                                                                           CTy"CP15")),
9722                                                                                                                                                                                    qTy),
9723                                                                                                                                                                                 Close
9724                                                                                                                                                                                   (Var("v",
9725                                                                                                                                                                                        CTy"SCTLR"),
9726                                                                                                                                                                                    MU(Dest
9727                                                                                                                                                                                         ("TE",
9728                                                                                                                                                                                          bTy,
9729                                                                                                                                                                                          Var("v",
9730                                                                                                                                                                                              CTy"SCTLR")),
9731                                                                                                                                                                                       qTy))),
9732                                                                                                                                                                              Close
9733                                                                                                                                                                                (bVar"v0",
9734                                                                                                                                                                                 MU(TP[Var("v",
9735                                                                                                                                                                                           CTy"PSR"),
9736                                                                                                                                                                                       bVar"v0"],
9737                                                                                                                                                                                    qTy))))),
9738                                                                                                                                                                     Close
9739                                                                                                                                                                       (Var("v",
9740                                                                                                                                                                            PTy(CTy"PSR",
9741                                                                                                                                                                                bTy)),
9742                                                                                                                                                                        MU(Rupd
9743                                                                                                                                                                             ("T",
9744                                                                                                                                                                              Var("v",
9745                                                                                                                                                                                  PTy(CTy"PSR",
9746                                                                                                                                                                                      bTy))),
9747                                                                                                                                                                           qTy))),
9748                                                                                                                                                                  Close
9749                                                                                                                                                                    (Var("v",
9750                                                                                                                                                                         CTy"PSR"),
9751                                                                                                                                                                     MW(Close
9752                                                                                                                                                                          (qVar"s",
9753                                                                                                                                                                           Rupd
9754                                                                                                                                                                             ("CPSR",
9755                                                                                                                                                                              TP[qVar"s",
9756                                                                                                                                                                                 Var("v",
9757                                                                                                                                                                                     CTy"PSR")]))))),
9758                                                                                                                                                               Close
9759                                                                                                                                                                 (AVar
9760                                                                                                                                                                    uTy,
9761                                                                                                                                                                  MB(MR(Close
9762                                                                                                                                                                          (qVar"s",
9763                                                                                                                                                                           Dest
9764                                                                                                                                                                             ("CPSR",
9765                                                                                                                                                                              CTy"PSR",
9766                                                                                                                                                                              qVar"s"))),
9767                                                                                                                                                                     Close
9768                                                                                                                                                                       (Var("v",
9769                                                                                                                                                                            CTy"PSR"),
9770                                                                                                                                                                        MB(MB(MB(MB(MR(Close
9771                                                                                                                                                                                         (qVar"s",
9772                                                                                                                                                                                          Dest
9773                                                                                                                                                                                            ("CP15",
9774                                                                                                                                                                                             CTy"CP15",
9775                                                                                                                                                                                             qVar"s"))),
9776                                                                                                                                                                                    Close
9777                                                                                                                                                                                      (Var("v0",
9778                                                                                                                                                                                           CTy"CP15"),
9779                                                                                                                                                                                       MB(MB(MU(Dest
9780                                                                                                                                                                                                  ("SCTLR",
9781                                                                                                                                                                                                   CTy"SCTLR",
9782                                                                                                                                                                                                   Var("v0",
9783                                                                                                                                                                                                       CTy"CP15")),
9784                                                                                                                                                                                                qTy),
9785                                                                                                                                                                                             Close
9786                                                                                                                                                                                               (Var("v",
9787                                                                                                                                                                                                    CTy"SCTLR"),
9788                                                                                                                                                                                                MU(Dest
9789                                                                                                                                                                                                     ("EE",
9790                                                                                                                                                                                                      bTy,
9791                                                                                                                                                                                                      Var("v",
9792                                                                                                                                                                                                          CTy"SCTLR")),
9793                                                                                                                                                                                                   qTy))),
9794                                                                                                                                                                                          Close
9795                                                                                                                                                                                            (bVar"v0",
9796                                                                                                                                                                                             MU(TP[Var("v",
9797                                                                                                                                                                                                       CTy"PSR"),
9798                                                                                                                                                                                                   bVar"v0"],
9799                                                                                                                                                                                                qTy))))),
9800                                                                                                                                                                                 Close
9801                                                                                                                                                                                   (Var("v",
9802                                                                                                                                                                                        PTy(CTy"PSR",
9803                                                                                                                                                                                            bTy)),
9804                                                                                                                                                                                    MU(Rupd
9805                                                                                                                                                                                         ("E",
9806                                                                                                                                                                                          Var("v",
9807                                                                                                                                                                                              PTy(CTy"PSR",
9808                                                                                                                                                                                                  bTy))),
9809                                                                                                                                                                                       qTy))),
9810                                                                                                                                                                              Close
9811                                                                                                                                                                                (Var("v",
9812                                                                                                                                                                                     CTy"PSR"),
9813                                                                                                                                                                                 MW(Close
9814                                                                                                                                                                                      (qVar"s",
9815                                                                                                                                                                                       Rupd
9816                                                                                                                                                                                         ("CPSR",
9817                                                                                                                                                                                          TP[qVar"s",
9818                                                                                                                                                                                             Var("v",
9819                                                                                                                                                                                                 CTy"PSR")]))))),
9820                                                                                                                                                                           Close
9821                                                                                                                                                                             (AVar
9822                                                                                                                                                                                uTy,
9823                                                                                                                                                                              MB(Call
9824                                                                                                                                                                                   ("ExcVectorBase",
9825                                                                                                                                                                                    ATy(qTy,
9826                                                                                                                                                                                        PTy(F32,
9827                                                                                                                                                                                            qTy)),
9828                                                                                                                                                                                    LU),
9829                                                                                                                                                                                 Close
9830                                                                                                                                                                                   (Var("v",
9831                                                                                                                                                                                        F32),
9832                                                                                                                                                                                    MB(MU(Bop(Add,
9833                                                                                                                                                                                              Var("v",
9834                                                                                                                                                                                                  F32),
9835                                                                                                                                                                                              Var("vect_offset",
9836                                                                                                                                                                                                  F32)),
9837                                                                                                                                                                                          qTy),
9838                                                                                                                                                                                       Close
9839                                                                                                                                                                                         (Var("v",
9840                                                                                                                                                                                              F32),
9841                                                                                                                                                                                          Call
9842                                                                                                                                                                                            ("BranchTo",
9843                                                                                                                                                                                             ATy(qTy,
9844                                                                                                                                                                                                 PTy(uTy,
9845                                                                                                                                                                                                     qTy)),
9846                                                                                                                                                                                             Var("v",
9847                                                                                                                                                                                                 F32))))))))))))))))))))))))))))))))))))))))))),
9848                                                              Close
9849                                                                (AVar uTy,
9850                                                                 MW(Close
9851                                                                      (qVar"s",
9852                                                                       Rupd
9853                                                                         ("data_abort",
9854                                                                          TP[qVar"s",
9855                                                                             LT]))))))))))))))))))))))))
9856;
9857val TakePhysicalIRQException_def = Def
9858  ("TakePhysicalIRQException",AVar uTy,
9859   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
9860      Close
9861        (Var("v",CTy"PSR"),
9862         MB(MB(MU(Dest("T",bTy,Var("v",CTy"PSR")),qTy),
9863               Close
9864                 (bVar"b",
9865                  ITE(bVar"b",Const("PC",ATy(qTy,PTy(F32,qTy))),
9866                      MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
9867                         Close
9868                           (Var("v",F32),
9869                            MU(Bop(Sub,Var("v",F32),LW(4,32)),qTy)))))),
9870            Close
9871              (Var("new_lr_value",F32),
9872               MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
9873                  Close
9874                    (Var("new_spsr_value",CTy"PSR"),
9875                     Let(Var("vect_offset",F32),LW(24,32),
9876                         MB(Call
9877                              ("HaveSecurityExt",ATy(qTy,PTy(bTy,qTy)),LU),
9878                            Close
9879                              (bVar"v",
9880                               MB(ITE(bVar"v",
9881                                      MB(MR(Close
9882                                              (qVar"s",
9883                                               Dest
9884                                                 ("CP15",CTy"CP15",qVar"s"))),
9885                                         Close
9886                                           (Var("v",CTy"CP15"),
9887                                            MB(MU(Dest
9888                                                    ("SCR",CTy"SCR",
9889                                                     Var("v",CTy"CP15")),
9890                                                  qTy),
9891                                               Close
9892                                                 (Var("v",CTy"SCR"),
9893                                                  MU(Dest
9894                                                       ("IRQ",bTy,
9895                                                        Var("v",CTy"SCR")),
9896                                                     qTy))))),MU(LF,qTy)),
9897                                  Close
9898                                    (bVar"route_to_monitor",
9899                                     MB(Call
9900                                          ("HaveVirtExt",
9901                                           ATy(qTy,PTy(bTy,qTy)),LU),
9902                                        Close
9903                                          (bVar"v",
9904                                           MB(MB(MB(MB(MB(ITE(bVar"v",
9905                                                              Call
9906                                                                ("HaveSecurityExt",
9907                                                                 ATy(qTy,
9908                                                                     PTy(bTy,
9909                                                                         qTy)),
9910                                                                 LU),
9911                                                              MU(LF,qTy)),
9912                                                          Close
9913                                                            (bVar"b",
9914                                                             ITE(bVar"b",
9915                                                                 MB(MR(Close
9916                                                                         (qVar"s",
9917                                                                          Dest
9918                                                                            ("CP15",
9919                                                                             CTy"CP15",
9920                                                                             qVar"s"))),
9921                                                                    Close
9922                                                                      (Var("v",
9923                                                                           CTy"CP15"),
9924                                                                       MB(MB(MU(Dest
9925                                                                                  ("SCR",
9926                                                                                   CTy"SCR",
9927                                                                                   Var("v",
9928                                                                                       CTy"CP15")),
9929                                                                                qTy),
9930                                                                             Close
9931                                                                               (Var("v",
9932                                                                                    CTy"SCR"),
9933                                                                                MU(Dest
9934                                                                                     ("IRQ",
9935                                                                                      bTy,
9936                                                                                      Var("v",
9937                                                                                          CTy"SCR")),
9938                                                                                   qTy))),
9939                                                                          Close
9940                                                                            (bVar"v",
9941                                                                             MU(Mop(Not,
9942                                                                                    bVar"v"),
9943                                                                                qTy))))),
9944                                                                 MU(LF,qTy)))),
9945                                                       Close
9946                                                         (bVar"b",
9947                                                          ITE(bVar"b",
9948                                                              MB(MR(Close
9949                                                                      (qVar"s",
9950                                                                       Dest
9951                                                                         ("CP15",
9952                                                                          CTy"CP15",
9953                                                                          qVar"s"))),
9954                                                                 Close
9955                                                                   (Var("v",
9956                                                                        CTy"CP15"),
9957                                                                    MB(MU(Dest
9958                                                                            ("HCR",
9959                                                                             CTy"HCR",
9960                                                                             Var("v",
9961                                                                                 CTy"CP15")),
9962                                                                          qTy),
9963                                                                       Close
9964                                                                         (Var("v",
9965                                                                              CTy"HCR"),
9966                                                                          MU(Dest
9967                                                                               ("IMO",
9968                                                                                bTy,
9969                                                                                Var("v",
9970                                                                                    CTy"HCR")),
9971                                                                             qTy))))),
9972                                                              MU(LF,qTy)))),
9973                                                    Close
9974                                                      (bVar"b",
9975                                                       ITE(bVar"b",
9976                                                           MB(Call
9977                                                                ("IsSecure",
9978                                                                 ATy(qTy,
9979                                                                     PTy(bTy,
9980                                                                         qTy)),
9981                                                                 LU),
9982                                                              Close
9983                                                                (bVar"v",
9984                                                                 MU(Mop(Not,
9985                                                                        bVar"v"),
9986                                                                    qTy))),
9987                                                           MU(LF,qTy)))),
9988                                                 Close
9989                                                   (bVar"b",
9990                                                    ITE(bVar"b",
9991                                                        MU(LT,qTy),
9992                                                        MB(MR(Close
9993                                                                (qVar"s",
9994                                                                 Dest
9995                                                                   ("CPSR",
9996                                                                    CTy"PSR",
9997                                                                    qVar"s"))),
9998                                                           Close
9999                                                             (Var("v",
10000                                                                  CTy"PSR"),
10001                                                              MB(MU(Dest
10002                                                                      ("M",
10003                                                                       FTy 5,
10004                                                                       Var("v",
10005                                                                           CTy"PSR")),
10006                                                                    qTy),
10007                                                                 Close
10008                                                                   (Var("v",
10009                                                                        FTy 5),
10010                                                                    MU(EQ(Var("v",
10011                                                                              FTy 5),
10012                                                                          LW(26,
10013                                                                             5)),
10014                                                                       qTy)))))))),
10015                                              Close
10016                                                (bVar"route_to_hyp",
10017                                                 ITB([(bVar"route_to_monitor",
10018                                                       MB(MR(Close
10019                                                               (qVar"s",
10020                                                                Dest
10021                                                                  ("CPSR",
10022                                                                   CTy"PSR",
10023                                                                   qVar"s"))),
10024                                                          Close
10025                                                            (Var("v",
10026                                                                 CTy"PSR"),
10027                                                             MB(MB(MB(MU(Dest
10028                                                                           ("M",
10029                                                                            FTy 5,
10030                                                                            Var("v",
10031                                                                                CTy"PSR")),
10032                                                                         qTy),
10033                                                                      Close
10034                                                                        (Var("v",
10035                                                                             FTy 5),
10036                                                                         MU(EQ(Var("v",
10037                                                                                   FTy 5),
10038                                                                               LW(22,
10039                                                                                  5)),
10040                                                                            qTy))),
10041                                                                   Close
10042                                                                     (bVar"b",
10043                                                                      ITE(bVar"b",
10044                                                                          MB(MR(Close
10045                                                                                  (qVar"s",
10046                                                                                   Dest
10047                                                                                     ("CP15",
10048                                                                                      CTy"CP15",
10049                                                                                      qVar"s"))),
10050                                                                             Close
10051                                                                               (Var("v",
10052                                                                                    CTy"CP15"),
10053                                                                                MB(MU(Dest
10054                                                                                        ("SCR",
10055                                                                                         CTy"SCR",
10056                                                                                         Var("v",
10057                                                                                             CTy"CP15")),
10058                                                                                      qTy),
10059                                                                                   Close
10060                                                                                     (Var("x0",
10061                                                                                          CTy"SCR"),
10062                                                                                      MB(MR(Close
10063                                                                                              (qVar"s",
10064                                                                                               Dest
10065                                                                                                 ("CP15",
10066                                                                                                  CTy"CP15",
10067                                                                                                  qVar"s"))),
10068                                                                                         Close
10069                                                                                           (Var("v",
10070                                                                                                CTy"CP15"),
10071                                                                                            MB(MB(MU(TP[Var("v",
10072                                                                                                            CTy"CP15"),
10073                                                                                                        Rupd
10074                                                                                                          ("NS",
10075                                                                                                           TP[Var("x0",
10076                                                                                                                  CTy"SCR"),
10077                                                                                                              LF])],
10078                                                                                                     qTy),
10079                                                                                                  Close
10080                                                                                                    (Var("v",
10081                                                                                                         PTy(CTy"CP15",
10082                                                                                                             CTy"SCR")),
10083                                                                                                     MU(Rupd
10084                                                                                                          ("SCR",
10085                                                                                                           Var("v",
10086                                                                                                               PTy(CTy"CP15",
10087                                                                                                                   CTy"SCR"))),
10088                                                                                                        qTy))),
10089                                                                                               Close
10090                                                                                                 (Var("v",
10091                                                                                                      CTy"CP15"),
10092                                                                                                  MW(Close
10093                                                                                                       (qVar"s",
10094                                                                                                        Rupd
10095                                                                                                          ("CP15",
10096                                                                                                           TP[qVar"s",
10097                                                                                                              Var("v",
10098                                                                                                                  CTy"CP15")]))))))))))),
10099                                                                          MU(LU,
10100                                                                             qTy)))),
10101                                                                Close
10102                                                                  (AVar
10103                                                                     uTy,
10104                                                                   Call
10105                                                                     ("EnterMonitorMode",
10106                                                                      ATy(qTy,
10107                                                                          PTy(uTy,
10108                                                                              qTy)),
10109                                                                      TP[Var("new_spsr_value",
10110                                                                             CTy"PSR"),
10111                                                                         Var("new_lr_value",
10112                                                                             F32),
10113                                                                         Var("vect_offset",
10114                                                                             F32)])))))),
10115                                                      (bVar"route_to_hyp",
10116                                                       MB(MR(Close
10117                                                               (qVar"s",
10118                                                                Dest
10119                                                                  ("CP15",
10120                                                                   CTy"CP15",
10121                                                                   qVar"s"))),
10122                                                          Close
10123                                                            (Var("v",
10124                                                                 CTy"CP15"),
10125                                                             MB(MB(MB(MU(TP[Var("v",
10126                                                                                CTy"CP15"),
10127                                                                            LX(CTy"HSR")],
10128                                                                         qTy),
10129                                                                      Close
10130                                                                        (Var("v",
10131                                                                             PTy(CTy"CP15",
10132                                                                                 CTy"HSR")),
10133                                                                         MU(Rupd
10134                                                                              ("HSR",
10135                                                                               Var("v",
10136                                                                                   PTy(CTy"CP15",
10137                                                                                       CTy"HSR"))),
10138                                                                            qTy))),
10139                                                                   Close
10140                                                                     (Var("v",
10141                                                                          CTy"CP15"),
10142                                                                      MW(Close
10143                                                                           (qVar"s",
10144                                                                            Rupd
10145                                                                              ("CP15",
10146                                                                               TP[qVar"s",
10147                                                                                  Var("v",
10148                                                                                      CTy"CP15")]))))),
10149                                                                Close
10150                                                                  (AVar
10151                                                                     uTy,
10152                                                                   Call
10153                                                                     ("EnterHypMode",
10154                                                                      ATy(qTy,
10155                                                                          PTy(uTy,
10156                                                                              qTy)),
10157                                                                      TP[Var("new_spsr_value",
10158                                                                             CTy"PSR"),
10159                                                                         Bop(Sub,
10160                                                                             Var("new_lr_value",
10161                                                                                 F32),
10162                                                                             LW(4,
10163                                                                                32)),
10164                                                                         Var("vect_offset",
10165                                                                             F32)]))))))],
10166                                                     MB(MR(Close
10167                                                             (qVar"s",
10168                                                              Dest
10169                                                                ("CPSR",
10170                                                                 CTy"PSR",
10171                                                                 qVar"s"))),
10172                                                        Close
10173                                                          (Var("v",
10174                                                               CTy"PSR"),
10175                                                           MB(MB(MB(MU(Dest
10176                                                                         ("M",
10177                                                                          FTy 5,
10178                                                                          Var("v",
10179                                                                              CTy"PSR")),
10180                                                                       qTy),
10181                                                                    Close
10182                                                                      (Var("v",
10183                                                                           FTy 5),
10184                                                                       MU(EQ(Var("v",
10185                                                                                 FTy 5),
10186                                                                             LW(22,
10187                                                                                5)),
10188                                                                          qTy))),
10189                                                                 Close
10190                                                                   (bVar"b",
10191                                                                    ITE(bVar"b",
10192                                                                        MB(MR(Close
10193                                                                                (qVar"s",
10194                                                                                 Dest
10195                                                                                   ("CP15",
10196                                                                                    CTy"CP15",
10197                                                                                    qVar"s"))),
10198                                                                           Close
10199                                                                             (Var("v",
10200                                                                                  CTy"CP15"),
10201                                                                              MB(MU(Dest
10202                                                                                      ("SCR",
10203                                                                                       CTy"SCR",
10204                                                                                       Var("v",
10205                                                                                           CTy"CP15")),
10206                                                                                    qTy),
10207                                                                                 Close
10208                                                                                   (Var("x0",
10209                                                                                        CTy"SCR"),
10210                                                                                    MB(MR(Close
10211                                                                                            (qVar"s",
10212                                                                                             Dest
10213                                                                                               ("CP15",
10214                                                                                                CTy"CP15",
10215                                                                                                qVar"s"))),
10216                                                                                       Close
10217                                                                                         (Var("v",
10218                                                                                              CTy"CP15"),
10219                                                                                          MB(MB(MU(TP[Var("v",
10220                                                                                                          CTy"CP15"),
10221                                                                                                      Rupd
10222                                                                                                        ("NS",
10223                                                                                                         TP[Var("x0",
10224                                                                                                                CTy"SCR"),
10225                                                                                                            LF])],
10226                                                                                                   qTy),
10227                                                                                                Close
10228                                                                                                  (Var("v",
10229                                                                                                       PTy(CTy"CP15",
10230                                                                                                           CTy"SCR")),
10231                                                                                                   MU(Rupd
10232                                                                                                        ("SCR",
10233                                                                                                         Var("v",
10234                                                                                                             PTy(CTy"CP15",
10235                                                                                                                 CTy"SCR"))),
10236                                                                                                      qTy))),
10237                                                                                             Close
10238                                                                                               (Var("v",
10239                                                                                                    CTy"CP15"),
10240                                                                                                MW(Close
10241                                                                                                     (qVar"s",
10242                                                                                                      Rupd
10243                                                                                                        ("CP15",
10244                                                                                                         TP[qVar"s",
10245                                                                                                            Var("v",
10246                                                                                                                CTy"CP15")]))))))))))),
10247                                                                        MU(LU,
10248                                                                           qTy)))),
10249                                                              Close
10250                                                                (AVar uTy,
10251                                                                 MB(MR(Close
10252                                                                         (qVar"s",
10253                                                                          Dest
10254                                                                            ("CPSR",
10255                                                                             CTy"PSR",
10256                                                                             qVar"s"))),
10257                                                                    Close
10258                                                                      (Var("v",
10259                                                                           CTy"PSR"),
10260                                                                       MB(MB(MB(MU(TP[Var("v",
10261                                                                                          CTy"PSR"),
10262                                                                                      LW(18,
10263                                                                                         5)],
10264                                                                                   qTy),
10265                                                                                Close
10266                                                                                  (Var("v",
10267                                                                                       PTy(CTy"PSR",
10268                                                                                           FTy 5)),
10269                                                                                   MU(Rupd
10270                                                                                        ("M",
10271                                                                                         Var("v",
10272                                                                                             PTy(CTy"PSR",
10273                                                                                                 FTy 5))),
10274                                                                                      qTy))),
10275                                                                             Close
10276                                                                               (Var("v",
10277                                                                                    CTy"PSR"),
10278                                                                                MW(Close
10279                                                                                     (qVar"s",
10280                                                                                      Rupd
10281                                                                                        ("CPSR",
10282                                                                                         TP[qVar"s",
10283                                                                                            Var("v",
10284                                                                                                CTy"PSR")]))))),
10285                                                                          Close
10286                                                                            (AVar
10287                                                                               uTy,
10288                                                                             MB(Call
10289                                                                                  ("write'SPSR",
10290                                                                                   ATy(qTy,
10291                                                                                       PTy(uTy,
10292                                                                                           qTy)),
10293                                                                                   Var("new_spsr_value",
10294                                                                                       CTy"PSR")),
10295                                                                                Close
10296                                                                                  (AVar
10297                                                                                     uTy,
10298                                                                                   MB(Call
10299                                                                                        ("write'R",
10300                                                                                         ATy(qTy,
10301                                                                                             PTy(uTy,
10302                                                                                                 qTy)),
10303                                                                                         TP[Var("new_lr_value",
10304                                                                                                F32),
10305                                                                                            LW(14,
10306                                                                                               4)]),
10307                                                                                      Close
10308                                                                                        (AVar
10309                                                                                           uTy,
10310                                                                                         MB(MR(Close
10311                                                                                                 (qVar"s",
10312                                                                                                  Dest
10313                                                                                                    ("CPSR",
10314                                                                                                     CTy"PSR",
10315                                                                                                     qVar"s"))),
10316                                                                                            Close
10317                                                                                              (Var("v",
10318                                                                                                   CTy"PSR"),
10319                                                                                               MB(MB(MB(MU(TP[Var("v",
10320                                                                                                                  CTy"PSR"),
10321                                                                                                              LT],
10322                                                                                                           qTy),
10323                                                                                                        Close
10324                                                                                                          (Var("v",
10325                                                                                                               PTy(CTy"PSR",
10326                                                                                                                   bTy)),
10327                                                                                                           MU(Rupd
10328                                                                                                                ("I",
10329                                                                                                                 Var("v",
10330                                                                                                                     PTy(CTy"PSR",
10331                                                                                                                         bTy))),
10332                                                                                                              qTy))),
10333                                                                                                     Close
10334                                                                                                       (Var("v",
10335                                                                                                            CTy"PSR"),
10336                                                                                                        MW(Close
10337                                                                                                             (qVar"s",
10338                                                                                                              Rupd
10339                                                                                                                ("CPSR",
10340                                                                                                                 TP[qVar"s",
10341                                                                                                                    Var("v",
10342                                                                                                                        CTy"PSR")]))))),
10343                                                                                                  Close
10344                                                                                                    (AVar
10345                                                                                                       uTy,
10346                                                                                                     MB(Call
10347                                                                                                          ("HaveSecurityExt",
10348                                                                                                           ATy(qTy,
10349                                                                                                               PTy(bTy,
10350                                                                                                                   qTy)),
10351                                                                                                           LU),
10352                                                                                                        Close
10353                                                                                                          (bVar"v",
10354                                                                                                           MB(MB(MB(MB(MB(MU(Mop(Not,
10355                                                                                                                                 bVar"v"),
10356                                                                                                                             qTy),
10357                                                                                                                          Close
10358                                                                                                                            (bVar"b",
10359                                                                                                                             ITE(bVar"b",
10360                                                                                                                                 MU(LT,
10361                                                                                                                                    qTy),
10362                                                                                                                                 Call
10363                                                                                                                                   ("HaveVirtExt",
10364                                                                                                                                    ATy(qTy,
10365                                                                                                                                        PTy(bTy,
10366                                                                                                                                            qTy)),
10367                                                                                                                                    LU)))),
10368                                                                                                                       Close
10369                                                                                                                         (bVar"b",
10370                                                                                                                          ITE(bVar"b",
10371                                                                                                                              MU(LT,
10372                                                                                                                                 qTy),
10373                                                                                                                              MB(MR(Close
10374                                                                                                                                      (qVar"s",
10375                                                                                                                                       Dest
10376                                                                                                                                         ("CP15",
10377                                                                                                                                          CTy"CP15",
10378                                                                                                                                          qVar"s"))),
10379                                                                                                                                 Close
10380                                                                                                                                   (Var("v",
10381                                                                                                                                        CTy"CP15"),
10382                                                                                                                                    MB(MB(MU(Dest
10383                                                                                                                                               ("SCR",
10384                                                                                                                                                CTy"SCR",
10385                                                                                                                                                Var("v",
10386                                                                                                                                                    CTy"CP15")),
10387                                                                                                                                             qTy),
10388                                                                                                                                          Close
10389                                                                                                                                            (Var("v",
10390                                                                                                                                                 CTy"SCR"),
10391                                                                                                                                             MU(Dest
10392                                                                                                                                                  ("NS",
10393                                                                                                                                                   bTy,
10394                                                                                                                                                   Var("v",
10395                                                                                                                                                       CTy"SCR")),
10396                                                                                                                                                qTy))),
10397                                                                                                                                       Close
10398                                                                                                                                         (bVar"v",
10399                                                                                                                                          MU(Mop(Not,
10400                                                                                                                                                 bVar"v"),
10401                                                                                                                                             qTy)))))))),
10402                                                                                                                    Close
10403                                                                                                                      (bVar"b",
10404                                                                                                                       ITE(bVar"b",
10405                                                                                                                           MU(LT,
10406                                                                                                                              qTy),
10407                                                                                                                           MB(MR(Close
10408                                                                                                                                   (qVar"s",
10409                                                                                                                                    Dest
10410                                                                                                                                      ("CP15",
10411                                                                                                                                       CTy"CP15",
10412                                                                                                                                       qVar"s"))),
10413                                                                                                                              Close
10414                                                                                                                                (Var("v",
10415                                                                                                                                     CTy"CP15"),
10416                                                                                                                                 MB(MU(Dest
10417                                                                                                                                         ("SCR",
10418                                                                                                                                          CTy"SCR",
10419                                                                                                                                          Var("v",
10420                                                                                                                                              CTy"CP15")),
10421                                                                                                                                       qTy),
10422                                                                                                                                    Close
10423                                                                                                                                      (Var("v",
10424                                                                                                                                           CTy"SCR"),
10425                                                                                                                                       MU(Dest
10426                                                                                                                                            ("AW",
10427                                                                                                                                             bTy,
10428                                                                                                                                             Var("v",
10429                                                                                                                                                 CTy"SCR")),
10430                                                                                                                                          qTy)))))))),
10431                                                                                                                 Close
10432                                                                                                                   (bVar"b",
10433                                                                                                                    ITE(bVar"b",
10434                                                                                                                        MB(MR(Close
10435                                                                                                                                (qVar"s",
10436                                                                                                                                 Dest
10437                                                                                                                                   ("CPSR",
10438                                                                                                                                    CTy"PSR",
10439                                                                                                                                    qVar"s"))),
10440                                                                                                                           Close
10441                                                                                                                             (Var("v",
10442                                                                                                                                  CTy"PSR"),
10443                                                                                                                              MB(MB(MU(TP[Var("v",
10444                                                                                                                                              CTy"PSR"),
10445                                                                                                                                          LT],
10446                                                                                                                                       qTy),
10447                                                                                                                                    Close
10448                                                                                                                                      (Var("v",
10449                                                                                                                                           PTy(CTy"PSR",
10450                                                                                                                                               bTy)),
10451                                                                                                                                       MU(Rupd
10452                                                                                                                                            ("A",
10453                                                                                                                                             Var("v",
10454                                                                                                                                                 PTy(CTy"PSR",
10455                                                                                                                                                     bTy))),
10456                                                                                                                                          qTy))),
10457                                                                                                                                 Close
10458                                                                                                                                   (Var("v",
10459                                                                                                                                        CTy"PSR"),
10460                                                                                                                                    MW(Close
10461                                                                                                                                         (qVar"s",
10462                                                                                                                                          Rupd
10463                                                                                                                                            ("CPSR",
10464                                                                                                                                             TP[qVar"s",
10465                                                                                                                                                Var("v",
10466                                                                                                                                                    CTy"PSR")]))))))),
10467                                                                                                                        MU(LU,
10468                                                                                                                           qTy)))),
10469                                                                                                              Close
10470                                                                                                                (AVar
10471                                                                                                                   uTy,
10472                                                                                                                 MB(MR(Close
10473                                                                                                                         (qVar"s",
10474                                                                                                                          Dest
10475                                                                                                                            ("CPSR",
10476                                                                                                                             CTy"PSR",
10477                                                                                                                             qVar"s"))),
10478                                                                                                                    Close
10479                                                                                                                      (Var("v",
10480                                                                                                                           CTy"PSR"),
10481                                                                                                                       MB(MB(MB(MU(TP[Var("v",
10482                                                                                                                                          CTy"PSR"),
10483                                                                                                                                      LW(0,
10484                                                                                                                                         8)],
10485                                                                                                                                   qTy),
10486                                                                                                                                Close
10487                                                                                                                                  (Var("v",
10488                                                                                                                                       PTy(CTy"PSR",
10489                                                                                                                                           F8)),
10490                                                                                                                                   MU(Rupd
10491                                                                                                                                        ("IT",
10492                                                                                                                                         Var("v",
10493                                                                                                                                             PTy(CTy"PSR",
10494                                                                                                                                                 F8))),
10495                                                                                                                                      qTy))),
10496                                                                                                                             Close
10497                                                                                                                               (Var("v",
10498                                                                                                                                    CTy"PSR"),
10499                                                                                                                                MW(Close
10500                                                                                                                                     (qVar"s",
10501                                                                                                                                      Rupd
10502                                                                                                                                        ("CPSR",
10503                                                                                                                                         TP[qVar"s",
10504                                                                                                                                            Var("v",
10505                                                                                                                                                CTy"PSR")]))))),
10506                                                                                                                          Close
10507                                                                                                                            (AVar
10508                                                                                                                               uTy,
10509                                                                                                                             MB(MR(Close
10510                                                                                                                                     (qVar"s",
10511                                                                                                                                      Dest
10512                                                                                                                                        ("CPSR",
10513                                                                                                                                         CTy"PSR",
10514                                                                                                                                         qVar"s"))),
10515                                                                                                                                Close
10516                                                                                                                                  (Var("v",
10517                                                                                                                                       CTy"PSR"),
10518                                                                                                                                   MB(MB(MB(MU(TP[Var("v",
10519                                                                                                                                                      CTy"PSR"),
10520                                                                                                                                                  LF],
10521                                                                                                                                               qTy),
10522                                                                                                                                            Close
10523                                                                                                                                              (Var("v",
10524                                                                                                                                                   PTy(CTy"PSR",
10525                                                                                                                                                       bTy)),
10526                                                                                                                                               MU(Rupd
10527                                                                                                                                                    ("J",
10528                                                                                                                                                     Var("v",
10529                                                                                                                                                         PTy(CTy"PSR",
10530                                                                                                                                                             bTy))),
10531                                                                                                                                                  qTy))),
10532                                                                                                                                         Close
10533                                                                                                                                           (Var("v",
10534                                                                                                                                                CTy"PSR"),
10535                                                                                                                                            MW(Close
10536                                                                                                                                                 (qVar"s",
10537                                                                                                                                                  Rupd
10538                                                                                                                                                    ("CPSR",
10539                                                                                                                                                     TP[qVar"s",
10540                                                                                                                                                        Var("v",
10541                                                                                                                                                            CTy"PSR")]))))),
10542                                                                                                                                      Close
10543                                                                                                                                        (AVar
10544                                                                                                                                           uTy,
10545                                                                                                                                         MB(MR(Close
10546                                                                                                                                                 (qVar"s",
10547                                                                                                                                                  Dest
10548                                                                                                                                                    ("CPSR",
10549                                                                                                                                                     CTy"PSR",
10550                                                                                                                                                     qVar"s"))),
10551                                                                                                                                            Close
10552                                                                                                                                              (Var("v",
10553                                                                                                                                                   CTy"PSR"),
10554                                                                                                                                               MB(MB(MB(MB(MR(Close
10555                                                                                                                                                                (qVar"s",
10556                                                                                                                                                                 Dest
10557                                                                                                                                                                   ("CP15",
10558                                                                                                                                                                    CTy"CP15",
10559                                                                                                                                                                    qVar"s"))),
10560                                                                                                                                                           Close
10561                                                                                                                                                             (Var("v0",
10562                                                                                                                                                                  CTy"CP15"),
10563                                                                                                                                                              MB(MB(MU(Dest
10564                                                                                                                                                                         ("SCTLR",
10565                                                                                                                                                                          CTy"SCTLR",
10566                                                                                                                                                                          Var("v0",
10567                                                                                                                                                                              CTy"CP15")),
10568                                                                                                                                                                       qTy),
10569                                                                                                                                                                    Close
10570                                                                                                                                                                      (Var("v",
10571                                                                                                                                                                           CTy"SCTLR"),
10572                                                                                                                                                                       MU(Dest
10573                                                                                                                                                                            ("TE",
10574                                                                                                                                                                             bTy,
10575                                                                                                                                                                             Var("v",
10576                                                                                                                                                                                 CTy"SCTLR")),
10577                                                                                                                                                                          qTy))),
10578                                                                                                                                                                 Close
10579                                                                                                                                                                   (bVar"v0",
10580                                                                                                                                                                    MU(TP[Var("v",
10581                                                                                                                                                                              CTy"PSR"),
10582                                                                                                                                                                          bVar"v0"],
10583                                                                                                                                                                       qTy))))),
10584                                                                                                                                                        Close
10585                                                                                                                                                          (Var("v",
10586                                                                                                                                                               PTy(CTy"PSR",
10587                                                                                                                                                                   bTy)),
10588                                                                                                                                                           MU(Rupd
10589                                                                                                                                                                ("T",
10590                                                                                                                                                                 Var("v",
10591                                                                                                                                                                     PTy(CTy"PSR",
10592                                                                                                                                                                         bTy))),
10593                                                                                                                                                              qTy))),
10594                                                                                                                                                     Close
10595                                                                                                                                                       (Var("v",
10596                                                                                                                                                            CTy"PSR"),
10597                                                                                                                                                        MW(Close
10598                                                                                                                                                             (qVar"s",
10599                                                                                                                                                              Rupd
10600                                                                                                                                                                ("CPSR",
10601                                                                                                                                                                 TP[qVar"s",
10602                                                                                                                                                                    Var("v",
10603                                                                                                                                                                        CTy"PSR")]))))),
10604                                                                                                                                                  Close
10605                                                                                                                                                    (AVar
10606                                                                                                                                                       uTy,
10607                                                                                                                                                     MB(MR(Close
10608                                                                                                                                                             (qVar"s",
10609                                                                                                                                                              Dest
10610                                                                                                                                                                ("CPSR",
10611                                                                                                                                                                 CTy"PSR",
10612                                                                                                                                                                 qVar"s"))),
10613                                                                                                                                                        Close
10614                                                                                                                                                          (Var("v",
10615                                                                                                                                                               CTy"PSR"),
10616                                                                                                                                                           MB(MB(MB(MB(MR(Close
10617                                                                                                                                                                            (qVar"s",
10618                                                                                                                                                                             Dest
10619                                                                                                                                                                               ("CP15",
10620                                                                                                                                                                                CTy"CP15",
10621                                                                                                                                                                                qVar"s"))),
10622                                                                                                                                                                       Close
10623                                                                                                                                                                         (Var("v0",
10624                                                                                                                                                                              CTy"CP15"),
10625                                                                                                                                                                          MB(MB(MU(Dest
10626                                                                                                                                                                                     ("SCTLR",
10627                                                                                                                                                                                      CTy"SCTLR",
10628                                                                                                                                                                                      Var("v0",
10629                                                                                                                                                                                          CTy"CP15")),
10630                                                                                                                                                                                   qTy),
10631                                                                                                                                                                                Close
10632                                                                                                                                                                                  (Var("v",
10633                                                                                                                                                                                       CTy"SCTLR"),
10634                                                                                                                                                                                   MU(Dest
10635                                                                                                                                                                                        ("EE",
10636                                                                                                                                                                                         bTy,
10637                                                                                                                                                                                         Var("v",
10638                                                                                                                                                                                             CTy"SCTLR")),
10639                                                                                                                                                                                      qTy))),
10640                                                                                                                                                                             Close
10641                                                                                                                                                                               (bVar"v0",
10642                                                                                                                                                                                MU(TP[Var("v",
10643                                                                                                                                                                                          CTy"PSR"),
10644                                                                                                                                                                                      bVar"v0"],
10645                                                                                                                                                                                   qTy))))),
10646                                                                                                                                                                    Close
10647                                                                                                                                                                      (Var("v",
10648                                                                                                                                                                           PTy(CTy"PSR",
10649                                                                                                                                                                               bTy)),
10650                                                                                                                                                                       MU(Rupd
10651                                                                                                                                                                            ("E",
10652                                                                                                                                                                             Var("v",
10653                                                                                                                                                                                 PTy(CTy"PSR",
10654                                                                                                                                                                                     bTy))),
10655                                                                                                                                                                          qTy))),
10656                                                                                                                                                                 Close
10657                                                                                                                                                                   (Var("v",
10658                                                                                                                                                                        CTy"PSR"),
10659                                                                                                                                                                    MW(Close
10660                                                                                                                                                                         (qVar"s",
10661                                                                                                                                                                          Rupd
10662                                                                                                                                                                            ("CPSR",
10663                                                                                                                                                                             TP[qVar"s",
10664                                                                                                                                                                                Var("v",
10665                                                                                                                                                                                    CTy"PSR")]))))),
10666                                                                                                                                                              Close
10667                                                                                                                                                                (AVar
10668                                                                                                                                                                   uTy,
10669                                                                                                                                                                 MB(MR(Close
10670                                                                                                                                                                         (qVar"s",
10671                                                                                                                                                                          Dest
10672                                                                                                                                                                            ("CP15",
10673                                                                                                                                                                             CTy"CP15",
10674                                                                                                                                                                             qVar"s"))),
10675                                                                                                                                                                    Close
10676                                                                                                                                                                      (Var("v",
10677                                                                                                                                                                           CTy"CP15"),
10678                                                                                                                                                                       MB(MB(MU(Dest
10679                                                                                                                                                                                  ("SCTLR",
10680                                                                                                                                                                                   CTy"SCTLR",
10681                                                                                                                                                                                   Var("v",
10682                                                                                                                                                                                       CTy"CP15")),
10683                                                                                                                                                                                qTy),
10684                                                                                                                                                                             Close
10685                                                                                                                                                                               (Var("v",
10686                                                                                                                                                                                    CTy"SCTLR"),
10687                                                                                                                                                                                MU(Dest
10688                                                                                                                                                                                     ("VE",
10689                                                                                                                                                                                      bTy,
10690                                                                                                                                                                                      Var("v",
10691                                                                                                                                                                                          CTy"SCTLR")),
10692                                                                                                                                                                                   qTy))),
10693                                                                                                                                                                          Close
10694                                                                                                                                                                            (bVar"b",
10695                                                                                                                                                                             ITE(bVar"b",
10696                                                                                                                                                                                 Call
10697                                                                                                                                                                                   ("raise'exception",
10698                                                                                                                                                                                    ATy(qTy,
10699                                                                                                                                                                                        PTy(uTy,
10700                                                                                                                                                                                            qTy)),
10701                                                                                                                                                                                    Call
10702                                                                                                                                                                                      ("IMPLEMENTATION_DEFINED",
10703                                                                                                                                                                                       CTy"exception",
10704                                                                                                                                                                                       LS
10705                                                                                                                                                                                        "branch to an IRQ vector")),
10706                                                                                                                                                                                 MB(Call
10707                                                                                                                                                                                      ("ExcVectorBase",
10708                                                                                                                                                                                       ATy(qTy,
10709                                                                                                                                                                                           PTy(F32,
10710                                                                                                                                                                                               qTy)),
10711                                                                                                                                                                                       LU),
10712                                                                                                                                                                                    Close
10713                                                                                                                                                                                      (Var("v",
10714                                                                                                                                                                                           F32),
10715                                                                                                                                                                                       MB(MU(Bop(Add,
10716                                                                                                                                                                                                 Var("v",
10717                                                                                                                                                                                                     F32),
10718                                                                                                                                                                                                 Var("vect_offset",
10719                                                                                                                                                                                                     F32)),
10720                                                                                                                                                                                             qTy),
10721                                                                                                                                                                                          Close
10722                                                                                                                                                                                            (Var("v",
10723                                                                                                                                                                                                 F32),
10724                                                                                                                                                                                             Call
10725                                                                                                                                                                                               ("BranchTo",
10726                                                                                                                                                                                                ATy(qTy,
10727                                                                                                                                                                                                    PTy(uTy,
10728                                                                                                                                                                                                        qTy)),
10729                                                                                                                                                                                                Var("v",
10730                                                                                                                                                                                                    F32))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
10731;
10732val TakeVirtualIRQException_def = Def
10733  ("TakeVirtualIRQException",AVar uTy,
10734   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
10735      Close
10736        (Var("v",CTy"PSR"),
10737         MB(MB(MU(Dest("T",bTy,Var("v",CTy"PSR")),qTy),
10738               Close
10739                 (bVar"b",
10740                  ITE(bVar"b",Const("PC",ATy(qTy,PTy(F32,qTy))),
10741                      MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
10742                         Close
10743                           (Var("v",F32),
10744                            MU(Bop(Sub,Var("v",F32),LW(4,32)),qTy)))))),
10745            Close
10746              (Var("new_lr_value",F32),
10747               MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
10748                  Close
10749                    (Var("new_spsr_value",CTy"PSR"),
10750                     MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
10751                        Close
10752                          (Var("v",CTy"PSR"),
10753                           MB(MB(MB(MU(TP[Var("v",CTy"PSR"),LW(18,5)],qTy),
10754                                    Close
10755                                      (Var("v",PTy(CTy"PSR",FTy 5)),
10756                                       MU(Rupd
10757                                            ("M",
10758                                             Var("v",PTy(CTy"PSR",FTy 5))),
10759                                          qTy))),
10760                                 Close
10761                                   (Var("v",CTy"PSR"),
10762                                    MW(Close
10763                                         (qVar"s",
10764                                          Rupd
10765                                            ("CPSR",
10766                                             TP[qVar"s",Var("v",CTy"PSR")]))))),
10767                              Close
10768                                (AVar uTy,
10769                                 MB(Call
10770                                      ("write'SPSR",ATy(qTy,PTy(uTy,qTy)),
10771                                       Var("new_spsr_value",CTy"PSR")),
10772                                    Close
10773                                      (AVar uTy,
10774                                       MB(Call
10775                                            ("write'R",
10776                                             ATy(qTy,PTy(uTy,qTy)),
10777                                             TP[Var("new_lr_value",F32),
10778                                                LW(14,4)]),
10779                                          Close
10780                                            (AVar uTy,
10781                                             MB(MR(Close
10782                                                     (qVar"s",
10783                                                      Dest
10784                                                        ("CPSR",CTy"PSR",
10785                                                         qVar"s"))),
10786                                                Close
10787                                                  (Var("v",CTy"PSR"),
10788                                                   MB(MB(MB(MU(TP[Var("v",
10789                                                                      CTy"PSR"),
10790                                                                  LT],qTy),
10791                                                            Close
10792                                                              (Var("v",
10793                                                                   PTy(CTy"PSR",
10794                                                                       bTy)),
10795                                                               MU(Rupd
10796                                                                    ("I",
10797                                                                     Var("v",
10798                                                                         PTy(CTy"PSR",
10799                                                                             bTy))),
10800                                                                  qTy))),
10801                                                         Close
10802                                                           (Var("v",
10803                                                                CTy"PSR"),
10804                                                            MW(Close
10805                                                                 (qVar"s",
10806                                                                  Rupd
10807                                                                    ("CPSR",
10808                                                                     TP[qVar"s",
10809                                                                        Var("v",
10810                                                                            CTy"PSR")]))))),
10811                                                      Close
10812                                                        (AVar uTy,
10813                                                         MB(MR(Close
10814                                                                 (qVar"s",
10815                                                                  Dest
10816                                                                    ("CPSR",
10817                                                                     CTy"PSR",
10818                                                                     qVar"s"))),
10819                                                            Close
10820                                                              (Var("v",
10821                                                                   CTy"PSR"),
10822                                                               MB(MB(MB(MU(TP[Var("v",
10823                                                                                  CTy"PSR"),
10824                                                                              LT],
10825                                                                           qTy),
10826                                                                        Close
10827                                                                          (Var("v",
10828                                                                               PTy(CTy"PSR",
10829                                                                                   bTy)),
10830                                                                           MU(Rupd
10831                                                                                ("A",
10832                                                                                 Var("v",
10833                                                                                     PTy(CTy"PSR",
10834                                                                                         bTy))),
10835                                                                              qTy))),
10836                                                                     Close
10837                                                                       (Var("v",
10838                                                                            CTy"PSR"),
10839                                                                        MW(Close
10840                                                                             (qVar"s",
10841                                                                              Rupd
10842                                                                                ("CPSR",
10843                                                                                 TP[qVar"s",
10844                                                                                    Var("v",
10845                                                                                        CTy"PSR")]))))),
10846                                                                  Close
10847                                                                    (AVar
10848                                                                       uTy,
10849                                                                     MB(MR(Close
10850                                                                             (qVar"s",
10851                                                                              Dest
10852                                                                                ("CPSR",
10853                                                                                 CTy"PSR",
10854                                                                                 qVar"s"))),
10855                                                                        Close
10856                                                                          (Var("v",
10857                                                                               CTy"PSR"),
10858                                                                           MB(MB(MB(MU(TP[Var("v",
10859                                                                                              CTy"PSR"),
10860                                                                                          LW(0,
10861                                                                                             8)],
10862                                                                                       qTy),
10863                                                                                    Close
10864                                                                                      (Var("v",
10865                                                                                           PTy(CTy"PSR",
10866                                                                                               F8)),
10867                                                                                       MU(Rupd
10868                                                                                            ("IT",
10869                                                                                             Var("v",
10870                                                                                                 PTy(CTy"PSR",
10871                                                                                                     F8))),
10872                                                                                          qTy))),
10873                                                                                 Close
10874                                                                                   (Var("v",
10875                                                                                        CTy"PSR"),
10876                                                                                    MW(Close
10877                                                                                         (qVar"s",
10878                                                                                          Rupd
10879                                                                                            ("CPSR",
10880                                                                                             TP[qVar"s",
10881                                                                                                Var("v",
10882                                                                                                    CTy"PSR")]))))),
10883                                                                              Close
10884                                                                                (AVar
10885                                                                                   uTy,
10886                                                                                 MB(MR(Close
10887                                                                                         (qVar"s",
10888                                                                                          Dest
10889                                                                                            ("CPSR",
10890                                                                                             CTy"PSR",
10891                                                                                             qVar"s"))),
10892                                                                                    Close
10893                                                                                      (Var("v",
10894                                                                                           CTy"PSR"),
10895                                                                                       MB(MB(MB(MU(TP[Var("v",
10896                                                                                                          CTy"PSR"),
10897                                                                                                      LF],
10898                                                                                                   qTy),
10899                                                                                                Close
10900                                                                                                  (Var("v",
10901                                                                                                       PTy(CTy"PSR",
10902                                                                                                           bTy)),
10903                                                                                                   MU(Rupd
10904                                                                                                        ("J",
10905                                                                                                         Var("v",
10906                                                                                                             PTy(CTy"PSR",
10907                                                                                                                 bTy))),
10908                                                                                                      qTy))),
10909                                                                                             Close
10910                                                                                               (Var("v",
10911                                                                                                    CTy"PSR"),
10912                                                                                                MW(Close
10913                                                                                                     (qVar"s",
10914                                                                                                      Rupd
10915                                                                                                        ("CPSR",
10916                                                                                                         TP[qVar"s",
10917                                                                                                            Var("v",
10918                                                                                                                CTy"PSR")]))))),
10919                                                                                          Close
10920                                                                                            (AVar
10921                                                                                               uTy,
10922                                                                                             MB(MR(Close
10923                                                                                                     (qVar"s",
10924                                                                                                      Dest
10925                                                                                                        ("CPSR",
10926                                                                                                         CTy"PSR",
10927                                                                                                         qVar"s"))),
10928                                                                                                Close
10929                                                                                                  (Var("v",
10930                                                                                                       CTy"PSR"),
10931                                                                                                   MB(MB(MB(MB(MR(Close
10932                                                                                                                    (qVar"s",
10933                                                                                                                     Dest
10934                                                                                                                       ("CP15",
10935                                                                                                                        CTy"CP15",
10936                                                                                                                        qVar"s"))),
10937                                                                                                               Close
10938                                                                                                                 (Var("v0",
10939                                                                                                                      CTy"CP15"),
10940                                                                                                                  MB(MB(MU(Dest
10941                                                                                                                             ("SCTLR",
10942                                                                                                                              CTy"SCTLR",
10943                                                                                                                              Var("v0",
10944                                                                                                                                  CTy"CP15")),
10945                                                                                                                           qTy),
10946                                                                                                                        Close
10947                                                                                                                          (Var("v",
10948                                                                                                                               CTy"SCTLR"),
10949                                                                                                                           MU(Dest
10950                                                                                                                                ("TE",
10951                                                                                                                                 bTy,
10952                                                                                                                                 Var("v",
10953                                                                                                                                     CTy"SCTLR")),
10954                                                                                                                              qTy))),
10955                                                                                                                     Close
10956                                                                                                                       (bVar"v0",
10957                                                                                                                        MU(TP[Var("v",
10958                                                                                                                                  CTy"PSR"),
10959                                                                                                                              bVar"v0"],
10960                                                                                                                           qTy))))),
10961                                                                                                            Close
10962                                                                                                              (Var("v",
10963                                                                                                                   PTy(CTy"PSR",
10964                                                                                                                       bTy)),
10965                                                                                                               MU(Rupd
10966                                                                                                                    ("T",
10967                                                                                                                     Var("v",
10968                                                                                                                         PTy(CTy"PSR",
10969                                                                                                                             bTy))),
10970                                                                                                                  qTy))),
10971                                                                                                         Close
10972                                                                                                           (Var("v",
10973                                                                                                                CTy"PSR"),
10974                                                                                                            MW(Close
10975                                                                                                                 (qVar"s",
10976                                                                                                                  Rupd
10977                                                                                                                    ("CPSR",
10978                                                                                                                     TP[qVar"s",
10979                                                                                                                        Var("v",
10980                                                                                                                            CTy"PSR")]))))),
10981                                                                                                      Close
10982                                                                                                        (AVar
10983                                                                                                           uTy,
10984                                                                                                         MB(MR(Close
10985                                                                                                                 (qVar"s",
10986                                                                                                                  Dest
10987                                                                                                                    ("CPSR",
10988                                                                                                                     CTy"PSR",
10989                                                                                                                     qVar"s"))),
10990                                                                                                            Close
10991                                                                                                              (Var("v",
10992                                                                                                                   CTy"PSR"),
10993                                                                                                               MB(MB(MB(MB(MR(Close
10994                                                                                                                                (qVar"s",
10995                                                                                                                                 Dest
10996                                                                                                                                   ("CP15",
10997                                                                                                                                    CTy"CP15",
10998                                                                                                                                    qVar"s"))),
10999                                                                                                                           Close
11000                                                                                                                             (Var("v0",
11001                                                                                                                                  CTy"CP15"),
11002                                                                                                                              MB(MB(MU(Dest
11003                                                                                                                                         ("SCTLR",
11004                                                                                                                                          CTy"SCTLR",
11005                                                                                                                                          Var("v0",
11006                                                                                                                                              CTy"CP15")),
11007                                                                                                                                       qTy),
11008                                                                                                                                    Close
11009                                                                                                                                      (Var("v",
11010                                                                                                                                           CTy"SCTLR"),
11011                                                                                                                                       MU(Dest
11012                                                                                                                                            ("EE",
11013                                                                                                                                             bTy,
11014                                                                                                                                             Var("v",
11015                                                                                                                                                 CTy"SCTLR")),
11016                                                                                                                                          qTy))),
11017                                                                                                                                 Close
11018                                                                                                                                   (bVar"v0",
11019                                                                                                                                    MU(TP[Var("v",
11020                                                                                                                                              CTy"PSR"),
11021                                                                                                                                          bVar"v0"],
11022                                                                                                                                       qTy))))),
11023                                                                                                                        Close
11024                                                                                                                          (Var("v",
11025                                                                                                                               PTy(CTy"PSR",
11026                                                                                                                                   bTy)),
11027                                                                                                                           MU(Rupd
11028                                                                                                                                ("E",
11029                                                                                                                                 Var("v",
11030                                                                                                                                     PTy(CTy"PSR",
11031                                                                                                                                         bTy))),
11032                                                                                                                              qTy))),
11033                                                                                                                     Close
11034                                                                                                                       (Var("v",
11035                                                                                                                            CTy"PSR"),
11036                                                                                                                        MW(Close
11037                                                                                                                             (qVar"s",
11038                                                                                                                              Rupd
11039                                                                                                                                ("CPSR",
11040                                                                                                                                 TP[qVar"s",
11041                                                                                                                                    Var("v",
11042                                                                                                                                        CTy"PSR")]))))),
11043                                                                                                                  Close
11044                                                                                                                    (AVar
11045                                                                                                                       uTy,
11046                                                                                                                     MB(MR(Close
11047                                                                                                                             (qVar"s",
11048                                                                                                                              Dest
11049                                                                                                                                ("CP15",
11050                                                                                                                                 CTy"CP15",
11051                                                                                                                                 qVar"s"))),
11052                                                                                                                        Close
11053                                                                                                                          (Var("v",
11054                                                                                                                               CTy"CP15"),
11055                                                                                                                           MB(MB(MU(Dest
11056                                                                                                                                      ("SCTLR",
11057                                                                                                                                       CTy"SCTLR",
11058                                                                                                                                       Var("v",
11059                                                                                                                                           CTy"CP15")),
11060                                                                                                                                    qTy),
11061                                                                                                                                 Close
11062                                                                                                                                   (Var("v",
11063                                                                                                                                        CTy"SCTLR"),
11064                                                                                                                                    MU(Dest
11065                                                                                                                                         ("VE",
11066                                                                                                                                          bTy,
11067                                                                                                                                          Var("v",
11068                                                                                                                                              CTy"SCTLR")),
11069                                                                                                                                       qTy))),
11070                                                                                                                              Close
11071                                                                                                                                (bVar"b",
11072                                                                                                                                 ITE(bVar"b",
11073                                                                                                                                     Call
11074                                                                                                                                       ("raise'exception",
11075                                                                                                                                        ATy(qTy,
11076                                                                                                                                            PTy(uTy,
11077                                                                                                                                                qTy)),
11078                                                                                                                                        Call
11079                                                                                                                                          ("IMPLEMENTATION_DEFINED",
11080                                                                                                                                           CTy"exception",
11081                                                                                                                                           LS
11082                                                                                                                                            "branch to an IRQ vector")),
11083                                                                                                                                     MB(Call
11084                                                                                                                                          ("ExcVectorBase",
11085                                                                                                                                           ATy(qTy,
11086                                                                                                                                               PTy(F32,
11087                                                                                                                                                   qTy)),
11088                                                                                                                                           LU),
11089                                                                                                                                        Close
11090                                                                                                                                          (Var("v",
11091                                                                                                                                               F32),
11092                                                                                                                                           MB(MU(Bop(Add,
11093                                                                                                                                                     Var("v",
11094                                                                                                                                                         F32),
11095                                                                                                                                                     LW(24,
11096                                                                                                                                                        32)),
11097                                                                                                                                                 qTy),
11098                                                                                                                                              Close
11099                                                                                                                                                (Var("v",
11100                                                                                                                                                     F32),
11101                                                                                                                                                 Call
11102                                                                                                                                                   ("BranchTo",
11103                                                                                                                                                    ATy(qTy,
11104                                                                                                                                                        PTy(uTy,
11105                                                                                                                                                            qTy)),
11106                                                                                                                                                    Var("v",
11107                                                                                                                                                        F32))))))))))))))))))))))))))))))))))))))))))))))))))
11108;
11109val TakePhysicalFIQException_def = Def
11110  ("TakePhysicalFIQException",AVar uTy,
11111   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
11112      Close
11113        (Var("v",CTy"PSR"),
11114         MB(MB(MU(Dest("T",bTy,Var("v",CTy"PSR")),qTy),
11115               Close
11116                 (bVar"b",
11117                  ITE(bVar"b",Const("PC",ATy(qTy,PTy(F32,qTy))),
11118                      MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
11119                         Close
11120                           (Var("v",F32),
11121                            MU(Bop(Sub,Var("v",F32),LW(4,32)),qTy)))))),
11122            Close
11123              (Var("new_lr_value",F32),
11124               MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
11125                  Close
11126                    (Var("new_spsr_value",CTy"PSR"),
11127                     Let(Var("vect_offset",F32),LW(28,32),
11128                         MB(Call
11129                              ("HaveSecurityExt",ATy(qTy,PTy(bTy,qTy)),LU),
11130                            Close
11131                              (bVar"v",
11132                               MB(ITE(bVar"v",
11133                                      MB(MR(Close
11134                                              (qVar"s",
11135                                               Dest
11136                                                 ("CP15",CTy"CP15",qVar"s"))),
11137                                         Close
11138                                           (Var("v",CTy"CP15"),
11139                                            MB(MU(Dest
11140                                                    ("SCR",CTy"SCR",
11141                                                     Var("v",CTy"CP15")),
11142                                                  qTy),
11143                                               Close
11144                                                 (Var("v",CTy"SCR"),
11145                                                  MU(Dest
11146                                                       ("FIQ",bTy,
11147                                                        Var("v",CTy"SCR")),
11148                                                     qTy))))),MU(LF,qTy)),
11149                                  Close
11150                                    (bVar"route_to_monitor",
11151                                     MB(Call
11152                                          ("HaveVirtExt",
11153                                           ATy(qTy,PTy(bTy,qTy)),LU),
11154                                        Close
11155                                          (bVar"v",
11156                                           MB(MB(MB(MB(MB(ITE(bVar"v",
11157                                                              Call
11158                                                                ("HaveSecurityExt",
11159                                                                 ATy(qTy,
11160                                                                     PTy(bTy,
11161                                                                         qTy)),
11162                                                                 LU),
11163                                                              MU(LF,qTy)),
11164                                                          Close
11165                                                            (bVar"b",
11166                                                             ITE(bVar"b",
11167                                                                 MB(MR(Close
11168                                                                         (qVar"s",
11169                                                                          Dest
11170                                                                            ("CP15",
11171                                                                             CTy"CP15",
11172                                                                             qVar"s"))),
11173                                                                    Close
11174                                                                      (Var("v",
11175                                                                           CTy"CP15"),
11176                                                                       MB(MB(MU(Dest
11177                                                                                  ("SCR",
11178                                                                                   CTy"SCR",
11179                                                                                   Var("v",
11180                                                                                       CTy"CP15")),
11181                                                                                qTy),
11182                                                                             Close
11183                                                                               (Var("v",
11184                                                                                    CTy"SCR"),
11185                                                                                MU(Dest
11186                                                                                     ("FIQ",
11187                                                                                      bTy,
11188                                                                                      Var("v",
11189                                                                                          CTy"SCR")),
11190                                                                                   qTy))),
11191                                                                          Close
11192                                                                            (bVar"v",
11193                                                                             MU(Mop(Not,
11194                                                                                    bVar"v"),
11195                                                                                qTy))))),
11196                                                                 MU(LF,qTy)))),
11197                                                       Close
11198                                                         (bVar"b",
11199                                                          ITE(bVar"b",
11200                                                              MB(MR(Close
11201                                                                      (qVar"s",
11202                                                                       Dest
11203                                                                         ("CP15",
11204                                                                          CTy"CP15",
11205                                                                          qVar"s"))),
11206                                                                 Close
11207                                                                   (Var("v",
11208                                                                        CTy"CP15"),
11209                                                                    MB(MU(Dest
11210                                                                            ("HCR",
11211                                                                             CTy"HCR",
11212                                                                             Var("v",
11213                                                                                 CTy"CP15")),
11214                                                                          qTy),
11215                                                                       Close
11216                                                                         (Var("v",
11217                                                                              CTy"HCR"),
11218                                                                          MU(Dest
11219                                                                               ("FMO",
11220                                                                                bTy,
11221                                                                                Var("v",
11222                                                                                    CTy"HCR")),
11223                                                                             qTy))))),
11224                                                              MU(LF,qTy)))),
11225                                                    Close
11226                                                      (bVar"b",
11227                                                       ITE(bVar"b",
11228                                                           MB(Call
11229                                                                ("IsSecure",
11230                                                                 ATy(qTy,
11231                                                                     PTy(bTy,
11232                                                                         qTy)),
11233                                                                 LU),
11234                                                              Close
11235                                                                (bVar"v",
11236                                                                 MU(Mop(Not,
11237                                                                        bVar"v"),
11238                                                                    qTy))),
11239                                                           MU(LF,qTy)))),
11240                                                 Close
11241                                                   (bVar"b",
11242                                                    ITE(bVar"b",
11243                                                        MU(LT,qTy),
11244                                                        MB(MR(Close
11245                                                                (qVar"s",
11246                                                                 Dest
11247                                                                   ("CPSR",
11248                                                                    CTy"PSR",
11249                                                                    qVar"s"))),
11250                                                           Close
11251                                                             (Var("v",
11252                                                                  CTy"PSR"),
11253                                                              MB(MU(Dest
11254                                                                      ("M",
11255                                                                       FTy 5,
11256                                                                       Var("v",
11257                                                                           CTy"PSR")),
11258                                                                    qTy),
11259                                                                 Close
11260                                                                   (Var("v",
11261                                                                        FTy 5),
11262                                                                    MU(EQ(Var("v",
11263                                                                              FTy 5),
11264                                                                          LW(26,
11265                                                                             5)),
11266                                                                       qTy)))))))),
11267                                              Close
11268                                                (bVar"route_to_hyp",
11269                                                 ITB([(bVar"route_to_monitor",
11270                                                       MB(MR(Close
11271                                                               (qVar"s",
11272                                                                Dest
11273                                                                  ("CPSR",
11274                                                                   CTy"PSR",
11275                                                                   qVar"s"))),
11276                                                          Close
11277                                                            (Var("v",
11278                                                                 CTy"PSR"),
11279                                                             MB(MB(MB(MU(Dest
11280                                                                           ("M",
11281                                                                            FTy 5,
11282                                                                            Var("v",
11283                                                                                CTy"PSR")),
11284                                                                         qTy),
11285                                                                      Close
11286                                                                        (Var("v",
11287                                                                             FTy 5),
11288                                                                         MU(EQ(Var("v",
11289                                                                                   FTy 5),
11290                                                                               LW(22,
11291                                                                                  5)),
11292                                                                            qTy))),
11293                                                                   Close
11294                                                                     (bVar"b",
11295                                                                      ITE(bVar"b",
11296                                                                          MB(MR(Close
11297                                                                                  (qVar"s",
11298                                                                                   Dest
11299                                                                                     ("CP15",
11300                                                                                      CTy"CP15",
11301                                                                                      qVar"s"))),
11302                                                                             Close
11303                                                                               (Var("v",
11304                                                                                    CTy"CP15"),
11305                                                                                MB(MU(Dest
11306                                                                                        ("SCR",
11307                                                                                         CTy"SCR",
11308                                                                                         Var("v",
11309                                                                                             CTy"CP15")),
11310                                                                                      qTy),
11311                                                                                   Close
11312                                                                                     (Var("x0",
11313                                                                                          CTy"SCR"),
11314                                                                                      MB(MR(Close
11315                                                                                              (qVar"s",
11316                                                                                               Dest
11317                                                                                                 ("CP15",
11318                                                                                                  CTy"CP15",
11319                                                                                                  qVar"s"))),
11320                                                                                         Close
11321                                                                                           (Var("v",
11322                                                                                                CTy"CP15"),
11323                                                                                            MB(MB(MU(TP[Var("v",
11324                                                                                                            CTy"CP15"),
11325                                                                                                        Rupd
11326                                                                                                          ("NS",
11327                                                                                                           TP[Var("x0",
11328                                                                                                                  CTy"SCR"),
11329                                                                                                              LF])],
11330                                                                                                     qTy),
11331                                                                                                  Close
11332                                                                                                    (Var("v",
11333                                                                                                         PTy(CTy"CP15",
11334                                                                                                             CTy"SCR")),
11335                                                                                                     MU(Rupd
11336                                                                                                          ("SCR",
11337                                                                                                           Var("v",
11338                                                                                                               PTy(CTy"CP15",
11339                                                                                                                   CTy"SCR"))),
11340                                                                                                        qTy))),
11341                                                                                               Close
11342                                                                                                 (Var("v",
11343                                                                                                      CTy"CP15"),
11344                                                                                                  MW(Close
11345                                                                                                       (qVar"s",
11346                                                                                                        Rupd
11347                                                                                                          ("CP15",
11348                                                                                                           TP[qVar"s",
11349                                                                                                              Var("v",
11350                                                                                                                  CTy"CP15")]))))))))))),
11351                                                                          MU(LU,
11352                                                                             qTy)))),
11353                                                                Close
11354                                                                  (AVar
11355                                                                     uTy,
11356                                                                   Call
11357                                                                     ("EnterMonitorMode",
11358                                                                      ATy(qTy,
11359                                                                          PTy(uTy,
11360                                                                              qTy)),
11361                                                                      TP[Var("new_spsr_value",
11362                                                                             CTy"PSR"),
11363                                                                         Var("new_lr_value",
11364                                                                             F32),
11365                                                                         Var("vect_offset",
11366                                                                             F32)])))))),
11367                                                      (bVar"route_to_hyp",
11368                                                       MB(MR(Close
11369                                                               (qVar"s",
11370                                                                Dest
11371                                                                  ("CP15",
11372                                                                   CTy"CP15",
11373                                                                   qVar"s"))),
11374                                                          Close
11375                                                            (Var("v",
11376                                                                 CTy"CP15"),
11377                                                             MB(MB(MB(MU(TP[Var("v",
11378                                                                                CTy"CP15"),
11379                                                                            LX(CTy"HSR")],
11380                                                                         qTy),
11381                                                                      Close
11382                                                                        (Var("v",
11383                                                                             PTy(CTy"CP15",
11384                                                                                 CTy"HSR")),
11385                                                                         MU(Rupd
11386                                                                              ("HSR",
11387                                                                               Var("v",
11388                                                                                   PTy(CTy"CP15",
11389                                                                                       CTy"HSR"))),
11390                                                                            qTy))),
11391                                                                   Close
11392                                                                     (Var("v",
11393                                                                          CTy"CP15"),
11394                                                                      MW(Close
11395                                                                           (qVar"s",
11396                                                                            Rupd
11397                                                                              ("CP15",
11398                                                                               TP[qVar"s",
11399                                                                                  Var("v",
11400                                                                                      CTy"CP15")]))))),
11401                                                                Close
11402                                                                  (AVar
11403                                                                     uTy,
11404                                                                   Call
11405                                                                     ("EnterHypMode",
11406                                                                      ATy(qTy,
11407                                                                          PTy(uTy,
11408                                                                              qTy)),
11409                                                                      TP[Var("new_spsr_value",
11410                                                                             CTy"PSR"),
11411                                                                         Bop(Sub,
11412                                                                             Var("new_lr_value",
11413                                                                                 F32),
11414                                                                             LW(4,
11415                                                                                32)),
11416                                                                         Var("vect_offset",
11417                                                                             F32)]))))))],
11418                                                     MB(MR(Close
11419                                                             (qVar"s",
11420                                                              Dest
11421                                                                ("CPSR",
11422                                                                 CTy"PSR",
11423                                                                 qVar"s"))),
11424                                                        Close
11425                                                          (Var("v",
11426                                                               CTy"PSR"),
11427                                                           MB(MB(MB(MU(Dest
11428                                                                         ("M",
11429                                                                          FTy 5,
11430                                                                          Var("v",
11431                                                                              CTy"PSR")),
11432                                                                       qTy),
11433                                                                    Close
11434                                                                      (Var("v",
11435                                                                           FTy 5),
11436                                                                       MU(EQ(Var("v",
11437                                                                                 FTy 5),
11438                                                                             LW(22,
11439                                                                                5)),
11440                                                                          qTy))),
11441                                                                 Close
11442                                                                   (bVar"b",
11443                                                                    ITE(bVar"b",
11444                                                                        MB(MR(Close
11445                                                                                (qVar"s",
11446                                                                                 Dest
11447                                                                                   ("CP15",
11448                                                                                    CTy"CP15",
11449                                                                                    qVar"s"))),
11450                                                                           Close
11451                                                                             (Var("v",
11452                                                                                  CTy"CP15"),
11453                                                                              MB(MU(Dest
11454                                                                                      ("SCR",
11455                                                                                       CTy"SCR",
11456                                                                                       Var("v",
11457                                                                                           CTy"CP15")),
11458                                                                                    qTy),
11459                                                                                 Close
11460                                                                                   (Var("x0",
11461                                                                                        CTy"SCR"),
11462                                                                                    MB(MR(Close
11463                                                                                            (qVar"s",
11464                                                                                             Dest
11465                                                                                               ("CP15",
11466                                                                                                CTy"CP15",
11467                                                                                                qVar"s"))),
11468                                                                                       Close
11469                                                                                         (Var("v",
11470                                                                                              CTy"CP15"),
11471                                                                                          MB(MB(MU(TP[Var("v",
11472                                                                                                          CTy"CP15"),
11473                                                                                                      Rupd
11474                                                                                                        ("NS",
11475                                                                                                         TP[Var("x0",
11476                                                                                                                CTy"SCR"),
11477                                                                                                            LF])],
11478                                                                                                   qTy),
11479                                                                                                Close
11480                                                                                                  (Var("v",
11481                                                                                                       PTy(CTy"CP15",
11482                                                                                                           CTy"SCR")),
11483                                                                                                   MU(Rupd
11484                                                                                                        ("SCR",
11485                                                                                                         Var("v",
11486                                                                                                             PTy(CTy"CP15",
11487                                                                                                                 CTy"SCR"))),
11488                                                                                                      qTy))),
11489                                                                                             Close
11490                                                                                               (Var("v",
11491                                                                                                    CTy"CP15"),
11492                                                                                                MW(Close
11493                                                                                                     (qVar"s",
11494                                                                                                      Rupd
11495                                                                                                        ("CP15",
11496                                                                                                         TP[qVar"s",
11497                                                                                                            Var("v",
11498                                                                                                                CTy"CP15")]))))))))))),
11499                                                                        MU(LU,
11500                                                                           qTy)))),
11501                                                              Close
11502                                                                (AVar uTy,
11503                                                                 MB(MR(Close
11504                                                                         (qVar"s",
11505                                                                          Dest
11506                                                                            ("CPSR",
11507                                                                             CTy"PSR",
11508                                                                             qVar"s"))),
11509                                                                    Close
11510                                                                      (Var("v",
11511                                                                           CTy"PSR"),
11512                                                                       MB(MB(MB(MU(TP[Var("v",
11513                                                                                          CTy"PSR"),
11514                                                                                      LW(17,
11515                                                                                         5)],
11516                                                                                   qTy),
11517                                                                                Close
11518                                                                                  (Var("v",
11519                                                                                       PTy(CTy"PSR",
11520                                                                                           FTy 5)),
11521                                                                                   MU(Rupd
11522                                                                                        ("M",
11523                                                                                         Var("v",
11524                                                                                             PTy(CTy"PSR",
11525                                                                                                 FTy 5))),
11526                                                                                      qTy))),
11527                                                                             Close
11528                                                                               (Var("v",
11529                                                                                    CTy"PSR"),
11530                                                                                MW(Close
11531                                                                                     (qVar"s",
11532                                                                                      Rupd
11533                                                                                        ("CPSR",
11534                                                                                         TP[qVar"s",
11535                                                                                            Var("v",
11536                                                                                                CTy"PSR")]))))),
11537                                                                          Close
11538                                                                            (AVar
11539                                                                               uTy,
11540                                                                             MB(Call
11541                                                                                  ("write'SPSR",
11542                                                                                   ATy(qTy,
11543                                                                                       PTy(uTy,
11544                                                                                           qTy)),
11545                                                                                   Var("new_spsr_value",
11546                                                                                       CTy"PSR")),
11547                                                                                Close
11548                                                                                  (AVar
11549                                                                                     uTy,
11550                                                                                   MB(Call
11551                                                                                        ("write'R",
11552                                                                                         ATy(qTy,
11553                                                                                             PTy(uTy,
11554                                                                                                 qTy)),
11555                                                                                         TP[Var("new_lr_value",
11556                                                                                                F32),
11557                                                                                            LW(14,
11558                                                                                               4)]),
11559                                                                                      Close
11560                                                                                        (AVar
11561                                                                                           uTy,
11562                                                                                         MB(MR(Close
11563                                                                                                 (qVar"s",
11564                                                                                                  Dest
11565                                                                                                    ("CPSR",
11566                                                                                                     CTy"PSR",
11567                                                                                                     qVar"s"))),
11568                                                                                            Close
11569                                                                                              (Var("v",
11570                                                                                                   CTy"PSR"),
11571                                                                                               MB(MB(MB(MU(TP[Var("v",
11572                                                                                                                  CTy"PSR"),
11573                                                                                                              LT],
11574                                                                                                           qTy),
11575                                                                                                        Close
11576                                                                                                          (Var("v",
11577                                                                                                               PTy(CTy"PSR",
11578                                                                                                                   bTy)),
11579                                                                                                           MU(Rupd
11580                                                                                                                ("I",
11581                                                                                                                 Var("v",
11582                                                                                                                     PTy(CTy"PSR",
11583                                                                                                                         bTy))),
11584                                                                                                              qTy))),
11585                                                                                                     Close
11586                                                                                                       (Var("v",
11587                                                                                                            CTy"PSR"),
11588                                                                                                        MW(Close
11589                                                                                                             (qVar"s",
11590                                                                                                              Rupd
11591                                                                                                                ("CPSR",
11592                                                                                                                 TP[qVar"s",
11593                                                                                                                    Var("v",
11594                                                                                                                        CTy"PSR")]))))),
11595                                                                                                  Close
11596                                                                                                    (AVar
11597                                                                                                       uTy,
11598                                                                                                     MB(Call
11599                                                                                                          ("HaveSecurityExt",
11600                                                                                                           ATy(qTy,
11601                                                                                                               PTy(bTy,
11602                                                                                                                   qTy)),
11603                                                                                                           LU),
11604                                                                                                        Close
11605                                                                                                          (bVar"v",
11606                                                                                                           MB(MB(MB(MB(MB(MU(Mop(Not,
11607                                                                                                                                 bVar"v"),
11608                                                                                                                             qTy),
11609                                                                                                                          Close
11610                                                                                                                            (bVar"b",
11611                                                                                                                             ITE(bVar"b",
11612                                                                                                                                 MU(LT,
11613                                                                                                                                    qTy),
11614                                                                                                                                 Call
11615                                                                                                                                   ("HaveVirtExt",
11616                                                                                                                                    ATy(qTy,
11617                                                                                                                                        PTy(bTy,
11618                                                                                                                                            qTy)),
11619                                                                                                                                    LU)))),
11620                                                                                                                       Close
11621                                                                                                                         (bVar"b",
11622                                                                                                                          ITE(bVar"b",
11623                                                                                                                              MU(LT,
11624                                                                                                                                 qTy),
11625                                                                                                                              MB(MR(Close
11626                                                                                                                                      (qVar"s",
11627                                                                                                                                       Dest
11628                                                                                                                                         ("CP15",
11629                                                                                                                                          CTy"CP15",
11630                                                                                                                                          qVar"s"))),
11631                                                                                                                                 Close
11632                                                                                                                                   (Var("v",
11633                                                                                                                                        CTy"CP15"),
11634                                                                                                                                    MB(MB(MU(Dest
11635                                                                                                                                               ("SCR",
11636                                                                                                                                                CTy"SCR",
11637                                                                                                                                                Var("v",
11638                                                                                                                                                    CTy"CP15")),
11639                                                                                                                                             qTy),
11640                                                                                                                                          Close
11641                                                                                                                                            (Var("v",
11642                                                                                                                                                 CTy"SCR"),
11643                                                                                                                                             MU(Dest
11644                                                                                                                                                  ("NS",
11645                                                                                                                                                   bTy,
11646                                                                                                                                                   Var("v",
11647                                                                                                                                                       CTy"SCR")),
11648                                                                                                                                                qTy))),
11649                                                                                                                                       Close
11650                                                                                                                                         (bVar"v",
11651                                                                                                                                          MU(Mop(Not,
11652                                                                                                                                                 bVar"v"),
11653                                                                                                                                             qTy)))))))),
11654                                                                                                                    Close
11655                                                                                                                      (bVar"b",
11656                                                                                                                       ITE(bVar"b",
11657                                                                                                                           MU(LT,
11658                                                                                                                              qTy),
11659                                                                                                                           MB(MR(Close
11660                                                                                                                                   (qVar"s",
11661                                                                                                                                    Dest
11662                                                                                                                                      ("CP15",
11663                                                                                                                                       CTy"CP15",
11664                                                                                                                                       qVar"s"))),
11665                                                                                                                              Close
11666                                                                                                                                (Var("v",
11667                                                                                                                                     CTy"CP15"),
11668                                                                                                                                 MB(MU(Dest
11669                                                                                                                                         ("SCR",
11670                                                                                                                                          CTy"SCR",
11671                                                                                                                                          Var("v",
11672                                                                                                                                              CTy"CP15")),
11673                                                                                                                                       qTy),
11674                                                                                                                                    Close
11675                                                                                                                                      (Var("v",
11676                                                                                                                                           CTy"SCR"),
11677                                                                                                                                       MU(Dest
11678                                                                                                                                            ("FW",
11679                                                                                                                                             bTy,
11680                                                                                                                                             Var("v",
11681                                                                                                                                                 CTy"SCR")),
11682                                                                                                                                          qTy)))))))),
11683                                                                                                                 Close
11684                                                                                                                   (bVar"b",
11685                                                                                                                    ITE(bVar"b",
11686                                                                                                                        MB(MR(Close
11687                                                                                                                                (qVar"s",
11688                                                                                                                                 Dest
11689                                                                                                                                   ("CPSR",
11690                                                                                                                                    CTy"PSR",
11691                                                                                                                                    qVar"s"))),
11692                                                                                                                           Close
11693                                                                                                                             (Var("v",
11694                                                                                                                                  CTy"PSR"),
11695                                                                                                                              MB(MB(MU(TP[Var("v",
11696                                                                                                                                              CTy"PSR"),
11697                                                                                                                                          LT],
11698                                                                                                                                       qTy),
11699                                                                                                                                    Close
11700                                                                                                                                      (Var("v",
11701                                                                                                                                           PTy(CTy"PSR",
11702                                                                                                                                               bTy)),
11703                                                                                                                                       MU(Rupd
11704                                                                                                                                            ("F",
11705                                                                                                                                             Var("v",
11706                                                                                                                                                 PTy(CTy"PSR",
11707                                                                                                                                                     bTy))),
11708                                                                                                                                          qTy))),
11709                                                                                                                                 Close
11710                                                                                                                                   (Var("v",
11711                                                                                                                                        CTy"PSR"),
11712                                                                                                                                    MW(Close
11713                                                                                                                                         (qVar"s",
11714                                                                                                                                          Rupd
11715                                                                                                                                            ("CPSR",
11716                                                                                                                                             TP[qVar"s",
11717                                                                                                                                                Var("v",
11718                                                                                                                                                    CTy"PSR")]))))))),
11719                                                                                                                        MU(LU,
11720                                                                                                                           qTy)))),
11721                                                                                                              Close
11722                                                                                                                (AVar
11723                                                                                                                   uTy,
11724                                                                                                                 MB(Call
11725                                                                                                                      ("HaveSecurityExt",
11726                                                                                                                       ATy(qTy,
11727                                                                                                                           PTy(bTy,
11728                                                                                                                               qTy)),
11729                                                                                                                       LU),
11730                                                                                                                    Close
11731                                                                                                                      (bVar"v",
11732                                                                                                                       MB(MB(MB(MB(MB(MU(Mop(Not,
11733                                                                                                                                             bVar"v"),
11734                                                                                                                                         qTy),
11735                                                                                                                                      Close
11736                                                                                                                                        (bVar"b",
11737                                                                                                                                         ITE(bVar"b",
11738                                                                                                                                             MU(LT,
11739                                                                                                                                                qTy),
11740                                                                                                                                             Call
11741                                                                                                                                               ("HaveVirtExt",
11742                                                                                                                                                ATy(qTy,
11743                                                                                                                                                    PTy(bTy,
11744                                                                                                                                                        qTy)),
11745                                                                                                                                                LU)))),
11746                                                                                                                                   Close
11747                                                                                                                                     (bVar"b",
11748                                                                                                                                      ITE(bVar"b",
11749                                                                                                                                          MU(LT,
11750                                                                                                                                             qTy),
11751                                                                                                                                          MB(MR(Close
11752                                                                                                                                                  (qVar"s",
11753                                                                                                                                                   Dest
11754                                                                                                                                                     ("CP15",
11755                                                                                                                                                      CTy"CP15",
11756                                                                                                                                                      qVar"s"))),
11757                                                                                                                                             Close
11758                                                                                                                                               (Var("v",
11759                                                                                                                                                    CTy"CP15"),
11760                                                                                                                                                MB(MB(MU(Dest
11761                                                                                                                                                           ("SCR",
11762                                                                                                                                                            CTy"SCR",
11763                                                                                                                                                            Var("v",
11764                                                                                                                                                                CTy"CP15")),
11765                                                                                                                                                         qTy),
11766                                                                                                                                                      Close
11767                                                                                                                                                        (Var("v",
11768                                                                                                                                                             CTy"SCR"),
11769                                                                                                                                                         MU(Dest
11770                                                                                                                                                              ("NS",
11771                                                                                                                                                               bTy,
11772                                                                                                                                                               Var("v",
11773                                                                                                                                                                   CTy"SCR")),
11774                                                                                                                                                            qTy))),
11775                                                                                                                                                   Close
11776                                                                                                                                                     (bVar"v",
11777                                                                                                                                                      MU(Mop(Not,
11778                                                                                                                                                             bVar"v"),
11779                                                                                                                                                         qTy)))))))),
11780                                                                                                                                Close
11781                                                                                                                                  (bVar"b",
11782                                                                                                                                   ITE(bVar"b",
11783                                                                                                                                       MU(LT,
11784                                                                                                                                          qTy),
11785                                                                                                                                       MB(MR(Close
11786                                                                                                                                               (qVar"s",
11787                                                                                                                                                Dest
11788                                                                                                                                                  ("CP15",
11789                                                                                                                                                   CTy"CP15",
11790                                                                                                                                                   qVar"s"))),
11791                                                                                                                                          Close
11792                                                                                                                                            (Var("v",
11793                                                                                                                                                 CTy"CP15"),
11794                                                                                                                                             MB(MU(Dest
11795                                                                                                                                                     ("SCR",
11796                                                                                                                                                      CTy"SCR",
11797                                                                                                                                                      Var("v",
11798                                                                                                                                                          CTy"CP15")),
11799                                                                                                                                                   qTy),
11800                                                                                                                                                Close
11801                                                                                                                                                  (Var("v",
11802                                                                                                                                                       CTy"SCR"),
11803                                                                                                                                                   MU(Dest
11804                                                                                                                                                        ("AW",
11805                                                                                                                                                         bTy,
11806                                                                                                                                                         Var("v",
11807                                                                                                                                                             CTy"SCR")),
11808                                                                                                                                                      qTy)))))))),
11809                                                                                                                             Close
11810                                                                                                                               (bVar"b",
11811                                                                                                                                ITE(bVar"b",
11812                                                                                                                                    MB(MR(Close
11813                                                                                                                                            (qVar"s",
11814                                                                                                                                             Dest
11815                                                                                                                                               ("CPSR",
11816                                                                                                                                                CTy"PSR",
11817                                                                                                                                                qVar"s"))),
11818                                                                                                                                       Close
11819                                                                                                                                         (Var("v",
11820                                                                                                                                              CTy"PSR"),
11821                                                                                                                                          MB(MB(MU(TP[Var("v",
11822                                                                                                                                                          CTy"PSR"),
11823                                                                                                                                                      LT],
11824                                                                                                                                                   qTy),
11825                                                                                                                                                Close
11826                                                                                                                                                  (Var("v",
11827                                                                                                                                                       PTy(CTy"PSR",
11828                                                                                                                                                           bTy)),
11829                                                                                                                                                   MU(Rupd
11830                                                                                                                                                        ("A",
11831                                                                                                                                                         Var("v",
11832                                                                                                                                                             PTy(CTy"PSR",
11833                                                                                                                                                                 bTy))),
11834                                                                                                                                                      qTy))),
11835                                                                                                                                             Close
11836                                                                                                                                               (Var("v",
11837                                                                                                                                                    CTy"PSR"),
11838                                                                                                                                                MW(Close
11839                                                                                                                                                     (qVar"s",
11840                                                                                                                                                      Rupd
11841                                                                                                                                                        ("CPSR",
11842                                                                                                                                                         TP[qVar"s",
11843                                                                                                                                                            Var("v",
11844                                                                                                                                                                CTy"PSR")]))))))),
11845                                                                                                                                    MU(LU,
11846                                                                                                                                       qTy)))),
11847                                                                                                                          Close
11848                                                                                                                            (AVar
11849                                                                                                                               uTy,
11850                                                                                                                             MB(MR(Close
11851                                                                                                                                     (qVar"s",
11852                                                                                                                                      Dest
11853                                                                                                                                        ("CPSR",
11854                                                                                                                                         CTy"PSR",
11855                                                                                                                                         qVar"s"))),
11856                                                                                                                                Close
11857                                                                                                                                  (Var("v",
11858                                                                                                                                       CTy"PSR"),
11859                                                                                                                                   MB(MB(MB(MU(TP[Var("v",
11860                                                                                                                                                      CTy"PSR"),
11861                                                                                                                                                  LW(0,
11862                                                                                                                                                     8)],
11863                                                                                                                                               qTy),
11864                                                                                                                                            Close
11865                                                                                                                                              (Var("v",
11866                                                                                                                                                   PTy(CTy"PSR",
11867                                                                                                                                                       F8)),
11868                                                                                                                                               MU(Rupd
11869                                                                                                                                                    ("IT",
11870                                                                                                                                                     Var("v",
11871                                                                                                                                                         PTy(CTy"PSR",
11872                                                                                                                                                             F8))),
11873                                                                                                                                                  qTy))),
11874                                                                                                                                         Close
11875                                                                                                                                           (Var("v",
11876                                                                                                                                                CTy"PSR"),
11877                                                                                                                                            MW(Close
11878                                                                                                                                                 (qVar"s",
11879                                                                                                                                                  Rupd
11880                                                                                                                                                    ("CPSR",
11881                                                                                                                                                     TP[qVar"s",
11882                                                                                                                                                        Var("v",
11883                                                                                                                                                            CTy"PSR")]))))),
11884                                                                                                                                      Close
11885                                                                                                                                        (AVar
11886                                                                                                                                           uTy,
11887                                                                                                                                         MB(MR(Close
11888                                                                                                                                                 (qVar"s",
11889                                                                                                                                                  Dest
11890                                                                                                                                                    ("CPSR",
11891                                                                                                                                                     CTy"PSR",
11892                                                                                                                                                     qVar"s"))),
11893                                                                                                                                            Close
11894                                                                                                                                              (Var("v",
11895                                                                                                                                                   CTy"PSR"),
11896                                                                                                                                               MB(MB(MB(MU(TP[Var("v",
11897                                                                                                                                                                  CTy"PSR"),
11898                                                                                                                                                              LF],
11899                                                                                                                                                           qTy),
11900                                                                                                                                                        Close
11901                                                                                                                                                          (Var("v",
11902                                                                                                                                                               PTy(CTy"PSR",
11903                                                                                                                                                                   bTy)),
11904                                                                                                                                                           MU(Rupd
11905                                                                                                                                                                ("J",
11906                                                                                                                                                                 Var("v",
11907                                                                                                                                                                     PTy(CTy"PSR",
11908                                                                                                                                                                         bTy))),
11909                                                                                                                                                              qTy))),
11910                                                                                                                                                     Close
11911                                                                                                                                                       (Var("v",
11912                                                                                                                                                            CTy"PSR"),
11913                                                                                                                                                        MW(Close
11914                                                                                                                                                             (qVar"s",
11915                                                                                                                                                              Rupd
11916                                                                                                                                                                ("CPSR",
11917                                                                                                                                                                 TP[qVar"s",
11918                                                                                                                                                                    Var("v",
11919                                                                                                                                                                        CTy"PSR")]))))),
11920                                                                                                                                                  Close
11921                                                                                                                                                    (AVar
11922                                                                                                                                                       uTy,
11923                                                                                                                                                     MB(MR(Close
11924                                                                                                                                                             (qVar"s",
11925                                                                                                                                                              Dest
11926                                                                                                                                                                ("CPSR",
11927                                                                                                                                                                 CTy"PSR",
11928                                                                                                                                                                 qVar"s"))),
11929                                                                                                                                                        Close
11930                                                                                                                                                          (Var("v",
11931                                                                                                                                                               CTy"PSR"),
11932                                                                                                                                                           MB(MB(MB(MB(MR(Close
11933                                                                                                                                                                            (qVar"s",
11934                                                                                                                                                                             Dest
11935                                                                                                                                                                               ("CP15",
11936                                                                                                                                                                                CTy"CP15",
11937                                                                                                                                                                                qVar"s"))),
11938                                                                                                                                                                       Close
11939                                                                                                                                                                         (Var("v0",
11940                                                                                                                                                                              CTy"CP15"),
11941                                                                                                                                                                          MB(MB(MU(Dest
11942                                                                                                                                                                                     ("SCTLR",
11943                                                                                                                                                                                      CTy"SCTLR",
11944                                                                                                                                                                                      Var("v0",
11945                                                                                                                                                                                          CTy"CP15")),
11946                                                                                                                                                                                   qTy),
11947                                                                                                                                                                                Close
11948                                                                                                                                                                                  (Var("v",
11949                                                                                                                                                                                       CTy"SCTLR"),
11950                                                                                                                                                                                   MU(Dest
11951                                                                                                                                                                                        ("TE",
11952                                                                                                                                                                                         bTy,
11953                                                                                                                                                                                         Var("v",
11954                                                                                                                                                                                             CTy"SCTLR")),
11955                                                                                                                                                                                      qTy))),
11956                                                                                                                                                                             Close
11957                                                                                                                                                                               (bVar"v0",
11958                                                                                                                                                                                MU(TP[Var("v",
11959                                                                                                                                                                                          CTy"PSR"),
11960                                                                                                                                                                                      bVar"v0"],
11961                                                                                                                                                                                   qTy))))),
11962                                                                                                                                                                    Close
11963                                                                                                                                                                      (Var("v",
11964                                                                                                                                                                           PTy(CTy"PSR",
11965                                                                                                                                                                               bTy)),
11966                                                                                                                                                                       MU(Rupd
11967                                                                                                                                                                            ("T",
11968                                                                                                                                                                             Var("v",
11969                                                                                                                                                                                 PTy(CTy"PSR",
11970                                                                                                                                                                                     bTy))),
11971                                                                                                                                                                          qTy))),
11972                                                                                                                                                                 Close
11973                                                                                                                                                                   (Var("v",
11974                                                                                                                                                                        CTy"PSR"),
11975                                                                                                                                                                    MW(Close
11976                                                                                                                                                                         (qVar"s",
11977                                                                                                                                                                          Rupd
11978                                                                                                                                                                            ("CPSR",
11979                                                                                                                                                                             TP[qVar"s",
11980                                                                                                                                                                                Var("v",
11981                                                                                                                                                                                    CTy"PSR")]))))),
11982                                                                                                                                                              Close
11983                                                                                                                                                                (AVar
11984                                                                                                                                                                   uTy,
11985                                                                                                                                                                 MB(MR(Close
11986                                                                                                                                                                         (qVar"s",
11987                                                                                                                                                                          Dest
11988                                                                                                                                                                            ("CPSR",
11989                                                                                                                                                                             CTy"PSR",
11990                                                                                                                                                                             qVar"s"))),
11991                                                                                                                                                                    Close
11992                                                                                                                                                                      (Var("v",
11993                                                                                                                                                                           CTy"PSR"),
11994                                                                                                                                                                       MB(MB(MB(MB(MR(Close
11995                                                                                                                                                                                        (qVar"s",
11996                                                                                                                                                                                         Dest
11997                                                                                                                                                                                           ("CP15",
11998                                                                                                                                                                                            CTy"CP15",
11999                                                                                                                                                                                            qVar"s"))),
12000                                                                                                                                                                                   Close
12001                                                                                                                                                                                     (Var("v0",
12002                                                                                                                                                                                          CTy"CP15"),
12003                                                                                                                                                                                      MB(MB(MU(Dest
12004                                                                                                                                                                                                 ("SCTLR",
12005                                                                                                                                                                                                  CTy"SCTLR",
12006                                                                                                                                                                                                  Var("v0",
12007                                                                                                                                                                                                      CTy"CP15")),
12008                                                                                                                                                                                               qTy),
12009                                                                                                                                                                                            Close
12010                                                                                                                                                                                              (Var("v",
12011                                                                                                                                                                                                   CTy"SCTLR"),
12012                                                                                                                                                                                               MU(Dest
12013                                                                                                                                                                                                    ("EE",
12014                                                                                                                                                                                                     bTy,
12015                                                                                                                                                                                                     Var("v",
12016                                                                                                                                                                                                         CTy"SCTLR")),
12017                                                                                                                                                                                                  qTy))),
12018                                                                                                                                                                                         Close
12019                                                                                                                                                                                           (bVar"v0",
12020                                                                                                                                                                                            MU(TP[Var("v",
12021                                                                                                                                                                                                      CTy"PSR"),
12022                                                                                                                                                                                                  bVar"v0"],
12023                                                                                                                                                                                               qTy))))),
12024                                                                                                                                                                                Close
12025                                                                                                                                                                                  (Var("v",
12026                                                                                                                                                                                       PTy(CTy"PSR",
12027                                                                                                                                                                                           bTy)),
12028                                                                                                                                                                                   MU(Rupd
12029                                                                                                                                                                                        ("E",
12030                                                                                                                                                                                         Var("v",
12031                                                                                                                                                                                             PTy(CTy"PSR",
12032                                                                                                                                                                                                 bTy))),
12033                                                                                                                                                                                      qTy))),
12034                                                                                                                                                                             Close
12035                                                                                                                                                                               (Var("v",
12036                                                                                                                                                                                    CTy"PSR"),
12037                                                                                                                                                                                MW(Close
12038                                                                                                                                                                                     (qVar"s",
12039                                                                                                                                                                                      Rupd
12040                                                                                                                                                                                        ("CPSR",
12041                                                                                                                                                                                         TP[qVar"s",
12042                                                                                                                                                                                            Var("v",
12043                                                                                                                                                                                                CTy"PSR")]))))),
12044                                                                                                                                                                          Close
12045                                                                                                                                                                            (AVar
12046                                                                                                                                                                               uTy,
12047                                                                                                                                                                             MB(MR(Close
12048                                                                                                                                                                                     (qVar"s",
12049                                                                                                                                                                                      Dest
12050                                                                                                                                                                                        ("CP15",
12051                                                                                                                                                                                         CTy"CP15",
12052                                                                                                                                                                                         qVar"s"))),
12053                                                                                                                                                                                Close
12054                                                                                                                                                                                  (Var("v",
12055                                                                                                                                                                                       CTy"CP15"),
12056                                                                                                                                                                                   MB(MB(MU(Dest
12057                                                                                                                                                                                              ("SCTLR",
12058                                                                                                                                                                                               CTy"SCTLR",
12059                                                                                                                                                                                               Var("v",
12060                                                                                                                                                                                                   CTy"CP15")),
12061                                                                                                                                                                                            qTy),
12062                                                                                                                                                                                         Close
12063                                                                                                                                                                                           (Var("v",
12064                                                                                                                                                                                                CTy"SCTLR"),
12065                                                                                                                                                                                            MU(Dest
12066                                                                                                                                                                                                 ("VE",
12067                                                                                                                                                                                                  bTy,
12068                                                                                                                                                                                                  Var("v",
12069                                                                                                                                                                                                      CTy"SCTLR")),
12070                                                                                                                                                                                               qTy))),
12071                                                                                                                                                                                      Close
12072                                                                                                                                                                                        (bVar"b",
12073                                                                                                                                                                                         ITE(bVar"b",
12074                                                                                                                                                                                             Call
12075                                                                                                                                                                                               ("raise'exception",
12076                                                                                                                                                                                                ATy(qTy,
12077                                                                                                                                                                                                    PTy(uTy,
12078                                                                                                                                                                                                        qTy)),
12079                                                                                                                                                                                                Call
12080                                                                                                                                                                                                  ("IMPLEMENTATION_DEFINED",
12081                                                                                                                                                                                                   CTy"exception",
12082                                                                                                                                                                                                   LS
12083                                                                                                                                                                                                    "branch to an FIQ vector")),
12084                                                                                                                                                                                             MB(Call
12085                                                                                                                                                                                                  ("ExcVectorBase",
12086                                                                                                                                                                                                   ATy(qTy,
12087                                                                                                                                                                                                       PTy(F32,
12088                                                                                                                                                                                                           qTy)),
12089                                                                                                                                                                                                   LU),
12090                                                                                                                                                                                                Close
12091                                                                                                                                                                                                  (Var("v",
12092                                                                                                                                                                                                       F32),
12093                                                                                                                                                                                                   MB(MU(Bop(Add,
12094                                                                                                                                                                                                             Var("v",
12095                                                                                                                                                                                                                 F32),
12096                                                                                                                                                                                                             Var("vect_offset",
12097                                                                                                                                                                                                                 F32)),
12098                                                                                                                                                                                                         qTy),
12099                                                                                                                                                                                                      Close
12100                                                                                                                                                                                                        (Var("v",
12101                                                                                                                                                                                                             F32),
12102                                                                                                                                                                                                         Call
12103                                                                                                                                                                                                           ("BranchTo",
12104                                                                                                                                                                                                            ATy(qTy,
12105                                                                                                                                                                                                                PTy(uTy,
12106                                                                                                                                                                                                                    qTy)),
12107                                                                                                                                                                                                            Var("v",
12108                                                                                                                                                                                                                F32))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
12109;
12110val TakeVirtualFIQException_def = Def
12111  ("TakeVirtualFIQException",AVar uTy,
12112   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
12113      Close
12114        (Var("v",CTy"PSR"),
12115         MB(MB(MU(Dest("T",bTy,Var("v",CTy"PSR")),qTy),
12116               Close
12117                 (bVar"b",
12118                  ITE(bVar"b",Const("PC",ATy(qTy,PTy(F32,qTy))),
12119                      MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
12120                         Close
12121                           (Var("v",F32),
12122                            MU(Bop(Sub,Var("v",F32),LW(4,32)),qTy)))))),
12123            Close
12124              (Var("new_lr_value",F32),
12125               MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
12126                  Close
12127                    (Var("new_spsr_value",CTy"PSR"),
12128                     MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
12129                        Close
12130                          (Var("v",CTy"PSR"),
12131                           MB(MB(MB(MU(TP[Var("v",CTy"PSR"),LW(17,5)],qTy),
12132                                    Close
12133                                      (Var("v",PTy(CTy"PSR",FTy 5)),
12134                                       MU(Rupd
12135                                            ("M",
12136                                             Var("v",PTy(CTy"PSR",FTy 5))),
12137                                          qTy))),
12138                                 Close
12139                                   (Var("v",CTy"PSR"),
12140                                    MW(Close
12141                                         (qVar"s",
12142                                          Rupd
12143                                            ("CPSR",
12144                                             TP[qVar"s",Var("v",CTy"PSR")]))))),
12145                              Close
12146                                (AVar uTy,
12147                                 MB(Call
12148                                      ("write'SPSR",ATy(qTy,PTy(uTy,qTy)),
12149                                       Var("new_spsr_value",CTy"PSR")),
12150                                    Close
12151                                      (AVar uTy,
12152                                       MB(Call
12153                                            ("write'R",
12154                                             ATy(qTy,PTy(uTy,qTy)),
12155                                             TP[Var("new_lr_value",F32),
12156                                                LW(14,4)]),
12157                                          Close
12158                                            (AVar uTy,
12159                                             MB(MR(Close
12160                                                     (qVar"s",
12161                                                      Dest
12162                                                        ("CPSR",CTy"PSR",
12163                                                         qVar"s"))),
12164                                                Close
12165                                                  (Var("v",CTy"PSR"),
12166                                                   MB(MB(MB(MU(TP[Var("v",
12167                                                                      CTy"PSR"),
12168                                                                  LT],qTy),
12169                                                            Close
12170                                                              (Var("v",
12171                                                                   PTy(CTy"PSR",
12172                                                                       bTy)),
12173                                                               MU(Rupd
12174                                                                    ("I",
12175                                                                     Var("v",
12176                                                                         PTy(CTy"PSR",
12177                                                                             bTy))),
12178                                                                  qTy))),
12179                                                         Close
12180                                                           (Var("v",
12181                                                                CTy"PSR"),
12182                                                            MW(Close
12183                                                                 (qVar"s",
12184                                                                  Rupd
12185                                                                    ("CPSR",
12186                                                                     TP[qVar"s",
12187                                                                        Var("v",
12188                                                                            CTy"PSR")]))))),
12189                                                      Close
12190                                                        (AVar uTy,
12191                                                         MB(MR(Close
12192                                                                 (qVar"s",
12193                                                                  Dest
12194                                                                    ("CPSR",
12195                                                                     CTy"PSR",
12196                                                                     qVar"s"))),
12197                                                            Close
12198                                                              (Var("v",
12199                                                                   CTy"PSR"),
12200                                                               MB(MB(MB(MU(TP[Var("v",
12201                                                                                  CTy"PSR"),
12202                                                                              LT],
12203                                                                           qTy),
12204                                                                        Close
12205                                                                          (Var("v",
12206                                                                               PTy(CTy"PSR",
12207                                                                                   bTy)),
12208                                                                           MU(Rupd
12209                                                                                ("F",
12210                                                                                 Var("v",
12211                                                                                     PTy(CTy"PSR",
12212                                                                                         bTy))),
12213                                                                              qTy))),
12214                                                                     Close
12215                                                                       (Var("v",
12216                                                                            CTy"PSR"),
12217                                                                        MW(Close
12218                                                                             (qVar"s",
12219                                                                              Rupd
12220                                                                                ("CPSR",
12221                                                                                 TP[qVar"s",
12222                                                                                    Var("v",
12223                                                                                        CTy"PSR")]))))),
12224                                                                  Close
12225                                                                    (AVar
12226                                                                       uTy,
12227                                                                     MB(MR(Close
12228                                                                             (qVar"s",
12229                                                                              Dest
12230                                                                                ("CPSR",
12231                                                                                 CTy"PSR",
12232                                                                                 qVar"s"))),
12233                                                                        Close
12234                                                                          (Var("v",
12235                                                                               CTy"PSR"),
12236                                                                           MB(MB(MB(MU(TP[Var("v",
12237                                                                                              CTy"PSR"),
12238                                                                                          LT],
12239                                                                                       qTy),
12240                                                                                    Close
12241                                                                                      (Var("v",
12242                                                                                           PTy(CTy"PSR",
12243                                                                                               bTy)),
12244                                                                                       MU(Rupd
12245                                                                                            ("A",
12246                                                                                             Var("v",
12247                                                                                                 PTy(CTy"PSR",
12248                                                                                                     bTy))),
12249                                                                                          qTy))),
12250                                                                                 Close
12251                                                                                   (Var("v",
12252                                                                                        CTy"PSR"),
12253                                                                                    MW(Close
12254                                                                                         (qVar"s",
12255                                                                                          Rupd
12256                                                                                            ("CPSR",
12257                                                                                             TP[qVar"s",
12258                                                                                                Var("v",
12259                                                                                                    CTy"PSR")]))))),
12260                                                                              Close
12261                                                                                (AVar
12262                                                                                   uTy,
12263                                                                                 MB(MR(Close
12264                                                                                         (qVar"s",
12265                                                                                          Dest
12266                                                                                            ("CPSR",
12267                                                                                             CTy"PSR",
12268                                                                                             qVar"s"))),
12269                                                                                    Close
12270                                                                                      (Var("v",
12271                                                                                           CTy"PSR"),
12272                                                                                       MB(MB(MB(MU(TP[Var("v",
12273                                                                                                          CTy"PSR"),
12274                                                                                                      LW(0,
12275                                                                                                         8)],
12276                                                                                                   qTy),
12277                                                                                                Close
12278                                                                                                  (Var("v",
12279                                                                                                       PTy(CTy"PSR",
12280                                                                                                           F8)),
12281                                                                                                   MU(Rupd
12282                                                                                                        ("IT",
12283                                                                                                         Var("v",
12284                                                                                                             PTy(CTy"PSR",
12285                                                                                                                 F8))),
12286                                                                                                      qTy))),
12287                                                                                             Close
12288                                                                                               (Var("v",
12289                                                                                                    CTy"PSR"),
12290                                                                                                MW(Close
12291                                                                                                     (qVar"s",
12292                                                                                                      Rupd
12293                                                                                                        ("CPSR",
12294                                                                                                         TP[qVar"s",
12295                                                                                                            Var("v",
12296                                                                                                                CTy"PSR")]))))),
12297                                                                                          Close
12298                                                                                            (AVar
12299                                                                                               uTy,
12300                                                                                             MB(MR(Close
12301                                                                                                     (qVar"s",
12302                                                                                                      Dest
12303                                                                                                        ("CPSR",
12304                                                                                                         CTy"PSR",
12305                                                                                                         qVar"s"))),
12306                                                                                                Close
12307                                                                                                  (Var("v",
12308                                                                                                       CTy"PSR"),
12309                                                                                                   MB(MB(MB(MU(TP[Var("v",
12310                                                                                                                      CTy"PSR"),
12311                                                                                                                  LF],
12312                                                                                                               qTy),
12313                                                                                                            Close
12314                                                                                                              (Var("v",
12315                                                                                                                   PTy(CTy"PSR",
12316                                                                                                                       bTy)),
12317                                                                                                               MU(Rupd
12318                                                                                                                    ("J",
12319                                                                                                                     Var("v",
12320                                                                                                                         PTy(CTy"PSR",
12321                                                                                                                             bTy))),
12322                                                                                                                  qTy))),
12323                                                                                                         Close
12324                                                                                                           (Var("v",
12325                                                                                                                CTy"PSR"),
12326                                                                                                            MW(Close
12327                                                                                                                 (qVar"s",
12328                                                                                                                  Rupd
12329                                                                                                                    ("CPSR",
12330                                                                                                                     TP[qVar"s",
12331                                                                                                                        Var("v",
12332                                                                                                                            CTy"PSR")]))))),
12333                                                                                                      Close
12334                                                                                                        (AVar
12335                                                                                                           uTy,
12336                                                                                                         MB(MR(Close
12337                                                                                                                 (qVar"s",
12338                                                                                                                  Dest
12339                                                                                                                    ("CPSR",
12340                                                                                                                     CTy"PSR",
12341                                                                                                                     qVar"s"))),
12342                                                                                                            Close
12343                                                                                                              (Var("v",
12344                                                                                                                   CTy"PSR"),
12345                                                                                                               MB(MB(MB(MB(MR(Close
12346                                                                                                                                (qVar"s",
12347                                                                                                                                 Dest
12348                                                                                                                                   ("CP15",
12349                                                                                                                                    CTy"CP15",
12350                                                                                                                                    qVar"s"))),
12351                                                                                                                           Close
12352                                                                                                                             (Var("v0",
12353                                                                                                                                  CTy"CP15"),
12354                                                                                                                              MB(MB(MU(Dest
12355                                                                                                                                         ("SCTLR",
12356                                                                                                                                          CTy"SCTLR",
12357                                                                                                                                          Var("v0",
12358                                                                                                                                              CTy"CP15")),
12359                                                                                                                                       qTy),
12360                                                                                                                                    Close
12361                                                                                                                                      (Var("v",
12362                                                                                                                                           CTy"SCTLR"),
12363                                                                                                                                       MU(Dest
12364                                                                                                                                            ("TE",
12365                                                                                                                                             bTy,
12366                                                                                                                                             Var("v",
12367                                                                                                                                                 CTy"SCTLR")),
12368                                                                                                                                          qTy))),
12369                                                                                                                                 Close
12370                                                                                                                                   (bVar"v0",
12371                                                                                                                                    MU(TP[Var("v",
12372                                                                                                                                              CTy"PSR"),
12373                                                                                                                                          bVar"v0"],
12374                                                                                                                                       qTy))))),
12375                                                                                                                        Close
12376                                                                                                                          (Var("v",
12377                                                                                                                               PTy(CTy"PSR",
12378                                                                                                                                   bTy)),
12379                                                                                                                           MU(Rupd
12380                                                                                                                                ("T",
12381                                                                                                                                 Var("v",
12382                                                                                                                                     PTy(CTy"PSR",
12383                                                                                                                                         bTy))),
12384                                                                                                                              qTy))),
12385                                                                                                                     Close
12386                                                                                                                       (Var("v",
12387                                                                                                                            CTy"PSR"),
12388                                                                                                                        MW(Close
12389                                                                                                                             (qVar"s",
12390                                                                                                                              Rupd
12391                                                                                                                                ("CPSR",
12392                                                                                                                                 TP[qVar"s",
12393                                                                                                                                    Var("v",
12394                                                                                                                                        CTy"PSR")]))))),
12395                                                                                                                  Close
12396                                                                                                                    (AVar
12397                                                                                                                       uTy,
12398                                                                                                                     MB(MR(Close
12399                                                                                                                             (qVar"s",
12400                                                                                                                              Dest
12401                                                                                                                                ("CPSR",
12402                                                                                                                                 CTy"PSR",
12403                                                                                                                                 qVar"s"))),
12404                                                                                                                        Close
12405                                                                                                                          (Var("v",
12406                                                                                                                               CTy"PSR"),
12407                                                                                                                           MB(MB(MB(MB(MR(Close
12408                                                                                                                                            (qVar"s",
12409                                                                                                                                             Dest
12410                                                                                                                                               ("CP15",
12411                                                                                                                                                CTy"CP15",
12412                                                                                                                                                qVar"s"))),
12413                                                                                                                                       Close
12414                                                                                                                                         (Var("v0",
12415                                                                                                                                              CTy"CP15"),
12416                                                                                                                                          MB(MB(MU(Dest
12417                                                                                                                                                     ("SCTLR",
12418                                                                                                                                                      CTy"SCTLR",
12419                                                                                                                                                      Var("v0",
12420                                                                                                                                                          CTy"CP15")),
12421                                                                                                                                                   qTy),
12422                                                                                                                                                Close
12423                                                                                                                                                  (Var("v",
12424                                                                                                                                                       CTy"SCTLR"),
12425                                                                                                                                                   MU(Dest
12426                                                                                                                                                        ("EE",
12427                                                                                                                                                         bTy,
12428                                                                                                                                                         Var("v",
12429                                                                                                                                                             CTy"SCTLR")),
12430                                                                                                                                                      qTy))),
12431                                                                                                                                             Close
12432                                                                                                                                               (bVar"v0",
12433                                                                                                                                                MU(TP[Var("v",
12434                                                                                                                                                          CTy"PSR"),
12435                                                                                                                                                      bVar"v0"],
12436                                                                                                                                                   qTy))))),
12437                                                                                                                                    Close
12438                                                                                                                                      (Var("v",
12439                                                                                                                                           PTy(CTy"PSR",
12440                                                                                                                                               bTy)),
12441                                                                                                                                       MU(Rupd
12442                                                                                                                                            ("E",
12443                                                                                                                                             Var("v",
12444                                                                                                                                                 PTy(CTy"PSR",
12445                                                                                                                                                     bTy))),
12446                                                                                                                                          qTy))),
12447                                                                                                                                 Close
12448                                                                                                                                   (Var("v",
12449                                                                                                                                        CTy"PSR"),
12450                                                                                                                                    MW(Close
12451                                                                                                                                         (qVar"s",
12452                                                                                                                                          Rupd
12453                                                                                                                                            ("CPSR",
12454                                                                                                                                             TP[qVar"s",
12455                                                                                                                                                Var("v",
12456                                                                                                                                                    CTy"PSR")]))))),
12457                                                                                                                              Close
12458                                                                                                                                (AVar
12459                                                                                                                                   uTy,
12460                                                                                                                                 MB(MR(Close
12461                                                                                                                                         (qVar"s",
12462                                                                                                                                          Dest
12463                                                                                                                                            ("CP15",
12464                                                                                                                                             CTy"CP15",
12465                                                                                                                                             qVar"s"))),
12466                                                                                                                                    Close
12467                                                                                                                                      (Var("v",
12468                                                                                                                                           CTy"CP15"),
12469                                                                                                                                       MB(MB(MU(Dest
12470                                                                                                                                                  ("SCTLR",
12471                                                                                                                                                   CTy"SCTLR",
12472                                                                                                                                                   Var("v",
12473                                                                                                                                                       CTy"CP15")),
12474                                                                                                                                                qTy),
12475                                                                                                                                             Close
12476                                                                                                                                               (Var("v",
12477                                                                                                                                                    CTy"SCTLR"),
12478                                                                                                                                                MU(Dest
12479                                                                                                                                                     ("VE",
12480                                                                                                                                                      bTy,
12481                                                                                                                                                      Var("v",
12482                                                                                                                                                          CTy"SCTLR")),
12483                                                                                                                                                   qTy))),
12484                                                                                                                                          Close
12485                                                                                                                                            (bVar"b",
12486                                                                                                                                             ITE(bVar"b",
12487                                                                                                                                                 Call
12488                                                                                                                                                   ("raise'exception",
12489                                                                                                                                                    ATy(qTy,
12490                                                                                                                                                        PTy(uTy,
12491                                                                                                                                                            qTy)),
12492                                                                                                                                                    Call
12493                                                                                                                                                      ("IMPLEMENTATION_DEFINED",
12494                                                                                                                                                       CTy"exception",
12495                                                                                                                                                       LS
12496                                                                                                                                                        "branch to an FIQ vector")),
12497                                                                                                                                                 MB(Call
12498                                                                                                                                                      ("ExcVectorBase",
12499                                                                                                                                                       ATy(qTy,
12500                                                                                                                                                           PTy(F32,
12501                                                                                                                                                               qTy)),
12502                                                                                                                                                       LU),
12503                                                                                                                                                    Close
12504                                                                                                                                                      (Var("v",
12505                                                                                                                                                           F32),
12506                                                                                                                                                       MB(MU(Bop(Add,
12507                                                                                                                                                                 Var("v",
12508                                                                                                                                                                     F32),
12509                                                                                                                                                                 LW(28,
12510                                                                                                                                                                    32)),
12511                                                                                                                                                             qTy),
12512                                                                                                                                                          Close
12513                                                                                                                                                            (Var("v",
12514                                                                                                                                                                 F32),
12515                                                                                                                                                             Call
12516                                                                                                                                                               ("BranchTo",
12517                                                                                                                                                                ATy(qTy,
12518                                                                                                                                                                    PTy(uTy,
12519                                                                                                                                                                        qTy)),
12520                                                                                                                                                                Var("v",
12521                                                                                                                                                                    F32))))))))))))))))))))))))))))))))))))))))))))))))))))))
12522;
12523val TakeHypTrapException_def = Def
12524  ("TakeHypTrapException",AVar uTy,
12525   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
12526      Close
12527        (Var("v",CTy"PSR"),
12528         MB(MB(MU(Dest("T",bTy,Var("v",CTy"PSR")),qTy),
12529               Close
12530                 (bVar"b",
12531                  ITE(bVar"b",
12532                      MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
12533                         Close
12534                           (Var("v",F32),
12535                            MU(Bop(Sub,Var("v",F32),LW(4,32)),qTy))),
12536                      MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
12537                         Close
12538                           (Var("v",F32),
12539                            MU(Bop(Sub,Var("v",F32),LW(8,32)),qTy)))))),
12540            Close
12541              (Var("preferred_exceptn_return",F32),
12542               MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
12543                  Close
12544                    (Var("new_spsr_value",CTy"PSR"),
12545                     Call
12546                       ("EnterHypMode",ATy(qTy,PTy(uTy,qTy)),
12547                        TP[Var("new_spsr_value",CTy"PSR"),
12548                           Var("preferred_exceptn_return",F32),LW(20,32)]))))))))
12549;
12550val WriteHSR_def = Def
12551  ("WriteHSR",TP[Var("ec",FTy 6),Var("HSRString",FTy 25)],
12552   MN(LW(0,32),
12553      MB(MR(Close(Var("s",PTy(F32,qTy)),Mop(Fst,Var("s",PTy(F32,qTy))))),
12554         Close
12555           (Var("v",F32),
12556            MB(MB(MU(BFI(LN 31,LN 26,Var("ec",FTy 6),Var("v",F32)),
12557                     PTy(F32,qTy)),
12558                  Close
12559                    (Var("v",F32),
12560                     MW(Close
12561                          (Var("s",PTy(F32,qTy)),
12562                           TP[Var("v",F32),Mop(Snd,Var("s",PTy(F32,qTy)))])))),
12563               Close
12564                 (AVar uTy,
12565                  MB(ITE(Bop(Or,
12566                             Mop(Not,
12567                                 EQ(EX(Var("ec",FTy 6),LN 5,LN 3,FTy 3),
12568                                    LW(4,3))),
12569                             Bop(And,Bop(Bit,Var("ec",FTy 6),LN 2),
12570                                 Bop(Bit,Var("HSRString",FTy 25),LN 24))),
12571                         MB(MR(Close
12572                                 (Var("s",PTy(F32,qTy)),
12573                                  Mop(Fst,Var("s",PTy(F32,qTy))))),
12574                            Close
12575                              (Var("v",F32),
12576                               MB(MB(MD(Call
12577                                          ("ThisInstrLength",
12578                                           ATy(qTy,PTy(nTy,qTy)),LU),F32),
12579                                     Close
12580                                       (nVar"v0",
12581                                        MB(MB(MU(EQ(nVar"v0",LN 32),
12582                                                 PTy(F32,qTy)),
12583                                              Close
12584                                                (bVar"v",
12585                                                 MU(Mop(Cast F1,bVar"v"),
12586                                                    PTy(F32,qTy)))),
12587                                           Close
12588                                             (Var("v0",F1),
12589                                              MU(BFI(LN 25,LN 25,
12590                                                     Var("v0",F1),
12591                                                     Var("v",F32)),
12592                                                 PTy(F32,qTy)))))),
12593                                  Close
12594                                    (Var("v",F32),
12595                                     MW(Close
12596                                          (Var("s",PTy(F32,qTy)),
12597                                           TP[Var("v",F32),
12598                                              Mop(Snd,
12599                                                  Var("s",PTy(F32,qTy)))])))))),
12600                         MU(LU,PTy(F32,qTy))),
12601                     Close
12602                       (AVar uTy,
12603                        MB(ITE(Bop(And,
12604                                   EQ(EX(Var("ec",FTy 6),LN 5,LN 4,FTy 2),
12605                                      LW(0,2)),
12606                                   Mop(Not,
12607                                       EQ(EX(Var("ec",FTy 6),LN 3,LN 0,F4),
12608                                          LW(0,4)))),
12609                               MB(MD(Call
12610                                       ("CurrentInstrSet",
12611                                        ATy(qTy,PTy(CTy"InstrSet",qTy)),LU),
12612                                     F32),
12613                                  Close
12614                                    (Var("v",CTy"InstrSet"),
12615                                     MB(MU(EQ(Var("v",CTy"InstrSet"),
12616                                              LC("InstrSet_ARM",
12617                                                 CTy"InstrSet")),
12618                                           PTy(F32,qTy)),
12619                                        Close
12620                                          (bVar"b",
12621                                           ITE(bVar"b",
12622                                               MB(MR(Close
12623                                                       (Var("s",
12624                                                            PTy(F32,qTy)),
12625                                                        Mop(Fst,
12626                                                            Var("s",
12627                                                                PTy(F32,
12628                                                                    qTy))))),
12629                                                  Close
12630                                                    (Var("v",F32),
12631                                                     MB(MB(MU(BFI(LN 24,
12632                                                                  LN 24,
12633                                                                  Mop(Cast
12634                                                                        F1,
12635                                                                      LT),
12636                                                                  Var("v",
12637                                                                      F32)),
12638                                                              PTy(F32,qTy)),
12639                                                           Close
12640                                                             (Var("v",F32),
12641                                                              MW(Close
12642                                                                   (Var("s",
12643                                                                        PTy(F32,
12644                                                                            qTy)),
12645                                                                    TP[Var("v",
12646                                                                           F32),
12647                                                                       Mop(Snd,
12648                                                                           Var("s",
12649                                                                               PTy(F32,
12650                                                                                   qTy)))])))),
12651                                                        Close
12652                                                          (AVar uTy,
12653                                                           MB(MR(Close
12654                                                                   (Var("s",
12655                                                                        PTy(F32,
12656                                                                            qTy)),
12657                                                                    Mop(Fst,
12658                                                                        Var("s",
12659                                                                            PTy(F32,
12660                                                                                qTy))))),
12661                                                              Close
12662                                                                (Var("v",
12663                                                                     F32),
12664                                                                 MB(MB(MD(Call
12665                                                                            ("CurrentCond",
12666                                                                             ATy(qTy,
12667                                                                                 PTy(F4,
12668                                                                                     qTy)),
12669                                                                             LU),
12670                                                                          F32),
12671                                                                       Close
12672                                                                         (Var("v0",
12673                                                                              F4),
12674                                                                          MU(BFI(LN
12675                                                                                  23,
12676                                                                                 LN
12677                                                                                  20,
12678                                                                                 Var("v0",
12679                                                                                     F4),
12680                                                                                 Var("v",
12681                                                                                     F32)),
12682                                                                             PTy(F32,
12683                                                                                 qTy)))),
12684                                                                    Close
12685                                                                      (Var("v",
12686                                                                           F32),
12687                                                                       MW(Close
12688                                                                            (Var("s",
12689                                                                                 PTy(F32,
12690                                                                                     qTy)),
12691                                                                             TP[Var("v",
12692                                                                                    F32),
12693                                                                                Mop(Snd,
12694                                                                                    Var("s",
12695                                                                                        PTy(F32,
12696                                                                                            qTy)))])))))))))),
12697                                               MB(MR(Close
12698                                                       (Var("s",
12699                                                            PTy(F32,qTy)),
12700                                                        Mop(Fst,
12701                                                            Var("s",
12702                                                                PTy(F32,
12703                                                                    qTy))))),
12704                                                  Close
12705                                                    (Var("v",F32),
12706                                                     MB(MB(MU(BFI(LN 24,
12707                                                                  LN 24,
12708                                                                  Mop(Cast
12709                                                                        F1,
12710                                                                      LX bTy),
12711                                                                  Var("v",
12712                                                                      F32)),
12713                                                              PTy(F32,qTy)),
12714                                                           Close
12715                                                             (Var("v",F32),
12716                                                              MW(Close
12717                                                                   (Var("s",
12718                                                                        PTy(F32,
12719                                                                            qTy)),
12720                                                                    TP[Var("v",
12721                                                                           F32),
12722                                                                       Mop(Snd,
12723                                                                           Var("s",
12724                                                                               PTy(F32,
12725                                                                                   qTy)))])))),
12726                                                        Close
12727                                                          (AVar uTy,
12728                                                           MB(MR(Close
12729                                                                   (Var("s",
12730                                                                        PTy(F32,
12731                                                                            qTy)),
12732                                                                    Mop(Fst,
12733                                                                        Var("s",
12734                                                                            PTy(F32,
12735                                                                                qTy))))),
12736                                                              Close
12737                                                                (Var("v",
12738                                                                     F32),
12739                                                                 MB(MB(MU(Bop(Bit,
12740                                                                              Var("v",
12741                                                                                  F32),
12742                                                                              LN
12743                                                                               24),
12744                                                                          PTy(F32,
12745                                                                              qTy)),
12746                                                                       Close
12747                                                                         (bVar"b",
12748                                                                          ITE(bVar"b",
12749                                                                              MB(MD(Call
12750                                                                                      ("ConditionPassed",
12751                                                                                       ATy(qTy,
12752                                                                                           PTy(bTy,
12753                                                                                               qTy)),
12754                                                                                       LU),
12755                                                                                    F32),
12756                                                                                 Close
12757                                                                                   (bVar"b",
12758                                                                                    ITE(bVar"b",
12759                                                                                        MB(MR(Close
12760                                                                                                (Var("s",
12761                                                                                                     PTy(F32,
12762                                                                                                         qTy)),
12763                                                                                                 Mop(Fst,
12764                                                                                                     Var("s",
12765                                                                                                         PTy(F32,
12766                                                                                                             qTy))))),
12767                                                                                           Close
12768                                                                                             (Var("v",
12769                                                                                                  F32),
12770                                                                                              MB(MB(ITE(LX bTy,
12771                                                                                                        MD(Call
12772                                                                                                             ("CurrentCond",
12773                                                                                                              ATy(qTy,
12774                                                                                                                  PTy(F4,
12775                                                                                                                      qTy)),
12776                                                                                                              LU),
12777                                                                                                           F32),
12778                                                                                                        MU(LW(14,
12779                                                                                                              4),
12780                                                                                                           PTy(F32,
12781                                                                                                               qTy))),
12782                                                                                                    Close
12783                                                                                                      (Var("v0",
12784                                                                                                           F4),
12785                                                                                                       MU(BFI(LN
12786                                                                                                               23,
12787                                                                                                              LN
12788                                                                                                               20,
12789                                                                                                              Var("v0",
12790                                                                                                                  F4),
12791                                                                                                              Var("v",
12792                                                                                                                  F32)),
12793                                                                                                          PTy(F32,
12794                                                                                                              qTy)))),
12795                                                                                                 Close
12796                                                                                                   (Var("v",
12797                                                                                                        F32),
12798                                                                                                    MW(Close
12799                                                                                                         (Var("s",
12800                                                                                                              PTy(F32,
12801                                                                                                                  qTy)),
12802                                                                                                          TP[Var("v",
12803                                                                                                                 F32),
12804                                                                                                             Mop(Snd,
12805                                                                                                                 Var("s",
12806                                                                                                                     PTy(F32,
12807                                                                                                                         qTy)))])))))),
12808                                                                                        MB(MR(Close
12809                                                                                                (Var("s",
12810                                                                                                     PTy(F32,
12811                                                                                                         qTy)),
12812                                                                                                 Mop(Fst,
12813                                                                                                     Var("s",
12814                                                                                                         PTy(F32,
12815                                                                                                             qTy))))),
12816                                                                                           Close
12817                                                                                             (Var("v",
12818                                                                                                  F32),
12819                                                                                              MB(MB(MD(Call
12820                                                                                                         ("CurrentCond",
12821                                                                                                          ATy(qTy,
12822                                                                                                              PTy(F4,
12823                                                                                                                  qTy)),
12824                                                                                                          LU),
12825                                                                                                       F32),
12826                                                                                                    Close
12827                                                                                                      (Var("v0",
12828                                                                                                           F4),
12829                                                                                                       MU(BFI(LN
12830                                                                                                               23,
12831                                                                                                              LN
12832                                                                                                               20,
12833                                                                                                              Var("v0",
12834                                                                                                                  F4),
12835                                                                                                              Var("v",
12836                                                                                                                  F32)),
12837                                                                                                          PTy(F32,
12838                                                                                                              qTy)))),
12839                                                                                                 Close
12840                                                                                                   (Var("v",
12841                                                                                                        F32),
12842                                                                                                    MW(Close
12843                                                                                                         (Var("s",
12844                                                                                                              PTy(F32,
12845                                                                                                                  qTy)),
12846                                                                                                          TP[Var("v",
12847                                                                                                                 F32),
12848                                                                                                             Mop(Snd,
12849                                                                                                                 Var("s",
12850                                                                                                                     PTy(F32,
12851                                                                                                                         qTy)))]))))))))),
12852                                                                              MU(LU,
12853                                                                                 PTy(F32,
12854                                                                                     qTy))))),
12855                                                                    Close
12856                                                                      (AVar
12857                                                                         uTy,
12858                                                                       MB(MR(Close
12859                                                                               (Var("s",
12860                                                                                    PTy(F32,
12861                                                                                        qTy)),
12862                                                                                Mop(Fst,
12863                                                                                    Var("s",
12864                                                                                        PTy(F32,
12865                                                                                            qTy))))),
12866                                                                          Close
12867                                                                            (Var("v",
12868                                                                                 F32),
12869                                                                             MB(MU(BFI(LN
12870                                                                                        19,
12871                                                                                       LN
12872                                                                                        0,
12873                                                                                       EX(Var("HSRString",
12874                                                                                              FTy 25),
12875                                                                                          LN
12876                                                                                           19,
12877                                                                                          LN
12878                                                                                           0,
12879                                                                                          FTy 20),
12880                                                                                       Var("v",
12881                                                                                           F32)),
12882                                                                                   PTy(F32,
12883                                                                                       qTy)),
12884                                                                                Close
12885                                                                                  (Var("v",
12886                                                                                       F32),
12887                                                                                   MW(Close
12888                                                                                        (Var("s",
12889                                                                                             PTy(F32,
12890                                                                                                 qTy)),
12891                                                                                         TP[Var("v",
12892                                                                                                F32),
12893                                                                                            Mop(Snd,
12894                                                                                                Var("s",
12895                                                                                                    PTy(F32,
12896                                                                                                        qTy)))]))))))))))))))))))),
12897                               MB(MR(Close
12898                                       (Var("s",PTy(F32,qTy)),
12899                                        Mop(Fst,Var("s",PTy(F32,qTy))))),
12900                                  Close
12901                                    (Var("v",F32),
12902                                     MB(MU(BFI(LN 24,LN 0,
12903                                               Var("HSRString",FTy 25),
12904                                               Var("v",F32)),PTy(F32,qTy)),
12905                                        Close
12906                                          (Var("v",F32),
12907                                           MW(Close
12908                                                (Var("s",PTy(F32,qTy)),
12909                                                 TP[Var("v",F32),
12910                                                    Mop(Snd,
12911                                                        Var("s",
12912                                                            PTy(F32,qTy)))]))))))),
12913                           Close
12914                             (AVar uTy,
12915                              MB(MR(Close
12916                                      (Var("s",PTy(F32,qTy)),
12917                                       Dest
12918                                         ("CP15",CTy"CP15",
12919                                          Mop(Snd,Var("s",PTy(F32,qTy)))))),
12920                                 Close
12921                                   (Var("v",CTy"CP15"),
12922                                    MB(MU(Dest
12923                                            ("HSR",CTy"HSR",
12924                                             Var("v",CTy"CP15")),
12925                                          PTy(F32,qTy)),
12926                                       Close
12927                                         (Var("x0",CTy"HSR"),
12928                                          MB(MR(Close
12929                                                  (Var("s",PTy(F32,qTy)),
12930                                                   Dest
12931                                                     ("CP15",CTy"CP15",
12932                                                      Mop(Snd,
12933                                                          Var("s",
12934                                                              PTy(F32,qTy)))))),
12935                                             Close
12936                                               (Var("v",CTy"CP15"),
12937                                                MB(MB(MB(MR(Close
12938                                                              (Var("s",
12939                                                                   PTy(F32,
12940                                                                       qTy)),
12941                                                               Mop(Fst,
12942                                                                   Var("s",
12943                                                                       PTy(F32,
12944                                                                           qTy))))),
12945                                                         Close
12946                                                           (Var("v0",F32),
12947                                                            MB(MB(MU(TP[Var("x0",
12948                                                                            CTy"HSR"),
12949                                                                        Var("v0",
12950                                                                            F32)],
12951                                                                     PTy(F32,
12952                                                                         qTy)),
12953                                                                  Close
12954                                                                    (Var("v",
12955                                                                         PTy(CTy"HSR",
12956                                                                             F32)),
12957                                                                     MU(Call
12958                                                                          ("write'reg'HSR",
12959                                                                           CTy"HSR",
12960                                                                           Var("v",
12961                                                                               PTy(CTy"HSR",
12962                                                                                   F32))),
12963                                                                        PTy(F32,
12964                                                                            qTy)))),
12965                                                               Close
12966                                                                 (Var("v0",
12967                                                                      CTy"HSR"),
12968                                                                  MU(TP[Var("v",
12969                                                                            CTy"CP15"),
12970                                                                        Var("v0",
12971                                                                            CTy"HSR")],
12972                                                                     PTy(F32,
12973                                                                         qTy)))))),
12974                                                      Close
12975                                                        (Var("v",
12976                                                             PTy(CTy"CP15",
12977                                                                 CTy"HSR")),
12978                                                         MU(Rupd
12979                                                              ("HSR",
12980                                                               Var("v",
12981                                                                   PTy(CTy"CP15",
12982                                                                       CTy"HSR"))),
12983                                                            PTy(F32,qTy)))),
12984                                                   Close
12985                                                     (Var("v",CTy"CP15"),
12986                                                      MW(Close
12987                                                           (Var("s",
12988                                                                PTy(F32,
12989                                                                    qTy)),
12990                                                            TP[Mop(Fst,
12991                                                                   Var("s",
12992                                                                       PTy(F32,
12993                                                                           qTy))),
12994                                                               Rupd
12995                                                                 ("CP15",
12996                                                                  TP[Mop(Snd,
12997                                                                         Var("s",
12998                                                                             PTy(F32,
12999                                                                                 qTy))),
13000                                                                     Var("v",
13001                                                                         CTy"CP15")])]))))))))))))))))))))
13002;
13003val CallSupervisor_def = Def
13004  ("CallSupervisor",Var("immediate",F16),
13005   MB(Call("CurrentModeIsHyp",ATy(qTy,PTy(bTy,qTy)),LU),
13006      Close
13007        (bVar"v",
13008         MB(MB(ITE(bVar"v",MU(LT,qTy),
13009                   MB(Call("HaveVirtExt",ATy(qTy,PTy(bTy,qTy)),LU),
13010                      Close
13011                        (bVar"v",
13012                         MB(MB(ITE(bVar"v",
13013                                   MB(Call
13014                                        ("IsSecure",ATy(qTy,PTy(bTy,qTy)),
13015                                         LU),
13016                                      Close
13017                                        (bVar"v",MU(Mop(Not,bVar"v"),qTy))),
13018                                   MU(LF,qTy)),
13019                               Close
13020                                 (bVar"b",
13021                                  ITE(bVar"b",
13022                                      MB(Call
13023                                           ("CurrentModeIsNotUser",
13024                                            ATy(qTy,PTy(bTy,qTy)),LU),
13025                                         Close
13026                                           (bVar"v",
13027                                            MU(Mop(Not,bVar"v"),qTy))),
13028                                      MU(LF,qTy)))),
13029                            Close
13030                              (bVar"b",
13031                               ITE(bVar"b",
13032                                   MB(MR(Close
13033                                           (qVar"s",
13034                                            Dest("CP15",CTy"CP15",qVar"s"))),
13035                                      Close
13036                                        (Var("v",CTy"CP15"),
13037                                         MB(MU(Dest
13038                                                 ("HCR",CTy"HCR",
13039                                                  Var("v",CTy"CP15")),qTy),
13040                                            Close
13041                                              (Var("v",CTy"HCR"),
13042                                               MU(Dest
13043                                                    ("TGE",bTy,
13044                                                     Var("v",CTy"HCR")),
13045                                                  qTy))))),MU(LF,qTy))))))),
13046               Close
13047                 (bVar"b",
13048                  ITE(bVar"b",
13049                      MN(LW(0,25),
13050                         MB(MR(Close
13051                                 (Var("s",PTy(FTy 25,qTy)),
13052                                  Mop(Fst,Var("s",PTy(FTy 25,qTy))))),
13053                            Close
13054                              (Var("v",FTy 25),
13055                               MB(MB(MB(MD(Call
13056                                             ("CurrentCond",
13057                                              ATy(qTy,PTy(F4,qTy)),LU),
13058                                           FTy 25),
13059                                        Close
13060                                          (Var("v0",F4),
13061                                           MB(MB(MU(EQ(Var("v0",F4),
13062                                                       LW(14,4)),
13063                                                    PTy(FTy 25,qTy)),
13064                                                 Close
13065                                                   (bVar"b",
13066                                                    MU(ITE(bVar"b",
13067                                                           Var("immediate",
13068                                                               F16),LX F16),
13069                                                       PTy(FTy 25,qTy)))),
13070                                              Close
13071                                                (Var("v0",F16),
13072                                                 MU(BFI(LN 15,LN 0,
13073                                                        Var("v0",F16),
13074                                                        Var("v",FTy 25)),
13075                                                    PTy(FTy 25,qTy)))))),
13076                                     Close
13077                                       (Var("v",FTy 25),
13078                                        MW(Close
13079                                             (Var("s",PTy(FTy 25,qTy)),
13080                                              TP[Var("v",FTy 25),
13081                                                 Mop(Snd,
13082                                                     Var("s",
13083                                                         PTy(FTy 25,qTy)))])))),
13084                                  Close
13085                                    (AVar uTy,
13086                                     MB(MR(Close
13087                                             (Var("s",PTy(FTy 25,qTy)),
13088                                              Mop(Fst,
13089                                                  Var("s",PTy(FTy 25,qTy))))),
13090                                        Close
13091                                          (Var("v",FTy 25),
13092                                           MB(MU(TP[LW(18,6),
13093                                                    Var("v",FTy 25)],
13094                                                 PTy(FTy 25,qTy)),
13095                                              Close
13096                                                (Var("v",PTy(FTy 6,FTy 25)),
13097                                                 MD(Call
13098                                                      ("WriteHSR",
13099                                                       ATy(qTy,
13100                                                           PTy(uTy,qTy)),
13101                                                       Var("v",
13102                                                           PTy(FTy 6,
13103                                                               FTy 25))),
13104                                                    FTy 25)))))))))),
13105                      MU(LU,qTy)))),
13106            Close
13107              (AVar uTy,Call("TakeSVCException",ATy(qTy,PTy(uTy,qTy)),LU))))))
13108;
13109val CallHypervisor_def = Def
13110  ("CallHypervisor",Var("immediate",F16),
13111   MB(Call
13112        ("WriteHSR",ATy(qTy,PTy(uTy,qTy)),
13113         TP[LW(18,6),CC[Var("immediate",F16),LW(0,9)]]),
13114      Close(AVar uTy,Call("TakeHVCException",ATy(qTy,PTy(uTy,qTy)),LU))))
13115;
13116val BankedRegisterAccessValid_def = Def
13117  ("BankedRegisterAccessValid",TP[Var("SYSm",FTy 5),Var("mode",FTy 5)],
13118   ITB([(EQ(EX(Var("SYSm",FTy 5),LN 4,LN 3,FTy 2),LW(0,2)),
13119         ITB([(EQ(EX(Var("SYSm",FTy 5),LN 2,LN 0,FTy 3),LW(7,3)),
13120               Call
13121                 ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
13122                  Call
13123                    ("UNPREDICTABLE",CTy"exception",
13124                     LS"BankedRegisterAccessValid"))),
13125              (EQ(EX(Var("SYSm",FTy 5),LN 2,LN 0,FTy 3),LW(6,3)),
13126               ITE(Bop(In,Var("mode",FTy 5),SL[LW(26,5),LW(31,5)]),
13127                   Call
13128                     ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
13129                      Call
13130                        ("UNPREDICTABLE",CTy"exception",
13131                         LS"BankedRegisterAccessValid")),MU(LU,qTy))),
13132              (EQ(EX(Var("SYSm",FTy 5),LN 2,LN 0,FTy 3),LW(5,3)),
13133               ITE(EQ(Var("mode",FTy 5),LW(31,5)),
13134                   Call
13135                     ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
13136                      Call
13137                        ("UNPREDICTABLE",CTy"exception",
13138                         LS"BankedRegisterAccessValid")),MU(LU,qTy))),
13139              (Mop(Not,EQ(Var("mode",FTy 5),LW(17,5))),
13140               Call
13141                 ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
13142                  Call
13143                    ("UNPREDICTABLE",CTy"exception",
13144                     LS"BankedRegisterAccessValid")))],MU(LU,qTy))),
13145        (EQ(EX(Var("SYSm",FTy 5),LN 4,LN 3,FTy 2),LW(1,2)),
13146         MB(MR(Close(qVar"s",Dest("CP15",CTy"CP15",qVar"s"))),
13147            Close
13148              (Var("v",CTy"CP15"),
13149               MB(MB(MB(MB(MU(Dest("NSACR",CTy"NSACR",Var("v",CTy"CP15")),
13150                              qTy),
13151                           Close
13152                             (Var("v",CTy"NSACR"),
13153                              MU(Dest("RFR",bTy,Var("v",CTy"NSACR")),qTy))),
13154                        Close
13155                          (bVar"b",
13156                           ITE(bVar"b",
13157                               MB(Call
13158                                    ("IsSecure",ATy(qTy,PTy(bTy,qTy)),LU),
13159                                  Close(bVar"v",MU(Mop(Not,bVar"v"),qTy))),
13160                               MU(LF,qTy)))),
13161                     Close
13162                       (bVar"v",
13163                        MU(Bop(Or,
13164                               Bop(Or,
13165                                   EQ(EX(Var("SYSm",FTy 5),LN 2,LN 0,FTy 3),
13166                                      LW(7,3)),
13167                                   EQ(Var("mode",FTy 5),LW(17,5))),bVar"v"),
13168                           qTy))),
13169                  Close
13170                    (bVar"b",
13171                     ITE(bVar"b",
13172                         Call
13173                           ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
13174                            Call
13175                              ("UNPREDICTABLE",CTy"exception",
13176                               LS"BankedRegisterAccessValid")),MU(LU,qTy))))))),
13177        (EQ(EX(Var("SYSm",FTy 5),LN 4,LN 3,FTy 2),LW(3,2)),
13178         ITB([(Mop(Not,Bop(Bit,Var("SYSm",FTy 5),LN 2)),
13179               Call
13180                 ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
13181                  Call
13182                    ("UNPREDICTABLE",CTy"exception",
13183                     LS"BankedRegisterAccessValid"))),
13184              (Mop(Not,Bop(Bit,Var("SYSm",FTy 5),LN 1)),
13185               MB(Call("IsSecure",ATy(qTy,PTy(bTy,qTy)),LU),
13186                  Close
13187                    (bVar"v",
13188                     MB(MB(MU(Mop(Not,bVar"v"),qTy),
13189                           Close
13190                             (bVar"b",
13191                              MU(Bop(Or,bVar"b",
13192                                     EQ(Var("mode",FTy 5),LW(22,5))),qTy))),
13193                        Close
13194                          (bVar"b",
13195                           ITE(bVar"b",
13196                               Call
13197                                 ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
13198                                  Call
13199                                    ("UNPREDICTABLE",CTy"exception",
13200                                     LS"BankedRegisterAccessValid")),
13201                               MU(LU,qTy))))))),
13202              (Mop(Not,EQ(Var("mode",FTy 5),LW(22,5))),
13203               Call
13204                 ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
13205                  Call
13206                    ("UNPREDICTABLE",CTy"exception",
13207                     LS"BankedRegisterAccessValid")))],MU(LU,qTy)))],
13208       MU(LU,qTy)))
13209;
13210val SPSRAccessValid_def = Def
13211  ("SPSRAccessValid",TP[Var("SYSm",FTy 5),Var("mode",FTy 5)],
13212   CS(Var("SYSm",FTy 5),
13213      [(LW(14,5),
13214        MB(Call("IsSecure",ATy(qTy,PTy(bTy,qTy)),LU),
13215           Close
13216             (bVar"v",
13217              MB(MB(MB(MU(Mop(Not,bVar"v"),qTy),
13218                       Close
13219                         (bVar"b",
13220                          ITE(bVar"b",
13221                              MB(MR(Close
13222                                      (qVar"s",
13223                                       Dest("CP15",CTy"CP15",qVar"s"))),
13224                                 Close
13225                                   (Var("v",CTy"CP15"),
13226                                    MB(MU(Dest
13227                                            ("NSACR",CTy"NSACR",
13228                                             Var("v",CTy"CP15")),qTy),
13229                                       Close
13230                                         (Var("v",CTy"NSACR"),
13231                                          MU(Dest
13232                                               ("RFR",bTy,
13233                                                Var("v",CTy"NSACR")),qTy))))),
13234                              MU(LF,qTy)))),
13235                    Close
13236                      (bVar"b",
13237                       MU(Bop(Or,bVar"b",EQ(Var("mode",FTy 5),LW(17,5))),
13238                          qTy))),
13239                 Close
13240                   (bVar"b",
13241                    ITE(bVar"b",
13242                        Call
13243                          ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
13244                           Call
13245                             ("UNPREDICTABLE",CTy"exception",
13246                              LS"SPSRAccessValid")),MU(LU,qTy))))))),
13247       (LW(16,5),
13248        ITE(EQ(Var("mode",FTy 5),LW(18,5)),
13249            Call
13250              ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
13251               Call("UNPREDICTABLE",CTy"exception",LS"SPSRAccessValid")),
13252            MU(LU,qTy))),
13253       (LW(18,5),
13254        ITE(EQ(Var("mode",FTy 5),LW(19,5)),
13255            Call
13256              ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
13257               Call("UNPREDICTABLE",CTy"exception",LS"SPSRAccessValid")),
13258            MU(LU,qTy))),
13259       (LW(20,5),
13260        ITE(EQ(Var("mode",FTy 5),LW(23,5)),
13261            Call
13262              ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
13263               Call("UNPREDICTABLE",CTy"exception",LS"SPSRAccessValid")),
13264            MU(LU,qTy))),
13265       (LW(22,5),
13266        ITE(EQ(Var("mode",FTy 5),LW(27,5)),
13267            Call
13268              ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
13269               Call("UNPREDICTABLE",CTy"exception",LS"SPSRAccessValid")),
13270            MU(LU,qTy))),
13271       (LW(28,5),
13272        MB(Call("IsSecure",ATy(qTy,PTy(bTy,qTy)),LU),
13273           Close
13274             (bVar"v",
13275              MB(MB(MU(Mop(Not,bVar"v"),qTy),
13276                    Close
13277                      (bVar"v",
13278                       MU(Bop(Or,EQ(Var("mode",FTy 5),LW(22,5)),bVar"v"),
13279                          qTy))),
13280                 Close
13281                   (bVar"b",
13282                    ITE(bVar"b",
13283                        Call
13284                          ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
13285                           Call
13286                             ("UNPREDICTABLE",CTy"exception",
13287                              LS"SPSRAccessValid")),MU(LU,qTy))))))),
13288       (LW(30,5),
13289        ITE(Mop(Not,EQ(Var("mode",FTy 5),LW(22,5))),
13290            Call
13291              ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
13292               Call("UNPREDICTABLE",CTy"exception",LS"SPSRAccessValid")),
13293            MU(LU,qTy))),
13294       (AVar(FTy 5),
13295        Call
13296          ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
13297           Call("UNPREDICTABLE",CTy"exception",LS"SPSRAccessValid")))]))
13298;
13299val dfn'BranchTarget_def = Def
13300  ("dfn'BranchTarget",Var("imm32",F32),
13301   MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
13302      Close
13303        (Var("v",F32),
13304         MB(MU(Bop(Add,Var("v",F32),Var("imm32",F32)),qTy),
13305            Close
13306              (Var("v",F32),
13307               Call("BranchWritePC",ATy(qTy,PTy(uTy,qTy)),Var("v",F32)))))))
13308;
13309val dfn'BranchExchange_def = Def
13310  ("dfn'BranchExchange",Var("m",F4),
13311   MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
13312      Close
13313        (Var("v",F32),Call("BXWritePC",ATy(qTy,PTy(uTy,qTy)),Var("v",F32)))))
13314;
13315val dfn'BranchLinkExchangeImmediate_def = Def
13316  ("dfn'BranchLinkExchangeImmediate",
13317   TP[Var("targetInstrSet",CTy"InstrSet"),Var("imm32",F32)],
13318   MB(Call("CurrentInstrSet",ATy(qTy,PTy(CTy"InstrSet",qTy)),LU),
13319      Close
13320        (Var("v",CTy"InstrSet"),
13321         MB(MB(MU(EQ(Var("v",CTy"InstrSet"),
13322                     LC("InstrSet_ARM",CTy"InstrSet")),qTy),
13323               Close
13324                 (bVar"b",
13325                  ITE(bVar"b",
13326                      MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
13327                         Close
13328                           (Var("v",F32),
13329                            MB(MU(Bop(Sub,Var("v",F32),LW(4,32)),qTy),
13330                               Close
13331                                 (Var("v",F32),
13332                                  Call
13333                                    ("write'LR",ATy(qTy,PTy(uTy,qTy)),
13334                                     Var("v",F32)))))),
13335                      MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
13336                         Close
13337                           (Var("v",F32),
13338                            MB(MB(MU(EX(Var("v",F32),LN 31,LN 1,FTy 31),
13339                                     qTy),
13340                                  Close
13341                                    (Var("v",FTy 31),
13342                                     MU(CC[Var("v",FTy 31),LW(1,1)],qTy))),
13343                               Close
13344                                 (Var("v",F32),
13345                                  Call
13346                                    ("write'LR",ATy(qTy,PTy(uTy,qTy)),
13347                                     Var("v",F32))))))))),
13348            Close
13349              (AVar uTy,
13350               MB(ITE(EQ(Var("targetInstrSet",CTy"InstrSet"),
13351                         LC("InstrSet_ARM",CTy"InstrSet")),
13352                      MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
13353                         Close
13354                           (Var("v",F32),
13355                            MB(MB(MU(TP[Var("v",F32),LN 4],qTy),
13356                                  Close
13357                                    (Var("v",PTy(F32,nTy)),
13358                                     MU(Call
13359                                          ("Align",F32,
13360                                           Var("v",PTy(F32,nTy))),qTy))),
13361                               Close
13362                                 (Var("v",F32),
13363                                  MU(Bop(Add,Var("v",F32),Var("imm32",F32)),
13364                                     qTy))))),
13365                      MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
13366                         Close
13367                           (Var("v",F32),
13368                            MU(Bop(Add,Var("v",F32),Var("imm32",F32)),qTy)))),
13369                  Close
13370                    (Var("targetAddress",F32),
13371                     MB(Call
13372                          ("SelectInstrSet",ATy(qTy,PTy(uTy,qTy)),
13373                           Var("targetInstrSet",CTy"InstrSet")),
13374                        Close
13375                          (AVar uTy,
13376                           Call
13377                             ("BranchWritePC",ATy(qTy,PTy(uTy,qTy)),
13378                              Var("targetAddress",F32)))))))))))
13379;
13380val dfn'BranchLinkExchangeRegister_def = Def
13381  ("dfn'BranchLinkExchangeRegister",Var("m",F4),
13382   MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
13383      Close
13384        (Var("target",F32),
13385         MB(Call("CurrentInstrSet",ATy(qTy,PTy(CTy"InstrSet",qTy)),LU),
13386            Close
13387              (Var("v",CTy"InstrSet"),
13388               MB(MB(MU(EQ(Var("v",CTy"InstrSet"),
13389                           LC("InstrSet_ARM",CTy"InstrSet")),qTy),
13390                     Close
13391                       (bVar"b",
13392                        ITE(bVar"b",
13393                            MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
13394                               Close
13395                                 (Var("v",F32),
13396                                  MB(MU(Bop(Sub,Var("v",F32),LW(4,32)),qTy),
13397                                     Close
13398                                       (Var("next_instr_addr",F32),
13399                                        Call
13400                                          ("write'LR",
13401                                           ATy(qTy,PTy(uTy,qTy)),
13402                                           Var("next_instr_addr",F32)))))),
13403                            MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
13404                               Close
13405                                 (Var("v",F32),
13406                                  MB(MU(Bop(Sub,Var("v",F32),LW(2,32)),qTy),
13407                                     Close
13408                                       (Var("next_instr_addr",F32),
13409                                        Call
13410                                          ("write'LR",
13411                                           ATy(qTy,PTy(uTy,qTy)),
13412                                           CC[EX(Var("next_instr_addr",F32),
13413                                                 LN 31,LN 1,FTy 31),
13414                                              LW(1,1)])))))))),
13415                  Close
13416                    (AVar uTy,
13417                     Call
13418                       ("BXWritePC",ATy(qTy,PTy(uTy,qTy)),
13419                        Var("target",F32)))))))))
13420;
13421val dfn'CompareBranch_def = Def
13422  ("dfn'CompareBranch",TP[bVar"nonzero",Var("n",F4),Var("imm32",F32)],
13423   MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
13424      Close
13425        (Var("v",F32),
13426         MB(MB(MB(MU(EQ(Var("v",F32),LW(0,32)),qTy),
13427                  Close(bVar"v",MU(EQ(bVar"nonzero",bVar"v"),qTy))),
13428               Close(bVar"v",MU(Mop(Not,bVar"v"),qTy))),
13429            Close
13430              (bVar"b",
13431               ITE(bVar"b",
13432                   MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
13433                      Close
13434                        (Var("v",F32),
13435                         MB(MU(Bop(Add,Var("v",F32),Var("imm32",F32)),qTy),
13436                            Close
13437                              (Var("v",F32),
13438                               Call
13439                                 ("BranchWritePC",ATy(qTy,PTy(uTy,qTy)),
13440                                  Var("v",F32)))))),
13441                   Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU)))))))
13442;
13443val dfn'TableBranchByte_def = Def
13444  ("dfn'TableBranchByte",TP[bVar"is_tbh",Var("m",F4),Var("n",F4)],
13445   MB(Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
13446      Close
13447        (bVar"b",
13448         ITE(bVar"b",
13449             MB(ITE(bVar"is_tbh",
13450                    MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
13451                       Close
13452                         (Var("v",F32),
13453                          MB(MB(MB(Call
13454                                     ("R",ATy(qTy,PTy(F32,qTy)),
13455                                      Var("m",F4)),
13456                                   Close
13457                                     (Var("v0",F32),
13458                                      MB(MB(MU(TP[Var("v0",F32),LN 1],qTy),
13459                                            Close
13460                                              (Var("v",PTy(F32,nTy)),
13461                                               Call
13462                                                 ("LSL",
13463                                                  ATy(qTy,PTy(F32,qTy)),
13464                                                  Var("v",PTy(F32,nTy))))),
13465                                         Close
13466                                           (Var("v0",F32),
13467                                            MU(Bop(Add,Var("v",F32),
13468                                                   Var("v0",F32)),qTy))))),
13469                                Close
13470                                  (Var("v",F32),
13471                                   MU(TP[Var("v",F32),LN 2],qTy))),
13472                             Close
13473                               (Var("v",PTy(F32,nTy)),
13474                                Call
13475                                  ("MemU",ATy(qTy,PTy(F16,qTy)),
13476                                   Var("v",PTy(F32,nTy))))))),
13477                    MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
13478                       Close
13479                         (Var("v",F32),
13480                          MB(MB(MB(Call
13481                                     ("R",ATy(qTy,PTy(F32,qTy)),
13482                                      Var("m",F4)),
13483                                   Close
13484                                     (Var("v0",F32),
13485                                      MU(Bop(Add,Var("v",F32),
13486                                             Var("v0",F32)),qTy))),
13487                                Close
13488                                  (Var("v",F32),
13489                                   MU(TP[Var("v",F32),LN 1],qTy))),
13490                             Close
13491                               (Var("v",PTy(F32,nTy)),
13492                                Call
13493                                  ("MemU",ATy(qTy,PTy(F16,qTy)),
13494                                   Var("v",PTy(F32,nTy)))))))),
13495                Close
13496                  (Var("halfwords",F16),
13497                   MB(MR(Close(qVar"s",Dest("data_abort",bTy,qVar"s"))),
13498                      Close
13499                        (bVar"b",
13500                         ITE(bVar"b",
13501                             Call
13502                               ("TakeDataAbortException",
13503                                ATy(qTy,PTy(uTy,qTy)),LU),
13504                             MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
13505                                Close
13506                                  (Var("v",F32),
13507                                   MB(MU(Bop(Add,Var("v",F32),
13508                                             Bop(Mul,LW(2,32),
13509                                                 Mop(Cast F32,
13510                                                     Var("halfwords",F16)))),
13511                                         qTy),
13512                                      Close
13513                                        (Var("v",F32),
13514                                         Call
13515                                           ("BranchWritePC",
13516                                            ATy(qTy,PTy(uTy,qTy)),
13517                                            Var("v",F32))))))))))),
13518             MU(LU,qTy)))))
13519;
13520val dfn'CheckArray_def = Def
13521  ("dfn'CheckArray",TP[Var("m",F4),Var("n",F4)],
13522   MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
13523      Close
13524        (Var("v",F32),
13525         MB(MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
13526               Close
13527                 (Var("v0",F32),
13528                  MU(Bop(Ule,Var("v",F32),Var("v0",F32)),qTy))),
13529            Close
13530              (bVar"b",
13531               ITE(bVar"b",
13532                   MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
13533                      Close
13534                        (Var("v",F32),
13535                         MB(MB(MB(MU(EX(Var("v",F32),LN 31,LN 1,FTy 31),
13536                                     qTy),
13537                                  Close
13538                                    (Var("v",FTy 31),
13539                                     MU(CC[Var("v",FTy 31),LW(1,1)],qTy))),
13540                               Close
13541                                 (Var("v",F32),
13542                                  Call
13543                                    ("write'LR",ATy(qTy,PTy(uTy,qTy)),
13544                                     Var("v",F32)))),
13545                            Close
13546                              (AVar uTy,
13547                               MB(Call
13548                                    ("write'ITSTATE",
13549                                     ATy(qTy,PTy(uTy,qTy)),LW(0,8)),
13550                                  Close
13551                                    (AVar uTy,
13552                                     MB(MR(Close
13553                                             (qVar"s",
13554                                              Dest
13555                                                ("CP14",CTy"CP14",qVar"s"))),
13556                                        Close
13557                                          (Var("v",CTy"CP14"),
13558                                           MB(MB(MU(Dest
13559                                                      ("TEEHBR",F32,
13560                                                       Var("v",CTy"CP14")),
13561                                                    qTy),
13562                                                 Close
13563                                                   (Var("v",F32),
13564                                                    MU(Bop(Sub,
13565                                                           Var("v",F32),
13566                                                           LW(8,32)),qTy))),
13567                                              Close
13568                                                (Var("v",F32),
13569                                                 Call
13570                                                   ("BranchWritePC",
13571                                                    ATy(qTy,PTy(uTy,qTy)),
13572                                                    Var("v",F32)))))))))))),
13573                   Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU)))))))
13574;
13575val dfn'HandlerBranchLink_def = Def
13576  ("dfn'HandlerBranchLink",
13577   TP[bVar"generate_link",Var("handler_offset",F32)],
13578   MB(ITE(bVar"generate_link",
13579          MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
13580             Close
13581               (Var("v",F32),
13582                MB(MU(Bop(Sub,Var("v",F32),LW(2,32)),qTy),
13583                   Close
13584                     (Var("next_instr_addr",F32),
13585                      Call
13586                        ("write'LR",ATy(qTy,PTy(uTy,qTy)),
13587                         CC[EX(Var("next_instr_addr",F32),LN 31,LN 1,
13588                               FTy 31),LW(1,1)]))))),MU(LU,qTy)),
13589      Close
13590        (AVar uTy,
13591         MB(MR(Close(qVar"s",Dest("CP14",CTy"CP14",qVar"s"))),
13592            Close
13593              (Var("v",CTy"CP14"),
13594               MB(MB(MU(Dest("TEEHBR",F32,Var("v",CTy"CP14")),qTy),
13595                     Close
13596                       (Var("v",F32),
13597                        MU(Bop(Add,Var("v",F32),Var("handler_offset",F32)),
13598                           qTy))),
13599                  Close
13600                    (Var("v",F32),
13601                     Call
13602                       ("BranchWritePC",ATy(qTy,PTy(uTy,qTy)),Var("v",F32)))))))))
13603;
13604val dfn'HandlerBranchLinkParameter_def = Def
13605  ("dfn'HandlerBranchLinkParameter",
13606   TP[Var("imm32",F32),Var("handler_offset",F32)],
13607   MB(Call("write'R",ATy(qTy,PTy(uTy,qTy)),TP[Var("imm32",F32),LW(8,4)]),
13608      Close
13609        (AVar uTy,
13610         MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
13611            Close
13612              (Var("v",F32),
13613               MB(MU(Bop(Sub,Var("v",F32),LW(2,32)),qTy),
13614                  Close
13615                    (Var("next_instr_addr",F32),
13616                     MB(Call
13617                          ("write'LR",ATy(qTy,PTy(uTy,qTy)),
13618                           CC[EX(Var("next_instr_addr",F32),LN 31,LN 1,
13619                                 FTy 31),LW(1,1)]),
13620                        Close
13621                          (AVar uTy,
13622                           MB(MR(Close
13623                                   (qVar"s",Dest("CP14",CTy"CP14",qVar"s"))),
13624                              Close
13625                                (Var("v",CTy"CP14"),
13626                                 MB(MB(MU(Dest
13627                                            ("TEEHBR",F32,
13628                                             Var("v",CTy"CP14")),qTy),
13629                                       Close
13630                                         (Var("v",F32),
13631                                          MU(Bop(Add,Var("v",F32),
13632                                                 Var("handler_offset",F32)),
13633                                             qTy))),
13634                                    Close
13635                                      (Var("v",F32),
13636                                       Call
13637                                         ("BranchWritePC",
13638                                          ATy(qTy,PTy(uTy,qTy)),
13639                                          Var("v",F32)))))))))))))))
13640;
13641val dfn'HandlerBranchParameter_def = Def
13642  ("dfn'HandlerBranchParameter",
13643   TP[Var("imm32",F32),Var("handler_offset",F32)],
13644   MB(Call("write'R",ATy(qTy,PTy(uTy,qTy)),TP[Var("imm32",F32),LW(8,4)]),
13645      Close
13646        (AVar uTy,
13647         MB(MR(Close(qVar"s",Dest("CP14",CTy"CP14",qVar"s"))),
13648            Close
13649              (Var("v",CTy"CP14"),
13650               MB(MB(MU(Dest("TEEHBR",F32,Var("v",CTy"CP14")),qTy),
13651                     Close
13652                       (Var("v",F32),
13653                        MU(Bop(Add,Var("v",F32),Var("handler_offset",F32)),
13654                           qTy))),
13655                  Close
13656                    (Var("v",F32),
13657                     Call
13658                       ("BranchWritePC",ATy(qTy,PTy(uTy,qTy)),Var("v",F32)))))))))
13659;
13660val dfn'EnterxLeavex_def = Def
13661  ("dfn'EnterxLeavex",bVar"is_enterx",
13662   ITE(bVar"is_enterx",
13663       MB(Call("CurrentModeIsHyp",ATy(qTy,PTy(bTy,qTy)),LU),
13664          Close
13665            (bVar"b",
13666             ITE(bVar"b",
13667                 Call("TakeUndefInstrException",ATy(qTy,PTy(uTy,qTy)),LU),
13668                 MB(Call
13669                      ("SelectInstrSet",ATy(qTy,PTy(uTy,qTy)),
13670                       LC("InstrSet_ThumbEE",CTy"InstrSet")),
13671                    Close(AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU)))))),
13672       MB(Call
13673            ("SelectInstrSet",ATy(qTy,PTy(uTy,qTy)),
13674             LC("InstrSet_Thumb",CTy"InstrSet")),
13675          Close(AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU)))))
13676;
13677val dfn'IfThen_def = Def
13678  ("dfn'IfThen",TP[Var("firstcond",F4),Var("mask",F4)],
13679   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
13680      Close
13681        (Var("v",CTy"PSR"),
13682         MB(MB(MB(MU(TP[Var("v",CTy"PSR"),
13683                        CC[Var("firstcond",F4),Var("mask",F4)]],qTy),
13684                  Close
13685                    (Var("v",PTy(CTy"PSR",F8)),
13686                     MU(Rupd("IT",Var("v",PTy(CTy"PSR",F8))),qTy))),
13687               Close
13688                 (Var("v",CTy"PSR"),
13689                  MW(Close
13690                       (qVar"s",Rupd("CPSR",TP[qVar"s",Var("v",CTy"PSR")]))))),
13691            Close
13692              (AVar uTy,
13693               MB(Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU),
13694                  Close
13695                    (AVar uTy,
13696                     MW(Close
13697                          (qVar"s",
13698                           Rupd
13699                             ("Encoding",
13700                              TP[qVar"s",LC("Encoding_ARM",CTy"Encoding")]))))))))))
13701;
13702val dfn'CountLeadingZeroes_def = Def
13703  ("dfn'CountLeadingZeroes",TP[Var("d",F4),Var("m",F4)],
13704   MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
13705      Close
13706        (Var("v",F32),
13707         MB(MB(MB(MB(MU(Call("CountLeadingZeroBits",nTy,Var("v",F32)),qTy),
13708                     Close(nVar"v",MU(Mop(Cast F32,nVar"v"),qTy))),
13709                  Close(Var("v",F32),MU(TP[Var("v",F32),Var("d",F4)],qTy))),
13710               Close
13711                 (Var("v",PTy(F32,F4)),
13712                  Call
13713                    ("write'R",ATy(qTy,PTy(uTy,qTy)),Var("v",PTy(F32,F4))))),
13714            Close(AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))))
13715;
13716val dfn'MoveHalfword_def = Def
13717  ("dfn'MoveHalfword",TP[bVar"high",Var("d",F4),Var("imm16",F16)],
13718   MB(ITE(bVar"high",
13719          MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("d",F4)),
13720             Close
13721               (Var("w",F32),
13722                Call
13723                  ("write'R",ATy(qTy,PTy(uTy,qTy)),
13724                   TP[BFI(LN 31,LN 16,Var("imm16",F16),Var("w",F32)),
13725                      Var("d",F4)]))),
13726          Call
13727            ("write'R",ATy(qTy,PTy(uTy,qTy)),
13728             TP[Mop(Cast F32,Var("imm16",F16)),Var("d",F4)])),
13729      Close(AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))
13730;
13731val DataProcessing_def = Def
13732  ("DataProcessing",
13733   TP[Var("opc",F4),bVar"setflags",Var("d",F4),Var("n",F4),
13734      Var("imm32",F32),bVar"C"],
13735   MB(ITB([(Bop(Or,EQ(Var("opc",F4),LW(13,4)),
13736                Bop(And,EQ(Var("opc",F4),LW(15,4)),
13737                    EQ(Var("n",F4),LW(15,4)))),MU(LW(0,32),qTy)),
13738           (Bop(And,
13739                Bop(And,Bop(In,Var("opc",F4),SL[LW(4,4),LW(2,4)]),
13740                    EQ(Var("n",F4),LW(15,4))),Mop(Not,bVar"setflags")),
13741            MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
13742               Close
13743                 (Var("v",F32),
13744                  MB(MU(TP[Var("v",F32),LN 4],qTy),
13745                     Close
13746                       (Var("v",PTy(F32,nTy)),
13747                        MU(Call("Align",F32,Var("v",PTy(F32,nTy))),qTy))))))],
13748          Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4))),
13749      Close
13750        (Var("rn",F32),
13751         Let(TP[Var("result",F32),bVar"carry",bVar"overflow"],
13752             Call
13753               ("DataProcessingALU",PTy(F32,PTy(bTy,bTy)),
13754                TP[Var("opc",F4),Var("rn",F32),Var("imm32",F32),bVar"C"]),
13755             MB(ITE(Mop(Not,EQ(EX(Var("opc",F4),LN 3,LN 2,FTy 2),LW(2,2))),
13756                    Call
13757                      ("write'R",ATy(qTy,PTy(uTy,qTy)),
13758                       TP[Var("result",F32),Var("d",F4)]),MU(LU,qTy)),
13759                Close
13760                  (AVar uTy,
13761                   MB(ITE(bVar"setflags",
13762                          MB(MR(Close
13763                                  (qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
13764                             Close
13765                               (Var("v",CTy"PSR"),
13766                                MB(MB(MB(MU(TP[Var("v",CTy"PSR"),
13767                                               Bop(Bit,Var("result",F32),
13768                                                   LN 31)],qTy),
13769                                         Close
13770                                           (Var("v",PTy(CTy"PSR",bTy)),
13771                                            MU(Rupd
13772                                                 ("N",
13773                                                  Var("v",
13774                                                      PTy(CTy"PSR",bTy))),
13775                                               qTy))),
13776                                      Close
13777                                        (Var("v",CTy"PSR"),
13778                                         MW(Close
13779                                              (qVar"s",
13780                                               Rupd
13781                                                 ("CPSR",
13782                                                  TP[qVar"s",
13783                                                     Var("v",CTy"PSR")]))))),
13784                                   Close
13785                                     (AVar uTy,
13786                                      MB(MR(Close
13787                                              (qVar"s",
13788                                               Dest
13789                                                 ("CPSR",CTy"PSR",qVar"s"))),
13790                                         Close
13791                                           (Var("v",CTy"PSR"),
13792                                            MB(MB(MB(MU(TP[Var("v",
13793                                                               CTy"PSR"),
13794                                                           EQ(Var("result",
13795                                                                  F32),
13796                                                              LW(0,32))],
13797                                                        qTy),
13798                                                     Close
13799                                                       (Var("v",
13800                                                            PTy(CTy"PSR",
13801                                                                bTy)),
13802                                                        MU(Rupd
13803                                                             ("Z",
13804                                                              Var("v",
13805                                                                  PTy(CTy"PSR",
13806                                                                      bTy))),
13807                                                           qTy))),
13808                                                  Close
13809                                                    (Var("v",CTy"PSR"),
13810                                                     MW(Close
13811                                                          (qVar"s",
13812                                                           Rupd
13813                                                             ("CPSR",
13814                                                              TP[qVar"s",
13815                                                                 Var("v",
13816                                                                     CTy"PSR")]))))),
13817                                               Close
13818                                                 (AVar uTy,
13819                                                  MB(MR(Close
13820                                                          (qVar"s",
13821                                                           Dest
13822                                                             ("CPSR",
13823                                                              CTy"PSR",
13824                                                              qVar"s"))),
13825                                                     Close
13826                                                       (Var("v",CTy"PSR"),
13827                                                        MB(MB(MB(MU(TP[Var("v",
13828                                                                           CTy"PSR"),
13829                                                                       bVar"carry"],
13830                                                                    qTy),
13831                                                                 Close
13832                                                                   (Var("v",
13833                                                                        PTy(CTy"PSR",
13834                                                                            bTy)),
13835                                                                    MU(Rupd
13836                                                                         ("C",
13837                                                                          Var("v",
13838                                                                              PTy(CTy"PSR",
13839                                                                                  bTy))),
13840                                                                       qTy))),
13841                                                              Close
13842                                                                (Var("v",
13843                                                                     CTy"PSR"),
13844                                                                 MW(Close
13845                                                                      (qVar"s",
13846                                                                       Rupd
13847                                                                         ("CPSR",
13848                                                                          TP[qVar"s",
13849                                                                             Var("v",
13850                                                                                 CTy"PSR")]))))),
13851                                                           Close
13852                                                             (AVar uTy,
13853                                                              ITE(Call
13854                                                                    ("ArithmeticOpcode",
13855                                                                     bTy,
13856                                                                     Var("opc",
13857                                                                         F4)),
13858                                                                  MB(MR(Close
13859                                                                          (qVar"s",
13860                                                                           Dest
13861                                                                             ("CPSR",
13862                                                                              CTy"PSR",
13863                                                                              qVar"s"))),
13864                                                                     Close
13865                                                                       (Var("v",
13866                                                                            CTy"PSR"),
13867                                                                        MB(MB(MU(TP[Var("v",
13868                                                                                        CTy"PSR"),
13869                                                                                    bVar"overflow"],
13870                                                                                 qTy),
13871                                                                              Close
13872                                                                                (Var("v",
13873                                                                                     PTy(CTy"PSR",
13874                                                                                         bTy)),
13875                                                                                 MU(Rupd
13876                                                                                      ("V",
13877                                                                                       Var("v",
13878                                                                                           PTy(CTy"PSR",
13879                                                                                               bTy))),
13880                                                                                    qTy))),
13881                                                                           Close
13882                                                                             (Var("v",
13883                                                                                  CTy"PSR"),
13884                                                                              MW(Close
13885                                                                                   (qVar"s",
13886                                                                                    Rupd
13887                                                                                      ("CPSR",
13888                                                                                       TP[qVar"s",
13889                                                                                          Var("v",
13890                                                                                              CTy"PSR")]))))))),
13891                                                                  MU(LU,
13892                                                                     qTy)))))))))))))),
13893                          MU(LU,qTy)),
13894                      Close
13895                        (AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU)))))))))
13896;
13897val DataProcessingPC_def = Def
13898  ("DataProcessingPC",
13899   TP[Var("opc",F4),bVar"setflags",Var("n",F4),Var("imm32",F32),bVar"C"],
13900   MB(ITB([(Bop(Or,EQ(Var("opc",F4),LW(13,4)),
13901                Bop(And,EQ(Var("opc",F4),LW(15,4)),
13902                    EQ(Var("n",F4),LW(15,4)))),MU(LW(0,32),qTy)),
13903           (Bop(And,
13904                Bop(And,Bop(In,Var("opc",F4),SL[LW(4,4),LW(2,4)]),
13905                    EQ(Var("n",F4),LW(15,4))),Mop(Not,bVar"setflags")),
13906            MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
13907               Close
13908                 (Var("v",F32),
13909                  MB(MU(TP[Var("v",F32),LN 4],qTy),
13910                     Close
13911                       (Var("v",PTy(F32,nTy)),
13912                        MU(Call("Align",F32,Var("v",PTy(F32,nTy))),qTy))))))],
13913          Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4))),
13914      Close
13915        (Var("rn",F32),
13916         Let(TP[Var("result",F32),bVar"carry",bVar"overflow"],
13917             Call
13918               ("DataProcessingALU",PTy(F32,PTy(bTy,bTy)),
13919                TP[Var("opc",F4),Var("rn",F32),Var("imm32",F32),bVar"C"]),
13920             ITE(bVar"setflags",
13921                 MB(Call("CurrentModeIsHyp",ATy(qTy,PTy(bTy,qTy)),LU),
13922                    Close
13923                      (bVar"b",
13924                       ITE(bVar"b",
13925                           Call
13926                             ("TakeUndefInstrException",
13927                              ATy(qTy,PTy(uTy,qTy)),LU),
13928                           MB(Call
13929                                ("CurrentModeIsUserOrSystem",
13930                                 ATy(qTy,PTy(bTy,qTy)),LU),
13931                              Close
13932                                (bVar"b",
13933                                 ITE(bVar"b",
13934                                     Call
13935                                       ("raise'exception",
13936                                        ATy(qTy,PTy(uTy,qTy)),
13937                                        Call
13938                                          ("UNPREDICTABLE",CTy"exception",
13939                                           LS"DataProcessingPC")),
13940                                     MB(Const
13941                                          ("SPSR",
13942                                           ATy(qTy,PTy(CTy"PSR",qTy))),
13943                                        Close
13944                                          (Var("v",CTy"PSR"),
13945                                           MB(MB(MB(MU(Call
13946                                                         ("reg'PSR",F32,
13947                                                          Var("v",CTy"PSR")),
13948                                                       qTy),
13949                                                    Close
13950                                                      (Var("v",F32),
13951                                                       MU(TP[Var("v",F32),
13952                                                             LW(15,4),LT],
13953                                                          qTy))),
13954                                                 Close
13955                                                   (Var("v",
13956                                                        PTy(F32,
13957                                                            PTy(F4,bTy))),
13958                                                    Call
13959                                                      ("CPSRWriteByInstr",
13960                                                       ATy(qTy,
13961                                                           PTy(uTy,qTy)),
13962                                                       Var("v",
13963                                                           PTy(F32,
13964                                                               PTy(F4,bTy)))))),
13965                                              Close
13966                                                (AVar uTy,
13967                                                 MB(MR(Close
13968                                                         (qVar"s",
13969                                                          Dest
13970                                                            ("CPSR",
13971                                                             CTy"PSR",
13972                                                             qVar"s"))),
13973                                                    Close
13974                                                      (Var("v",CTy"PSR"),
13975                                                       MB(MB(MB(MU(Dest
13976                                                                     ("M",
13977                                                                      FTy 5,
13978                                                                      Var("v",
13979                                                                          CTy"PSR")),
13980                                                                   qTy),
13981                                                                Close
13982                                                                  (Var("v",
13983                                                                       FTy 5),
13984                                                                   MU(EQ(Var("v",
13985                                                                             FTy 5),
13986                                                                         LW(26,
13987                                                                            5)),
13988                                                                      qTy))),
13989                                                             Close
13990                                                               (bVar"b",
13991                                                                ITE(bVar"b",
13992                                                                    MB(Call
13993                                                                         ("CurrentInstrSet",
13994                                                                          ATy(qTy,
13995                                                                              PTy(CTy"InstrSet",
13996                                                                                  qTy)),
13997                                                                          LU),
13998                                                                       Close
13999                                                                         (Var("v",
14000                                                                              CTy"InstrSet"),
14001                                                                          MU(EQ(Var("v",
14002                                                                                    CTy"InstrSet"),
14003                                                                                LC("InstrSet_ThumbEE",
14004                                                                                   CTy"InstrSet")),
14005                                                                             qTy))),
14006                                                                    MU(LF,
14007                                                                       qTy)))),
14008                                                          Close
14009                                                            (bVar"b",
14010                                                             ITE(bVar"b",
14011                                                                 Call
14012                                                                   ("raise'exception",
14013                                                                    ATy(qTy,
14014                                                                        PTy(uTy,
14015                                                                            qTy)),
14016                                                                    Call
14017                                                                      ("UNPREDICTABLE",
14018                                                                       CTy"exception",
14019                                                                       LS
14020                                                                        "DataProcessingPC")),
14021                                                                 Call
14022                                                                   ("BranchWritePC",
14023                                                                    ATy(qTy,
14024                                                                        PTy(uTy,
14025                                                                            qTy)),
14026                                                                    Var("result",
14027                                                                        F32))))))))))))))))),
14028                 Call
14029                   ("ALUWritePC",ATy(qTy,PTy(uTy,qTy)),Var("result",F32)))))))
14030;
14031val dfn'Move_def = Def
14032  ("dfn'Move",
14033   TP[bVar"setflags",bVar"negate",Var("d",F4),Var("imm12",FTy 12)],
14034   Let(Var("opc",F4),CC[LW(3,2),Mop(Cast F1,bVar"negate"),LW(1,1)],
14035       MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
14036          Close
14037            (Var("v",CTy"PSR"),
14038             MB(MB(MB(MU(Dest("C",bTy,Var("v",CTy"PSR")),qTy),
14039                      Close
14040                        (bVar"v",MU(TP[Var("imm12",FTy 12),bVar"v"],qTy))),
14041                   Close
14042                     (Var("v",PTy(FTy 12,bTy)),
14043                      Call
14044                        ("ExpandImm_C",ATy(qTy,PTy(PTy(F32,bTy),qTy)),
14045                         Var("v",PTy(FTy 12,bTy))))),
14046                Close
14047                  (Var("x",PTy(F32,bTy)),
14048                   CS(Var("x",PTy(F32,bTy)),
14049                      [(TP[Var("imm32",F32),bVar"carry"],
14050                        ITE(EQ(Var("d",F4),LW(15,4)),
14051                            Call
14052                              ("DataProcessingPC",ATy(qTy,PTy(uTy,qTy)),
14053                               TP[Var("opc",F4),bVar"setflags",LW(15,4),
14054                                  Var("imm32",F32),bVar"carry"]),
14055                            Call
14056                              ("DataProcessing",ATy(qTy,PTy(uTy,qTy)),
14057                               TP[Var("opc",F4),bVar"setflags",
14058                                  Var("d",F4),LW(15,4),Var("imm32",F32),
14059                                  bVar"carry"])))])))))))
14060;
14061val dfn'AddSub_def = Def
14062  ("dfn'AddSub",TP[bVar"sub",Var("d",F4),Var("n",F4),Var("imm12",FTy 12)],
14063   Call
14064     ("DataProcessing",ATy(qTy,PTy(uTy,qTy)),
14065      TP[ITE(bVar"sub",LW(2,4),LW(4,4)),LF,Var("d",F4),Var("n",F4),
14066         Mop(Cast F32,Var("imm12",FTy 12)),LX bTy]))
14067;
14068val dfn'TestCompareImmediate_def = Def
14069  ("dfn'TestCompareImmediate",
14070   TP[Var("op",FTy 2),Var("n",F4),Var("imm12",FTy 12)],
14071   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
14072      Close
14073        (Var("v",CTy"PSR"),
14074         MB(MB(MB(MU(Dest("C",bTy,Var("v",CTy"PSR")),qTy),
14075                  Close(bVar"v",MU(TP[Var("imm12",FTy 12),bVar"v"],qTy))),
14076               Close
14077                 (Var("v",PTy(FTy 12,bTy)),
14078                  Call
14079                    ("ExpandImm_C",ATy(qTy,PTy(PTy(F32,bTy),qTy)),
14080                     Var("v",PTy(FTy 12,bTy))))),
14081            Close
14082              (Var("x",PTy(F32,bTy)),
14083               CS(Var("x",PTy(F32,bTy)),
14084                  [(TP[Var("imm32",F32),bVar"carry"],
14085                    Call
14086                      ("DataProcessing",ATy(qTy,PTy(uTy,qTy)),
14087                       TP[CC[LW(2,2),Var("op",FTy 2)],LT,LX F4,
14088                          Var("n",F4),Var("imm32",F32),bVar"carry"]))]))))))
14089;
14090val dfn'ArithLogicImmediate_def = Def
14091  ("dfn'ArithLogicImmediate",
14092   TP[Var("opc",F4),bVar"setflags",Var("d",F4),Var("n",F4),
14093      Var("imm12",FTy 12)],
14094   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
14095      Close
14096        (Var("v",CTy"PSR"),
14097         MB(MB(MB(MU(Dest("C",bTy,Var("v",CTy"PSR")),qTy),
14098                  Close(bVar"v",MU(TP[Var("imm12",FTy 12),bVar"v"],qTy))),
14099               Close
14100                 (Var("v",PTy(FTy 12,bTy)),
14101                  Call
14102                    ("ExpandImm_C",ATy(qTy,PTy(PTy(F32,bTy),qTy)),
14103                     Var("v",PTy(FTy 12,bTy))))),
14104            Close
14105              (Var("x",PTy(F32,bTy)),
14106               CS(Var("x",PTy(F32,bTy)),
14107                  [(TP[Var("imm32",F32),bVar"carry"],
14108                    ITE(EQ(Var("d",F4),LW(15,4)),
14109                        Call
14110                          ("DataProcessingPC",ATy(qTy,PTy(uTy,qTy)),
14111                           TP[Var("opc",F4),bVar"setflags",Var("n",F4),
14112                              Var("imm32",F32),bVar"carry"]),
14113                        Call
14114                          ("DataProcessing",ATy(qTy,PTy(uTy,qTy)),
14115                           TP[Var("opc",F4),bVar"setflags",Var("d",F4),
14116                              Var("n",F4),Var("imm32",F32),bVar"carry"])))]))))))
14117;
14118val doRegister_def = Def
14119  ("doRegister",
14120   TP[Var("opc",F4),bVar"setflags",Var("d",F4),Var("n",F4),Var("m",F4),
14121      Var("shift_t",CTy"SRType"),nVar"shift_n"],
14122   MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
14123      Close
14124        (Var("v",F32),
14125         MB(MB(MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
14126                  Close
14127                    (Var("v0",CTy"PSR"),
14128                     MB(MB(MB(MU(Dest("C",bTy,Var("v0",CTy"PSR")),qTy),
14129                              Close
14130                                (bVar"v",MU(TP[nVar"shift_n",bVar"v"],qTy))),
14131                           Close
14132                             (Var("v",PTy(nTy,bTy)),
14133                              MU(TP[Var("shift_t",CTy"SRType"),
14134                                    Var("v",PTy(nTy,bTy))],qTy))),
14135                        Close
14136                          (Var("v0",PTy(CTy"SRType",PTy(nTy,bTy))),
14137                           MU(TP[Var("v",F32),
14138                                 Var("v0",PTy(CTy"SRType",PTy(nTy,bTy)))],
14139                              qTy))))),
14140               Close
14141                 (Var("v",PTy(F32,PTy(CTy"SRType",PTy(nTy,bTy)))),
14142                  Call
14143                    ("Shift_C",ATy(qTy,PTy(PTy(F32,bTy),qTy)),
14144                     Var("v",PTy(F32,PTy(CTy"SRType",PTy(nTy,bTy))))))),
14145            Close
14146              (Var("x",PTy(F32,bTy)),
14147               CS(Var("x",PTy(F32,bTy)),
14148                  [(TP[Var("shifted",F32),bVar"carry"],
14149                    MB(ITE(Call("ArithmeticOpcode",bTy,Var("opc",F4)),
14150                           MB(MR(Close
14151                                   (qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
14152                              Close
14153                                (Var("v",CTy"PSR"),
14154                                 MU(Dest("C",bTy,Var("v",CTy"PSR")),qTy))),
14155                           MU(bVar"carry",qTy)),
14156                       Close
14157                         (bVar"carry",
14158                          ITE(EQ(Var("d",F4),LW(15,4)),
14159                              Call
14160                                ("DataProcessingPC",ATy(qTy,PTy(uTy,qTy)),
14161                                 TP[Var("opc",F4),bVar"setflags",
14162                                    Var("n",F4),Var("shifted",F32),
14163                                    bVar"carry"]),
14164                              Call
14165                                ("DataProcessing",ATy(qTy,PTy(uTy,qTy)),
14166                                 TP[Var("opc",F4),bVar"setflags",
14167                                    Var("d",F4),Var("n",F4),
14168                                    Var("shifted",F32),bVar"carry"])))))]))))))
14169;
14170val dfn'Register_def = Def
14171  ("dfn'Register",
14172   TP[Var("opc",F4),bVar"setflags",Var("d",F4),Var("n",F4),Var("m",F4),
14173      Var("shift_t",CTy"SRType"),nVar"shift_n"],
14174   Call
14175     ("doRegister",ATy(qTy,PTy(uTy,qTy)),
14176      TP[Var("opc",F4),bVar"setflags",Var("d",F4),Var("n",F4),Var("m",F4),
14177         Var("shift_t",CTy"SRType"),nVar"shift_n"]))
14178;
14179val dfn'TestCompareRegister_def = Def
14180  ("dfn'TestCompareRegister",
14181   TP[Var("opc",FTy 2),Var("n",F4),Var("m",F4),Var("shift_t",CTy"SRType"),
14182      nVar"shift_n"],
14183   Call
14184     ("doRegister",ATy(qTy,PTy(uTy,qTy)),
14185      TP[CC[LW(2,2),Var("opc",FTy 2)],LT,LW(0,4),Var("n",F4),Var("m",F4),
14186         Var("shift_t",CTy"SRType"),nVar"shift_n"]))
14187;
14188val dfn'ShiftImmediate_def = Def
14189  ("dfn'ShiftImmediate",
14190   TP[bVar"negate",bVar"setflags",Var("d",F4),Var("m",F4),
14191      Var("shift_t",CTy"SRType"),nVar"shift_n"],
14192   ITE(bVar"negate",
14193       Call
14194         ("doRegister",ATy(qTy,PTy(uTy,qTy)),
14195          TP[LW(15,4),bVar"setflags",Var("d",F4),LW(15,4),Var("m",F4),
14196             Var("shift_t",CTy"SRType"),nVar"shift_n"]),
14197       Call
14198         ("doRegister",ATy(qTy,PTy(uTy,qTy)),
14199          TP[LW(13,4),bVar"setflags",Var("d",F4),LX F4,Var("m",F4),
14200             Var("shift_t",CTy"SRType"),nVar"shift_n"])))
14201;
14202val doRegisterShiftedRegister_def = Def
14203  ("doRegisterShiftedRegister",
14204   TP[Var("opc",F4),bVar"setflags",Var("d",F4),Var("n",F4),Var("m",F4),
14205      Var("shift_t",CTy"SRType"),Var("s",F4)],
14206   MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
14207      Close
14208        (Var("v",F32),
14209         MB(MB(MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("s",F4)),
14210                  Close
14211                    (Var("v0",F32),
14212                     MB(MB(MB(MB(MU(EX(Var("v0",F32),LN 7,LN 0,F8),qTy),
14213                                 Close
14214                                   (Var("v",F8),
14215                                    MU(Mop(Cast nTy,Var("v",F8)),qTy))),
14216                              Close
14217                                (nVar"v",
14218                                 MB(MR(Close
14219                                         (qVar"s",
14220                                          Dest("CPSR",CTy"PSR",qVar"s"))),
14221                                    Close
14222                                      (Var("v0",CTy"PSR"),
14223                                       MB(MU(Dest
14224                                               ("C",bTy,Var("v0",CTy"PSR")),
14225                                             qTy),
14226                                          Close
14227                                            (bVar"v0",
14228                                             MU(TP[nVar"v",bVar"v0"],qTy))))))),
14229                           Close
14230                             (Var("v",PTy(nTy,bTy)),
14231                              MU(TP[Var("shift_t",CTy"SRType"),
14232                                    Var("v",PTy(nTy,bTy))],qTy))),
14233                        Close
14234                          (Var("v0",PTy(CTy"SRType",PTy(nTy,bTy))),
14235                           MU(TP[Var("v",F32),
14236                                 Var("v0",PTy(CTy"SRType",PTy(nTy,bTy)))],
14237                              qTy))))),
14238               Close
14239                 (Var("v",PTy(F32,PTy(CTy"SRType",PTy(nTy,bTy)))),
14240                  Call
14241                    ("Shift_C",ATy(qTy,PTy(PTy(F32,bTy),qTy)),
14242                     Var("v",PTy(F32,PTy(CTy"SRType",PTy(nTy,bTy))))))),
14243            Close
14244              (Var("x",PTy(F32,bTy)),
14245               CS(Var("x",PTy(F32,bTy)),
14246                  [(TP[Var("shifted",F32),bVar"carry"],
14247                    MB(ITE(Call("ArithmeticOpcode",bTy,Var("opc",F4)),
14248                           MB(MR(Close
14249                                   (qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
14250                              Close
14251                                (Var("v",CTy"PSR"),
14252                                 MU(Dest("C",bTy,Var("v",CTy"PSR")),qTy))),
14253                           MU(bVar"carry",qTy)),
14254                       Close
14255                         (bVar"carry",
14256                          Call
14257                            ("DataProcessing",ATy(qTy,PTy(uTy,qTy)),
14258                             TP[Var("opc",F4),bVar"setflags",Var("d",F4),
14259                                Var("n",F4),Var("shifted",F32),bVar"carry"]))))]))))))
14260;
14261val dfn'RegisterShiftedRegister_def = Def
14262  ("dfn'RegisterShiftedRegister",
14263   TP[Var("opc",F4),bVar"setflags",Var("d",F4),Var("n",F4),Var("m",F4),
14264      Var("shift_t",CTy"SRType"),Var("s",F4)],
14265   Call
14266     ("doRegisterShiftedRegister",ATy(qTy,PTy(uTy,qTy)),
14267      TP[Var("opc",F4),bVar"setflags",Var("d",F4),Var("n",F4),Var("m",F4),
14268         Var("shift_t",CTy"SRType"),Var("s",F4)]))
14269;
14270val dfn'ShiftRegister_def = Def
14271  ("dfn'ShiftRegister",
14272   TP[bVar"negate",bVar"setflags",Var("d",F4),Var("n",F4),
14273      Var("shift_t",CTy"SRType"),Var("m",F4)],
14274   ITE(bVar"negate",
14275       Call
14276         ("doRegisterShiftedRegister",ATy(qTy,PTy(uTy,qTy)),
14277          TP[LW(15,4),bVar"setflags",Var("d",F4),LW(15,4),Var("n",F4),
14278             Var("shift_t",CTy"SRType"),Var("m",F4)]),
14279       Call
14280         ("doRegisterShiftedRegister",ATy(qTy,PTy(uTy,qTy)),
14281          TP[LW(13,4),bVar"setflags",Var("d",F4),LX F4,Var("n",F4),
14282             Var("shift_t",CTy"SRType"),Var("m",F4)])))
14283;
14284val dfn'SaturatingAddSubtract_def = Def
14285  ("dfn'SaturatingAddSubtract",
14286   TP[Var("opc",FTy 2),Var("d",F4),Var("m",F4),Var("n",F4)],
14287   MN(LX F32,
14288      MN(LX bTy,
14289         MB(CS(Var("opc",FTy 2),
14290               [(LW(0,2),
14291                 MB(MD(MD(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),F32),
14292                       bTy),
14293                    Close
14294                      (Var("v",F32),
14295                       MB(MB(MB(MB(MU(Mop(Cast iTy,Var("v",F32)),
14296                                      PTy(bTy,PTy(F32,qTy))),
14297                                   Close
14298                                     (iVar"v",
14299                                      MB(MD(MD(Call
14300                                                 ("R",
14301                                                  ATy(qTy,PTy(F32,qTy)),
14302                                                  Var("n",F4)),F32),bTy),
14303                                         Close
14304                                           (Var("v0",F32),
14305                                            MB(MU(Mop(Cast iTy,
14306                                                      Var("v0",F32)),
14307                                                  PTy(bTy,PTy(F32,qTy))),
14308                                               Close
14309                                                 (iVar"v0",
14310                                                  MU(Bop(Add,iVar"v",
14311                                                         iVar"v0"),
14312                                                     PTy(bTy,PTy(F32,qTy))))))))),
14313                                Close
14314                                  (iVar"v",
14315                                   MU(TP[iVar"v",LN 32],
14316                                      PTy(bTy,PTy(F32,qTy))))),
14317                             Close
14318                               (Var("v",PTy(iTy,nTy)),
14319                                MD(MD(Call
14320                                        ("SignedSatQ",
14321                                         ATy(qTy,PTy(PTy(F32,bTy),qTy)),
14322                                         Var("v",PTy(iTy,nTy))),F32),bTy))),
14323                          Close
14324                            (Var("x",PTy(F32,bTy)),
14325                             CS(Var("x",PTy(F32,bTy)),
14326                                [(TP[Var("r",F32),bVar"s"],
14327                                  MB(MW(Close
14328                                          (Var("s",PTy(bTy,PTy(F32,qTy))),
14329                                           TP[Mop(Fst,
14330                                                  Var("s",
14331                                                      PTy(bTy,PTy(F32,qTy)))),
14332                                              Var("r",F32),
14333                                              Mop(Snd,
14334                                                  Mop(Snd,
14335                                                      Var("s",
14336                                                          PTy(bTy,
14337                                                              PTy(F32,qTy)))))])),
14338                                     Close
14339                                       (AVar uTy,
14340                                        MW(Close
14341                                             (Var("s0",
14342                                                  PTy(bTy,PTy(F32,qTy))),
14343                                              TP[bVar"s",
14344                                                 Mop(Snd,
14345                                                     Var("s0",
14346                                                         PTy(bTy,
14347                                                             PTy(F32,qTy))))])))))])))))),
14348                (LW(1,2),
14349                 MB(MD(MD(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),F32),
14350                       bTy),
14351                    Close
14352                      (Var("v",F32),
14353                       MB(MB(MB(MB(MU(Mop(Cast iTy,Var("v",F32)),
14354                                      PTy(bTy,PTy(F32,qTy))),
14355                                   Close
14356                                     (iVar"v",
14357                                      MB(MD(MD(Call
14358                                                 ("R",
14359                                                  ATy(qTy,PTy(F32,qTy)),
14360                                                  Var("n",F4)),F32),bTy),
14361                                         Close
14362                                           (Var("v0",F32),
14363                                            MB(MU(Mop(Cast iTy,
14364                                                      Var("v0",F32)),
14365                                                  PTy(bTy,PTy(F32,qTy))),
14366                                               Close
14367                                                 (iVar"v0",
14368                                                  MU(Bop(Sub,iVar"v",
14369                                                         iVar"v0"),
14370                                                     PTy(bTy,PTy(F32,qTy))))))))),
14371                                Close
14372                                  (iVar"v",
14373                                   MU(TP[iVar"v",LN 32],
14374                                      PTy(bTy,PTy(F32,qTy))))),
14375                             Close
14376                               (Var("v",PTy(iTy,nTy)),
14377                                MD(MD(Call
14378                                        ("SignedSatQ",
14379                                         ATy(qTy,PTy(PTy(F32,bTy),qTy)),
14380                                         Var("v",PTy(iTy,nTy))),F32),bTy))),
14381                          Close
14382                            (Var("x",PTy(F32,bTy)),
14383                             CS(Var("x",PTy(F32,bTy)),
14384                                [(TP[Var("r",F32),bVar"s"],
14385                                  MB(MW(Close
14386                                          (Var("s",PTy(bTy,PTy(F32,qTy))),
14387                                           TP[Mop(Fst,
14388                                                  Var("s",
14389                                                      PTy(bTy,PTy(F32,qTy)))),
14390                                              Var("r",F32),
14391                                              Mop(Snd,
14392                                                  Mop(Snd,
14393                                                      Var("s",
14394                                                          PTy(bTy,
14395                                                              PTy(F32,qTy)))))])),
14396                                     Close
14397                                       (AVar uTy,
14398                                        MW(Close
14399                                             (Var("s0",
14400                                                  PTy(bTy,PTy(F32,qTy))),
14401                                              TP[bVar"s",
14402                                                 Mop(Snd,
14403                                                     Var("s0",
14404                                                         PTy(bTy,
14405                                                             PTy(F32,qTy))))])))))])))))),
14406                (LW(2,2),
14407                 MB(MD(MD(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),F32),
14408                       bTy),
14409                    Close
14410                      (Var("v",F32),
14411                       MB(MB(MB(MB(MU(Mop(Cast iTy,Var("v",F32)),
14412                                      PTy(bTy,PTy(F32,qTy))),
14413                                   Close
14414                                     (iVar"v",
14415                                      MU(Bop(Mul,LI 2,iVar"v"),
14416                                         PTy(bTy,PTy(F32,qTy))))),
14417                                Close
14418                                  (iVar"v",
14419                                   MU(TP[iVar"v",LN 32],
14420                                      PTy(bTy,PTy(F32,qTy))))),
14421                             Close
14422                               (Var("v",PTy(iTy,nTy)),
14423                                MD(MD(Call
14424                                        ("SignedSatQ",
14425                                         ATy(qTy,PTy(PTy(F32,bTy),qTy)),
14426                                         Var("v",PTy(iTy,nTy))),F32),bTy))),
14427                          Close
14428                            (Var("x",PTy(F32,bTy)),
14429                             CS(Var("x",PTy(F32,bTy)),
14430                                [(TP[Var("doubled",F32),bVar"sat1"],
14431                                  MB(MD(MD(Call
14432                                             ("R",ATy(qTy,PTy(F32,qTy)),
14433                                              Var("m",F4)),F32),bTy),
14434                                     Close
14435                                       (Var("v",F32),
14436                                        MB(MB(MB(MB(MU(Mop(Cast iTy,
14437                                                           Var("v",F32)),
14438                                                       PTy(bTy,
14439                                                           PTy(F32,qTy))),
14440                                                    Close
14441                                                      (iVar"v",
14442                                                       MU(Bop(Add,iVar"v",
14443                                                              Mop(Cast iTy,
14444                                                                  Var("doubled",
14445                                                                      F32))),
14446                                                          PTy(bTy,
14447                                                              PTy(F32,qTy))))),
14448                                                 Close
14449                                                   (iVar"v",
14450                                                    MU(TP[iVar"v",LN 32],
14451                                                       PTy(bTy,
14452                                                           PTy(F32,qTy))))),
14453                                              Close
14454                                                (Var("v",PTy(iTy,nTy)),
14455                                                 MD(MD(Call
14456                                                         ("SignedSatQ",
14457                                                          ATy(qTy,
14458                                                              PTy(PTy(F32,
14459                                                                      bTy),
14460                                                                  qTy)),
14461                                                          Var("v",
14462                                                              PTy(iTy,nTy))),
14463                                                       F32),bTy))),
14464                                           Close
14465                                             (Var("x",PTy(F32,bTy)),
14466                                              CS(Var("x",PTy(F32,bTy)),
14467                                                 [(TP[Var("r",F32),
14468                                                      bVar"sat2"],
14469                                                   MB(MW(Close
14470                                                           (Var("s",
14471                                                                PTy(bTy,
14472                                                                    PTy(F32,
14473                                                                        qTy))),
14474                                                            TP[Mop(Fst,
14475                                                                   Var("s",
14476                                                                       PTy(bTy,
14477                                                                           PTy(F32,
14478                                                                               qTy)))),
14479                                                               Var("r",F32),
14480                                                               Mop(Snd,
14481                                                                   Mop(Snd,
14482                                                                       Var("s",
14483                                                                           PTy(bTy,
14484                                                                               PTy(F32,
14485                                                                                   qTy)))))])),
14486                                                      Close
14487                                                        (AVar uTy,
14488                                                         MW(Close
14489                                                              (Var("s",
14490                                                                   PTy(bTy,
14491                                                                       PTy(F32,
14492                                                                           qTy))),
14493                                                               TP[bVar"sat1",
14494                                                                  Mop(Snd,
14495                                                                      Var("s",
14496                                                                          PTy(bTy,
14497                                                                              PTy(F32,
14498                                                                                  qTy))))])))))]))))))])))))),
14499                (LW(3,2),
14500                 MB(MD(MD(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),F32),
14501                       bTy),
14502                    Close
14503                      (Var("v",F32),
14504                       MB(MB(MB(MB(MU(Mop(Cast iTy,Var("v",F32)),
14505                                      PTy(bTy,PTy(F32,qTy))),
14506                                   Close
14507                                     (iVar"v",
14508                                      MU(Bop(Mul,LI 2,iVar"v"),
14509                                         PTy(bTy,PTy(F32,qTy))))),
14510                                Close
14511                                  (iVar"v",
14512                                   MU(TP[iVar"v",LN 32],
14513                                      PTy(bTy,PTy(F32,qTy))))),
14514                             Close
14515                               (Var("v",PTy(iTy,nTy)),
14516                                MD(MD(Call
14517                                        ("SignedSatQ",
14518                                         ATy(qTy,PTy(PTy(F32,bTy),qTy)),
14519                                         Var("v",PTy(iTy,nTy))),F32),bTy))),
14520                          Close
14521                            (Var("x",PTy(F32,bTy)),
14522                             CS(Var("x",PTy(F32,bTy)),
14523                                [(TP[Var("doubled",F32),bVar"sat1"],
14524                                  MB(MD(MD(Call
14525                                             ("R",ATy(qTy,PTy(F32,qTy)),
14526                                              Var("m",F4)),F32),bTy),
14527                                     Close
14528                                       (Var("v",F32),
14529                                        MB(MB(MB(MB(MU(Mop(Cast iTy,
14530                                                           Var("v",F32)),
14531                                                       PTy(bTy,
14532                                                           PTy(F32,qTy))),
14533                                                    Close
14534                                                      (iVar"v",
14535                                                       MU(Bop(Sub,iVar"v",
14536                                                              Mop(Cast iTy,
14537                                                                  Var("doubled",
14538                                                                      F32))),
14539                                                          PTy(bTy,
14540                                                              PTy(F32,qTy))))),
14541                                                 Close
14542                                                   (iVar"v",
14543                                                    MU(TP[iVar"v",LN 32],
14544                                                       PTy(bTy,
14545                                                           PTy(F32,qTy))))),
14546                                              Close
14547                                                (Var("v",PTy(iTy,nTy)),
14548                                                 MD(MD(Call
14549                                                         ("SignedSatQ",
14550                                                          ATy(qTy,
14551                                                              PTy(PTy(F32,
14552                                                                      bTy),
14553                                                                  qTy)),
14554                                                          Var("v",
14555                                                              PTy(iTy,nTy))),
14556                                                       F32),bTy))),
14557                                           Close
14558                                             (Var("x",PTy(F32,bTy)),
14559                                              CS(Var("x",PTy(F32,bTy)),
14560                                                 [(TP[Var("r",F32),
14561                                                      bVar"sat2"],
14562                                                   MB(MW(Close
14563                                                           (Var("s",
14564                                                                PTy(bTy,
14565                                                                    PTy(F32,
14566                                                                        qTy))),
14567                                                            TP[Mop(Fst,
14568                                                                   Var("s",
14569                                                                       PTy(bTy,
14570                                                                           PTy(F32,
14571                                                                               qTy)))),
14572                                                               Var("r",F32),
14573                                                               Mop(Snd,
14574                                                                   Mop(Snd,
14575                                                                       Var("s",
14576                                                                           PTy(bTy,
14577                                                                               PTy(F32,
14578                                                                                   qTy)))))])),
14579                                                      Close
14580                                                        (AVar uTy,
14581                                                         MW(Close
14582                                                              (Var("s",
14583                                                                   PTy(bTy,
14584                                                                       PTy(F32,
14585                                                                           qTy))),
14586                                                               TP[Bop(Or,
14587                                                                      bVar"sat1",
14588                                                                      bVar"sat2"),
14589                                                                  Mop(Snd,
14590                                                                      Var("s",
14591                                                                          PTy(bTy,
14592                                                                              PTy(F32,
14593                                                                                  qTy))))])))))]))))))]))))))]),
14594            Close
14595              (AVar uTy,
14596               MB(MR(Close
14597                       (Var("s",PTy(bTy,PTy(F32,qTy))),
14598                        Mop(Fst,Mop(Snd,Var("s",PTy(bTy,PTy(F32,qTy))))))),
14599                  Close
14600                    (Var("v",F32),
14601                     MB(MB(MU(TP[Var("v",F32),Var("d",F4)],
14602                              PTy(bTy,PTy(F32,qTy))),
14603                           Close
14604                             (Var("v",PTy(F32,F4)),
14605                              MD(MD(Call
14606                                      ("write'R",ATy(qTy,PTy(uTy,qTy)),
14607                                       Var("v",PTy(F32,F4))),F32),bTy))),
14608                        Close
14609                          (AVar uTy,
14610                           MB(MR(Close
14611                                   (Var("s",PTy(bTy,PTy(F32,qTy))),
14612                                    Mop(Fst,Var("s",PTy(bTy,PTy(F32,qTy)))))),
14613                              Close
14614                                (bVar"v",
14615                                 MB(ITE(bVar"v",
14616                                        MB(MR(Close
14617                                                (Var("s",
14618                                                     PTy(bTy,PTy(F32,qTy))),
14619                                                 Dest
14620                                                   ("CPSR",CTy"PSR",
14621                                                    Mop(Snd,
14622                                                        Mop(Snd,
14623                                                            Var("s",
14624                                                                PTy(bTy,
14625                                                                    PTy(F32,
14626                                                                        qTy)))))))),
14627                                           Close
14628                                             (Var("v",CTy"PSR"),
14629                                              MB(MB(MU(TP[Var("v",CTy"PSR"),
14630                                                          LT],
14631                                                       PTy(bTy,
14632                                                           PTy(F32,qTy))),
14633                                                    Close
14634                                                      (Var("v",
14635                                                           PTy(CTy"PSR",
14636                                                               bTy)),
14637                                                       MU(Rupd
14638                                                            ("Q",
14639                                                             Var("v",
14640                                                                 PTy(CTy"PSR",
14641                                                                     bTy))),
14642                                                          PTy(bTy,
14643                                                              PTy(F32,qTy))))),
14644                                                 Close
14645                                                   (Var("v",CTy"PSR"),
14646                                                    MW(Close
14647                                                         (Var("s",
14648                                                              PTy(bTy,
14649                                                                  PTy(F32,
14650                                                                      qTy))),
14651                                                          TP[Mop(Fst,
14652                                                                 Var("s",
14653                                                                     PTy(bTy,
14654                                                                         PTy(F32,
14655                                                                             qTy)))),
14656                                                             Let(Var("s",
14657                                                                     PTy(F32,
14658                                                                         qTy)),
14659                                                                 Mop(Snd,
14660                                                                     Var("s",
14661                                                                         PTy(bTy,
14662                                                                             PTy(F32,
14663                                                                                 qTy)))),
14664                                                                 TP[Mop(Fst,
14665                                                                        Var("s",
14666                                                                            PTy(F32,
14667                                                                                qTy))),
14668                                                                    Rupd
14669                                                                      ("CPSR",
14670                                                                       TP[Mop(Snd,
14671                                                                              Var("s",
14672                                                                                  PTy(F32,
14673                                                                                      qTy))),
14674                                                                          Var("v",
14675                                                                              CTy"PSR")])])])))))),
14676                                        MU(LU,PTy(bTy,PTy(F32,qTy)))),
14677                                    Close
14678                                      (AVar uTy,
14679                                       MD(MD(Call
14680                                               ("IncPC",
14681                                                ATy(qTy,PTy(uTy,qTy)),LU),
14682                                             F32),bTy))))))))))))))
14683;
14684val dfn'Multiply32_def = Def
14685  ("dfn'Multiply32",
14686   TP[bVar"setflags",Var("d",F4),Var("n",F4),Var("m",F4)],
14687   MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
14688      Close
14689        (Var("rn",F32),
14690         MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
14691            Close
14692              (Var("rm",F32),
14693               Let(Var("result",F32),Bop(Mul,Var("rn",F32),Var("rm",F32)),
14694                   MB(Call
14695                        ("write'R",ATy(qTy,PTy(uTy,qTy)),
14696                         TP[Var("result",F32),Var("d",F4)]),
14697                      Close
14698                        (AVar uTy,
14699                         MB(ITE(bVar"setflags",
14700                                MB(MR(Close
14701                                        (qVar"s",
14702                                         Dest("CPSR",CTy"PSR",qVar"s"))),
14703                                   Close
14704                                     (Var("v",CTy"PSR"),
14705                                      MB(MB(MB(MU(TP[Var("v",CTy"PSR"),
14706                                                     Bop(Bit,
14707                                                         Var("result",F32),
14708                                                         LN 31)],qTy),
14709                                               Close
14710                                                 (Var("v",
14711                                                      PTy(CTy"PSR",bTy)),
14712                                                  MU(Rupd
14713                                                       ("N",
14714                                                        Var("v",
14715                                                            PTy(CTy"PSR",
14716                                                                bTy))),qTy))),
14717                                            Close
14718                                              (Var("v",CTy"PSR"),
14719                                               MW(Close
14720                                                    (qVar"s",
14721                                                     Rupd
14722                                                       ("CPSR",
14723                                                        TP[qVar"s",
14724                                                           Var("v",
14725                                                               CTy"PSR")]))))),
14726                                         Close
14727                                           (AVar uTy,
14728                                            MB(MR(Close
14729                                                    (qVar"s",
14730                                                     Dest
14731                                                       ("CPSR",CTy"PSR",
14732                                                        qVar"s"))),
14733                                               Close
14734                                                 (Var("v",CTy"PSR"),
14735                                                  MB(MB(MB(MU(TP[Var("v",
14736                                                                     CTy"PSR"),
14737                                                                 EQ(Var("result",
14738                                                                        F32),
14739                                                                    LW(0,
14740                                                                       32))],
14741                                                              qTy),
14742                                                           Close
14743                                                             (Var("v",
14744                                                                  PTy(CTy"PSR",
14745                                                                      bTy)),
14746                                                              MU(Rupd
14747                                                                   ("Z",
14748                                                                    Var("v",
14749                                                                        PTy(CTy"PSR",
14750                                                                            bTy))),
14751                                                                 qTy))),
14752                                                        Close
14753                                                          (Var("v",
14754                                                               CTy"PSR"),
14755                                                           MW(Close
14756                                                                (qVar"s",
14757                                                                 Rupd
14758                                                                   ("CPSR",
14759                                                                    TP[qVar"s",
14760                                                                       Var("v",
14761                                                                           CTy"PSR")]))))),
14762                                                     Close
14763                                                       (AVar uTy,
14764                                                        MB(Call
14765                                                             ("ArchVersion",
14766                                                              ATy(qTy,
14767                                                                  PTy(nTy,
14768                                                                      qTy)),
14769                                                              LU),
14770                                                           Close
14771                                                             (nVar"v",
14772                                                              MB(MU(EQ(nVar"v",
14773                                                                       LN
14774                                                                        4),
14775                                                                    qTy),
14776                                                                 Close
14777                                                                   (bVar"b",
14778                                                                    ITE(bVar"b",
14779                                                                        MB(MR(Close
14780                                                                                (qVar"s",
14781                                                                                 Dest
14782                                                                                   ("CPSR",
14783                                                                                    CTy"PSR",
14784                                                                                    qVar"s"))),
14785                                                                           Close
14786                                                                             (Var("v",
14787                                                                                  CTy"PSR"),
14788                                                                              MB(MB(MB(MR(Close
14789                                                                                            (qVar"s",
14790                                                                                             Dest
14791                                                                                               ("CPSR",
14792                                                                                                CTy"PSR",
14793                                                                                                qVar"s"))),
14794                                                                                       Close
14795                                                                                         (Var("v0",
14796                                                                                              CTy"PSR"),
14797                                                                                          MB(MB(MB(MB(MU(Dest
14798                                                                                                           ("C",
14799                                                                                                            bTy,
14800                                                                                                            Var("v0",
14801                                                                                                                CTy"PSR")),
14802                                                                                                         qTy),
14803                                                                                                      Close
14804                                                                                                        (bVar"v",
14805                                                                                                         MU(TP[Var("rm",
14806                                                                                                                   F32),
14807                                                                                                               bVar"v"],
14808                                                                                                            qTy))),
14809                                                                                                   Close
14810                                                                                                     (Var("v",
14811                                                                                                          PTy(F32,
14812                                                                                                              bTy)),
14813                                                                                                      MU(TP[Var("rn",
14814                                                                                                                F32),
14815                                                                                                            Var("v",
14816                                                                                                                PTy(F32,
14817                                                                                                                    bTy))],
14818                                                                                                         qTy))),
14819                                                                                                Close
14820                                                                                                  (Var("v",
14821                                                                                                       PTy(F32,
14822                                                                                                           PTy(F32,
14823                                                                                                               bTy))),
14824                                                                                                   MU(Apply
14825                                                                                                        (LX(ATy(PTy(F32,
14826                                                                                                                    PTy(F32,
14827                                                                                                                        bTy)),
14828                                                                                                                bTy)),
14829                                                                                                         Var("v",
14830                                                                                                             PTy(F32,
14831                                                                                                                 PTy(F32,
14832                                                                                                                     bTy)))),
14833                                                                                                      qTy))),
14834                                                                                             Close
14835                                                                                               (bVar"v0",
14836                                                                                                MU(TP[Var("v",
14837                                                                                                          CTy"PSR"),
14838                                                                                                      bVar"v0"],
14839                                                                                                   qTy))))),
14840                                                                                    Close
14841                                                                                      (Var("v",
14842                                                                                           PTy(CTy"PSR",
14843                                                                                               bTy)),
14844                                                                                       MU(Rupd
14845                                                                                            ("C",
14846                                                                                             Var("v",
14847                                                                                                 PTy(CTy"PSR",
14848                                                                                                     bTy))),
14849                                                                                          qTy))),
14850                                                                                 Close
14851                                                                                   (Var("v",
14852                                                                                        CTy"PSR"),
14853                                                                                    MW(Close
14854                                                                                         (qVar"s",
14855                                                                                          Rupd
14856                                                                                            ("CPSR",
14857                                                                                             TP[qVar"s",
14858                                                                                                Var("v",
14859                                                                                                    CTy"PSR")]))))))),
14860                                                                        MU(LU,
14861                                                                           qTy)))))))))))))),
14862                                MU(LU,qTy)),
14863                            Close
14864                              (AVar uTy,
14865                               Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU)))))))))))
14866;
14867val dfn'MultiplyAccumulate_def = Def
14868  ("dfn'MultiplyAccumulate",
14869   TP[bVar"setflags",Var("d",F4),Var("n",F4),Var("m",F4),Var("a",F4)],
14870   MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
14871      Close
14872        (Var("rn",F32),
14873         MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
14874            Close
14875              (Var("rm",F32),
14876               MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("a",F4)),
14877                  Close
14878                    (Var("ra",F32),
14879                     Let(Var("result",F32),
14880                         Bop(Add,Bop(Mul,Var("rn",F32),Var("rm",F32)),
14881                             Var("ra",F32)),
14882                         MB(Call
14883                              ("write'R",ATy(qTy,PTy(uTy,qTy)),
14884                               TP[Var("result",F32),Var("d",F4)]),
14885                            Close
14886                              (AVar uTy,
14887                               MB(ITE(bVar"setflags",
14888                                      MB(MR(Close
14889                                              (qVar"s",
14890                                               Dest
14891                                                 ("CPSR",CTy"PSR",qVar"s"))),
14892                                         Close
14893                                           (Var("v",CTy"PSR"),
14894                                            MB(MB(MB(MU(TP[Var("v",
14895                                                               CTy"PSR"),
14896                                                           Bop(Bit,
14897                                                               Var("result",
14898                                                                   F32),
14899                                                               LN 31)],qTy),
14900                                                     Close
14901                                                       (Var("v",
14902                                                            PTy(CTy"PSR",
14903                                                                bTy)),
14904                                                        MU(Rupd
14905                                                             ("N",
14906                                                              Var("v",
14907                                                                  PTy(CTy"PSR",
14908                                                                      bTy))),
14909                                                           qTy))),
14910                                                  Close
14911                                                    (Var("v",CTy"PSR"),
14912                                                     MW(Close
14913                                                          (qVar"s",
14914                                                           Rupd
14915                                                             ("CPSR",
14916                                                              TP[qVar"s",
14917                                                                 Var("v",
14918                                                                     CTy"PSR")]))))),
14919                                               Close
14920                                                 (AVar uTy,
14921                                                  MB(MR(Close
14922                                                          (qVar"s",
14923                                                           Dest
14924                                                             ("CPSR",
14925                                                              CTy"PSR",
14926                                                              qVar"s"))),
14927                                                     Close
14928                                                       (Var("v",CTy"PSR"),
14929                                                        MB(MB(MB(MU(TP[Var("v",
14930                                                                           CTy"PSR"),
14931                                                                       EQ(Var("result",
14932                                                                              F32),
14933                                                                          LW(0,
14934                                                                             32))],
14935                                                                    qTy),
14936                                                                 Close
14937                                                                   (Var("v",
14938                                                                        PTy(CTy"PSR",
14939                                                                            bTy)),
14940                                                                    MU(Rupd
14941                                                                         ("Z",
14942                                                                          Var("v",
14943                                                                              PTy(CTy"PSR",
14944                                                                                  bTy))),
14945                                                                       qTy))),
14946                                                              Close
14947                                                                (Var("v",
14948                                                                     CTy"PSR"),
14949                                                                 MW(Close
14950                                                                      (qVar"s",
14951                                                                       Rupd
14952                                                                         ("CPSR",
14953                                                                          TP[qVar"s",
14954                                                                             Var("v",
14955                                                                                 CTy"PSR")]))))),
14956                                                           Close
14957                                                             (AVar uTy,
14958                                                              MB(Call
14959                                                                   ("ArchVersion",
14960                                                                    ATy(qTy,
14961                                                                        PTy(nTy,
14962                                                                            qTy)),
14963                                                                    LU),
14964                                                                 Close
14965                                                                   (nVar"v",
14966                                                                    MB(MU(EQ(nVar"v",
14967                                                                             LN
14968                                                                              4),
14969                                                                          qTy),
14970                                                                       Close
14971                                                                         (bVar"b",
14972                                                                          ITE(bVar"b",
14973                                                                              MB(MR(Close
14974                                                                                      (qVar"s",
14975                                                                                       Dest
14976                                                                                         ("CPSR",
14977                                                                                          CTy"PSR",
14978                                                                                          qVar"s"))),
14979                                                                                 Close
14980                                                                                   (Var("v",
14981                                                                                        CTy"PSR"),
14982                                                                                    MB(MB(MB(MR(Close
14983                                                                                                  (qVar"s",
14984                                                                                                   Dest
14985                                                                                                     ("CPSR",
14986                                                                                                      CTy"PSR",
14987                                                                                                      qVar"s"))),
14988                                                                                             Close
14989                                                                                               (Var("v0",
14990                                                                                                    CTy"PSR"),
14991                                                                                                MB(MB(MB(MB(MB(MU(Dest
14992                                                                                                                    ("C",
14993                                                                                                                     bTy,
14994                                                                                                                     Var("v0",
14995                                                                                                                         CTy"PSR")),
14996                                                                                                                  qTy),
14997                                                                                                               Close
14998                                                                                                                 (bVar"v",
14999                                                                                                                  MU(TP[Var("ra",
15000                                                                                                                            F32),
15001                                                                                                                        bVar"v"],
15002                                                                                                                     qTy))),
15003                                                                                                            Close
15004                                                                                                              (Var("v",
15005                                                                                                                   PTy(F32,
15006                                                                                                                       bTy)),
15007                                                                                                               MU(TP[Var("rm",
15008                                                                                                                         F32),
15009                                                                                                                     Var("v",
15010                                                                                                                         PTy(F32,
15011                                                                                                                             bTy))],
15012                                                                                                                  qTy))),
15013                                                                                                         Close
15014                                                                                                           (Var("v",
15015                                                                                                                PTy(F32,
15016                                                                                                                    PTy(F32,
15017                                                                                                                        bTy))),
15018                                                                                                            MU(TP[Var("rn",
15019                                                                                                                      F32),
15020                                                                                                                  Var("v",
15021                                                                                                                      PTy(F32,
15022                                                                                                                          PTy(F32,
15023                                                                                                                              bTy)))],
15024                                                                                                               qTy))),
15025                                                                                                      Close
15026                                                                                                        (Var("v",
15027                                                                                                             PTy(F32,
15028                                                                                                                 PTy(F32,
15029                                                                                                                     PTy(F32,
15030                                                                                                                         bTy)))),
15031                                                                                                         MU(Apply
15032                                                                                                              (LX(ATy(PTy(F32,
15033                                                                                                                          PTy(F32,
15034                                                                                                                              PTy(F32,
15035                                                                                                                                  bTy))),
15036                                                                                                                      bTy)),
15037                                                                                                               Var("v",
15038                                                                                                                   PTy(F32,
15039                                                                                                                       PTy(F32,
15040                                                                                                                           PTy(F32,
15041                                                                                                                               bTy))))),
15042                                                                                                            qTy))),
15043                                                                                                   Close
15044                                                                                                     (bVar"v0",
15045                                                                                                      MU(TP[Var("v",
15046                                                                                                                CTy"PSR"),
15047                                                                                                            bVar"v0"],
15048                                                                                                         qTy))))),
15049                                                                                          Close
15050                                                                                            (Var("v",
15051                                                                                                 PTy(CTy"PSR",
15052                                                                                                     bTy)),
15053                                                                                             MU(Rupd
15054                                                                                                  ("C",
15055                                                                                                   Var("v",
15056                                                                                                       PTy(CTy"PSR",
15057                                                                                                           bTy))),
15058                                                                                                qTy))),
15059                                                                                       Close
15060                                                                                         (Var("v",
15061                                                                                              CTy"PSR"),
15062                                                                                          MW(Close
15063                                                                                               (qVar"s",
15064                                                                                                Rupd
15065                                                                                                  ("CPSR",
15066                                                                                                   TP[qVar"s",
15067                                                                                                      Var("v",
15068                                                                                                          CTy"PSR")]))))))),
15069                                                                              MU(LU,
15070                                                                                 qTy)))))))))))))),
15071                                      MU(LU,qTy)),
15072                                  Close
15073                                    (AVar uTy,
15074                                     Call
15075                                       ("IncPC",ATy(qTy,PTy(uTy,qTy)),LU)))))))))))))
15076;
15077val dfn'MultiplyLong_def = Def
15078  ("dfn'MultiplyLong",
15079   TP[bVar"accumulate",bVar"signed",bVar"setflags",Var("dhi",F4),
15080      Var("dlo",F4),Var("n",F4),Var("m",F4)],
15081   MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
15082      Close
15083        (Var("rn",F32),
15084         MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
15085            Close
15086              (Var("rm",F32),
15087               MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("dhi",F4)),
15088                  Close
15089                    (Var("rdhi",F32),
15090                     MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("dlo",F4)),
15091                        Close
15092                          (Var("rdlo",F32),
15093                           Let(Var("result",F64),
15094                               Bop(Add,
15095                                   ITE(bVar"signed",
15096                                       Bop(Mul,Mop(SE F64,Var("rn",F32)),
15097                                           Mop(SE F64,Var("rm",F32))),
15098                                       Bop(Mul,
15099                                           Mop(Cast F64,Var("rn",F32)),
15100                                           Mop(Cast F64,Var("rm",F32)))),
15101                                   ITE(bVar"accumulate",
15102                                       CC[Var("rdhi",F32),Var("rdlo",F32)],
15103                                       LW(0,64))),
15104                               MB(Call
15105                                    ("write'R",ATy(qTy,PTy(uTy,qTy)),
15106                                     TP[EX(Var("result",F64),LN 63,LN 32,
15107                                           F32),Var("dhi",F4)]),
15108                                  Close
15109                                    (AVar uTy,
15110                                     MB(Call
15111                                          ("write'R",
15112                                           ATy(qTy,PTy(uTy,qTy)),
15113                                           TP[EX(Var("result",F64),LN 31,
15114                                                 LN 0,F32),Var("dlo",F4)]),
15115                                        Close
15116                                          (AVar uTy,
15117                                           MB(ITE(bVar"setflags",
15118                                                  MB(MR(Close
15119                                                          (qVar"s",
15120                                                           Dest
15121                                                             ("CPSR",
15122                                                              CTy"PSR",
15123                                                              qVar"s"))),
15124                                                     Close
15125                                                       (Var("v",CTy"PSR"),
15126                                                        MB(MB(MB(MU(TP[Var("v",
15127                                                                           CTy"PSR"),
15128                                                                       Bop(Bit,
15129                                                                           Var("result",
15130                                                                               F64),
15131                                                                           LN
15132                                                                            63)],
15133                                                                    qTy),
15134                                                                 Close
15135                                                                   (Var("v",
15136                                                                        PTy(CTy"PSR",
15137                                                                            bTy)),
15138                                                                    MU(Rupd
15139                                                                         ("N",
15140                                                                          Var("v",
15141                                                                              PTy(CTy"PSR",
15142                                                                                  bTy))),
15143                                                                       qTy))),
15144                                                              Close
15145                                                                (Var("v",
15146                                                                     CTy"PSR"),
15147                                                                 MW(Close
15148                                                                      (qVar"s",
15149                                                                       Rupd
15150                                                                         ("CPSR",
15151                                                                          TP[qVar"s",
15152                                                                             Var("v",
15153                                                                                 CTy"PSR")]))))),
15154                                                           Close
15155                                                             (AVar uTy,
15156                                                              MB(MR(Close
15157                                                                      (qVar"s",
15158                                                                       Dest
15159                                                                         ("CPSR",
15160                                                                          CTy"PSR",
15161                                                                          qVar"s"))),
15162                                                                 Close
15163                                                                   (Var("v",
15164                                                                        CTy"PSR"),
15165                                                                    MB(MB(MB(MU(TP[Var("v",
15166                                                                                       CTy"PSR"),
15167                                                                                   EQ(Var("result",
15168                                                                                          F64),
15169                                                                                      LW(0,
15170                                                                                         64))],
15171                                                                                qTy),
15172                                                                             Close
15173                                                                               (Var("v",
15174                                                                                    PTy(CTy"PSR",
15175                                                                                        bTy)),
15176                                                                                MU(Rupd
15177                                                                                     ("Z",
15178                                                                                      Var("v",
15179                                                                                          PTy(CTy"PSR",
15180                                                                                              bTy))),
15181                                                                                   qTy))),
15182                                                                          Close
15183                                                                            (Var("v",
15184                                                                                 CTy"PSR"),
15185                                                                             MW(Close
15186                                                                                  (qVar"s",
15187                                                                                   Rupd
15188                                                                                     ("CPSR",
15189                                                                                      TP[qVar"s",
15190                                                                                         Var("v",
15191                                                                                             CTy"PSR")]))))),
15192                                                                       Close
15193                                                                         (AVar
15194                                                                            uTy,
15195                                                                          MB(Call
15196                                                                               ("ArchVersion",
15197                                                                                ATy(qTy,
15198                                                                                    PTy(nTy,
15199                                                                                        qTy)),
15200                                                                                LU),
15201                                                                             Close
15202                                                                               (nVar"v",
15203                                                                                MB(MU(EQ(nVar"v",
15204                                                                                         LN
15205                                                                                          4),
15206                                                                                      qTy),
15207                                                                                   Close
15208                                                                                     (bVar"b",
15209                                                                                      ITE(bVar"b",
15210                                                                                          MB(MR(Close
15211                                                                                                  (qVar"s",
15212                                                                                                   Dest
15213                                                                                                     ("CPSR",
15214                                                                                                      CTy"PSR",
15215                                                                                                      qVar"s"))),
15216                                                                                             Close
15217                                                                                               (Var("v",
15218                                                                                                    CTy"PSR"),
15219                                                                                                MB(MB(MB(MB(MR(Close
15220                                                                                                                 (qVar"s",
15221                                                                                                                  Dest
15222                                                                                                                    ("CPSR",
15223                                                                                                                     CTy"PSR",
15224                                                                                                                     qVar"s"))),
15225                                                                                                            Close
15226                                                                                                              (Var("v0",
15227                                                                                                                   CTy"PSR"),
15228                                                                                                               MB(MB(MB(MB(MB(MB(MU(Dest
15229                                                                                                                                      ("C",
15230                                                                                                                                       bTy,
15231                                                                                                                                       Var("v0",
15232                                                                                                                                           CTy"PSR")),
15233                                                                                                                                    qTy),
15234                                                                                                                                 Close
15235                                                                                                                                   (bVar"v",
15236                                                                                                                                    MU(TP[Var("rdlo",
15237                                                                                                                                              F32),
15238                                                                                                                                          bVar"v"],
15239                                                                                                                                       qTy))),
15240                                                                                                                              Close
15241                                                                                                                                (Var("v",
15242                                                                                                                                     PTy(F32,
15243                                                                                                                                         bTy)),
15244                                                                                                                                 MU(TP[Var("rdhi",
15245                                                                                                                                           F32),
15246                                                                                                                                       Var("v",
15247                                                                                                                                           PTy(F32,
15248                                                                                                                                               bTy))],
15249                                                                                                                                    qTy))),
15250                                                                                                                           Close
15251                                                                                                                             (Var("v",
15252                                                                                                                                  PTy(F32,
15253                                                                                                                                      PTy(F32,
15254                                                                                                                                          bTy))),
15255                                                                                                                              MU(TP[Var("rm",
15256                                                                                                                                        F32),
15257                                                                                                                                    Var("v",
15258                                                                                                                                        PTy(F32,
15259                                                                                                                                            PTy(F32,
15260                                                                                                                                                bTy)))],
15261                                                                                                                                 qTy))),
15262                                                                                                                        Close
15263                                                                                                                          (Var("v",
15264                                                                                                                               PTy(F32,
15265                                                                                                                                   PTy(F32,
15266                                                                                                                                       PTy(F32,
15267                                                                                                                                           bTy)))),
15268                                                                                                                           MU(TP[Var("rn",
15269                                                                                                                                     F32),
15270                                                                                                                                 Var("v",
15271                                                                                                                                     PTy(F32,
15272                                                                                                                                         PTy(F32,
15273                                                                                                                                             PTy(F32,
15274                                                                                                                                                 bTy))))],
15275                                                                                                                              qTy))),
15276                                                                                                                     Close
15277                                                                                                                       (Var("v",
15278                                                                                                                            PTy(F32,
15279                                                                                                                                PTy(F32,
15280                                                                                                                                    PTy(F32,
15281                                                                                                                                        PTy(F32,
15282                                                                                                                                            bTy))))),
15283                                                                                                                        MU(Apply
15284                                                                                                                             (LX(ATy(PTy(F32,
15285                                                                                                                                         PTy(F32,
15286                                                                                                                                             PTy(F32,
15287                                                                                                                                                 PTy(F32,
15288                                                                                                                                                     bTy)))),
15289                                                                                                                                     bTy)),
15290                                                                                                                              Var("v",
15291                                                                                                                                  PTy(F32,
15292                                                                                                                                      PTy(F32,
15293                                                                                                                                          PTy(F32,
15294                                                                                                                                              PTy(F32,
15295                                                                                                                                                  bTy)))))),
15296                                                                                                                           qTy))),
15297                                                                                                                  Close
15298                                                                                                                    (bVar"v0",
15299                                                                                                                     MU(TP[Var("v",
15300                                                                                                                               CTy"PSR"),
15301                                                                                                                           bVar"v0"],
15302                                                                                                                        qTy))))),
15303                                                                                                         Close
15304                                                                                                           (Var("v",
15305                                                                                                                PTy(CTy"PSR",
15306                                                                                                                    bTy)),
15307                                                                                                            MU(Rupd
15308                                                                                                                 ("C",
15309                                                                                                                  Var("v",
15310                                                                                                                      PTy(CTy"PSR",
15311                                                                                                                          bTy))),
15312                                                                                                               qTy))),
15313                                                                                                      Close
15314                                                                                                        (Var("v",
15315                                                                                                             CTy"PSR"),
15316                                                                                                         MW(Close
15317                                                                                                              (qVar"s",
15318                                                                                                               Rupd
15319                                                                                                                 ("CPSR",
15320                                                                                                                  TP[qVar"s",
15321                                                                                                                     Var("v",
15322                                                                                                                         CTy"PSR")]))))),
15323                                                                                                   Close
15324                                                                                                     (AVar
15325                                                                                                        uTy,
15326                                                                                                      MB(MR(Close
15327                                                                                                              (qVar"s",
15328                                                                                                               Dest
15329                                                                                                                 ("CPSR",
15330                                                                                                                  CTy"PSR",
15331                                                                                                                  qVar"s"))),
15332                                                                                                         Close
15333                                                                                                           (Var("v",
15334                                                                                                                CTy"PSR"),
15335                                                                                                            MB(MB(MB(MR(Close
15336                                                                                                                          (qVar"s",
15337                                                                                                                           Dest
15338                                                                                                                             ("CPSR",
15339                                                                                                                              CTy"PSR",
15340                                                                                                                              qVar"s"))),
15341                                                                                                                     Close
15342                                                                                                                       (Var("v0",
15343                                                                                                                            CTy"PSR"),
15344                                                                                                                        MB(MB(MB(MB(MB(MB(MU(Dest
15345                                                                                                                                               ("V",
15346                                                                                                                                                bTy,
15347                                                                                                                                                Var("v0",
15348                                                                                                                                                    CTy"PSR")),
15349                                                                                                                                             qTy),
15350                                                                                                                                          Close
15351                                                                                                                                            (bVar"v",
15352                                                                                                                                             MU(TP[Var("rdlo",
15353                                                                                                                                                       F32),
15354                                                                                                                                                   bVar"v"],
15355                                                                                                                                                qTy))),
15356                                                                                                                                       Close
15357                                                                                                                                         (Var("v",
15358                                                                                                                                              PTy(F32,
15359                                                                                                                                                  bTy)),
15360                                                                                                                                          MU(TP[Var("rdhi",
15361                                                                                                                                                    F32),
15362                                                                                                                                                Var("v",
15363                                                                                                                                                    PTy(F32,
15364                                                                                                                                                        bTy))],
15365                                                                                                                                             qTy))),
15366                                                                                                                                    Close
15367                                                                                                                                      (Var("v",
15368                                                                                                                                           PTy(F32,
15369                                                                                                                                               PTy(F32,
15370                                                                                                                                                   bTy))),
15371                                                                                                                                       MU(TP[Var("rm",
15372                                                                                                                                                 F32),
15373                                                                                                                                             Var("v",
15374                                                                                                                                                 PTy(F32,
15375                                                                                                                                                     PTy(F32,
15376                                                                                                                                                         bTy)))],
15377                                                                                                                                          qTy))),
15378                                                                                                                                 Close
15379                                                                                                                                   (Var("v",
15380                                                                                                                                        PTy(F32,
15381                                                                                                                                            PTy(F32,
15382                                                                                                                                                PTy(F32,
15383                                                                                                                                                    bTy)))),
15384                                                                                                                                    MU(TP[Var("rn",
15385                                                                                                                                              F32),
15386                                                                                                                                          Var("v",
15387                                                                                                                                              PTy(F32,
15388                                                                                                                                                  PTy(F32,
15389                                                                                                                                                      PTy(F32,
15390                                                                                                                                                          bTy))))],
15391                                                                                                                                       qTy))),
15392                                                                                                                              Close
15393                                                                                                                                (Var("v",
15394                                                                                                                                     PTy(F32,
15395                                                                                                                                         PTy(F32,
15396                                                                                                                                             PTy(F32,
15397                                                                                                                                                 PTy(F32,
15398                                                                                                                                                     bTy))))),
15399                                                                                                                                 MU(Apply
15400                                                                                                                                      (LX(ATy(PTy(F32,
15401                                                                                                                                                  PTy(F32,
15402                                                                                                                                                      PTy(F32,
15403                                                                                                                                                          PTy(F32,
15404                                                                                                                                                              bTy)))),
15405                                                                                                                                              bTy)),
15406                                                                                                                                       Var("v",
15407                                                                                                                                           PTy(F32,
15408                                                                                                                                               PTy(F32,
15409                                                                                                                                                   PTy(F32,
15410                                                                                                                                                       PTy(F32,
15411                                                                                                                                                           bTy)))))),
15412                                                                                                                                    qTy))),
15413                                                                                                                           Close
15414                                                                                                                             (bVar"v0",
15415                                                                                                                              MU(TP[Var("v",
15416                                                                                                                                        CTy"PSR"),
15417                                                                                                                                    bVar"v0"],
15418                                                                                                                                 qTy))))),
15419                                                                                                                  Close
15420                                                                                                                    (Var("v",
15421                                                                                                                         PTy(CTy"PSR",
15422                                                                                                                             bTy)),
15423                                                                                                                     MU(Rupd
15424                                                                                                                          ("V",
15425                                                                                                                           Var("v",
15426                                                                                                                               PTy(CTy"PSR",
15427                                                                                                                                   bTy))),
15428                                                                                                                        qTy))),
15429                                                                                                               Close
15430                                                                                                                 (Var("v",
15431                                                                                                                      CTy"PSR"),
15432                                                                                                                  MW(Close
15433                                                                                                                       (qVar"s",
15434                                                                                                                        Rupd
15435                                                                                                                          ("CPSR",
15436                                                                                                                           TP[qVar"s",
15437                                                                                                                              Var("v",
15438                                                                                                                                  CTy"PSR")]))))))))))),
15439                                                                                          MU(LU,
15440                                                                                             qTy)))))))))))))),
15441                                                  MU(LU,qTy)),
15442                                              Close
15443                                                (AVar uTy,
15444                                                 Call
15445                                                   ("IncPC",
15446                                                    ATy(qTy,PTy(uTy,qTy)),
15447                                                    LU)))))))))))))))))
15448;
15449val dfn'MultiplyAccumulateAccumulate_def = Def
15450  ("dfn'MultiplyAccumulateAccumulate",
15451   TP[Var("dhi",F4),Var("dlo",F4),Var("n",F4),Var("m",F4)],
15452   MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
15453      Close
15454        (Var("v",F32),
15455         MB(MB(MB(MB(MU(Mop(Cast F64,Var("v",F32)),qTy),
15456                     Close
15457                       (Var("v",F64),
15458                        MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
15459                           Close
15460                             (Var("v0",F32),
15461                              MB(MU(Mop(Cast F64,Var("v0",F32)),qTy),
15462                                 Close
15463                                   (Var("v0",F64),
15464                                    MU(Bop(Mul,Var("v",F64),Var("v0",F64)),
15465                                       qTy))))))),
15466                  Close
15467                    (Var("v",F64),
15468                     MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("dhi",F4)),
15469                        Close
15470                          (Var("v0",F32),
15471                           MB(MU(Mop(Cast F64,Var("v0",F32)),qTy),
15472                              Close
15473                                (Var("v0",F64),
15474                                 MU(Bop(Add,Var("v",F64),Var("v0",F64)),
15475                                    qTy))))))),
15476               Close
15477                 (Var("v",F64),
15478                  MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("dlo",F4)),
15479                     Close
15480                       (Var("v0",F32),
15481                        MB(MU(Mop(Cast F64,Var("v0",F32)),qTy),
15482                           Close
15483                             (Var("v0",F64),
15484                              MU(Bop(Add,Var("v",F64),Var("v0",F64)),qTy))))))),
15485            Close
15486              (Var("result",F64),
15487               MB(Call
15488                    ("write'R",ATy(qTy,PTy(uTy,qTy)),
15489                     TP[EX(Var("result",F64),LN 63,LN 32,F32),
15490                        Var("dhi",F4)]),
15491                  Close
15492                    (AVar uTy,
15493                     MB(Call
15494                          ("write'R",ATy(qTy,PTy(uTy,qTy)),
15495                           TP[EX(Var("result",F64),LN 31,LN 0,F32),
15496                              Var("dlo",F4)]),
15497                        Close
15498                          (AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))))))))
15499;
15500val dfn'MultiplySubtract_def = Def
15501  ("dfn'MultiplySubtract",
15502   TP[Var("d",F4),Var("n",F4),Var("m",F4),Var("a",F4)],
15503   MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("a",F4)),
15504      Close
15505        (Var("v",F32),
15506         MB(MB(MB(MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
15507                     Close
15508                       (Var("v0",F32),
15509                        MB(MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
15510                              Close
15511                                (Var("v1",F32),
15512                                 MU(Bop(Mul,Var("v0",F32),Var("v1",F32)),
15513                                    qTy))),
15514                           Close
15515                             (Var("v0",F32),
15516                              MU(Bop(Sub,Var("v",F32),Var("v0",F32)),qTy))))),
15517                  Close(Var("v",F32),MU(TP[Var("v",F32),Var("d",F4)],qTy))),
15518               Close
15519                 (Var("v",PTy(F32,F4)),
15520                  Call
15521                    ("write'R",ATy(qTy,PTy(uTy,qTy)),Var("v",PTy(F32,F4))))),
15522            Close(AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))))
15523;
15524val dfn'Signed16Multiply32Accumulate_def = Def
15525  ("dfn'Signed16Multiply32Accumulate",
15526   TP[bVar"m_high",bVar"n_high",Var("d",F4),Var("n",F4),Var("m",F4),
15527      Var("a",F4)],
15528   MB(ITE(bVar"n_high",
15529          MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
15530             Close(Var("v",F32),MU(EX(Var("v",F32),LN 31,LN 16,F16),qTy))),
15531          MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
15532             Close(Var("v",F32),MU(EX(Var("v",F32),LN 15,LN 0,F16),qTy)))),
15533      Close
15534        (Var("operand1",F16),
15535         MB(ITE(bVar"m_high",
15536                MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
15537                   Close
15538                     (Var("v",F32),
15539                      MU(EX(Var("v",F32),LN 31,LN 16,F16),qTy))),
15540                MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
15541                   Close
15542                     (Var("v",F32),MU(EX(Var("v",F32),LN 15,LN 0,F16),qTy)))),
15543            Close
15544              (Var("operand2",F16),
15545               MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("a",F4)),
15546                  Close
15547                    (Var("v",F32),
15548                     MB(MB(MU(Mop(Cast iTy,Var("v",F32)),qTy),
15549                           Close
15550                             (iVar"v",
15551                              MU(Bop(Add,
15552                                     Bop(Mul,
15553                                         Mop(Cast iTy,Var("operand1",F16)),
15554                                         Mop(Cast iTy,Var("operand2",F16))),
15555                                     iVar"v"),qTy))),
15556                        Close
15557                          (iVar"result",
15558                           Let(Var("result32",F32),
15559                               Mop(Cast F32,iVar"result"),
15560                               MB(Call
15561                                    ("write'R",ATy(qTy,PTy(uTy,qTy)),
15562                                     TP[Var("result32",F32),Var("d",F4)]),
15563                                  Close
15564                                    (AVar uTy,
15565                                     MB(ITE(Mop(Not,
15566                                                EQ(iVar"result",
15567                                                   Mop(Cast iTy,
15568                                                       Var("result32",F32)))),
15569                                            MB(MR(Close
15570                                                    (qVar"s",
15571                                                     Dest
15572                                                       ("CPSR",CTy"PSR",
15573                                                        qVar"s"))),
15574                                               Close
15575                                                 (Var("v",CTy"PSR"),
15576                                                  MB(MB(MU(TP[Var("v",
15577                                                                  CTy"PSR"),
15578                                                              LT],qTy),
15579                                                        Close
15580                                                          (Var("v",
15581                                                               PTy(CTy"PSR",
15582                                                                   bTy)),
15583                                                           MU(Rupd
15584                                                                ("Q",
15585                                                                 Var("v",
15586                                                                     PTy(CTy"PSR",
15587                                                                         bTy))),
15588                                                              qTy))),
15589                                                     Close
15590                                                       (Var("v",CTy"PSR"),
15591                                                        MW(Close
15592                                                             (qVar"s",
15593                                                              Rupd
15594                                                                ("CPSR",
15595                                                                 TP[qVar"s",
15596                                                                    Var("v",
15597                                                                        CTy"PSR")]))))))),
15598                                            MU(LU,qTy)),
15599                                        Close
15600                                          (AVar uTy,
15601                                           Call
15602                                             ("IncPC",
15603                                              ATy(qTy,PTy(uTy,qTy)),LU)))))))))))))))
15604;
15605val dfn'Signed16Multiply32Result_def = Def
15606  ("dfn'Signed16Multiply32Result",
15607   TP[bVar"m_high",bVar"n_high",Var("d",F4),Var("n",F4),Var("m",F4)],
15608   MB(ITE(bVar"n_high",
15609          MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
15610             Close(Var("v",F32),MU(EX(Var("v",F32),LN 31,LN 16,F16),qTy))),
15611          MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
15612             Close(Var("v",F32),MU(EX(Var("v",F32),LN 15,LN 0,F16),qTy)))),
15613      Close
15614        (Var("operand1",F16),
15615         MB(ITE(bVar"m_high",
15616                MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
15617                   Close
15618                     (Var("v",F32),
15619                      MU(EX(Var("v",F32),LN 31,LN 16,F16),qTy))),
15620                MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
15621                   Close
15622                     (Var("v",F32),MU(EX(Var("v",F32),LN 15,LN 0,F16),qTy)))),
15623            Close
15624              (Var("operand2",F16),
15625               MB(Call
15626                    ("write'R",ATy(qTy,PTy(uTy,qTy)),
15627                     TP[Mop(Cast F32,
15628                            Bop(Mul,Mop(Cast iTy,Var("operand1",F16)),
15629                                Mop(Cast iTy,Var("operand2",F16)))),
15630                        Var("d",F4)]),
15631                  Close(AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))))))
15632;
15633val dfn'Signed16x32Multiply32Accumulate_def = Def
15634  ("dfn'Signed16x32Multiply32Accumulate",
15635   TP[bVar"m_high",Var("d",F4),Var("n",F4),Var("m",F4),Var("a",F4)],
15636   MB(ITE(bVar"m_high",
15637          MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
15638             Close(Var("v",F32),MU(EX(Var("v",F32),LN 31,LN 16,F16),qTy))),
15639          MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
15640             Close(Var("v",F32),MU(EX(Var("v",F32),LN 15,LN 0,F16),qTy)))),
15641      Close
15642        (Var("operand2",F16),
15643         Let(iVar"sh16",Bop(Exp,LI 2,LN 16),
15644             MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
15645                Close
15646                  (Var("v",F32),
15647                   MB(MB(MB(MB(MU(Mop(Cast iTy,Var("v",F32)),qTy),
15648                               Close
15649                                 (iVar"v",
15650                                  MU(Bop(Mul,iVar"v",
15651                                         Mop(Cast iTy,Var("operand2",F16))),
15652                                     qTy))),
15653                            Close
15654                              (iVar"v",
15655                               MB(Call
15656                                    ("R",ATy(qTy,PTy(F32,qTy)),Var("a",F4)),
15657                                  Close
15658                                    (Var("v0",F32),
15659                                     MB(MB(MU(Mop(Cast iTy,Var("v0",F32)),
15660                                              qTy),
15661                                           Close
15662                                             (iVar"v",
15663                                              MU(Bop(Mul,iVar"v",
15664                                                     iVar"sh16"),qTy))),
15665                                        Close
15666                                          (iVar"v0",
15667                                           MU(Bop(Add,iVar"v",iVar"v0"),
15668                                              qTy))))))),
15669                         Close
15670                           (iVar"v",MU(Bop(Div,iVar"v",iVar"sh16"),qTy))),
15671                      Close
15672                        (iVar"result",
15673                         Let(Var("result32",F32),
15674                             Mop(Cast F32,iVar"result"),
15675                             MB(Call
15676                                  ("write'R",ATy(qTy,PTy(uTy,qTy)),
15677                                   TP[Var("result32",F32),Var("d",F4)]),
15678                                Close
15679                                  (AVar uTy,
15680                                   MB(ITE(Mop(Not,
15681                                              EQ(iVar"result",
15682                                                 Mop(Cast iTy,
15683                                                     Var("result32",F32)))),
15684                                          MB(MR(Close
15685                                                  (qVar"s",
15686                                                   Dest
15687                                                     ("CPSR",CTy"PSR",
15688                                                      qVar"s"))),
15689                                             Close
15690                                               (Var("v",CTy"PSR"),
15691                                                MB(MB(MU(TP[Var("v",
15692                                                                CTy"PSR"),
15693                                                            LT],qTy),
15694                                                      Close
15695                                                        (Var("v",
15696                                                             PTy(CTy"PSR",
15697                                                                 bTy)),
15698                                                         MU(Rupd
15699                                                              ("Q",
15700                                                               Var("v",
15701                                                                   PTy(CTy"PSR",
15702                                                                       bTy))),
15703                                                            qTy))),
15704                                                   Close
15705                                                     (Var("v",CTy"PSR"),
15706                                                      MW(Close
15707                                                           (qVar"s",
15708                                                            Rupd
15709                                                              ("CPSR",
15710                                                               TP[qVar"s",
15711                                                                  Var("v",
15712                                                                      CTy"PSR")]))))))),
15713                                          MU(LU,qTy)),
15714                                      Close
15715                                        (AVar uTy,
15716                                         Call
15717                                           ("IncPC",ATy(qTy,PTy(uTy,qTy)),
15718                                            LU))))))))))))))
15719;
15720val dfn'Signed16x32Multiply32Result_def = Def
15721  ("dfn'Signed16x32Multiply32Result",
15722   TP[bVar"m_high",Var("d",F4),Var("n",F4),Var("m",F4)],
15723   MB(ITE(bVar"m_high",
15724          MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
15725             Close(Var("v",F32),MU(EX(Var("v",F32),LN 31,LN 16,F16),qTy))),
15726          MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
15727             Close(Var("v",F32),MU(EX(Var("v",F32),LN 15,LN 0,F16),qTy)))),
15728      Close
15729        (Var("operand2",F16),
15730         MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
15731            Close
15732              (Var("v",F32),
15733               MB(MB(MB(MU(Mop(Cast iTy,Var("v",F32)),qTy),
15734                        Close
15735                          (iVar"v",
15736                           MU(Bop(Mul,iVar"v",
15737                                  Mop(Cast iTy,Var("operand2",F16))),qTy))),
15738                     Close
15739                       (iVar"v",
15740                        MU(Bop(Div,iVar"v",Bop(Exp,LI 2,LN 16)),qTy))),
15741                  Close
15742                    (iVar"result",
15743                     MB(Call
15744                          ("write'R",ATy(qTy,PTy(uTy,qTy)),
15745                           TP[Mop(Cast F32,iVar"result"),Var("d",F4)]),
15746                        Close
15747                          (AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))))))))
15748;
15749val dfn'Signed16Multiply64Accumulate_def = Def
15750  ("dfn'Signed16Multiply64Accumulate",
15751   TP[bVar"m_high",bVar"n_high",Var("dhi",F4),Var("dlo",F4),Var("n",F4),
15752      Var("m",F4)],
15753   MB(ITE(bVar"n_high",
15754          MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
15755             Close(Var("v",F32),MU(EX(Var("v",F32),LN 31,LN 16,F16),qTy))),
15756          MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
15757             Close(Var("v",F32),MU(EX(Var("v",F32),LN 15,LN 0,F16),qTy)))),
15758      Close
15759        (Var("operand1",F16),
15760         MB(ITE(bVar"m_high",
15761                MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
15762                   Close
15763                     (Var("v",F32),
15764                      MU(EX(Var("v",F32),LN 31,LN 16,F16),qTy))),
15765                MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
15766                   Close
15767                     (Var("v",F32),MU(EX(Var("v",F32),LN 15,LN 0,F16),qTy)))),
15768            Close
15769              (Var("operand2",F16),
15770               MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("dhi",F4)),
15771                  Close
15772                    (Var("v",F32),
15773                     MB(MB(MB(MB(Call
15774                                   ("R",ATy(qTy,PTy(F32,qTy)),
15775                                    Var("dlo",F4)),
15776                                 Close
15777                                   (Var("v0",F32),
15778                                    MU(CC[Var("v",F32),Var("v0",F32)],qTy))),
15779                              Close
15780                                (Var("v",F64),
15781                                 MU(Mop(Cast iTy,Var("v",F64)),qTy))),
15782                           Close
15783                             (iVar"v",
15784                              MU(Bop(Add,
15785                                     Bop(Mul,
15786                                         Mop(Cast iTy,Var("operand1",F16)),
15787                                         Mop(Cast iTy,Var("operand2",F16))),
15788                                     iVar"v"),qTy))),
15789                        Close
15790                          (iVar"result",
15791                           Let(Var("result64",F64),
15792                               Mop(Cast F64,iVar"result"),
15793                               MB(Call
15794                                    ("write'R",ATy(qTy,PTy(uTy,qTy)),
15795                                     TP[EX(Var("result64",F64),LN 63,
15796                                           LN 32,F32),Var("dhi",F4)]),
15797                                  Close
15798                                    (AVar uTy,
15799                                     MB(Call
15800                                          ("write'R",
15801                                           ATy(qTy,PTy(uTy,qTy)),
15802                                           TP[EX(Var("result64",F64),
15803                                                 LN 31,LN 0,F32),
15804                                              Var("dlo",F4)]),
15805                                        Close
15806                                          (AVar uTy,
15807                                           Call
15808                                             ("IncPC",
15809                                              ATy(qTy,PTy(uTy,qTy)),LU)))))))))))))))
15810;
15811val dfn'SignedMultiplyDual_def = Def
15812  ("dfn'SignedMultiplyDual",
15813   TP[bVar"sub",bVar"m_swap",Var("d",F4),Var("n",F4),Var("m",F4),
15814      Var("a",F4)],
15815   MB(ITE(bVar"m_swap",
15816          MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
15817             Close
15818               (Var("v",F32),
15819                MB(MU(TP[Var("v",F32),LN 16],qTy),
15820                   Close
15821                     (Var("v",PTy(F32,nTy)),
15822                      Call
15823                        ("ROR",ATy(qTy,PTy(F32,qTy)),Var("v",PTy(F32,nTy))))))),
15824          Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4))),
15825      Close
15826        (Var("operand2",F32),
15827         MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
15828            Close
15829              (Var("v",F32),
15830               MB(MB(MB(MU(EX(Var("v",F32),LN 15,LN 0,F16),qTy),
15831                        Close
15832                          (Var("v",F16),MU(Mop(Cast iTy,Var("v",F16)),qTy))),
15833                     Close
15834                       (iVar"v",
15835                        MU(Bop(Mul,iVar"v",
15836                               Mop(Cast iTy,
15837                                   EX(Var("operand2",F32),LN 15,LN 0,F16))),
15838                           qTy))),
15839                  Close
15840                    (iVar"product1",
15841                     MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
15842                        Close
15843                          (Var("v",F32),
15844                           MB(MB(MB(MU(EX(Var("v",F32),LN 31,LN 16,F16),
15845                                       qTy),
15846                                    Close
15847                                      (Var("v",F16),
15848                                       MU(Mop(Cast iTy,Var("v",F16)),qTy))),
15849                                 Close
15850                                   (iVar"v",
15851                                    MU(Bop(Mul,iVar"v",
15852                                           Mop(Cast iTy,
15853                                               EX(Var("operand2",F32),
15854                                                  LN 31,LN 16,F16))),qTy))),
15855                              Close
15856                                (iVar"product2",
15857                                 MB(ITE(EQ(Var("a",F4),LW(15,4)),
15858                                        MU(LW(0,32),qTy),
15859                                        Call
15860                                          ("R",ATy(qTy,PTy(F32,qTy)),
15861                                           Var("a",F4))),
15862                                    Close
15863                                      (Var("acc",F32),
15864                                       Let(iVar"result",
15865                                           ITE(bVar"sub",
15866                                               Bop(Add,
15867                                                   Bop(Sub,iVar"product1",
15868                                                       iVar"product2"),
15869                                                   Mop(Cast iTy,
15870                                                       Var("acc",F32))),
15871                                               Bop(Add,
15872                                                   Bop(Add,iVar"product1",
15873                                                       iVar"product2"),
15874                                                   Mop(Cast iTy,
15875                                                       Var("acc",F32)))),
15876                                           Let(Var("result32",F32),
15877                                               Mop(Cast F32,iVar"result"),
15878                                               MB(Call
15879                                                    ("write'R",
15880                                                     ATy(qTy,PTy(uTy,qTy)),
15881                                                     TP[Var("result32",F32),
15882                                                        Var("d",F4)]),
15883                                                  Close
15884                                                    (AVar uTy,
15885                                                     MB(ITE(Mop(Not,
15886                                                                EQ(iVar"result",
15887                                                                   Mop(Cast
15888                                                                         iTy,
15889                                                                       Var("result32",
15890                                                                           F32)))),
15891                                                            MB(MR(Close
15892                                                                    (qVar"s",
15893                                                                     Dest
15894                                                                       ("CPSR",
15895                                                                        CTy"PSR",
15896                                                                        qVar"s"))),
15897                                                               Close
15898                                                                 (Var("v",
15899                                                                      CTy"PSR"),
15900                                                                  MB(MB(MU(TP[Var("v",
15901                                                                                  CTy"PSR"),
15902                                                                              LT],
15903                                                                           qTy),
15904                                                                        Close
15905                                                                          (Var("v",
15906                                                                               PTy(CTy"PSR",
15907                                                                                   bTy)),
15908                                                                           MU(Rupd
15909                                                                                ("Q",
15910                                                                                 Var("v",
15911                                                                                     PTy(CTy"PSR",
15912                                                                                         bTy))),
15913                                                                              qTy))),
15914                                                                     Close
15915                                                                       (Var("v",
15916                                                                            CTy"PSR"),
15917                                                                        MW(Close
15918                                                                             (qVar"s",
15919                                                                              Rupd
15920                                                                                ("CPSR",
15921                                                                                 TP[qVar"s",
15922                                                                                    Var("v",
15923                                                                                        CTy"PSR")]))))))),
15924                                                            MU(LU,qTy)),
15925                                                        Close
15926                                                          (AVar uTy,
15927                                                           Call
15928                                                             ("IncPC",
15929                                                              ATy(qTy,
15930                                                                  PTy(uTy,
15931                                                                      qTy)),
15932                                                              LU))))))))))))))))))))
15933;
15934val dfn'SignedMultiplyLongDual_def = Def
15935  ("dfn'SignedMultiplyLongDual",
15936   TP[bVar"sub",bVar"m_swap",Var("dhi",F4),Var("dlo",F4),Var("n",F4),
15937      Var("m",F4)],
15938   MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
15939      Close
15940        (Var("Rn",F32),
15941         MB(ITE(bVar"m_swap",
15942                MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
15943                   Close
15944                     (Var("v",F32),
15945                      MB(MU(TP[Var("v",F32),LN 16],qTy),
15946                         Close
15947                           (Var("v",PTy(F32,nTy)),
15948                            Call
15949                              ("ROR",ATy(qTy,PTy(F32,qTy)),
15950                               Var("v",PTy(F32,nTy))))))),
15951                Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4))),
15952            Close
15953              (Var("operand2",F32),
15954               Let(iVar"product1",
15955                   Bop(Mul,Mop(Cast iTy,EX(Var("Rn",F32),LN 15,LN 0,F16)),
15956                       Mop(Cast iTy,EX(Var("operand2",F32),LN 15,LN 0,F16))),
15957                   Let(iVar"product2",
15958                       Bop(Mul,
15959                           Mop(Cast iTy,EX(Var("Rn",F32),LN 31,LN 16,F16)),
15960                           Mop(Cast iTy,
15961                               EX(Var("operand2",F32),LN 31,LN 16,F16))),
15962                       MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("dhi",F4)),
15963                          Close
15964                            (Var("v",F32),
15965                             MB(MB(Call
15966                                     ("R",ATy(qTy,PTy(F32,qTy)),
15967                                      Var("dlo",F4)),
15968                                   Close
15969                                     (Var("v0",F32),
15970                                      MU(CC[Var("v",F32),Var("v0",F32)],
15971                                         qTy))),
15972                                Close
15973                                  (Var("acc",F64),
15974                                   Let(Var("result64",F64),
15975                                       Mop(Cast F64,
15976                                           ITE(bVar"sub",
15977                                               Bop(Add,
15978                                                   Bop(Sub,iVar"product1",
15979                                                       iVar"product2"),
15980                                                   Mop(Cast iTy,
15981                                                       Var("acc",F64))),
15982                                               Bop(Add,
15983                                                   Bop(Add,iVar"product1",
15984                                                       iVar"product2"),
15985                                                   Mop(Cast iTy,
15986                                                       Var("acc",F64))))),
15987                                       MB(Call
15988                                            ("write'R",
15989                                             ATy(qTy,PTy(uTy,qTy)),
15990                                             TP[EX(Var("result64",F64),
15991                                                   LN 63,LN 32,F32),
15992                                                Var("dhi",F4)]),
15993                                          Close
15994                                            (AVar uTy,
15995                                             MB(Call
15996                                                  ("write'R",
15997                                                   ATy(qTy,PTy(uTy,qTy)),
15998                                                   TP[EX(Var("result64",
15999                                                             F64),LN 31,
16000                                                         LN 0,F32),
16001                                                      Var("dlo",F4)]),
16002                                                Close
16003                                                  (AVar uTy,
16004                                                   Call
16005                                                     ("IncPC",
16006                                                      ATy(qTy,PTy(uTy,qTy)),
16007                                                      LU)))))))))))))))))
16008;
16009val dfn'SignedMostSignificantMultiply_def = Def
16010  ("dfn'SignedMostSignificantMultiply",
16011   TP[bVar"round",Var("d",F4),Var("n",F4),Var("m",F4),Var("a",F4)],
16012   MB(ITE(EQ(Var("a",F4),LW(15,4)),MU(LW(0,32),qTy),
16013          Call("R",ATy(qTy,PTy(F32,qTy)),Var("a",F4))),
16014      Close
16015        (Var("acc",F32),
16016         MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
16017            Close
16018              (Var("v",F32),
16019               MB(MB(MB(MU(Mop(Cast iTy,Var("v",F32)),qTy),
16020                        Close
16021                          (iVar"v",
16022                           MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
16023                              Close
16024                                (Var("v0",F32),
16025                                 MB(MU(Mop(Cast iTy,Var("v0",F32)),qTy),
16026                                    Close
16027                                      (iVar"v0",
16028                                       MU(Bop(Mul,iVar"v",iVar"v0"),qTy))))))),
16029                     Close
16030                       (iVar"v",
16031                        MU(Bop(Add,
16032                               Mop(Cast iTy,
16033                                   Bop(Lsl,Mop(Cast F64,Var("acc",F32)),
16034                                       LN 32)),iVar"v"),qTy))),
16035                  Close
16036                    (iVar"result",
16037                     MB(Call
16038                          ("write'R",ATy(qTy,PTy(uTy,qTy)),
16039                           TP[EX(Mop(Cast F64,
16040                                     ITE(bVar"round",
16041                                         Bop(Add,iVar"result",
16042                                             LI 2147483648),iVar"result")),
16043                                 LN 63,LN 32,F32),Var("d",F4)]),
16044                        Close
16045                          (AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))))))))
16046;
16047val dfn'SignedMostSignificantMultiplySubtract_def = Def
16048  ("dfn'SignedMostSignificantMultiplySubtract",
16049   TP[bVar"round",Var("d",F4),Var("n",F4),Var("m",F4),Var("a",F4)],
16050   MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("a",F4)),
16051      Close
16052        (Var("v",F32),
16053         MB(MB(MB(MB(MU(Mop(Cast F64,Var("v",F32)),qTy),
16054                     Close
16055                       (Var("v",F64),MU(Bop(Lsl,Var("v",F64),LN 32),qTy))),
16056                  Close(Var("v",F64),MU(Mop(Cast iTy,Var("v",F64)),qTy))),
16057               Close
16058                 (iVar"v",
16059                  MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
16060                     Close
16061                       (Var("v0",F32),
16062                        MB(MB(MU(Mop(Cast iTy,Var("v0",F32)),qTy),
16063                              Close
16064                                (iVar"v",
16065                                 MB(Call
16066                                      ("R",ATy(qTy,PTy(F32,qTy)),
16067                                       Var("m",F4)),
16068                                    Close
16069                                      (Var("v0",F32),
16070                                       MB(MU(Mop(Cast iTy,Var("v0",F32)),
16071                                             qTy),
16072                                          Close
16073                                            (iVar"v0",
16074                                             MU(Bop(Mul,iVar"v",iVar"v0"),
16075                                                qTy))))))),
16076                           Close
16077                             (iVar"v0",MU(Bop(Sub,iVar"v",iVar"v0"),qTy))))))),
16078            Close
16079              (iVar"result",
16080               MB(Call
16081                    ("write'R",ATy(qTy,PTy(uTy,qTy)),
16082                     TP[EX(Mop(Cast F64,
16083                               ITE(bVar"round",
16084                                   Bop(Add,iVar"result",LI 2147483648),
16085                                   iVar"result")),LN 63,LN 32,F32),
16086                        Var("d",F4)]),
16087                  Close(AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))))))
16088;
16089val SignedParallelAddSub16_def = Def
16090  ("SignedParallelAddSub16",TP[Var("op",FTy 2),Var("n",F4),Var("m",F4)],
16091   MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
16092      Close
16093        (Var("Rn",F32),
16094         MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
16095            Close
16096              (Var("Rm",F32),
16097               MU(CS(Var("op",FTy 2),
16098                     [(LW(0,2),
16099                       TP[Bop(Add,
16100                              Mop(Cast iTy,
16101                                  EX(Var("Rn",F32),LN 15,LN 0,F16)),
16102                              Mop(Cast iTy,
16103                                  EX(Var("Rm",F32),LN 15,LN 0,F16))),
16104                          Bop(Add,
16105                              Mop(Cast iTy,
16106                                  EX(Var("Rn",F32),LN 31,LN 16,F16)),
16107                              Mop(Cast iTy,
16108                                  EX(Var("Rm",F32),LN 31,LN 16,F16)))]),
16109                      (LW(1,2),
16110                       TP[Bop(Sub,
16111                              Mop(Cast iTy,
16112                                  EX(Var("Rn",F32),LN 15,LN 0,F16)),
16113                              Mop(Cast iTy,
16114                                  EX(Var("Rm",F32),LN 31,LN 16,F16))),
16115                          Bop(Add,
16116                              Mop(Cast iTy,
16117                                  EX(Var("Rn",F32),LN 31,LN 16,F16)),
16118                              Mop(Cast iTy,
16119                                  EX(Var("Rm",F32),LN 15,LN 0,F16)))]),
16120                      (LW(2,2),
16121                       TP[Bop(Add,
16122                              Mop(Cast iTy,
16123                                  EX(Var("Rn",F32),LN 15,LN 0,F16)),
16124                              Mop(Cast iTy,
16125                                  EX(Var("Rm",F32),LN 31,LN 16,F16))),
16126                          Bop(Sub,
16127                              Mop(Cast iTy,
16128                                  EX(Var("Rn",F32),LN 31,LN 16,F16)),
16129                              Mop(Cast iTy,
16130                                  EX(Var("Rm",F32),LN 15,LN 0,F16)))]),
16131                      (LW(3,2),
16132                       TP[Bop(Sub,
16133                              Mop(Cast iTy,
16134                                  EX(Var("Rn",F32),LN 15,LN 0,F16)),
16135                              Mop(Cast iTy,
16136                                  EX(Var("Rm",F32),LN 15,LN 0,F16))),
16137                          Bop(Sub,
16138                              Mop(Cast iTy,
16139                                  EX(Var("Rn",F32),LN 31,LN 16,F16)),
16140                              Mop(Cast iTy,
16141                                  EX(Var("Rm",F32),LN 31,LN 16,F16)))])]),
16142                  qTy))))))
16143;
16144val dfn'SignedAddSub16_def = Def
16145  ("dfn'SignedAddSub16",
16146   TP[Var("op",FTy 2),Var("d",F4),Var("n",F4),Var("m",F4)],
16147   MB(Call
16148        ("SignedParallelAddSub16",ATy(qTy,PTy(PTy(iTy,iTy),qTy)),
16149         TP[Var("op",FTy 2),Var("n",F4),Var("m",F4)]),
16150      Close
16151        (Var("x",PTy(iTy,iTy)),
16152         CS(Var("x",PTy(iTy,iTy)),
16153            [(TP[iVar"res1",iVar"res2"],
16154              MB(Call
16155                   ("write'R",ATy(qTy,PTy(uTy,qTy)),
16156                    TP[CC[Mop(Cast F16,iVar"res2"),
16157                          Mop(Cast F16,iVar"res1")],Var("d",F4)]),
16158                 Close
16159                   (AVar uTy,
16160                    MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
16161                       Close
16162                         (Var("v",CTy"PSR"),
16163                          MB(MB(MU(Dest("GE",F4,Var("v",CTy"PSR")),qTy),
16164                                Close
16165                                  (Var("w",F4),
16166                                   MB(MR(Close
16167                                           (qVar"s",
16168                                            Dest("CPSR",CTy"PSR",qVar"s"))),
16169                                      Close
16170                                        (Var("v",CTy"PSR"),
16171                                         MB(MB(MU(TP[Var("v",CTy"PSR"),
16172                                                     BFI(LN 1,LN 0,
16173                                                         ITE(Bop(Ge,
16174                                                                 iVar"res1",
16175                                                                 LI 0),
16176                                                             LW(3,2),
16177                                                             LW(0,2)),
16178                                                         Var("w",F4))],qTy),
16179                                               Close
16180                                                 (Var("v",PTy(CTy"PSR",F4)),
16181                                                  MU(Rupd
16182                                                       ("GE",
16183                                                        Var("v",
16184                                                            PTy(CTy"PSR",
16185                                                                F4))),qTy))),
16186                                            Close
16187                                              (Var("v",CTy"PSR"),
16188                                               MW(Close
16189                                                    (qVar"s",
16190                                                     Rupd
16191                                                       ("CPSR",
16192                                                        TP[qVar"s",
16193                                                           Var("v",
16194                                                               CTy"PSR")]))))))))),
16195                             Close
16196                               (AVar uTy,
16197                                MB(MR(Close
16198                                        (qVar"s",
16199                                         Dest("CPSR",CTy"PSR",qVar"s"))),
16200                                   Close
16201                                     (Var("v",CTy"PSR"),
16202                                      MB(MB(MU(Dest
16203                                                 ("GE",F4,
16204                                                  Var("v",CTy"PSR")),qTy),
16205                                            Close
16206                                              (Var("w",F4),
16207                                               MB(MR(Close
16208                                                       (qVar"s",
16209                                                        Dest
16210                                                          ("CPSR",
16211                                                           CTy"PSR",
16212                                                           qVar"s"))),
16213                                                  Close
16214                                                    (Var("v",CTy"PSR"),
16215                                                     MB(MB(MU(TP[Var("v",
16216                                                                     CTy"PSR"),
16217                                                                 BFI(LN 3,
16218                                                                     LN 2,
16219                                                                     ITE(Bop(Ge,
16220                                                                             iVar"res2",
16221                                                                             LI
16222                                                                              0),
16223                                                                         LW(3,
16224                                                                            2),
16225                                                                         LW(0,
16226                                                                            2)),
16227                                                                     Var("w",
16228                                                                         F4))],
16229                                                              qTy),
16230                                                           Close
16231                                                             (Var("v",
16232                                                                  PTy(CTy"PSR",
16233                                                                      F4)),
16234                                                              MU(Rupd
16235                                                                   ("GE",
16236                                                                    Var("v",
16237                                                                        PTy(CTy"PSR",
16238                                                                            F4))),
16239                                                                 qTy))),
16240                                                        Close
16241                                                          (Var("v",
16242                                                               CTy"PSR"),
16243                                                           MW(Close
16244                                                                (qVar"s",
16245                                                                 Rupd
16246                                                                   ("CPSR",
16247                                                                    TP[qVar"s",
16248                                                                       Var("v",
16249                                                                           CTy"PSR")]))))))))),
16250                                         Close
16251                                           (AVar uTy,
16252                                            Call
16253                                              ("IncPC",
16254                                               ATy(qTy,PTy(uTy,qTy)),LU))))))))))))]))))
16255;
16256val dfn'SignedSaturatingAddSub16_def = Def
16257  ("dfn'SignedSaturatingAddSub16",
16258   TP[Var("op",FTy 2),Var("d",F4),Var("n",F4),Var("m",F4)],
16259   MB(Call
16260        ("SignedParallelAddSub16",ATy(qTy,PTy(PTy(iTy,iTy),qTy)),
16261         TP[Var("op",FTy 2),Var("n",F4),Var("m",F4)]),
16262      Close
16263        (Var("x",PTy(iTy,iTy)),
16264         CS(Var("x",PTy(iTy,iTy)),
16265            [(TP[iVar"res1",iVar"res2"],
16266              MB(Call
16267                   ("SignedSat",ATy(qTy,PTy(F16,qTy)),TP[iVar"res2",LN 16]),
16268                 Close
16269                   (Var("v",F16),
16270                    MB(MB(MB(MB(Call
16271                                  ("SignedSat",ATy(qTy,PTy(F16,qTy)),
16272                                   TP[iVar"res1",LN 16]),
16273                                Close
16274                                  (Var("v0",F16),
16275                                   MU(CC[Var("v",F16),Var("v0",F16)],qTy))),
16276                             Close
16277                               (Var("v",F32),
16278                                MU(TP[Var("v",F32),Var("d",F4)],qTy))),
16279                          Close
16280                            (Var("v",PTy(F32,F4)),
16281                             Call
16282                               ("write'R",ATy(qTy,PTy(uTy,qTy)),
16283                                Var("v",PTy(F32,F4))))),
16284                       Close
16285                         (AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))))]))))
16286;
16287val dfn'SignedHalvingAddSub16_def = Def
16288  ("dfn'SignedHalvingAddSub16",
16289   TP[Var("op",FTy 2),Var("d",F4),Var("n",F4),Var("m",F4)],
16290   MB(Call
16291        ("SignedParallelAddSub16",ATy(qTy,PTy(PTy(iTy,iTy),qTy)),
16292         TP[Var("op",FTy 2),Var("n",F4),Var("m",F4)]),
16293      Close
16294        (Var("x",PTy(iTy,iTy)),
16295         CS(Var("x",PTy(iTy,iTy)),
16296            [(TP[iVar"res1",iVar"res2"],
16297              MB(Call
16298                   ("write'R",ATy(qTy,PTy(uTy,qTy)),
16299                    TP[CC[Mop(Cast F16,Bop(Div,iVar"res2",LI 2)),
16300                          Mop(Cast F16,Bop(Div,iVar"res1",LI 2))],
16301                       Var("d",F4)]),
16302                 Close(AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))]))))
16303;
16304val SignedParallelAddSub8_def = Def
16305  ("SignedParallelAddSub8",TP[bVar"sub",Var("n",F4),Var("m",F4)],
16306   MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
16307      Close
16308        (Var("Rn",F32),
16309         MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
16310            Close
16311              (Var("Rm",F32),
16312               MU(ITE(bVar"sub",
16313                      TP[Bop(Sub,
16314                             Mop(Cast iTy,EX(Var("Rn",F32),LN 7,LN 0,F8)),
16315                             Mop(Cast iTy,EX(Var("Rm",F32),LN 7,LN 0,F8))),
16316                         Bop(Sub,
16317                             Mop(Cast iTy,EX(Var("Rn",F32),LN 15,LN 8,F8)),
16318                             Mop(Cast iTy,EX(Var("Rm",F32),LN 15,LN 8,F8))),
16319                         Bop(Sub,
16320                             Mop(Cast iTy,EX(Var("Rn",F32),LN 23,LN 16,F8)),
16321                             Mop(Cast iTy,EX(Var("Rm",F32),LN 23,LN 16,F8))),
16322                         Bop(Sub,
16323                             Mop(Cast iTy,EX(Var("Rn",F32),LN 31,LN 24,F8)),
16324                             Mop(Cast iTy,EX(Var("Rm",F32),LN 31,LN 24,F8)))],
16325                      TP[Bop(Add,
16326                             Mop(Cast iTy,EX(Var("Rn",F32),LN 7,LN 0,F8)),
16327                             Mop(Cast iTy,EX(Var("Rm",F32),LN 7,LN 0,F8))),
16328                         Bop(Add,
16329                             Mop(Cast iTy,EX(Var("Rn",F32),LN 15,LN 8,F8)),
16330                             Mop(Cast iTy,EX(Var("Rm",F32),LN 15,LN 8,F8))),
16331                         Bop(Add,
16332                             Mop(Cast iTy,EX(Var("Rn",F32),LN 23,LN 16,F8)),
16333                             Mop(Cast iTy,EX(Var("Rm",F32),LN 23,LN 16,F8))),
16334                         Bop(Add,
16335                             Mop(Cast iTy,EX(Var("Rn",F32),LN 31,LN 24,F8)),
16336                             Mop(Cast iTy,EX(Var("Rm",F32),LN 31,LN 24,F8)))]),
16337                  qTy))))))
16338;
16339val dfn'SignedAddSub8_def = Def
16340  ("dfn'SignedAddSub8",TP[bVar"sub",Var("d",F4),Var("n",F4),Var("m",F4)],
16341   MB(Call
16342        ("SignedParallelAddSub8",
16343         ATy(qTy,PTy(PTy(iTy,PTy(iTy,PTy(iTy,iTy))),qTy)),
16344         TP[bVar"sub",Var("n",F4),Var("m",F4)]),
16345      Close
16346        (Var("x",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))),
16347         CS(Var("x",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))),
16348            [(TP[iVar"res1",iVar"res2",iVar"res3",iVar"res4"],
16349              MB(Call
16350                   ("write'R",ATy(qTy,PTy(uTy,qTy)),
16351                    TP[CC[Mop(Cast F8,iVar"res4"),Mop(Cast F8,iVar"res3"),
16352                          Mop(Cast F8,iVar"res2"),Mop(Cast F8,iVar"res1")],
16353                       Var("d",F4)]),
16354                 Close
16355                   (AVar uTy,
16356                    MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
16357                       Close
16358                         (Var("v",CTy"PSR"),
16359                          MB(MB(MU(Dest("GE",F4,Var("v",CTy"PSR")),qTy),
16360                                Close
16361                                  (Var("w",F4),
16362                                   MB(MR(Close
16363                                           (qVar"s",
16364                                            Dest("CPSR",CTy"PSR",qVar"s"))),
16365                                      Close
16366                                        (Var("v",CTy"PSR"),
16367                                         MB(MB(MU(TP[Var("v",CTy"PSR"),
16368                                                     BFI(LN 0,LN 0,
16369                                                         Mop(Cast F1,
16370                                                             Bop(Ge,
16371                                                                 iVar"res1",
16372                                                                 LI 0)),
16373                                                         Var("w",F4))],qTy),
16374                                               Close
16375                                                 (Var("v",PTy(CTy"PSR",F4)),
16376                                                  MU(Rupd
16377                                                       ("GE",
16378                                                        Var("v",
16379                                                            PTy(CTy"PSR",
16380                                                                F4))),qTy))),
16381                                            Close
16382                                              (Var("v",CTy"PSR"),
16383                                               MW(Close
16384                                                    (qVar"s",
16385                                                     Rupd
16386                                                       ("CPSR",
16387                                                        TP[qVar"s",
16388                                                           Var("v",
16389                                                               CTy"PSR")]))))))))),
16390                             Close
16391                               (AVar uTy,
16392                                MB(MR(Close
16393                                        (qVar"s",
16394                                         Dest("CPSR",CTy"PSR",qVar"s"))),
16395                                   Close
16396                                     (Var("v",CTy"PSR"),
16397                                      MB(MB(MU(Dest
16398                                                 ("GE",F4,
16399                                                  Var("v",CTy"PSR")),qTy),
16400                                            Close
16401                                              (Var("w",F4),
16402                                               MB(MR(Close
16403                                                       (qVar"s",
16404                                                        Dest
16405                                                          ("CPSR",
16406                                                           CTy"PSR",
16407                                                           qVar"s"))),
16408                                                  Close
16409                                                    (Var("v",CTy"PSR"),
16410                                                     MB(MB(MU(TP[Var("v",
16411                                                                     CTy"PSR"),
16412                                                                 BFI(LN 1,
16413                                                                     LN 1,
16414                                                                     Mop(Cast
16415                                                                           F1,
16416                                                                         Bop(Ge,
16417                                                                             iVar"res2",
16418                                                                             LI
16419                                                                              0)),
16420                                                                     Var("w",
16421                                                                         F4))],
16422                                                              qTy),
16423                                                           Close
16424                                                             (Var("v",
16425                                                                  PTy(CTy"PSR",
16426                                                                      F4)),
16427                                                              MU(Rupd
16428                                                                   ("GE",
16429                                                                    Var("v",
16430                                                                        PTy(CTy"PSR",
16431                                                                            F4))),
16432                                                                 qTy))),
16433                                                        Close
16434                                                          (Var("v",
16435                                                               CTy"PSR"),
16436                                                           MW(Close
16437                                                                (qVar"s",
16438                                                                 Rupd
16439                                                                   ("CPSR",
16440                                                                    TP[qVar"s",
16441                                                                       Var("v",
16442                                                                           CTy"PSR")]))))))))),
16443                                         Close
16444                                           (AVar uTy,
16445                                            MB(MR(Close
16446                                                    (qVar"s",
16447                                                     Dest
16448                                                       ("CPSR",CTy"PSR",
16449                                                        qVar"s"))),
16450                                               Close
16451                                                 (Var("v",CTy"PSR"),
16452                                                  MB(MB(MU(Dest
16453                                                             ("GE",F4,
16454                                                              Var("v",
16455                                                                  CTy"PSR")),
16456                                                           qTy),
16457                                                        Close
16458                                                          (Var("w",F4),
16459                                                           MB(MR(Close
16460                                                                   (qVar"s",
16461                                                                    Dest
16462                                                                      ("CPSR",
16463                                                                       CTy"PSR",
16464                                                                       qVar"s"))),
16465                                                              Close
16466                                                                (Var("v",
16467                                                                     CTy"PSR"),
16468                                                                 MB(MB(MU(TP[Var("v",
16469                                                                                 CTy"PSR"),
16470                                                                             BFI(LN
16471                                                                                  2,
16472                                                                                 LN
16473                                                                                  2,
16474                                                                                 Mop(Cast
16475                                                                                       F1,
16476                                                                                     Bop(Ge,
16477                                                                                         iVar"res3",
16478                                                                                         LI
16479                                                                                          0)),
16480                                                                                 Var("w",
16481                                                                                     F4))],
16482                                                                          qTy),
16483                                                                       Close
16484                                                                         (Var("v",
16485                                                                              PTy(CTy"PSR",
16486                                                                                  F4)),
16487                                                                          MU(Rupd
16488                                                                               ("GE",
16489                                                                                Var("v",
16490                                                                                    PTy(CTy"PSR",
16491                                                                                        F4))),
16492                                                                             qTy))),
16493                                                                    Close
16494                                                                      (Var("v",
16495                                                                           CTy"PSR"),
16496                                                                       MW(Close
16497                                                                            (qVar"s",
16498                                                                             Rupd
16499                                                                               ("CPSR",
16500                                                                                TP[qVar"s",
16501                                                                                   Var("v",
16502                                                                                       CTy"PSR")]))))))))),
16503                                                     Close
16504                                                       (AVar uTy,
16505                                                        MB(MR(Close
16506                                                                (qVar"s",
16507                                                                 Dest
16508                                                                   ("CPSR",
16509                                                                    CTy"PSR",
16510                                                                    qVar"s"))),
16511                                                           Close
16512                                                             (Var("v",
16513                                                                  CTy"PSR"),
16514                                                              MB(MB(MU(Dest
16515                                                                         ("GE",
16516                                                                          F4,
16517                                                                          Var("v",
16518                                                                              CTy"PSR")),
16519                                                                       qTy),
16520                                                                    Close
16521                                                                      (Var("w",
16522                                                                           F4),
16523                                                                       MB(MR(Close
16524                                                                               (qVar"s",
16525                                                                                Dest
16526                                                                                  ("CPSR",
16527                                                                                   CTy"PSR",
16528                                                                                   qVar"s"))),
16529                                                                          Close
16530                                                                            (Var("v",
16531                                                                                 CTy"PSR"),
16532                                                                             MB(MB(MU(TP[Var("v",
16533                                                                                             CTy"PSR"),
16534                                                                                         BFI(LN
16535                                                                                              3,
16536                                                                                             LN
16537                                                                                              3,
16538                                                                                             Mop(Cast
16539                                                                                                   F1,
16540                                                                                                 Bop(Ge,
16541                                                                                                     iVar"res4",
16542                                                                                                     LI
16543                                                                                                      0)),
16544                                                                                             Var("w",
16545                                                                                                 F4))],
16546                                                                                      qTy),
16547                                                                                   Close
16548                                                                                     (Var("v",
16549                                                                                          PTy(CTy"PSR",
16550                                                                                              F4)),
16551                                                                                      MU(Rupd
16552                                                                                           ("GE",
16553                                                                                            Var("v",
16554                                                                                                PTy(CTy"PSR",
16555                                                                                                    F4))),
16556                                                                                         qTy))),
16557                                                                                Close
16558                                                                                  (Var("v",
16559                                                                                       CTy"PSR"),
16560                                                                                   MW(Close
16561                                                                                        (qVar"s",
16562                                                                                         Rupd
16563                                                                                           ("CPSR",
16564                                                                                            TP[qVar"s",
16565                                                                                               Var("v",
16566                                                                                                   CTy"PSR")]))))))))),
16567                                                                 Close
16568                                                                   (AVar
16569                                                                      uTy,
16570                                                                    Call
16571                                                                      ("IncPC",
16572                                                                       ATy(qTy,
16573                                                                           PTy(uTy,
16574                                                                               qTy)),
16575                                                                       LU))))))))))))))))))))]))))
16576;
16577val dfn'SignedSaturatingAddSub8_def = Def
16578  ("dfn'SignedSaturatingAddSub8",
16579   TP[bVar"sub",Var("d",F4),Var("n",F4),Var("m",F4)],
16580   MB(Call
16581        ("SignedParallelAddSub8",
16582         ATy(qTy,PTy(PTy(iTy,PTy(iTy,PTy(iTy,iTy))),qTy)),
16583         TP[bVar"sub",Var("n",F4),Var("m",F4)]),
16584      Close
16585        (Var("x",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))),
16586         CS(Var("x",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))),
16587            [(TP[iVar"res1",iVar"res2",iVar"res3",iVar"res4"],
16588              MB(Call
16589                   ("SignedSat",ATy(qTy,PTy(F8,qTy)),TP[iVar"res4",LN 8]),
16590                 Close
16591                   (Var("v",F8),
16592                    MB(MB(MB(MB(Call
16593                                  ("SignedSat",ATy(qTy,PTy(F8,qTy)),
16594                                   TP[iVar"res3",LN 8]),
16595                                Close
16596                                  (Var("v0",F8),
16597                                   MB(MB(Call
16598                                           ("SignedSat",
16599                                            ATy(qTy,PTy(F8,qTy)),
16600                                            TP[iVar"res2",LN 8]),
16601                                         Close
16602                                           (Var("v1",F8),
16603                                            MB(MB(Call
16604                                                    ("SignedSat",
16605                                                     ATy(qTy,PTy(F8,qTy)),
16606                                                     TP[iVar"res1",LN 8]),
16607                                                  Close
16608                                                    (Var("v2",F8),
16609                                                     MU(CC[Var("v1",F8),
16610                                                           Var("v2",F8)],
16611                                                        qTy))),
16612                                               Close
16613                                                 (Var("v1",F16),
16614                                                  MU(CC[Var("v0",F8),
16615                                                        Var("v1",F16)],qTy))))),
16616                                      Close
16617                                        (Var("v0",FTy 24),
16618                                         MU(CC[Var("v",F8),
16619                                               Var("v0",FTy 24)],qTy))))),
16620                             Close
16621                               (Var("v",F32),
16622                                MU(TP[Var("v",F32),Var("d",F4)],qTy))),
16623                          Close
16624                            (Var("v",PTy(F32,F4)),
16625                             Call
16626                               ("write'R",ATy(qTy,PTy(uTy,qTy)),
16627                                Var("v",PTy(F32,F4))))),
16628                       Close
16629                         (AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))))]))))
16630;
16631val dfn'SignedHalvingAddSub8_def = Def
16632  ("dfn'SignedHalvingAddSub8",
16633   TP[bVar"sub",Var("d",F4),Var("n",F4),Var("m",F4)],
16634   MB(Call
16635        ("SignedParallelAddSub8",
16636         ATy(qTy,PTy(PTy(iTy,PTy(iTy,PTy(iTy,iTy))),qTy)),
16637         TP[bVar"sub",Var("n",F4),Var("m",F4)]),
16638      Close
16639        (Var("x",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))),
16640         CS(Var("x",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))),
16641            [(TP[iVar"res1",iVar"res2",iVar"res3",iVar"res4"],
16642              MB(Call
16643                   ("write'R",ATy(qTy,PTy(uTy,qTy)),
16644                    TP[CC[Mop(Cast F8,Bop(Div,iVar"res4",LI 2)),
16645                          Mop(Cast F8,Bop(Div,iVar"res3",LI 2)),
16646                          Mop(Cast F8,Bop(Div,iVar"res2",LI 2)),
16647                          Mop(Cast F8,Bop(Div,iVar"res1",LI 2))],
16648                       Var("d",F4)]),
16649                 Close(AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))]))))
16650;
16651val UnsignedParallelAddSub16_def = Def
16652  ("UnsignedParallelAddSub16",TP[Var("op",FTy 2),Var("n",F4),Var("m",F4)],
16653   MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
16654      Close
16655        (Var("Rn",F32),
16656         MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
16657            Close
16658              (Var("Rm",F32),
16659               MU(CS(Var("op",FTy 2),
16660                     [(LW(0,2),
16661                       TP[Bop(Add,
16662                              Call
16663                                ("UInt",iTy,
16664                                 EX(Var("Rn",F32),LN 15,LN 0,F16)),
16665                              Call
16666                                ("UInt",iTy,
16667                                 EX(Var("Rm",F32),LN 15,LN 0,F16))),
16668                          Bop(Add,
16669                              Call
16670                                ("UInt",iTy,
16671                                 EX(Var("Rn",F32),LN 31,LN 16,F16)),
16672                              Call
16673                                ("UInt",iTy,
16674                                 EX(Var("Rm",F32),LN 31,LN 16,F16)))]),
16675                      (LW(1,2),
16676                       TP[Bop(Sub,
16677                              Call
16678                                ("UInt",iTy,
16679                                 EX(Var("Rn",F32),LN 15,LN 0,F16)),
16680                              Call
16681                                ("UInt",iTy,
16682                                 EX(Var("Rm",F32),LN 31,LN 16,F16))),
16683                          Bop(Add,
16684                              Call
16685                                ("UInt",iTy,
16686                                 EX(Var("Rn",F32),LN 31,LN 16,F16)),
16687                              Call
16688                                ("UInt",iTy,
16689                                 EX(Var("Rm",F32),LN 15,LN 0,F16)))]),
16690                      (LW(2,2),
16691                       TP[Bop(Add,
16692                              Call
16693                                ("UInt",iTy,
16694                                 EX(Var("Rn",F32),LN 15,LN 0,F16)),
16695                              Call
16696                                ("UInt",iTy,
16697                                 EX(Var("Rm",F32),LN 31,LN 16,F16))),
16698                          Bop(Sub,
16699                              Call
16700                                ("UInt",iTy,
16701                                 EX(Var("Rn",F32),LN 31,LN 16,F16)),
16702                              Call
16703                                ("UInt",iTy,
16704                                 EX(Var("Rm",F32),LN 15,LN 0,F16)))]),
16705                      (LW(3,2),
16706                       TP[Bop(Sub,
16707                              Call
16708                                ("UInt",iTy,
16709                                 EX(Var("Rn",F32),LN 15,LN 0,F16)),
16710                              Call
16711                                ("UInt",iTy,
16712                                 EX(Var("Rm",F32),LN 15,LN 0,F16))),
16713                          Bop(Sub,
16714                              Call
16715                                ("UInt",iTy,
16716                                 EX(Var("Rn",F32),LN 31,LN 16,F16)),
16717                              Call
16718                                ("UInt",iTy,
16719                                 EX(Var("Rm",F32),LN 31,LN 16,F16)))])]),
16720                  qTy))))))
16721;
16722val dfn'UnsignedAddSub16_def = Def
16723  ("dfn'UnsignedAddSub16",
16724   TP[Var("op",FTy 2),Var("d",F4),Var("n",F4),Var("m",F4)],
16725   MB(Call
16726        ("UnsignedParallelAddSub16",ATy(qTy,PTy(PTy(iTy,iTy),qTy)),
16727         TP[Var("op",FTy 2),Var("n",F4),Var("m",F4)]),
16728      Close
16729        (Var("x",PTy(iTy,iTy)),
16730         CS(Var("x",PTy(iTy,iTy)),
16731            [(TP[iVar"res1",iVar"res2"],
16732              MB(Call
16733                   ("write'R",ATy(qTy,PTy(uTy,qTy)),
16734                    TP[CC[Mop(Cast F16,iVar"res2"),
16735                          Mop(Cast F16,iVar"res1")],Var("d",F4)]),
16736                 Close
16737                   (AVar uTy,
16738                    MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
16739                       Close
16740                         (Var("v",CTy"PSR"),
16741                          MB(MB(MU(Dest("GE",F4,Var("v",CTy"PSR")),qTy),
16742                                Close
16743                                  (Var("w",F4),
16744                                   MB(MR(Close
16745                                           (qVar"s",
16746                                            Dest("CPSR",CTy"PSR",qVar"s"))),
16747                                      Close
16748                                        (Var("v",CTy"PSR"),
16749                                         MB(MB(MU(TP[Var("v",CTy"PSR"),
16750                                                     BFI(LN 1,LN 0,
16751                                                         ITE(Bop(Ge,
16752                                                                 iVar"res1",
16753                                                                 ITE(Bop(In,
16754                                                                         Var("op",
16755                                                                             FTy 2),
16756                                                                         SL[LW(1,
16757                                                                               2),
16758                                                                            LW(2,
16759                                                                               2)]),
16760                                                                     LI 0,
16761                                                                     LI
16762                                                                      65536)),
16763                                                             LW(3,2),
16764                                                             LW(0,2)),
16765                                                         Var("w",F4))],qTy),
16766                                               Close
16767                                                 (Var("v",PTy(CTy"PSR",F4)),
16768                                                  MU(Rupd
16769                                                       ("GE",
16770                                                        Var("v",
16771                                                            PTy(CTy"PSR",
16772                                                                F4))),qTy))),
16773                                            Close
16774                                              (Var("v",CTy"PSR"),
16775                                               MW(Close
16776                                                    (qVar"s",
16777                                                     Rupd
16778                                                       ("CPSR",
16779                                                        TP[qVar"s",
16780                                                           Var("v",
16781                                                               CTy"PSR")]))))))))),
16782                             Close
16783                               (AVar uTy,
16784                                MB(MR(Close
16785                                        (qVar"s",
16786                                         Dest("CPSR",CTy"PSR",qVar"s"))),
16787                                   Close
16788                                     (Var("v",CTy"PSR"),
16789                                      MB(MB(MU(Dest
16790                                                 ("GE",F4,
16791                                                  Var("v",CTy"PSR")),qTy),
16792                                            Close
16793                                              (Var("w",F4),
16794                                               MB(MR(Close
16795                                                       (qVar"s",
16796                                                        Dest
16797                                                          ("CPSR",
16798                                                           CTy"PSR",
16799                                                           qVar"s"))),
16800                                                  Close
16801                                                    (Var("v",CTy"PSR"),
16802                                                     MB(MB(MU(TP[Var("v",
16803                                                                     CTy"PSR"),
16804                                                                 BFI(LN 3,
16805                                                                     LN 2,
16806                                                                     ITE(Bop(Ge,
16807                                                                             iVar"res2",
16808                                                                             ITE(Bop(In,
16809                                                                                     Var("op",
16810                                                                                         FTy 2),
16811                                                                                     SL[LW(2,
16812                                                                                           2),
16813                                                                                        LW(3,
16814                                                                                           2)]),
16815                                                                                 LI
16816                                                                                  0,
16817                                                                                 LI
16818                                                                                  65536)),
16819                                                                         LW(3,
16820                                                                            2),
16821                                                                         LW(0,
16822                                                                            2)),
16823                                                                     Var("w",
16824                                                                         F4))],
16825                                                              qTy),
16826                                                           Close
16827                                                             (Var("v",
16828                                                                  PTy(CTy"PSR",
16829                                                                      F4)),
16830                                                              MU(Rupd
16831                                                                   ("GE",
16832                                                                    Var("v",
16833                                                                        PTy(CTy"PSR",
16834                                                                            F4))),
16835                                                                 qTy))),
16836                                                        Close
16837                                                          (Var("v",
16838                                                               CTy"PSR"),
16839                                                           MW(Close
16840                                                                (qVar"s",
16841                                                                 Rupd
16842                                                                   ("CPSR",
16843                                                                    TP[qVar"s",
16844                                                                       Var("v",
16845                                                                           CTy"PSR")]))))))))),
16846                                         Close
16847                                           (AVar uTy,
16848                                            Call
16849                                              ("IncPC",
16850                                               ATy(qTy,PTy(uTy,qTy)),LU))))))))))))]))))
16851;
16852val dfn'UnsignedSaturatingAddSub16_def = Def
16853  ("dfn'UnsignedSaturatingAddSub16",
16854   TP[Var("op",FTy 2),Var("d",F4),Var("n",F4),Var("m",F4)],
16855   MB(Call
16856        ("UnsignedParallelAddSub16",ATy(qTy,PTy(PTy(iTy,iTy),qTy)),
16857         TP[Var("op",FTy 2),Var("n",F4),Var("m",F4)]),
16858      Close
16859        (Var("x",PTy(iTy,iTy)),
16860         CS(Var("x",PTy(iTy,iTy)),
16861            [(TP[iVar"res1",iVar"res2"],
16862              MB(Call
16863                   ("UnsignedSat",ATy(qTy,PTy(F16,qTy)),
16864                    TP[iVar"res2",LN 16]),
16865                 Close
16866                   (Var("v",F16),
16867                    MB(MB(MB(MB(Call
16868                                  ("UnsignedSat",ATy(qTy,PTy(F16,qTy)),
16869                                   TP[iVar"res1",LN 16]),
16870                                Close
16871                                  (Var("v0",F16),
16872                                   MU(CC[Var("v",F16),Var("v0",F16)],qTy))),
16873                             Close
16874                               (Var("v",F32),
16875                                MU(TP[Var("v",F32),Var("d",F4)],qTy))),
16876                          Close
16877                            (Var("v",PTy(F32,F4)),
16878                             Call
16879                               ("write'R",ATy(qTy,PTy(uTy,qTy)),
16880                                Var("v",PTy(F32,F4))))),
16881                       Close
16882                         (AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))))]))))
16883;
16884val dfn'UnsignedHalvingAddSub16_def = Def
16885  ("dfn'UnsignedHalvingAddSub16",
16886   TP[Var("op",FTy 2),Var("d",F4),Var("n",F4),Var("m",F4)],
16887   MB(Call
16888        ("UnsignedParallelAddSub16",ATy(qTy,PTy(PTy(iTy,iTy),qTy)),
16889         TP[Var("op",FTy 2),Var("n",F4),Var("m",F4)]),
16890      Close
16891        (Var("x",PTy(iTy,iTy)),
16892         CS(Var("x",PTy(iTy,iTy)),
16893            [(TP[iVar"res1",iVar"res2"],
16894              MB(Call
16895                   ("write'R",ATy(qTy,PTy(uTy,qTy)),
16896                    TP[CC[Mop(Cast F16,Bop(Div,iVar"res2",LI 2)),
16897                          Mop(Cast F16,Bop(Div,iVar"res1",LI 2))],
16898                       Var("d",F4)]),
16899                 Close(AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))]))))
16900;
16901val UnsignedParallelAddSub8_def = Def
16902  ("UnsignedParallelAddSub8",TP[bVar"sub",Var("n",F4),Var("m",F4)],
16903   MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
16904      Close
16905        (Var("Rn",F32),
16906         MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
16907            Close
16908              (Var("Rm",F32),
16909               MU(ITE(bVar"sub",
16910                      TP[Bop(Sub,
16911                             Call
16912                               ("UInt",iTy,EX(Var("Rn",F32),LN 7,LN 0,F8)),
16913                             Call
16914                               ("UInt",iTy,EX(Var("Rm",F32),LN 7,LN 0,F8))),
16915                         Bop(Sub,
16916                             Call
16917                               ("UInt",iTy,EX(Var("Rn",F32),LN 15,LN 8,F8)),
16918                             Call
16919                               ("UInt",iTy,EX(Var("Rm",F32),LN 15,LN 8,F8))),
16920                         Bop(Sub,
16921                             Call
16922                               ("UInt",iTy,
16923                                EX(Var("Rn",F32),LN 23,LN 16,F8)),
16924                             Call
16925                               ("UInt",iTy,
16926                                EX(Var("Rm",F32),LN 23,LN 16,F8))),
16927                         Bop(Sub,
16928                             Call
16929                               ("UInt",iTy,
16930                                EX(Var("Rn",F32),LN 31,LN 24,F8)),
16931                             Call
16932                               ("UInt",iTy,
16933                                EX(Var("Rm",F32),LN 31,LN 24,F8)))],
16934                      TP[Bop(Add,
16935                             Call
16936                               ("UInt",iTy,EX(Var("Rn",F32),LN 7,LN 0,F8)),
16937                             Call
16938                               ("UInt",iTy,EX(Var("Rm",F32),LN 7,LN 0,F8))),
16939                         Bop(Add,
16940                             Call
16941                               ("UInt",iTy,EX(Var("Rn",F32),LN 15,LN 8,F8)),
16942                             Call
16943                               ("UInt",iTy,EX(Var("Rm",F32),LN 15,LN 8,F8))),
16944                         Bop(Add,
16945                             Call
16946                               ("UInt",iTy,
16947                                EX(Var("Rn",F32),LN 23,LN 16,F8)),
16948                             Call
16949                               ("UInt",iTy,
16950                                EX(Var("Rm",F32),LN 23,LN 16,F8))),
16951                         Bop(Add,
16952                             Call
16953                               ("UInt",iTy,
16954                                EX(Var("Rn",F32),LN 31,LN 24,F8)),
16955                             Call
16956                               ("UInt",iTy,
16957                                EX(Var("Rm",F32),LN 31,LN 24,F8)))]),qTy))))))
16958;
16959val dfn'UnsignedAddSub8_def = Def
16960  ("dfn'UnsignedAddSub8",
16961   TP[bVar"sub",Var("d",F4),Var("n",F4),Var("m",F4)],
16962   MB(Call
16963        ("UnsignedParallelAddSub8",
16964         ATy(qTy,PTy(PTy(iTy,PTy(iTy,PTy(iTy,iTy))),qTy)),
16965         TP[bVar"sub",Var("n",F4),Var("m",F4)]),
16966      Close
16967        (Var("x",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))),
16968         CS(Var("x",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))),
16969            [(TP[iVar"res1",iVar"res2",iVar"res3",iVar"res4"],
16970              MB(Call
16971                   ("write'R",ATy(qTy,PTy(uTy,qTy)),
16972                    TP[CC[Mop(Cast F8,iVar"res4"),Mop(Cast F8,iVar"res3"),
16973                          Mop(Cast F8,iVar"res2"),Mop(Cast F8,iVar"res1")],
16974                       Var("d",F4)]),
16975                 Close
16976                   (AVar uTy,
16977                    Let(iVar"ge_lim",ITE(bVar"sub",LI 0,LI 256),
16978                        MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
16979                           Close
16980                             (Var("v",CTy"PSR"),
16981                              MB(MB(MU(Dest("GE",F4,Var("v",CTy"PSR")),qTy),
16982                                    Close
16983                                      (Var("w",F4),
16984                                       MB(MR(Close
16985                                               (qVar"s",
16986                                                Dest
16987                                                  ("CPSR",CTy"PSR",qVar"s"))),
16988                                          Close
16989                                            (Var("v",CTy"PSR"),
16990                                             MB(MB(MU(TP[Var("v",CTy"PSR"),
16991                                                         BFI(LN 0,LN 0,
16992                                                             Mop(Cast F1,
16993                                                                 Bop(Ge,
16994                                                                     iVar"res1",
16995                                                                     iVar"ge_lim")),
16996                                                             Var("w",F4))],
16997                                                      qTy),
16998                                                   Close
16999                                                     (Var("v",
17000                                                          PTy(CTy"PSR",F4)),
17001                                                      MU(Rupd
17002                                                           ("GE",
17003                                                            Var("v",
17004                                                                PTy(CTy"PSR",
17005                                                                    F4))),
17006                                                         qTy))),
17007                                                Close
17008                                                  (Var("v",CTy"PSR"),
17009                                                   MW(Close
17010                                                        (qVar"s",
17011                                                         Rupd
17012                                                           ("CPSR",
17013                                                            TP[qVar"s",
17014                                                               Var("v",
17015                                                                   CTy"PSR")]))))))))),
17016                                 Close
17017                                   (AVar uTy,
17018                                    MB(MR(Close
17019                                            (qVar"s",
17020                                             Dest("CPSR",CTy"PSR",qVar"s"))),
17021                                       Close
17022                                         (Var("v",CTy"PSR"),
17023                                          MB(MB(MU(Dest
17024                                                     ("GE",F4,
17025                                                      Var("v",CTy"PSR")),
17026                                                   qTy),
17027                                                Close
17028                                                  (Var("w",F4),
17029                                                   MB(MR(Close
17030                                                           (qVar"s",
17031                                                            Dest
17032                                                              ("CPSR",
17033                                                               CTy"PSR",
17034                                                               qVar"s"))),
17035                                                      Close
17036                                                        (Var("v",CTy"PSR"),
17037                                                         MB(MB(MU(TP[Var("v",
17038                                                                         CTy"PSR"),
17039                                                                     BFI(LN
17040                                                                          1,
17041                                                                         LN
17042                                                                          1,
17043                                                                         Mop(Cast
17044                                                                               F1,
17045                                                                             Bop(Ge,
17046                                                                                 iVar"res2",
17047                                                                                 iVar"ge_lim")),
17048                                                                         Var("w",
17049                                                                             F4))],
17050                                                                  qTy),
17051                                                               Close
17052                                                                 (Var("v",
17053                                                                      PTy(CTy"PSR",
17054                                                                          F4)),
17055                                                                  MU(Rupd
17056                                                                       ("GE",
17057                                                                        Var("v",
17058                                                                            PTy(CTy"PSR",
17059                                                                                F4))),
17060                                                                     qTy))),
17061                                                            Close
17062                                                              (Var("v",
17063                                                                   CTy"PSR"),
17064                                                               MW(Close
17065                                                                    (qVar"s",
17066                                                                     Rupd
17067                                                                       ("CPSR",
17068                                                                        TP[qVar"s",
17069                                                                           Var("v",
17070                                                                               CTy"PSR")]))))))))),
17071                                             Close
17072                                               (AVar uTy,
17073                                                MB(MR(Close
17074                                                        (qVar"s",
17075                                                         Dest
17076                                                           ("CPSR",
17077                                                            CTy"PSR",
17078                                                            qVar"s"))),
17079                                                   Close
17080                                                     (Var("v",CTy"PSR"),
17081                                                      MB(MB(MU(Dest
17082                                                                 ("GE",F4,
17083                                                                  Var("v",
17084                                                                      CTy"PSR")),
17085                                                               qTy),
17086                                                            Close
17087                                                              (Var("w",F4),
17088                                                               MB(MR(Close
17089                                                                       (qVar"s",
17090                                                                        Dest
17091                                                                          ("CPSR",
17092                                                                           CTy"PSR",
17093                                                                           qVar"s"))),
17094                                                                  Close
17095                                                                    (Var("v",
17096                                                                         CTy"PSR"),
17097                                                                     MB(MB(MU(TP[Var("v",
17098                                                                                     CTy"PSR"),
17099                                                                                 BFI(LN
17100                                                                                      2,
17101                                                                                     LN
17102                                                                                      2,
17103                                                                                     Mop(Cast
17104                                                                                           F1,
17105                                                                                         Bop(Ge,
17106                                                                                             iVar"res3",
17107                                                                                             iVar"ge_lim")),
17108                                                                                     Var("w",
17109                                                                                         F4))],
17110                                                                              qTy),
17111                                                                           Close
17112                                                                             (Var("v",
17113                                                                                  PTy(CTy"PSR",
17114                                                                                      F4)),
17115                                                                              MU(Rupd
17116                                                                                   ("GE",
17117                                                                                    Var("v",
17118                                                                                        PTy(CTy"PSR",
17119                                                                                            F4))),
17120                                                                                 qTy))),
17121                                                                        Close
17122                                                                          (Var("v",
17123                                                                               CTy"PSR"),
17124                                                                           MW(Close
17125                                                                                (qVar"s",
17126                                                                                 Rupd
17127                                                                                   ("CPSR",
17128                                                                                    TP[qVar"s",
17129                                                                                       Var("v",
17130                                                                                           CTy"PSR")]))))))))),
17131                                                         Close
17132                                                           (AVar uTy,
17133                                                            MB(MR(Close
17134                                                                    (qVar"s",
17135                                                                     Dest
17136                                                                       ("CPSR",
17137                                                                        CTy"PSR",
17138                                                                        qVar"s"))),
17139                                                               Close
17140                                                                 (Var("v",
17141                                                                      CTy"PSR"),
17142                                                                  MB(MB(MU(Dest
17143                                                                             ("GE",
17144                                                                              F4,
17145                                                                              Var("v",
17146                                                                                  CTy"PSR")),
17147                                                                           qTy),
17148                                                                        Close
17149                                                                          (Var("w",
17150                                                                               F4),
17151                                                                           MB(MR(Close
17152                                                                                   (qVar"s",
17153                                                                                    Dest
17154                                                                                      ("CPSR",
17155                                                                                       CTy"PSR",
17156                                                                                       qVar"s"))),
17157                                                                              Close
17158                                                                                (Var("v",
17159                                                                                     CTy"PSR"),
17160                                                                                 MB(MB(MU(TP[Var("v",
17161                                                                                                 CTy"PSR"),
17162                                                                                             BFI(LN
17163                                                                                                  3,
17164                                                                                                 LN
17165                                                                                                  3,
17166                                                                                                 Mop(Cast
17167                                                                                                       F1,
17168                                                                                                     Bop(Ge,
17169                                                                                                         iVar"res4",
17170                                                                                                         iVar"ge_lim")),
17171                                                                                                 Var("w",
17172                                                                                                     F4))],
17173                                                                                          qTy),
17174                                                                                       Close
17175                                                                                         (Var("v",
17176                                                                                              PTy(CTy"PSR",
17177                                                                                                  F4)),
17178                                                                                          MU(Rupd
17179                                                                                               ("GE",
17180                                                                                                Var("v",
17181                                                                                                    PTy(CTy"PSR",
17182                                                                                                        F4))),
17183                                                                                             qTy))),
17184                                                                                    Close
17185                                                                                      (Var("v",
17186                                                                                           CTy"PSR"),
17187                                                                                       MW(Close
17188                                                                                            (qVar"s",
17189                                                                                             Rupd
17190                                                                                               ("CPSR",
17191                                                                                                TP[qVar"s",
17192                                                                                                   Var("v",
17193                                                                                                       CTy"PSR")]))))))))),
17194                                                                     Close
17195                                                                       (AVar
17196                                                                          uTy,
17197                                                                        Call
17198                                                                          ("IncPC",
17199                                                                           ATy(qTy,
17200                                                                               PTy(uTy,
17201                                                                                   qTy)),
17202                                                                           LU)))))))))))))))))))))]))))
17203;
17204val dfn'UnsignedSaturatingAddSub8_def = Def
17205  ("dfn'UnsignedSaturatingAddSub8",
17206   TP[bVar"sub",Var("d",F4),Var("n",F4),Var("m",F4)],
17207   MB(Call
17208        ("UnsignedParallelAddSub8",
17209         ATy(qTy,PTy(PTy(iTy,PTy(iTy,PTy(iTy,iTy))),qTy)),
17210         TP[bVar"sub",Var("n",F4),Var("m",F4)]),
17211      Close
17212        (Var("x",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))),
17213         CS(Var("x",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))),
17214            [(TP[iVar"res1",iVar"res2",iVar"res3",iVar"res4"],
17215              MB(Call
17216                   ("UnsignedSat",ATy(qTy,PTy(F8,qTy)),TP[iVar"res4",LN 8]),
17217                 Close
17218                   (Var("v",F8),
17219                    MB(MB(MB(MB(Call
17220                                  ("UnsignedSat",ATy(qTy,PTy(F8,qTy)),
17221                                   TP[iVar"res3",LN 8]),
17222                                Close
17223                                  (Var("v0",F8),
17224                                   MB(MB(Call
17225                                           ("UnsignedSat",
17226                                            ATy(qTy,PTy(F8,qTy)),
17227                                            TP[iVar"res2",LN 8]),
17228                                         Close
17229                                           (Var("v1",F8),
17230                                            MB(MB(Call
17231                                                    ("UnsignedSat",
17232                                                     ATy(qTy,PTy(F8,qTy)),
17233                                                     TP[iVar"res1",LN 8]),
17234                                                  Close
17235                                                    (Var("v2",F8),
17236                                                     MU(CC[Var("v1",F8),
17237                                                           Var("v2",F8)],
17238                                                        qTy))),
17239                                               Close
17240                                                 (Var("v1",F16),
17241                                                  MU(CC[Var("v0",F8),
17242                                                        Var("v1",F16)],qTy))))),
17243                                      Close
17244                                        (Var("v0",FTy 24),
17245                                         MU(CC[Var("v",F8),
17246                                               Var("v0",FTy 24)],qTy))))),
17247                             Close
17248                               (Var("v",F32),
17249                                MU(TP[Var("v",F32),Var("d",F4)],qTy))),
17250                          Close
17251                            (Var("v",PTy(F32,F4)),
17252                             Call
17253                               ("write'R",ATy(qTy,PTy(uTy,qTy)),
17254                                Var("v",PTy(F32,F4))))),
17255                       Close
17256                         (AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))))]))))
17257;
17258val dfn'UnsignedHalvingAddSub8_def = Def
17259  ("dfn'UnsignedHalvingAddSub8",
17260   TP[bVar"sub",Var("d",F4),Var("n",F4),Var("m",F4)],
17261   MB(Call
17262        ("UnsignedParallelAddSub8",
17263         ATy(qTy,PTy(PTy(iTy,PTy(iTy,PTy(iTy,iTy))),qTy)),
17264         TP[bVar"sub",Var("n",F4),Var("m",F4)]),
17265      Close
17266        (Var("x",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))),
17267         CS(Var("x",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))),
17268            [(TP[iVar"res1",iVar"res2",iVar"res3",iVar"res4"],
17269              MB(Call
17270                   ("write'R",ATy(qTy,PTy(uTy,qTy)),
17271                    TP[CC[Mop(Cast F8,Bop(Div,iVar"res4",LI 2)),
17272                          Mop(Cast F8,Bop(Div,iVar"res3",LI 2)),
17273                          Mop(Cast F8,Bop(Div,iVar"res2",LI 2)),
17274                          Mop(Cast F8,Bop(Div,iVar"res1",LI 2))],
17275                       Var("d",F4)]),
17276                 Close(AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))]))))
17277;
17278val dfn'UnsignedSumAbsoluteDifferences_def = Def
17279  ("dfn'UnsignedSumAbsoluteDifferences",
17280   TP[Var("d",F4),Var("n",F4),Var("m",F4),Var("a",F4)],
17281   MB(ITE(EQ(Var("a",F4),LW(15,4)),MU(LW(0,32),qTy),
17282          Call("R",ATy(qTy,PTy(F32,qTy)),Var("a",F4))),
17283      Close
17284        (Var("acc",F32),
17285         MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
17286            Close
17287              (Var("Rn",F32),
17288               MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
17289                  Close
17290                    (Var("Rm",F32),
17291                     MB(Call
17292                          ("write'R",ATy(qTy,PTy(uTy,qTy)),
17293                           TP[Mop(Cast F32,
17294                                  Bop(Add,
17295                                      Bop(Add,
17296                                          Bop(Add,
17297                                              Bop(Add,
17298                                                  Call
17299                                                    ("UInt",iTy,
17300                                                     Var("acc",F32)),
17301                                                  Mop(Abs,
17302                                                      Bop(Sub,
17303                                                          Call
17304                                                            ("UInt",iTy,
17305                                                             EX(Var("Rn",
17306                                                                    F32),
17307                                                                LN 7,LN 0,
17308                                                                F8)),
17309                                                          Call
17310                                                            ("UInt",iTy,
17311                                                             EX(Var("Rm",
17312                                                                    F32),
17313                                                                LN 7,LN 0,
17314                                                                F8))))),
17315                                              Mop(Abs,
17316                                                  Bop(Sub,
17317                                                      Call
17318                                                        ("UInt",iTy,
17319                                                         EX(Var("Rn",F32),
17320                                                            LN 15,LN 8,F8)),
17321                                                      Call
17322                                                        ("UInt",iTy,
17323                                                         EX(Var("Rm",F32),
17324                                                            LN 15,LN 8,F8))))),
17325                                          Mop(Abs,
17326                                              Bop(Sub,
17327                                                  Call
17328                                                    ("UInt",iTy,
17329                                                     EX(Var("Rn",F32),
17330                                                        LN 23,LN 16,F8)),
17331                                                  Call
17332                                                    ("UInt",iTy,
17333                                                     EX(Var("Rm",F32),
17334                                                        LN 23,LN 16,F8))))),
17335                                      Mop(Abs,
17336                                          Bop(Sub,
17337                                              Call
17338                                                ("UInt",iTy,
17339                                                 EX(Var("Rn",F32),LN 31,
17340                                                    LN 24,F8)),
17341                                              Call
17342                                                ("UInt",iTy,
17343                                                 EX(Var("Rm",F32),LN 31,
17344                                                    LN 24,F8)))))),
17345                              Var("d",F4)]),
17346                        Close
17347                          (AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))))))))
17348;
17349val GenerateIntegerZeroDivide_def = Def
17350  ("GenerateIntegerZeroDivide",AVar uTy,
17351   Call("TakeUndefInstrException",ATy(qTy,PTy(uTy,qTy)),LU))
17352;
17353val dfn'Divide_def = Def
17354  ("dfn'Divide",TP[bVar"unsigned",Var("d",F4),Var("n",F4),Var("m",F4)],
17355   MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
17356      Close
17357        (Var("v",F32),
17358         MB(MU(EQ(Var("v",F32),LW(0,32)),qTy),
17359            Close
17360              (bVar"b",
17361               ITE(bVar"b",
17362                   MB(Call
17363                        ("IntegerZeroDivideTrappingEnabled",
17364                         ATy(qTy,PTy(bTy,qTy)),LU),
17365                      Close
17366                        (bVar"b",
17367                         ITE(bVar"b",
17368                             Call
17369                               ("GenerateIntegerZeroDivide",
17370                                ATy(qTy,PTy(uTy,qTy)),LU),
17371                             MB(Call
17372                                  ("write'R",ATy(qTy,PTy(uTy,qTy)),
17373                                   TP[LW(0,32),Var("d",F4)]),
17374                                Close
17375                                  (AVar uTy,
17376                                   Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU)))))),
17377                   MB(ITE(bVar"unsigned",
17378                          MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
17379                             Close
17380                               (Var("v",F32),
17381                                MB(Call
17382                                     ("R",ATy(qTy,PTy(F32,qTy)),
17383                                      Var("m",F4)),
17384                                   Close
17385                                     (Var("v0",F32),
17386                                      MU(Bop(Div,Var("v",F32),
17387                                             Var("v0",F32)),qTy))))),
17388                          MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
17389                             Close
17390                               (Var("v",F32),
17391                                MB(Call
17392                                     ("R",ATy(qTy,PTy(F32,qTy)),
17393                                      Var("m",F4)),
17394                                   Close
17395                                     (Var("v0",F32),
17396                                      MU(Bop(Quot,Var("v",F32),
17397                                             Var("v0",F32)),qTy)))))),
17398                      Close
17399                        (Var("v",F32),
17400                         MB(MB(MU(TP[Var("v",F32),Var("d",F4)],qTy),
17401                               Close
17402                                 (Var("v",PTy(F32,F4)),
17403                                  Call
17404                                    ("write'R",ATy(qTy,PTy(uTy,qTy)),
17405                                     Var("v",PTy(F32,F4))))),
17406                            Close
17407                              (AVar uTy,
17408                               Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU)))))))))))
17409;
17410val dfn'PackHalfword_def = Def
17411  ("dfn'PackHalfword",
17412   TP[Var("shift_t",CTy"SRType"),nVar"shift_n",bVar"tbform",Var("d",F4),
17413      Var("n",F4),Var("m",F4)],
17414   MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
17415      Close
17416        (Var("v",F32),
17417         MB(MB(MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
17418                  Close
17419                    (Var("v0",CTy"PSR"),
17420                     MB(MB(MB(MU(Dest("C",bTy,Var("v0",CTy"PSR")),qTy),
17421                              Close
17422                                (bVar"v",MU(TP[nVar"shift_n",bVar"v"],qTy))),
17423                           Close
17424                             (Var("v",PTy(nTy,bTy)),
17425                              MU(TP[Var("shift_t",CTy"SRType"),
17426                                    Var("v",PTy(nTy,bTy))],qTy))),
17427                        Close
17428                          (Var("v0",PTy(CTy"SRType",PTy(nTy,bTy))),
17429                           MU(TP[Var("v",F32),
17430                                 Var("v0",PTy(CTy"SRType",PTy(nTy,bTy)))],
17431                              qTy))))),
17432               Close
17433                 (Var("v",PTy(F32,PTy(CTy"SRType",PTy(nTy,bTy)))),
17434                  Call
17435                    ("Shift",ATy(qTy,PTy(F32,qTy)),
17436                     Var("v",PTy(F32,PTy(CTy"SRType",PTy(nTy,bTy))))))),
17437            Close
17438              (Var("operand2",F32),
17439               MB(ITE(bVar"tbform",
17440                      MU(EX(Var("operand2",F32),LN 15,LN 0,F16),qTy),
17441                      MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
17442                         Close
17443                           (Var("v",F32),
17444                            MU(EX(Var("v",F32),LN 15,LN 0,F16),qTy)))),
17445                  Close
17446                    (Var("bot",F16),
17447                     MB(ITE(bVar"tbform",
17448                            MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
17449                               Close
17450                                 (Var("v",F32),
17451                                  MU(EX(Var("v",F32),LN 31,LN 16,F16),qTy))),
17452                            MU(EX(Var("operand2",F32),LN 31,LN 16,F16),qTy)),
17453                        Close
17454                          (Var("top",F16),
17455                           MB(Call
17456                                ("write'R",ATy(qTy,PTy(uTy,qTy)),
17457                                 TP[CC[Var("top",F16),Var("bot",F16)],
17458                                    Var("d",F4)]),
17459                              Close
17460                                (AVar uTy,
17461                                 Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))))))))))
17462;
17463val dfn'Saturate_def = Def
17464  ("dfn'Saturate",
17465   TP[Var("shift_t",CTy"SRType"),nVar"shift_n",nVar"saturate_to",
17466      bVar"unsigned",Var("d",F4),Var("n",F4)],
17467   MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
17468      Close
17469        (Var("v",F32),
17470         MB(MB(MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
17471                  Close
17472                    (Var("v0",CTy"PSR"),
17473                     MB(MB(MB(MU(Dest("C",bTy,Var("v0",CTy"PSR")),qTy),
17474                              Close
17475                                (bVar"v",MU(TP[nVar"shift_n",bVar"v"],qTy))),
17476                           Close
17477                             (Var("v",PTy(nTy,bTy)),
17478                              MU(TP[Var("shift_t",CTy"SRType"),
17479                                    Var("v",PTy(nTy,bTy))],qTy))),
17480                        Close
17481                          (Var("v0",PTy(CTy"SRType",PTy(nTy,bTy))),
17482                           MU(TP[Var("v",F32),
17483                                 Var("v0",PTy(CTy"SRType",PTy(nTy,bTy)))],
17484                              qTy))))),
17485               Close
17486                 (Var("v",PTy(F32,PTy(CTy"SRType",PTy(nTy,bTy)))),
17487                  Call
17488                    ("Shift",ATy(qTy,PTy(F32,qTy)),
17489                     Var("v",PTy(F32,PTy(CTy"SRType",PTy(nTy,bTy))))))),
17490            Close
17491              (Var("operand",F32),
17492               MB(ITE(bVar"unsigned",
17493                      Call
17494                        ("UnsignedSatQ",ATy(qTy,PTy(PTy(F32,bTy),qTy)),
17495                         TP[Mop(Cast iTy,Var("operand",F32)),
17496                            nVar"saturate_to"]),
17497                      Call
17498                        ("SignedSatQ",ATy(qTy,PTy(PTy(F32,bTy),qTy)),
17499                         TP[Mop(Cast iTy,Var("operand",F32)),
17500                            nVar"saturate_to"])),
17501                  Close
17502                    (Var("x",PTy(F32,bTy)),
17503                     CS(Var("x",PTy(F32,bTy)),
17504                        [(TP[Var("result",F32),bVar"sat"],
17505                          MB(Call
17506                               ("write'R",ATy(qTy,PTy(uTy,qTy)),
17507                                TP[ITE(bVar"unsigned",Var("result",F32),
17508                                       Call
17509                                         ("SignExtendFrom",F32,
17510                                          TP[Var("result",F32),
17511                                             nVar"saturate_to"])),
17512                                   Var("d",F4)]),
17513                             Close
17514                               (AVar uTy,
17515                                MB(ITE(bVar"sat",
17516                                       MB(MR(Close
17517                                               (qVar"s",
17518                                                Dest
17519                                                  ("CPSR",CTy"PSR",qVar"s"))),
17520                                          Close
17521                                            (Var("v",CTy"PSR"),
17522                                             MB(MB(MU(TP[Var("v",CTy"PSR"),
17523                                                         LT],qTy),
17524                                                   Close
17525                                                     (Var("v",
17526                                                          PTy(CTy"PSR",bTy)),
17527                                                      MU(Rupd
17528                                                           ("Q",
17529                                                            Var("v",
17530                                                                PTy(CTy"PSR",
17531                                                                    bTy))),
17532                                                         qTy))),
17533                                                Close
17534                                                  (Var("v",CTy"PSR"),
17535                                                   MW(Close
17536                                                        (qVar"s",
17537                                                         Rupd
17538                                                           ("CPSR",
17539                                                            TP[qVar"s",
17540                                                               Var("v",
17541                                                                   CTy"PSR")]))))))),
17542                                       MU(LU,qTy)),
17543                                   Close
17544                                     (AVar uTy,
17545                                      Call
17546                                        ("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))))]))))))))
17547;
17548val dfn'Saturate16_def = Def
17549  ("dfn'Saturate16",
17550   TP[nVar"saturate_to",bVar"unsigned",Var("d",F4),Var("n",F4)],
17551   MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
17552      Close
17553        (Var("Rn",F32),
17554         MB(ITE(bVar"unsigned",
17555                MB(Call
17556                     ("UnsignedSatQ",ATy(qTy,PTy(PTy(F16,bTy),qTy)),
17557                      TP[Mop(Cast iTy,EX(Var("Rn",F32),LN 15,LN 0,F16)),
17558                         nVar"saturate_to"]),
17559                   Close
17560                     (Var("v",PTy(F16,bTy)),
17561                      MB(Call
17562                           ("UnsignedSatQ",ATy(qTy,PTy(PTy(F16,bTy),qTy)),
17563                            TP[Mop(Cast iTy,
17564                                   EX(Var("Rn",F32),LN 31,LN 16,F16)),
17565                               nVar"saturate_to"]),
17566                         Close
17567                           (Var("v0",PTy(F16,bTy)),
17568                            MU(TP[Var("v",PTy(F16,bTy)),
17569                                  Var("v0",PTy(F16,bTy))],qTy))))),
17570                MB(Call
17571                     ("SignedSatQ",ATy(qTy,PTy(PTy(F16,bTy),qTy)),
17572                      TP[Mop(Cast iTy,EX(Var("Rn",F32),LN 15,LN 0,F16)),
17573                         nVar"saturate_to"]),
17574                   Close
17575                     (Var("v",PTy(F16,bTy)),
17576                      MB(Call
17577                           ("SignedSatQ",ATy(qTy,PTy(PTy(F16,bTy),qTy)),
17578                            TP[Mop(Cast iTy,
17579                                   EX(Var("Rn",F32),LN 31,LN 16,F16)),
17580                               nVar"saturate_to"]),
17581                         Close
17582                           (Var("v0",PTy(F16,bTy)),
17583                            MU(TP[Var("v",PTy(F16,bTy)),
17584                                  Var("v0",PTy(F16,bTy))],qTy)))))),
17585            Close
17586              (Var("x",PTy(PTy(F16,bTy),PTy(F16,bTy))),
17587               CS(Var("x",PTy(PTy(F16,bTy),PTy(F16,bTy))),
17588                  [(TP[TP[Var("result1",F16),bVar"sat1"],
17589                       Var("result2",F16),bVar"sat2"],
17590                    MB(Call
17591                         ("write'R",ATy(qTy,PTy(uTy,qTy)),
17592                          TP[ITE(bVar"unsigned",
17593                                 CC[Var("result2",F16),Var("result1",F16)],
17594                                 CC[Call
17595                                      ("SignExtendFrom",F16,
17596                                       TP[Var("result2",F16),
17597                                          nVar"saturate_to"]),
17598                                    Call
17599                                      ("SignExtendFrom",F16,
17600                                       TP[Var("result1",F16),
17601                                          nVar"saturate_to"])]),
17602                             Var("d",F4)]),
17603                       Close
17604                         (AVar uTy,
17605                          MB(ITE(Bop(Or,bVar"sat1",bVar"sat2"),
17606                                 MB(MR(Close
17607                                         (qVar"s",
17608                                          Dest("CPSR",CTy"PSR",qVar"s"))),
17609                                    Close
17610                                      (Var("v",CTy"PSR"),
17611                                       MB(MB(MU(TP[Var("v",CTy"PSR"),LT],
17612                                                qTy),
17613                                             Close
17614                                               (Var("v",PTy(CTy"PSR",bTy)),
17615                                                MU(Rupd
17616                                                     ("Q",
17617                                                      Var("v",
17618                                                          PTy(CTy"PSR",bTy))),
17619                                                   qTy))),
17620                                          Close
17621                                            (Var("v",CTy"PSR"),
17622                                             MW(Close
17623                                                  (qVar"s",
17624                                                   Rupd
17625                                                     ("CPSR",
17626                                                      TP[qVar"s",
17627                                                         Var("v",CTy"PSR")]))))))),
17628                                 MU(LU,qTy)),
17629                             Close
17630                               (AVar uTy,
17631                                Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))))]))))))
17632;
17633val dfn'ExtendByte_def = Def
17634  ("dfn'ExtendByte",
17635   TP[bVar"unsigned",Var("d",F4),Var("n",F4),Var("m",F4),nVar"rotation"],
17636   MB(ITE(EQ(Var("n",F4),LW(15,4)),MU(LW(0,32),qTy),
17637          Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4))),
17638      Close
17639        (Var("acc",F32),
17640         MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
17641            Close
17642              (Var("v",F32),
17643               MB(MB(MU(TP[Var("v",F32),nVar"rotation"],qTy),
17644                     Close
17645                       (Var("v",PTy(F32,nTy)),
17646                        Call
17647                          ("ROR",ATy(qTy,PTy(F32,qTy)),
17648                           Var("v",PTy(F32,nTy))))),
17649                  Close
17650                    (Var("rotated",F32),
17651                     MB(Call
17652                          ("write'R",ATy(qTy,PTy(uTy,qTy)),
17653                           TP[Bop(Add,Var("acc",F32),
17654                                  Call
17655                                    ("Extend",F32,
17656                                     TP[bVar"unsigned",
17657                                        EX(Var("rotated",F32),LN 7,LN 0,F8)])),
17658                              Var("d",F4)]),
17659                        Close
17660                          (AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))))))))
17661;
17662val dfn'ExtendByte16_def = Def
17663  ("dfn'ExtendByte16",
17664   TP[bVar"unsigned",Var("d",F4),Var("n",F4),Var("m",F4),nVar"rotation"],
17665   MB(ITE(EQ(Var("n",F4),LW(15,4)),MU(LW(0,32),qTy),
17666          Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4))),
17667      Close
17668        (Var("acc",F32),
17669         MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
17670            Close
17671              (Var("v",F32),
17672               MB(MB(MU(TP[Var("v",F32),nVar"rotation"],qTy),
17673                     Close
17674                       (Var("v",PTy(F32,nTy)),
17675                        Call
17676                          ("ROR",ATy(qTy,PTy(F32,qTy)),
17677                           Var("v",PTy(F32,nTy))))),
17678                  Close
17679                    (Var("rotated",F32),
17680                     Let(Var("r1",F16),
17681                         Bop(Add,EX(Var("acc",F32),LN 15,LN 0,F16),
17682                             Call
17683                               ("Extend",F16,
17684                                TP[bVar"unsigned",
17685                                   EX(Var("rotated",F32),LN 7,LN 0,F8)])),
17686                         MB(Call
17687                              ("write'R",ATy(qTy,PTy(uTy,qTy)),
17688                               TP[CC[Var("r1",F16),Var("r1",F16)],
17689                                  Var("d",F4)]),
17690                            Close
17691                              (AVar uTy,
17692                               Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU)))))))))))
17693;
17694val dfn'ExtendHalfword_def = Def
17695  ("dfn'ExtendHalfword",
17696   TP[bVar"unsigned",Var("d",F4),Var("n",F4),Var("m",F4),nVar"rotation"],
17697   MB(ITE(EQ(Var("n",F4),LW(15,4)),MU(LW(0,32),qTy),
17698          Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4))),
17699      Close
17700        (Var("acc",F32),
17701         MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
17702            Close
17703              (Var("v",F32),
17704               MB(MB(MU(TP[Var("v",F32),nVar"rotation"],qTy),
17705                     Close
17706                       (Var("v",PTy(F32,nTy)),
17707                        Call
17708                          ("ROR",ATy(qTy,PTy(F32,qTy)),
17709                           Var("v",PTy(F32,nTy))))),
17710                  Close
17711                    (Var("rotated",F32),
17712                     MB(Call
17713                          ("write'R",ATy(qTy,PTy(uTy,qTy)),
17714                           TP[Bop(Add,Var("acc",F32),
17715                                  Call
17716                                    ("Extend",F32,
17717                                     TP[bVar"unsigned",
17718                                        EX(Var("rotated",F32),LN 15,LN 0,
17719                                           F16)])),Var("d",F4)]),
17720                        Close
17721                          (AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))))))))
17722;
17723val dfn'SelectBytes_def = Def
17724  ("dfn'SelectBytes",TP[Var("d",F4),Var("n",F4),Var("m",F4)],
17725   MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
17726      Close
17727        (Var("Rn",F32),
17728         MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
17729            Close
17730              (Var("Rm",F32),
17731               MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
17732                  Close
17733                    (Var("v",CTy"PSR"),
17734                     MB(MB(MB(MU(Dest("GE",F4,Var("v",CTy"PSR")),qTy),
17735                              Close
17736                                (Var("v",F4),
17737                                 MU(Bop(Bit,Var("v",F4),LN 0),qTy))),
17738                           Close
17739                             (bVar"b",
17740                              MU(ITE(bVar"b",
17741                                     EX(Var("Rn",F32),LN 7,LN 0,F8),
17742                                     EX(Var("Rm",F32),LN 7,LN 0,F8)),qTy))),
17743                        Close
17744                          (Var("r1",F8),
17745                           MB(MR(Close
17746                                   (qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
17747                              Close
17748                                (Var("v",CTy"PSR"),
17749                                 MB(MB(MB(MU(Dest
17750                                               ("GE",F4,Var("v",CTy"PSR")),
17751                                             qTy),
17752                                          Close
17753                                            (Var("v",F4),
17754                                             MU(Bop(Bit,Var("v",F4),LN 1),
17755                                                qTy))),
17756                                       Close
17757                                         (bVar"b",
17758                                          MU(ITE(bVar"b",
17759                                                 EX(Var("Rn",F32),LN 15,
17760                                                    LN 8,F8),
17761                                                 EX(Var("Rm",F32),LN 15,
17762                                                    LN 8,F8)),qTy))),
17763                                    Close
17764                                      (Var("r2",F8),
17765                                       MB(MR(Close
17766                                               (qVar"s",
17767                                                Dest
17768                                                  ("CPSR",CTy"PSR",qVar"s"))),
17769                                          Close
17770                                            (Var("v",CTy"PSR"),
17771                                             MB(MB(MB(MU(Dest
17772                                                           ("GE",F4,
17773                                                            Var("v",
17774                                                                CTy"PSR")),
17775                                                         qTy),
17776                                                      Close
17777                                                        (Var("v",F4),
17778                                                         MU(Bop(Bit,
17779                                                                Var("v",F4),
17780                                                                LN 2),qTy))),
17781                                                   Close
17782                                                     (bVar"b",
17783                                                      MU(ITE(bVar"b",
17784                                                             EX(Var("Rn",
17785                                                                    F32),
17786                                                                LN 23,
17787                                                                LN 16,F8),
17788                                                             EX(Var("Rm",
17789                                                                    F32),
17790                                                                LN 23,
17791                                                                LN 16,F8)),
17792                                                         qTy))),
17793                                                Close
17794                                                  (Var("r3",F8),
17795                                                   MB(MR(Close
17796                                                           (qVar"s",
17797                                                            Dest
17798                                                              ("CPSR",
17799                                                               CTy"PSR",
17800                                                               qVar"s"))),
17801                                                      Close
17802                                                        (Var("v",CTy"PSR"),
17803                                                         MB(MB(MB(MU(Dest
17804                                                                       ("GE",
17805                                                                        F4,
17806                                                                        Var("v",
17807                                                                            CTy"PSR")),
17808                                                                     qTy),
17809                                                                  Close
17810                                                                    (Var("v",
17811                                                                         F4),
17812                                                                     MU(Bop(Bit,
17813                                                                            Var("v",
17814                                                                                F4),
17815                                                                            LN
17816                                                                             3),
17817                                                                        qTy))),
17818                                                               Close
17819                                                                 (bVar"b",
17820                                                                  MU(ITE(bVar"b",
17821                                                                         EX(Var("Rn",
17822                                                                                F32),
17823                                                                            LN
17824                                                                             31,
17825                                                                            LN
17826                                                                             24,
17827                                                                            F8),
17828                                                                         EX(Var("Rm",
17829                                                                                F32),
17830                                                                            LN
17831                                                                             31,
17832                                                                            LN
17833                                                                             24,
17834                                                                            F8)),
17835                                                                     qTy))),
17836                                                            Close
17837                                                              (Var("r4",F8),
17838                                                               MB(Call
17839                                                                    ("write'R",
17840                                                                     ATy(qTy,
17841                                                                         PTy(uTy,
17842                                                                             qTy)),
17843                                                                     TP[CC[Var("r4",
17844                                                                               F8),
17845                                                                           Var("r3",
17846                                                                               F8),
17847                                                                           Var("r2",
17848                                                                               F8),
17849                                                                           Var("r1",
17850                                                                               F8)],
17851                                                                        Var("d",
17852                                                                            F4)]),
17853                                                                  Close
17854                                                                    (AVar
17855                                                                       uTy,
17856                                                                     Call
17857                                                                       ("IncPC",
17858                                                                        ATy(qTy,
17859                                                                            PTy(uTy,
17860                                                                                qTy)),
17861                                                                        LU))))))))))))))))))))))))
17862;
17863val dfn'ByteReverse_def = Def
17864  ("dfn'ByteReverse",TP[Var("d",F4),Var("m",F4)],
17865   MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
17866      Close
17867        (Var("Rm",F32),
17868         MB(Call
17869              ("write'R",ATy(qTy,PTy(uTy,qTy)),
17870               TP[CC[EX(Var("Rm",F32),LN 7,LN 0,F8),
17871                     EX(Var("Rm",F32),LN 15,LN 8,F8),
17872                     EX(Var("Rm",F32),LN 23,LN 16,F8),
17873                     EX(Var("Rm",F32),LN 31,LN 24,F8)],Var("d",F4)]),
17874            Close(AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))))
17875;
17876val dfn'ByteReversePackedHalfword_def = Def
17877  ("dfn'ByteReversePackedHalfword",TP[Var("d",F4),Var("m",F4)],
17878   MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
17879      Close
17880        (Var("Rm",F32),
17881         MB(Call
17882              ("write'R",ATy(qTy,PTy(uTy,qTy)),
17883               TP[CC[EX(Var("Rm",F32),LN 23,LN 16,F8),
17884                     EX(Var("Rm",F32),LN 31,LN 24,F8),
17885                     EX(Var("Rm",F32),LN 7,LN 0,F8),
17886                     EX(Var("Rm",F32),LN 15,LN 8,F8)],Var("d",F4)]),
17887            Close(AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))))
17888;
17889val dfn'ByteReverseSignedHalfword_def = Def
17890  ("dfn'ByteReverseSignedHalfword",TP[Var("d",F4),Var("m",F4)],
17891   MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
17892      Close
17893        (Var("Rm",F32),
17894         MB(Call
17895              ("write'R",ATy(qTy,PTy(uTy,qTy)),
17896               TP[CC[Mop(SE(FTy 24),EX(Var("Rm",F32),LN 7,LN 0,F8)),
17897                     EX(Var("Rm",F32),LN 15,LN 8,F8)],Var("d",F4)]),
17898            Close(AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))))
17899;
17900val dfn'ReverseBits_def = Def
17901  ("dfn'ReverseBits",TP[Var("d",F4),Var("m",F4)],
17902   MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
17903      Close
17904        (Var("v",F32),
17905         MB(MB(MB(MU(Mop(Rev,Var("v",F32)),qTy),
17906                  Close(Var("v",F32),MU(TP[Var("v",F32),Var("d",F4)],qTy))),
17907               Close
17908                 (Var("v",PTy(F32,F4)),
17909                  Call
17910                    ("write'R",ATy(qTy,PTy(uTy,qTy)),Var("v",PTy(F32,F4))))),
17911            Close(AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))))
17912;
17913val dfn'BitFieldExtract_def = Def
17914  ("dfn'BitFieldExtract",
17915   TP[bVar"unsigned",Var("d",F4),Var("n",F4),nVar"lsbit",nVar"widthminus1"],
17916   Let(nVar"msbit",Bop(Add,nVar"lsbit",nVar"widthminus1"),
17917       MB(ITE(bVar"unsigned",
17918              MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
17919                 Close
17920                   (Var("v",F32),
17921                    MU(EX(Var("v",F32),nVar"msbit",nVar"lsbit",F32),qTy))),
17922              MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
17923                 Close
17924                   (Var("v",F32),
17925                    MB(MB(MU(EX(Var("v",F32),nVar"msbit",nVar"lsbit",F32),
17926                             qTy),
17927                          Close
17928                            (Var("v",F32),
17929                             MU(TP[Var("v",F32),nVar"widthminus1"],qTy))),
17930                       Close
17931                         (Var("v",PTy(F32,nTy)),
17932                          MU(Call
17933                               ("SignExtendFrom",F32,Var("v",PTy(F32,nTy))),
17934                             qTy)))))),
17935          Close
17936            (Var("v",F32),
17937             MB(MB(MU(TP[Var("v",F32),Var("d",F4)],qTy),
17938                   Close
17939                     (Var("v",PTy(F32,F4)),
17940                      Call
17941                        ("write'R",ATy(qTy,PTy(uTy,qTy)),
17942                         Var("v",PTy(F32,F4))))),
17943                Close(AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU)))))))
17944;
17945val dfn'BitFieldClearOrInsert_def = Def
17946  ("dfn'BitFieldClearOrInsert",
17947   TP[Var("d",F4),Var("n",F4),nVar"lsbit",nVar"msbit"],
17948   MB(ITE(EQ(Var("n",F4),LW(15,4)),MU(LW(0,32),qTy),
17949          Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4))),
17950      Close
17951        (Var("v",F32),
17952         MB(MU(Mop(Cast vTy,Var("v",F32)),qTy),
17953            Close
17954              (vVar"field",
17955               MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("d",F4)),
17956                  Close
17957                    (Var("v",F32),
17958                     MB(MU(Mop(Cast vTy,Var("v",F32)),qTy),
17959                        Close
17960                          (vVar"v",
17961                           MN(vVar"v",
17962                              MB(MR(Close
17963                                      (Var("s",PTy(vTy,qTy)),
17964                                       Mop(Fst,Var("s",PTy(vTy,qTy))))),
17965                                 Close
17966                                   (vVar"v",
17967                                    MB(MB(MU(BFI(nVar"msbit",nVar"lsbit",
17968                                                 EX(vVar"field",
17969                                                    Bop(Sub,nVar"msbit",
17970                                                        nVar"lsbit"),LN 0,
17971                                                    vTy),vVar"v"),
17972                                             PTy(vTy,qTy)),
17973                                          Close
17974                                            (vVar"v",
17975                                             MW(Close
17976                                                  (Var("s",PTy(vTy,qTy)),
17977                                                   TP[vVar"v",
17978                                                      Mop(Snd,
17979                                                          Var("s",
17980                                                              PTy(vTy,qTy)))])))),
17981                                       Close
17982                                         (AVar uTy,
17983                                          MB(MR(Close
17984                                                  (Var("s",PTy(vTy,qTy)),
17985                                                   Mop(Fst,
17986                                                       Var("s",
17987                                                           PTy(vTy,qTy))))),
17988                                             Close
17989                                               (vVar"v",
17990                                                MB(MB(MB(MU(Mop(Cast F32,
17991                                                                vVar"v"),
17992                                                            PTy(vTy,qTy)),
17993                                                         Close
17994                                                           (Var("v",F32),
17995                                                            MU(TP[Var("v",
17996                                                                      F32),
17997                                                                  Var("d",
17998                                                                      F4)],
17999                                                               PTy(vTy,qTy)))),
18000                                                      Close
18001                                                        (Var("v",
18002                                                             PTy(F32,F4)),
18003                                                         MD(Call
18004                                                              ("write'R",
18005                                                               ATy(qTy,
18006                                                                   PTy(uTy,
18007                                                                       qTy)),
18008                                                               Var("v",
18009                                                                   PTy(F32,
18010                                                                       F4))),
18011                                                            vTy))),
18012                                                   Close
18013                                                     (AVar uTy,
18014                                                      MD(Call
18015                                                           ("IncPC",
18016                                                            ATy(qTy,
18017                                                                PTy(uTy,
18018                                                                    qTy)),
18019                                                            LU),vTy)))))))))))))))))))
18020;
18021val dfn'LoadWord_def = Def
18022  ("dfn'LoadWord",
18023   TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("n",F4),
18024      Var("m",CTy"offset1")],
18025   MB(Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
18026      Close
18027        (bVar"b",
18028         ITE(bVar"b",
18029             MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
18030                Close
18031                  (Var("Rn",F32),
18032                   MB(CS(Var("m",CTy"offset1"),
18033                         [(Call
18034                             ("register_form1",CTy"offset1",
18035                              TP[Var("m",F4),Var("shift_t",CTy"SRType"),
18036                                 nVar"shift_n"]),
18037                           MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
18038                              Close
18039                                (Var("v",F32),
18040                                 MB(MB(MR(Close
18041                                            (qVar"s",
18042                                             Dest("CPSR",CTy"PSR",qVar"s"))),
18043                                       Close
18044                                         (Var("v0",CTy"PSR"),
18045                                          MB(MB(MB(MU(Dest
18046                                                        ("C",bTy,
18047                                                         Var("v0",CTy"PSR")),
18048                                                      qTy),
18049                                                   Close
18050                                                     (bVar"v",
18051                                                      MU(TP[nVar"shift_n",
18052                                                            bVar"v"],qTy))),
18053                                                Close
18054                                                  (Var("v",PTy(nTy,bTy)),
18055                                                   MU(TP[Var("shift_t",
18056                                                             CTy"SRType"),
18057                                                         Var("v",
18058                                                             PTy(nTy,bTy))],
18059                                                      qTy))),
18060                                             Close
18061                                               (Var("v0",
18062                                                    PTy(CTy"SRType",
18063                                                        PTy(nTy,bTy))),
18064                                                MU(TP[Var("v",F32),
18065                                                      Var("v0",
18066                                                          PTy(CTy"SRType",
18067                                                              PTy(nTy,bTy)))],
18068                                                   qTy))))),
18069                                    Close
18070                                      (Var("v",
18071                                           PTy(F32,
18072                                               PTy(CTy"SRType",
18073                                                   PTy(nTy,bTy)))),
18074                                       Call
18075                                         ("Shift",ATy(qTy,PTy(F32,qTy)),
18076                                          Var("v",
18077                                              PTy(F32,
18078                                                  PTy(CTy"SRType",
18079                                                      PTy(nTy,bTy)))))))))),
18080                          (Call
18081                             ("immediate_form1",CTy"offset1",
18082                              Var("imm32",F32)),MU(Var("imm32",F32),qTy))]),
18083                      Close
18084                        (Var("offset",F32),
18085                         Let(Var("offset_addr",F32),
18086                             ITE(bVar"add",
18087                                 Bop(Add,Var("Rn",F32),Var("offset",F32)),
18088                                 Bop(Sub,Var("Rn",F32),Var("offset",F32))),
18089                             Let(Var("address",F32),
18090                                 ITE(bVar"index",Var("offset_addr",F32),
18091                                     Var("Rn",F32)),
18092                                 MB(Call
18093                                      ("MemU",ATy(qTy,PTy(F32,qTy)),
18094                                       TP[Var("address",F32),LN 4]),
18095                                    Close
18096                                      (Var("data",F32),
18097                                       MB(MR(Close
18098                                               (qVar"s",
18099                                                Dest
18100                                                  ("data_abort",bTy,
18101                                                   qVar"s"))),
18102                                          Close
18103                                            (bVar"b",
18104                                             ITE(bVar"b",
18105                                                 Call
18106                                                   ("TakeDataAbortException",
18107                                                    ATy(qTy,PTy(uTy,qTy)),
18108                                                    LU),
18109                                                 MB(ITE(bVar"wback",
18110                                                        Call
18111                                                          ("write'R",
18112                                                           ATy(qTy,
18113                                                               PTy(uTy,qTy)),
18114                                                           TP[Var("offset_addr",
18115                                                                  F32),
18116                                                              Var("n",F4)]),
18117                                                        MU(LU,qTy)),
18118                                                    Close
18119                                                      (AVar uTy,
18120                                                       ITE(EQ(Var("t",F4),
18121                                                              LW(15,4)),
18122                                                           ITE(Call
18123                                                                 ("Aligned",
18124                                                                  bTy,
18125                                                                  TP[Var("address",
18126                                                                         F32),
18127                                                                     LN 4]),
18128                                                               Call
18129                                                                 ("LoadWritePC",
18130                                                                  ATy(qTy,
18131                                                                      PTy(uTy,
18132                                                                          qTy)),
18133                                                                  Var("data",
18134                                                                      F32)),
18135                                                               Call
18136                                                                 ("raise'exception",
18137                                                                  ATy(qTy,
18138                                                                      PTy(uTy,
18139                                                                          qTy)),
18140                                                                  Call
18141                                                                    ("UNPREDICTABLE",
18142                                                                     CTy"exception",
18143                                                                     LS
18144                                                                      "Load"))),
18145                                                           MB(Call
18146                                                                ("UnalignedSupport",
18147                                                                 ATy(qTy,
18148                                                                     PTy(bTy,
18149                                                                         qTy)),
18150                                                                 LU),
18151                                                              Close
18152                                                                (bVar"v",
18153                                                                 MB(MB(MU(Bop(Or,
18154                                                                              bVar"v",
18155                                                                              Call
18156                                                                                ("Aligned",
18157                                                                                 bTy,
18158                                                                                 TP[Var("address",
18159                                                                                        F32),
18160                                                                                    LN
18161                                                                                     4])),
18162                                                                          qTy),
18163                                                                       Close
18164                                                                         (bVar"b",
18165                                                                          ITE(bVar"b",
18166                                                                              Call
18167                                                                                ("write'R",
18168                                                                                 ATy(qTy,
18169                                                                                     PTy(uTy,
18170                                                                                         qTy)),
18171                                                                                 TP[Var("data",
18172                                                                                        F32),
18173                                                                                    Var("t",
18174                                                                                        F4)]),
18175                                                                              MB(MR(Close
18176                                                                                      (qVar"s",
18177                                                                                       Dest
18178                                                                                         ("Encoding",
18179                                                                                          CTy"Encoding",
18180                                                                                          qVar"s"))),
18181                                                                                 Close
18182                                                                                   (Var("v",
18183                                                                                        CTy"Encoding"),
18184                                                                                    MB(MU(EQ(Var("v",
18185                                                                                                 CTy"Encoding"),
18186                                                                                             LC("Encoding_ARM",
18187                                                                                                CTy"Encoding")),
18188                                                                                          qTy),
18189                                                                                       Close
18190                                                                                         (bVar"b",
18191                                                                                          ITE(bVar"b",
18192                                                                                              MB(Call
18193                                                                                                   ("ROR",
18194                                                                                                    ATy(qTy,
18195                                                                                                        PTy(F32,
18196                                                                                                            qTy)),
18197                                                                                                    TP[Var("data",
18198                                                                                                           F32),
18199                                                                                                       Bop(Mul,
18200                                                                                                           LN
18201                                                                                                            8,
18202                                                                                                           Mop(Cast
18203                                                                                                                 nTy,
18204                                                                                                               EX(Var("address",
18205                                                                                                                      F32),
18206                                                                                                                  LN
18207                                                                                                                   1,
18208                                                                                                                  LN
18209                                                                                                                   0,
18210                                                                                                                  FTy 2)))]),
18211                                                                                                 Close
18212                                                                                                   (Var("v",
18213                                                                                                        F32),
18214                                                                                                    MB(MU(TP[Var("v",
18215                                                                                                                 F32),
18216                                                                                                             Var("t",
18217                                                                                                                 F4)],
18218                                                                                                          qTy),
18219                                                                                                       Close
18220                                                                                                         (Var("v",
18221                                                                                                              PTy(F32,
18222                                                                                                                  F4)),
18223                                                                                                          Call
18224                                                                                                            ("write'R",
18225                                                                                                             ATy(qTy,
18226                                                                                                                 PTy(uTy,
18227                                                                                                                     qTy)),
18228                                                                                                             Var("v",
18229                                                                                                                 PTy(F32,
18230                                                                                                                     F4))))))),
18231                                                                                              MB(MW(Close
18232                                                                                                      (qVar"s",
18233                                                                                                       Rupd
18234                                                                                                         ("transfer_unknown",
18235                                                                                                          TP[qVar"s",
18236                                                                                                             LT]))),
18237                                                                                                 Close
18238                                                                                                   (AVar
18239                                                                                                      uTy,
18240                                                                                                    Call
18241                                                                                                      ("write'R",
18242                                                                                                       ATy(qTy,
18243                                                                                                           PTy(uTy,
18244                                                                                                               qTy)),
18245                                                                                                       TP[LX F32,
18246                                                                                                          Var("t",
18247                                                                                                              F4)]))))))))))),
18248                                                                    Close
18249                                                                      (AVar
18250                                                                         uTy,
18251                                                                       Call
18252                                                                         ("IncPC",
18253                                                                          ATy(qTy,
18254                                                                              PTy(uTy,
18255                                                                                  qTy)),
18256                                                                          LU))))))))))))))))))),
18257             MU(LU,qTy)))))
18258;
18259val dfn'LoadLiteral_def = Def
18260  ("dfn'LoadLiteral",TP[bVar"add",Var("t",F4),Var("imm32",F32)],
18261   MB(Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),LW(15,4)),
18262      Close
18263        (bVar"b",
18264         ITE(bVar"b",
18265             MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
18266                Close
18267                  (Var("v",F32),
18268                   MB(MB(MU(TP[Var("v",F32),LN 4],qTy),
18269                         Close
18270                           (Var("v",PTy(F32,nTy)),
18271                            MU(Call("Align",F32,Var("v",PTy(F32,nTy))),qTy))),
18272                      Close
18273                        (Var("base",F32),
18274                         Let(Var("address",F32),
18275                             ITE(bVar"add",
18276                                 Bop(Add,Var("base",F32),Var("imm32",F32)),
18277                                 Bop(Sub,Var("base",F32),Var("imm32",F32))),
18278                             MB(Call
18279                                  ("MemU",ATy(qTy,PTy(F32,qTy)),
18280                                   TP[Var("address",F32),LN 4]),
18281                                Close
18282                                  (Var("data",F32),
18283                                   MB(MR(Close
18284                                           (qVar"s",
18285                                            Dest("data_abort",bTy,qVar"s"))),
18286                                      Close
18287                                        (bVar"b",
18288                                         ITB([(bVar"b",
18289                                               Call
18290                                                 ("TakeDataAbortException",
18291                                                  ATy(qTy,PTy(uTy,qTy)),LU)),
18292                                              (EQ(Var("t",F4),LW(15,4)),
18293                                               ITE(Call
18294                                                     ("Aligned",bTy,
18295                                                      TP[Var("address",F32),
18296                                                         LN 4]),
18297                                                   Call
18298                                                     ("LoadWritePC",
18299                                                      ATy(qTy,PTy(uTy,qTy)),
18300                                                      Var("data",F32)),
18301                                                   Call
18302                                                     ("raise'exception",
18303                                                      ATy(qTy,PTy(uTy,qTy)),
18304                                                      Call
18305                                                        ("UNPREDICTABLE",
18306                                                         CTy"exception",
18307                                                         LS"LoadLiteral"))))],
18308                                             MB(Call
18309                                                  ("UnalignedSupport",
18310                                                   ATy(qTy,PTy(bTy,qTy)),
18311                                                   LU),
18312                                                Close
18313                                                  (bVar"v",
18314                                                   MB(MB(MU(Bop(Or,
18315                                                                bVar"v",
18316                                                                Call
18317                                                                  ("Aligned",
18318                                                                   bTy,
18319                                                                   TP[Var("address",
18320                                                                          F32),
18321                                                                      LN 4])),
18322                                                            qTy),
18323                                                         Close
18324                                                           (bVar"b",
18325                                                            ITE(bVar"b",
18326                                                                Call
18327                                                                  ("write'R",
18328                                                                   ATy(qTy,
18329                                                                       PTy(uTy,
18330                                                                           qTy)),
18331                                                                   TP[Var("data",
18332                                                                          F32),
18333                                                                      Var("t",
18334                                                                          F4)]),
18335                                                                MB(MR(Close
18336                                                                        (qVar"s",
18337                                                                         Dest
18338                                                                           ("Encoding",
18339                                                                            CTy"Encoding",
18340                                                                            qVar"s"))),
18341                                                                   Close
18342                                                                     (Var("v",
18343                                                                          CTy"Encoding"),
18344                                                                      MB(MU(EQ(Var("v",
18345                                                                                   CTy"Encoding"),
18346                                                                               LC("Encoding_ARM",
18347                                                                                  CTy"Encoding")),
18348                                                                            qTy),
18349                                                                         Close
18350                                                                           (bVar"b",
18351                                                                            ITE(bVar"b",
18352                                                                                MB(Call
18353                                                                                     ("ROR",
18354                                                                                      ATy(qTy,
18355                                                                                          PTy(F32,
18356                                                                                              qTy)),
18357                                                                                      TP[Var("data",
18358                                                                                             F32),
18359                                                                                         Bop(Mul,
18360                                                                                             LN
18361                                                                                              8,
18362                                                                                             Mop(Cast
18363                                                                                                   nTy,
18364                                                                                                 EX(Var("address",
18365                                                                                                        F32),
18366                                                                                                    LN
18367                                                                                                     1,
18368                                                                                                    LN
18369                                                                                                     0,
18370                                                                                                    FTy 2)))]),
18371                                                                                   Close
18372                                                                                     (Var("v",
18373                                                                                          F32),
18374                                                                                      MB(MU(TP[Var("v",
18375                                                                                                   F32),
18376                                                                                               Var("t",
18377                                                                                                   F4)],
18378                                                                                            qTy),
18379                                                                                         Close
18380                                                                                           (Var("v",
18381                                                                                                PTy(F32,
18382                                                                                                    F4)),
18383                                                                                            Call
18384                                                                                              ("write'R",
18385                                                                                               ATy(qTy,
18386                                                                                                   PTy(uTy,
18387                                                                                                       qTy)),
18388                                                                                               Var("v",
18389                                                                                                   PTy(F32,
18390                                                                                                       F4))))))),
18391                                                                                MB(MW(Close
18392                                                                                        (qVar"s",
18393                                                                                         Rupd
18394                                                                                           ("transfer_unknown",
18395                                                                                            TP[qVar"s",
18396                                                                                               LT]))),
18397                                                                                   Close
18398                                                                                     (AVar
18399                                                                                        uTy,
18400                                                                                      Call
18401                                                                                        ("write'R",
18402                                                                                         ATy(qTy,
18403                                                                                             PTy(uTy,
18404                                                                                                 qTy)),
18405                                                                                         TP[LX F32,
18406                                                                                            Var("t",
18407                                                                                                F4)]))))))))))),
18408                                                      Close
18409                                                        (AVar uTy,
18410                                                         Call
18411                                                           ("IncPC",
18412                                                            ATy(qTy,
18413                                                                PTy(uTy,
18414                                                                    qTy)),
18415                                                            LU))))))))))))))),
18416             MU(LU,qTy)))))
18417;
18418val dfn'LoadUnprivileged_def = Def
18419  ("dfn'LoadUnprivileged",
18420   TP[bVar"add",bVar"postindex",Var("t",F4),Var("n",F4),
18421      Var("m",CTy"offset1")],
18422   MB(Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
18423      Close
18424        (bVar"b",
18425         ITE(bVar"b",
18426             MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
18427                Close
18428                  (Var("Rn",F32),
18429                   MB(CS(Var("m",CTy"offset1"),
18430                         [(Call
18431                             ("register_form1",CTy"offset1",
18432                              TP[Var("m",F4),Var("shift_t",CTy"SRType"),
18433                                 nVar"shift_n"]),
18434                           MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
18435                              Close
18436                                (Var("v",F32),
18437                                 MB(MB(MR(Close
18438                                            (qVar"s",
18439                                             Dest("CPSR",CTy"PSR",qVar"s"))),
18440                                       Close
18441                                         (Var("v0",CTy"PSR"),
18442                                          MB(MB(MB(MU(Dest
18443                                                        ("C",bTy,
18444                                                         Var("v0",CTy"PSR")),
18445                                                      qTy),
18446                                                   Close
18447                                                     (bVar"v",
18448                                                      MU(TP[nVar"shift_n",
18449                                                            bVar"v"],qTy))),
18450                                                Close
18451                                                  (Var("v",PTy(nTy,bTy)),
18452                                                   MU(TP[Var("shift_t",
18453                                                             CTy"SRType"),
18454                                                         Var("v",
18455                                                             PTy(nTy,bTy))],
18456                                                      qTy))),
18457                                             Close
18458                                               (Var("v0",
18459                                                    PTy(CTy"SRType",
18460                                                        PTy(nTy,bTy))),
18461                                                MU(TP[Var("v",F32),
18462                                                      Var("v0",
18463                                                          PTy(CTy"SRType",
18464                                                              PTy(nTy,bTy)))],
18465                                                   qTy))))),
18466                                    Close
18467                                      (Var("v",
18468                                           PTy(F32,
18469                                               PTy(CTy"SRType",
18470                                                   PTy(nTy,bTy)))),
18471                                       Call
18472                                         ("Shift",ATy(qTy,PTy(F32,qTy)),
18473                                          Var("v",
18474                                              PTy(F32,
18475                                                  PTy(CTy"SRType",
18476                                                      PTy(nTy,bTy)))))))))),
18477                          (Call
18478                             ("immediate_form1",CTy"offset1",
18479                              Var("imm32",F32)),MU(Var("imm32",F32),qTy))]),
18480                      Close
18481                        (Var("offset",F32),
18482                         Let(Var("offset_addr",F32),
18483                             ITE(bVar"add",
18484                                 Bop(Add,Var("Rn",F32),Var("offset",F32)),
18485                                 Bop(Sub,Var("Rn",F32),Var("offset",F32))),
18486                             Let(Var("address",F32),
18487                                 ITE(bVar"postindex",Var("Rn",F32),
18488                                     Var("offset_addr",F32)),
18489                                 MB(Call
18490                                      ("MemU_unpriv",
18491                                       ATy(qTy,PTy(F32,qTy)),
18492                                       TP[Var("address",F32),LN 4]),
18493                                    Close
18494                                      (Var("data",F32),
18495                                       MB(MR(Close
18496                                               (qVar"s",
18497                                                Dest
18498                                                  ("data_abort",bTy,
18499                                                   qVar"s"))),
18500                                          Close
18501                                            (bVar"b",
18502                                             ITE(bVar"b",
18503                                                 Call
18504                                                   ("TakeDataAbortException",
18505                                                    ATy(qTy,PTy(uTy,qTy)),
18506                                                    LU),
18507                                                 MB(ITE(bVar"postindex",
18508                                                        Call
18509                                                          ("write'R",
18510                                                           ATy(qTy,
18511                                                               PTy(uTy,qTy)),
18512                                                           TP[Var("offset_addr",
18513                                                                  F32),
18514                                                              Var("n",F4)]),
18515                                                        MU(LU,qTy)),
18516                                                    Close
18517                                                      (AVar uTy,
18518                                                       MB(Call
18519                                                            ("UnalignedSupport",
18520                                                             ATy(qTy,
18521                                                                 PTy(bTy,
18522                                                                     qTy)),
18523                                                             LU),
18524                                                          Close
18525                                                            (bVar"v",
18526                                                             MB(MB(MU(Bop(Or,
18527                                                                          bVar"v",
18528                                                                          Call
18529                                                                            ("Aligned",
18530                                                                             bTy,
18531                                                                             TP[Var("address",
18532                                                                                    F32),
18533                                                                                LN
18534                                                                                 4])),
18535                                                                      qTy),
18536                                                                   Close
18537                                                                     (bVar"b",
18538                                                                      ITE(bVar"b",
18539                                                                          Call
18540                                                                            ("write'R",
18541                                                                             ATy(qTy,
18542                                                                                 PTy(uTy,
18543                                                                                     qTy)),
18544                                                                             TP[Var("data",
18545                                                                                    F32),
18546                                                                                Var("t",
18547                                                                                    F4)]),
18548                                                                          MB(MR(Close
18549                                                                                  (qVar"s",
18550                                                                                   Dest
18551                                                                                     ("Encoding",
18552                                                                                      CTy"Encoding",
18553                                                                                      qVar"s"))),
18554                                                                             Close
18555                                                                               (Var("v",
18556                                                                                    CTy"Encoding"),
18557                                                                                MB(MU(EQ(Var("v",
18558                                                                                             CTy"Encoding"),
18559                                                                                         LC("Encoding_ARM",
18560                                                                                            CTy"Encoding")),
18561                                                                                      qTy),
18562                                                                                   Close
18563                                                                                     (bVar"b",
18564                                                                                      ITE(bVar"b",
18565                                                                                          MB(Call
18566                                                                                               ("ROR",
18567                                                                                                ATy(qTy,
18568                                                                                                    PTy(F32,
18569                                                                                                        qTy)),
18570                                                                                                TP[Var("data",
18571                                                                                                       F32),
18572                                                                                                   Bop(Mul,
18573                                                                                                       LN
18574                                                                                                        8,
18575                                                                                                       Mop(Cast
18576                                                                                                             nTy,
18577                                                                                                           EX(Var("address",
18578                                                                                                                  F32),
18579                                                                                                              LN
18580                                                                                                               1,
18581                                                                                                              LN
18582                                                                                                               0,
18583                                                                                                              FTy 2)))]),
18584                                                                                             Close
18585                                                                                               (Var("v",
18586                                                                                                    F32),
18587                                                                                                MB(MU(TP[Var("v",
18588                                                                                                             F32),
18589                                                                                                         Var("t",
18590                                                                                                             F4)],
18591                                                                                                      qTy),
18592                                                                                                   Close
18593                                                                                                     (Var("v",
18594                                                                                                          PTy(F32,
18595                                                                                                              F4)),
18596                                                                                                      Call
18597                                                                                                        ("write'R",
18598                                                                                                         ATy(qTy,
18599                                                                                                             PTy(uTy,
18600                                                                                                                 qTy)),
18601                                                                                                         Var("v",
18602                                                                                                             PTy(F32,
18603                                                                                                                 F4))))))),
18604                                                                                          MB(MW(Close
18605                                                                                                  (qVar"s",
18606                                                                                                   Rupd
18607                                                                                                     ("transfer_unknown",
18608                                                                                                      TP[qVar"s",
18609                                                                                                         LT]))),
18610                                                                                             Close
18611                                                                                               (AVar
18612                                                                                                  uTy,
18613                                                                                                Call
18614                                                                                                  ("write'R",
18615                                                                                                   ATy(qTy,
18616                                                                                                       PTy(uTy,
18617                                                                                                           qTy)),
18618                                                                                                   TP[LX F32,
18619                                                                                                      Var("t",
18620                                                                                                          F4)]))))))))))),
18621                                                                Close
18622                                                                  (AVar
18623                                                                     uTy,
18624                                                                   Call
18625                                                                     ("IncPC",
18626                                                                      ATy(qTy,
18627                                                                          PTy(uTy,
18628                                                                              qTy)),
18629                                                                      LU)))))))))))))))))),
18630             MU(LU,qTy)))))
18631;
18632val dfn'LoadByte_def = Def
18633  ("dfn'LoadByte",
18634   TP[bVar"unsigned",bVar"add",bVar"index",bVar"wback",Var("t",F4),
18635      Var("n",F4),Var("m",CTy"offset1")],
18636   MB(Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
18637      Close
18638        (bVar"b",
18639         ITE(bVar"b",
18640             MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
18641                Close
18642                  (Var("Rn",F32),
18643                   MB(CS(Var("m",CTy"offset1"),
18644                         [(Call
18645                             ("register_form1",CTy"offset1",
18646                              TP[Var("m",F4),Var("shift_t",CTy"SRType"),
18647                                 nVar"shift_n"]),
18648                           MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
18649                              Close
18650                                (Var("v",F32),
18651                                 MB(MB(MR(Close
18652                                            (qVar"s",
18653                                             Dest("CPSR",CTy"PSR",qVar"s"))),
18654                                       Close
18655                                         (Var("v0",CTy"PSR"),
18656                                          MB(MB(MB(MU(Dest
18657                                                        ("C",bTy,
18658                                                         Var("v0",CTy"PSR")),
18659                                                      qTy),
18660                                                   Close
18661                                                     (bVar"v",
18662                                                      MU(TP[nVar"shift_n",
18663                                                            bVar"v"],qTy))),
18664                                                Close
18665                                                  (Var("v",PTy(nTy,bTy)),
18666                                                   MU(TP[Var("shift_t",
18667                                                             CTy"SRType"),
18668                                                         Var("v",
18669                                                             PTy(nTy,bTy))],
18670                                                      qTy))),
18671                                             Close
18672                                               (Var("v0",
18673                                                    PTy(CTy"SRType",
18674                                                        PTy(nTy,bTy))),
18675                                                MU(TP[Var("v",F32),
18676                                                      Var("v0",
18677                                                          PTy(CTy"SRType",
18678                                                              PTy(nTy,bTy)))],
18679                                                   qTy))))),
18680                                    Close
18681                                      (Var("v",
18682                                           PTy(F32,
18683                                               PTy(CTy"SRType",
18684                                                   PTy(nTy,bTy)))),
18685                                       Call
18686                                         ("Shift",ATy(qTy,PTy(F32,qTy)),
18687                                          Var("v",
18688                                              PTy(F32,
18689                                                  PTy(CTy"SRType",
18690                                                      PTy(nTy,bTy)))))))))),
18691                          (Call
18692                             ("immediate_form1",CTy"offset1",
18693                              Var("imm32",F32)),MU(Var("imm32",F32),qTy))]),
18694                      Close
18695                        (Var("offset",F32),
18696                         Let(Var("offset_addr",F32),
18697                             ITE(bVar"add",
18698                                 Bop(Add,Var("Rn",F32),Var("offset",F32)),
18699                                 Bop(Sub,Var("Rn",F32),Var("offset",F32))),
18700                             MB(Call
18701                                  ("MemU",ATy(qTy,PTy(F8,qTy)),
18702                                   TP[ITE(bVar"index",
18703                                          Var("offset_addr",F32),
18704                                          Var("Rn",F32)),LN 1]),
18705                                Close
18706                                  (Var("data",F8),
18707                                   MB(MR(Close
18708                                           (qVar"s",
18709                                            Dest("data_abort",bTy,qVar"s"))),
18710                                      Close
18711                                        (bVar"b",
18712                                         ITE(bVar"b",
18713                                             Call
18714                                               ("TakeDataAbortException",
18715                                                ATy(qTy,PTy(uTy,qTy)),LU),
18716                                             MB(Call
18717                                                  ("write'R",
18718                                                   ATy(qTy,PTy(uTy,qTy)),
18719                                                   TP[Call
18720                                                        ("Extend",F32,
18721                                                         TP[bVar"unsigned",
18722                                                            Var("data",F8)]),
18723                                                      Var("t",F4)]),
18724                                                Close
18725                                                  (AVar uTy,
18726                                                   MB(ITE(bVar"wback",
18727                                                          Call
18728                                                            ("write'R",
18729                                                             ATy(qTy,
18730                                                                 PTy(uTy,
18731                                                                     qTy)),
18732                                                             TP[Var("offset_addr",
18733                                                                    F32),
18734                                                                Var("n",F4)]),
18735                                                          MU(LU,qTy)),
18736                                                      Close
18737                                                        (AVar uTy,
18738                                                         Call
18739                                                           ("IncPC",
18740                                                            ATy(qTy,
18741                                                                PTy(uTy,
18742                                                                    qTy)),
18743                                                            LU))))))))))))))),
18744             MU(LU,qTy)))))
18745;
18746val dfn'LoadByteLiteral_def = Def
18747  ("dfn'LoadByteLiteral",
18748   TP[bVar"unsigned",bVar"add",Var("t",F4),Var("imm32",F32)],
18749   MB(Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),LW(15,4)),
18750      Close
18751        (bVar"b",
18752         ITE(bVar"b",
18753             MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
18754                Close
18755                  (Var("v",F32),
18756                   MB(MB(MU(TP[Var("v",F32),LN 4],qTy),
18757                         Close
18758                           (Var("v",PTy(F32,nTy)),
18759                            MU(Call("Align",F32,Var("v",PTy(F32,nTy))),qTy))),
18760                      Close
18761                        (Var("base",F32),
18762                         MB(Call
18763                              ("MemU",ATy(qTy,PTy(F8,qTy)),
18764                               TP[ITE(bVar"add",
18765                                      Bop(Add,Var("base",F32),
18766                                          Var("imm32",F32)),
18767                                      Bop(Sub,Var("base",F32),
18768                                          Var("imm32",F32))),LN 1]),
18769                            Close
18770                              (Var("data",F8),
18771                               MB(MR(Close
18772                                       (qVar"s",
18773                                        Dest("data_abort",bTy,qVar"s"))),
18774                                  Close
18775                                    (bVar"b",
18776                                     ITE(bVar"b",
18777                                         Call
18778                                           ("TakeDataAbortException",
18779                                            ATy(qTy,PTy(uTy,qTy)),LU),
18780                                         MB(Call
18781                                              ("write'R",
18782                                               ATy(qTy,PTy(uTy,qTy)),
18783                                               TP[Call
18784                                                    ("Extend",F32,
18785                                                     TP[bVar"unsigned",
18786                                                        Var("data",F8)]),
18787                                                  Var("t",F4)]),
18788                                            Close
18789                                              (AVar uTy,
18790                                               Call
18791                                                 ("IncPC",
18792                                                  ATy(qTy,PTy(uTy,qTy)),LU)))))))))))),
18793             MU(LU,qTy)))))
18794;
18795val dfn'LoadByteUnprivileged_def = Def
18796  ("dfn'LoadByteUnprivileged",
18797   TP[bVar"add",bVar"postindex",Var("t",F4),Var("n",F4),
18798      Var("m",CTy"offset1")],
18799   MB(Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
18800      Close
18801        (bVar"b",
18802         ITE(bVar"b",
18803             MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
18804                Close
18805                  (Var("Rn",F32),
18806                   MB(CS(Var("m",CTy"offset1"),
18807                         [(Call
18808                             ("register_form1",CTy"offset1",
18809                              TP[Var("m",F4),Var("shift_t",CTy"SRType"),
18810                                 nVar"shift_n"]),
18811                           MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
18812                              Close
18813                                (Var("v",F32),
18814                                 MB(MB(MR(Close
18815                                            (qVar"s",
18816                                             Dest("CPSR",CTy"PSR",qVar"s"))),
18817                                       Close
18818                                         (Var("v0",CTy"PSR"),
18819                                          MB(MB(MB(MU(Dest
18820                                                        ("C",bTy,
18821                                                         Var("v0",CTy"PSR")),
18822                                                      qTy),
18823                                                   Close
18824                                                     (bVar"v",
18825                                                      MU(TP[nVar"shift_n",
18826                                                            bVar"v"],qTy))),
18827                                                Close
18828                                                  (Var("v",PTy(nTy,bTy)),
18829                                                   MU(TP[Var("shift_t",
18830                                                             CTy"SRType"),
18831                                                         Var("v",
18832                                                             PTy(nTy,bTy))],
18833                                                      qTy))),
18834                                             Close
18835                                               (Var("v0",
18836                                                    PTy(CTy"SRType",
18837                                                        PTy(nTy,bTy))),
18838                                                MU(TP[Var("v",F32),
18839                                                      Var("v0",
18840                                                          PTy(CTy"SRType",
18841                                                              PTy(nTy,bTy)))],
18842                                                   qTy))))),
18843                                    Close
18844                                      (Var("v",
18845                                           PTy(F32,
18846                                               PTy(CTy"SRType",
18847                                                   PTy(nTy,bTy)))),
18848                                       Call
18849                                         ("Shift",ATy(qTy,PTy(F32,qTy)),
18850                                          Var("v",
18851                                              PTy(F32,
18852                                                  PTy(CTy"SRType",
18853                                                      PTy(nTy,bTy)))))))))),
18854                          (Call
18855                             ("immediate_form1",CTy"offset1",
18856                              Var("imm32",F32)),MU(Var("imm32",F32),qTy))]),
18857                      Close
18858                        (Var("offset",F32),
18859                         Let(Var("offset_addr",F32),
18860                             ITE(bVar"add",
18861                                 Bop(Add,Var("Rn",F32),Var("offset",F32)),
18862                                 Bop(Sub,Var("Rn",F32),Var("offset",F32))),
18863                             MB(Call
18864                                  ("MemU_unpriv",ATy(qTy,PTy(F8,qTy)),
18865                                   TP[ITE(bVar"postindex",Var("Rn",F32),
18866                                          Var("offset_addr",F32)),LN 1]),
18867                                Close
18868                                  (Var("data",F8),
18869                                   MB(MR(Close
18870                                           (qVar"s",
18871                                            Dest("data_abort",bTy,qVar"s"))),
18872                                      Close
18873                                        (bVar"b",
18874                                         ITE(bVar"b",
18875                                             Call
18876                                               ("TakeDataAbortException",
18877                                                ATy(qTy,PTy(uTy,qTy)),LU),
18878                                             MB(Call
18879                                                  ("write'R",
18880                                                   ATy(qTy,PTy(uTy,qTy)),
18881                                                   TP[Mop(Cast F32,
18882                                                          Var("data",F8)),
18883                                                      Var("t",F4)]),
18884                                                Close
18885                                                  (AVar uTy,
18886                                                   MB(ITE(bVar"postindex",
18887                                                          Call
18888                                                            ("write'R",
18889                                                             ATy(qTy,
18890                                                                 PTy(uTy,
18891                                                                     qTy)),
18892                                                             TP[Var("offset_addr",
18893                                                                    F32),
18894                                                                Var("n",F4)]),
18895                                                          MU(LU,qTy)),
18896                                                      Close
18897                                                        (AVar uTy,
18898                                                         Call
18899                                                           ("IncPC",
18900                                                            ATy(qTy,
18901                                                                PTy(uTy,
18902                                                                    qTy)),
18903                                                            LU))))))))))))))),
18904             MU(LU,qTy)))))
18905;
18906val dfn'LoadSignedByteUnprivileged_def = Def
18907  ("dfn'LoadSignedByteUnprivileged",
18908   TP[bVar"add",bVar"postindex",Var("t",F4),Var("n",F4),
18909      Var("m",CTy"offset2")],
18910   MB(Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
18911      Close
18912        (bVar"b",
18913         ITE(bVar"b",
18914             MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
18915                Close
18916                  (Var("Rn",F32),
18917                   MB(CS(Var("m",CTy"offset2"),
18918                         [(Call("register_form2",CTy"offset2",Var("m",F4)),
18919                           Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4))),
18920                          (Call
18921                             ("immediate_form2",CTy"offset2",
18922                              Var("imm32",F32)),MU(Var("imm32",F32),qTy))]),
18923                      Close
18924                        (Var("offset",F32),
18925                         Let(Var("offset_addr",F32),
18926                             ITE(bVar"add",
18927                                 Bop(Add,Var("Rn",F32),Var("offset",F32)),
18928                                 Bop(Sub,Var("Rn",F32),Var("offset",F32))),
18929                             MB(Call
18930                                  ("MemU_unpriv",ATy(qTy,PTy(F8,qTy)),
18931                                   TP[ITE(bVar"postindex",Var("Rn",F32),
18932                                          Var("offset_addr",F32)),LN 1]),
18933                                Close
18934                                  (Var("data",F8),
18935                                   MB(MR(Close
18936                                           (qVar"s",
18937                                            Dest("data_abort",bTy,qVar"s"))),
18938                                      Close
18939                                        (bVar"b",
18940                                         ITE(bVar"b",
18941                                             Call
18942                                               ("TakeDataAbortException",
18943                                                ATy(qTy,PTy(uTy,qTy)),LU),
18944                                             MB(Call
18945                                                  ("write'R",
18946                                                   ATy(qTy,PTy(uTy,qTy)),
18947                                                   TP[Mop(SE F32,
18948                                                          Var("data",F8)),
18949                                                      Var("t",F4)]),
18950                                                Close
18951                                                  (AVar uTy,
18952                                                   MB(ITE(bVar"postindex",
18953                                                          Call
18954                                                            ("write'R",
18955                                                             ATy(qTy,
18956                                                                 PTy(uTy,
18957                                                                     qTy)),
18958                                                             TP[Var("offset_addr",
18959                                                                    F32),
18960                                                                Var("n",F4)]),
18961                                                          MU(LU,qTy)),
18962                                                      Close
18963                                                        (AVar uTy,
18964                                                         Call
18965                                                           ("IncPC",
18966                                                            ATy(qTy,
18967                                                                PTy(uTy,
18968                                                                    qTy)),
18969                                                            LU))))))))))))))),
18970             MU(LU,qTy)))))
18971;
18972val dfn'LoadHalf_def = Def
18973  ("dfn'LoadHalf",
18974   TP[bVar"unsigned",bVar"add",bVar"index",bVar"wback",Var("t",F4),
18975      Var("n",F4),Var("m",CTy"offset1")],
18976   MB(Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
18977      Close
18978        (bVar"b",
18979         ITE(bVar"b",
18980             MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
18981                Close
18982                  (Var("Rn",F32),
18983                   MB(CS(Var("m",CTy"offset1"),
18984                         [(Call
18985                             ("register_form1",CTy"offset1",
18986                              TP[Var("m",F4),Var("shift_t",CTy"SRType"),
18987                                 nVar"shift_n"]),
18988                           MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
18989                              Close
18990                                (Var("v",F32),
18991                                 MB(MB(MR(Close
18992                                            (qVar"s",
18993                                             Dest("CPSR",CTy"PSR",qVar"s"))),
18994                                       Close
18995                                         (Var("v0",CTy"PSR"),
18996                                          MB(MB(MB(MU(Dest
18997                                                        ("C",bTy,
18998                                                         Var("v0",CTy"PSR")),
18999                                                      qTy),
19000                                                   Close
19001                                                     (bVar"v",
19002                                                      MU(TP[nVar"shift_n",
19003                                                            bVar"v"],qTy))),
19004                                                Close
19005                                                  (Var("v",PTy(nTy,bTy)),
19006                                                   MU(TP[Var("shift_t",
19007                                                             CTy"SRType"),
19008                                                         Var("v",
19009                                                             PTy(nTy,bTy))],
19010                                                      qTy))),
19011                                             Close
19012                                               (Var("v0",
19013                                                    PTy(CTy"SRType",
19014                                                        PTy(nTy,bTy))),
19015                                                MU(TP[Var("v",F32),
19016                                                      Var("v0",
19017                                                          PTy(CTy"SRType",
19018                                                              PTy(nTy,bTy)))],
19019                                                   qTy))))),
19020                                    Close
19021                                      (Var("v",
19022                                           PTy(F32,
19023                                               PTy(CTy"SRType",
19024                                                   PTy(nTy,bTy)))),
19025                                       Call
19026                                         ("Shift",ATy(qTy,PTy(F32,qTy)),
19027                                          Var("v",
19028                                              PTy(F32,
19029                                                  PTy(CTy"SRType",
19030                                                      PTy(nTy,bTy)))))))))),
19031                          (Call
19032                             ("immediate_form1",CTy"offset1",
19033                              Var("imm32",F32)),MU(Var("imm32",F32),qTy))]),
19034                      Close
19035                        (Var("offset",F32),
19036                         Let(Var("offset_addr",F32),
19037                             ITE(bVar"add",
19038                                 Bop(Add,Var("Rn",F32),Var("offset",F32)),
19039                                 Bop(Sub,Var("Rn",F32),Var("offset",F32))),
19040                             Let(Var("address",F32),
19041                                 ITE(bVar"index",Var("offset_addr",F32),
19042                                     Var("Rn",F32)),
19043                                 MB(Call
19044                                      ("MemU",ATy(qTy,PTy(F16,qTy)),
19045                                       TP[Var("address",F32),LN 2]),
19046                                    Close
19047                                      (Var("data",F16),
19048                                       MB(MR(Close
19049                                               (qVar"s",
19050                                                Dest
19051                                                  ("data_abort",bTy,
19052                                                   qVar"s"))),
19053                                          Close
19054                                            (bVar"b",
19055                                             ITE(bVar"b",
19056                                                 Call
19057                                                   ("TakeDataAbortException",
19058                                                    ATy(qTy,PTy(uTy,qTy)),
19059                                                    LU),
19060                                                 MB(ITE(bVar"wback",
19061                                                        Call
19062                                                          ("write'R",
19063                                                           ATy(qTy,
19064                                                               PTy(uTy,qTy)),
19065                                                           TP[Var("offset_addr",
19066                                                                  F32),
19067                                                              Var("n",F4)]),
19068                                                        MU(LU,qTy)),
19069                                                    Close
19070                                                      (AVar uTy,
19071                                                       MB(Call
19072                                                            ("UnalignedSupport",
19073                                                             ATy(qTy,
19074                                                                 PTy(bTy,
19075                                                                     qTy)),
19076                                                             LU),
19077                                                          Close
19078                                                            (bVar"v",
19079                                                             MB(MB(MU(Bop(Or,
19080                                                                          bVar"v",
19081                                                                          Call
19082                                                                            ("Aligned",
19083                                                                             bTy,
19084                                                                             TP[Var("address",
19085                                                                                    F32),
19086                                                                                LN
19087                                                                                 2])),
19088                                                                      qTy),
19089                                                                   Close
19090                                                                     (bVar"b",
19091                                                                      ITE(bVar"b",
19092                                                                          Call
19093                                                                            ("write'R",
19094                                                                             ATy(qTy,
19095                                                                                 PTy(uTy,
19096                                                                                     qTy)),
19097                                                                             TP[Call
19098                                                                                  ("Extend",
19099                                                                                   F32,
19100                                                                                   TP[bVar"unsigned",
19101                                                                                      Var("data",
19102                                                                                          F16)]),
19103                                                                                Var("t",
19104                                                                                    F4)]),
19105                                                                          MB(MW(Close
19106                                                                                  (qVar"s",
19107                                                                                   Rupd
19108                                                                                     ("transfer_unknown",
19109                                                                                      TP[qVar"s",
19110                                                                                         LT]))),
19111                                                                             Close
19112                                                                               (AVar
19113                                                                                  uTy,
19114                                                                                Call
19115                                                                                  ("write'R",
19116                                                                                   ATy(qTy,
19117                                                                                       PTy(uTy,
19118                                                                                           qTy)),
19119                                                                                   TP[LX F32,
19120                                                                                      Var("t",
19121                                                                                          F4)])))))),
19122                                                                Close
19123                                                                  (AVar
19124                                                                     uTy,
19125                                                                   Call
19126                                                                     ("IncPC",
19127                                                                      ATy(qTy,
19128                                                                          PTy(uTy,
19129                                                                              qTy)),
19130                                                                      LU)))))))))))))))))),
19131             MU(LU,qTy)))))
19132;
19133val dfn'LoadHalfLiteral_def = Def
19134  ("dfn'LoadHalfLiteral",
19135   TP[bVar"unsigned",bVar"add",Var("t",F4),Var("imm32",F32)],
19136   MB(Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),LW(15,4)),
19137      Close
19138        (bVar"b",
19139         ITE(bVar"b",
19140             MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
19141                Close
19142                  (Var("v",F32),
19143                   MB(MB(MU(TP[Var("v",F32),LN 4],qTy),
19144                         Close
19145                           (Var("v",PTy(F32,nTy)),
19146                            MU(Call("Align",F32,Var("v",PTy(F32,nTy))),qTy))),
19147                      Close
19148                        (Var("base",F32),
19149                         Let(Var("address",F32),
19150                             ITE(bVar"add",
19151                                 Bop(Add,Var("base",F32),Var("imm32",F32)),
19152                                 Bop(Sub,Var("base",F32),Var("imm32",F32))),
19153                             MB(Call
19154                                  ("MemU",ATy(qTy,PTy(F16,qTy)),
19155                                   TP[Var("address",F32),LN 2]),
19156                                Close
19157                                  (Var("data",F16),
19158                                   MB(MR(Close
19159                                           (qVar"s",
19160                                            Dest("data_abort",bTy,qVar"s"))),
19161                                      Close
19162                                        (bVar"b",
19163                                         ITE(bVar"b",
19164                                             Call
19165                                               ("TakeDataAbortException",
19166                                                ATy(qTy,PTy(uTy,qTy)),LU),
19167                                             MB(Call
19168                                                  ("UnalignedSupport",
19169                                                   ATy(qTy,PTy(bTy,qTy)),
19170                                                   LU),
19171                                                Close
19172                                                  (bVar"v",
19173                                                   MB(MB(MU(Bop(Or,
19174                                                                bVar"v",
19175                                                                Call
19176                                                                  ("Aligned",
19177                                                                   bTy,
19178                                                                   TP[Var("address",
19179                                                                          F32),
19180                                                                      LN 2])),
19181                                                            qTy),
19182                                                         Close
19183                                                           (bVar"b",
19184                                                            ITE(bVar"b",
19185                                                                Call
19186                                                                  ("write'R",
19187                                                                   ATy(qTy,
19188                                                                       PTy(uTy,
19189                                                                           qTy)),
19190                                                                   TP[Call
19191                                                                        ("Extend",
19192                                                                         F32,
19193                                                                         TP[bVar"unsigned",
19194                                                                            Var("data",
19195                                                                                F16)]),
19196                                                                      Var("t",
19197                                                                          F4)]),
19198                                                                MB(MW(Close
19199                                                                        (qVar"s",
19200                                                                         Rupd
19201                                                                           ("transfer_unknown",
19202                                                                            TP[qVar"s",
19203                                                                               LT]))),
19204                                                                   Close
19205                                                                     (AVar
19206                                                                        uTy,
19207                                                                      Call
19208                                                                        ("write'R",
19209                                                                         ATy(qTy,
19210                                                                             PTy(uTy,
19211                                                                                 qTy)),
19212                                                                         TP[LX F32,
19213                                                                            Var("t",
19214                                                                                F4)])))))),
19215                                                      Close
19216                                                        (AVar uTy,
19217                                                         Call
19218                                                           ("IncPC",
19219                                                            ATy(qTy,
19220                                                                PTy(uTy,
19221                                                                    qTy)),
19222                                                            LU))))))))))))))),
19223             MU(LU,qTy)))))
19224;
19225val dfn'LoadHalfUnprivileged_def = Def
19226  ("dfn'LoadHalfUnprivileged",
19227   TP[bVar"unsigned",bVar"add",bVar"postindex",Var("t",F4),Var("n",F4),
19228      Var("m",CTy"offset2")],
19229   MB(Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
19230      Close
19231        (bVar"b",
19232         ITE(bVar"b",
19233             MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
19234                Close
19235                  (Var("Rn",F32),
19236                   MB(CS(Var("m",CTy"offset2"),
19237                         [(Call("register_form2",CTy"offset2",Var("m",F4)),
19238                           Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4))),
19239                          (Call
19240                             ("immediate_form2",CTy"offset2",
19241                              Var("imm32",F32)),MU(Var("imm32",F32),qTy))]),
19242                      Close
19243                        (Var("offset",F32),
19244                         Let(Var("offset_addr",F32),
19245                             ITE(bVar"add",
19246                                 Bop(Add,Var("Rn",F32),Var("offset",F32)),
19247                                 Bop(Sub,Var("Rn",F32),Var("offset",F32))),
19248                             Let(Var("address",F32),
19249                                 ITE(bVar"postindex",Var("Rn",F32),
19250                                     Var("offset_addr",F32)),
19251                                 MB(Call
19252                                      ("MemU_unpriv",
19253                                       ATy(qTy,PTy(F16,qTy)),
19254                                       TP[Var("address",F32),LN 2]),
19255                                    Close
19256                                      (Var("data",F16),
19257                                       MB(MR(Close
19258                                               (qVar"s",
19259                                                Dest
19260                                                  ("data_abort",bTy,
19261                                                   qVar"s"))),
19262                                          Close
19263                                            (bVar"b",
19264                                             ITE(bVar"b",
19265                                                 Call
19266                                                   ("TakeDataAbortException",
19267                                                    ATy(qTy,PTy(uTy,qTy)),
19268                                                    LU),
19269                                                 MB(ITE(bVar"postindex",
19270                                                        Call
19271                                                          ("write'R",
19272                                                           ATy(qTy,
19273                                                               PTy(uTy,qTy)),
19274                                                           TP[Var("offset_addr",
19275                                                                  F32),
19276                                                              Var("n",F4)]),
19277                                                        MU(LU,qTy)),
19278                                                    Close
19279                                                      (AVar uTy,
19280                                                       MB(Call
19281                                                            ("UnalignedSupport",
19282                                                             ATy(qTy,
19283                                                                 PTy(bTy,
19284                                                                     qTy)),
19285                                                             LU),
19286                                                          Close
19287                                                            (bVar"v",
19288                                                             MB(MB(MU(Bop(Or,
19289                                                                          bVar"v",
19290                                                                          Call
19291                                                                            ("Aligned",
19292                                                                             bTy,
19293                                                                             TP[Var("address",
19294                                                                                    F32),
19295                                                                                LN
19296                                                                                 2])),
19297                                                                      qTy),
19298                                                                   Close
19299                                                                     (bVar"b",
19300                                                                      ITE(bVar"b",
19301                                                                          Call
19302                                                                            ("write'R",
19303                                                                             ATy(qTy,
19304                                                                                 PTy(uTy,
19305                                                                                     qTy)),
19306                                                                             TP[Call
19307                                                                                  ("Extend",
19308                                                                                   F32,
19309                                                                                   TP[bVar"unsigned",
19310                                                                                      Var("data",
19311                                                                                          F16)]),
19312                                                                                Var("t",
19313                                                                                    F4)]),
19314                                                                          MB(MW(Close
19315                                                                                  (qVar"s",
19316                                                                                   Rupd
19317                                                                                     ("transfer_unknown",
19318                                                                                      TP[qVar"s",
19319                                                                                         LT]))),
19320                                                                             Close
19321                                                                               (AVar
19322                                                                                  uTy,
19323                                                                                Call
19324                                                                                  ("write'R",
19325                                                                                   ATy(qTy,
19326                                                                                       PTy(uTy,
19327                                                                                           qTy)),
19328                                                                                   TP[LX F32,
19329                                                                                      Var("t",
19330                                                                                          F4)])))))),
19331                                                                Close
19332                                                                  (AVar
19333                                                                     uTy,
19334                                                                   Call
19335                                                                     ("IncPC",
19336                                                                      ATy(qTy,
19337                                                                          PTy(uTy,
19338                                                                              qTy)),
19339                                                                      LU)))))))))))))))))),
19340             MU(LU,qTy)))))
19341;
19342val dfn'LoadMultiple_def = Def
19343  ("dfn'LoadMultiple",
19344   TP[bVar"increment",bVar"index",bVar"wback",Var("n",F4),
19345      Var("registers",F16)],
19346   MB(Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
19347      Close
19348        (bVar"b",
19349         ITE(bVar"b",
19350             MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
19351                Close
19352                  (Var("Rn",F32),
19353                   MB(Call
19354                        ("BitCount",ATy(qTy,PTy(nTy,qTy)),
19355                         Var("registers",F16)),
19356                      Close
19357                        (nVar"v",
19358                         MB(MB(MU(Mop(Cast F32,nVar"v"),qTy),
19359                               Close
19360                                 (Var("v",F32),
19361                                  MU(Bop(Mul,LW(4,32),Var("v",F32)),qTy))),
19362                            Close
19363                              (Var("length",F32),
19364                               MN(ITE(bVar"increment",Var("Rn",F32),
19365                                      Bop(Sub,Var("Rn",F32),
19366                                          Var("length",F32))),
19367                                  MB(ITE(EQ(bVar"index",bVar"increment"),
19368                                         MB(MR(Close
19369                                                 (Var("s",PTy(F32,qTy)),
19370                                                  Mop(Fst,
19371                                                      Var("s",PTy(F32,qTy))))),
19372                                            Close
19373                                              (Var("v",F32),
19374                                               MB(MU(Bop(Add,Var("v",F32),
19375                                                         LW(4,32)),
19376                                                     PTy(F32,qTy)),
19377                                                  Close
19378                                                    (Var("v",F32),
19379                                                     MW(Close
19380                                                          (Var("s",
19381                                                               PTy(F32,qTy)),
19382                                                           TP[Var("v",F32),
19383                                                              Mop(Snd,
19384                                                                  Var("s",
19385                                                                      PTy(F32,
19386                                                                          qTy)))])))))),
19387                                         MU(LU,PTy(F32,qTy))),
19388                                     Close
19389                                       (AVar uTy,
19390                                        MB(MR(Close
19391                                                (Var("s",PTy(F32,qTy)),
19392                                                 Dest
19393                                                   ("REG",
19394                                                    ATy(CTy"RName",F32),
19395                                                    Mop(Snd,
19396                                                        Var("s",
19397                                                            PTy(F32,qTy)))))),
19398                                           Close
19399                                             (Var("oreg",
19400                                                  ATy(CTy"RName",F32)),
19401                                              MB(For(TP[LN 0,LN 14,
19402                                                        Close
19403                                                          (nVar"i",
19404                                                           ITE(Bop(Bit,
19405                                                                   Var("registers",
19406                                                                       F16),
19407                                                                   nVar"i"),
19408                                                               MB(MB(MR(Close
19409                                                                          (Var("s",
19410                                                                               PTy(F32,
19411                                                                                   qTy)),
19412                                                                           Mop(Fst,
19413                                                                               Var("s",
19414                                                                                   PTy(F32,
19415                                                                                       qTy))))),
19416                                                                     Close
19417                                                                       (Var("v",
19418                                                                            F32),
19419                                                                        MB(MB(MB(MU(TP[Var("v",
19420                                                                                           F32),
19421                                                                                       LN
19422                                                                                        4],
19423                                                                                    PTy(F32,
19424                                                                                        qTy)),
19425                                                                                 Close
19426                                                                                   (Var("v",
19427                                                                                        PTy(F32,
19428                                                                                            nTy)),
19429                                                                                    MD(Call
19430                                                                                         ("MemA",
19431                                                                                          ATy(qTy,
19432                                                                                              PTy(F32,
19433                                                                                                  qTy)),
19434                                                                                          Var("v",
19435                                                                                              PTy(F32,
19436                                                                                                  nTy))),
19437                                                                                       F32))),
19438                                                                              Close
19439                                                                                (Var("v",
19440                                                                                     F32),
19441                                                                                 MU(TP[Var("v",
19442                                                                                           F32),
19443                                                                                       Mop(Cast
19444                                                                                             F4,
19445                                                                                           nVar"i")],
19446                                                                                    PTy(F32,
19447                                                                                        qTy)))),
19448                                                                           Close
19449                                                                             (Var("v",
19450                                                                                  PTy(F32,
19451                                                                                      F4)),
19452                                                                              MD(Call
19453                                                                                   ("write'R",
19454                                                                                    ATy(qTy,
19455                                                                                        PTy(uTy,
19456                                                                                            qTy)),
19457                                                                                    Var("v",
19458                                                                                        PTy(F32,
19459                                                                                            F4))),
19460                                                                                 F32))))),
19461                                                                  Close
19462                                                                    (AVar
19463                                                                       uTy,
19464                                                                     MB(MR(Close
19465                                                                             (Var("s",
19466                                                                                  PTy(F32,
19467                                                                                      qTy)),
19468                                                                              Mop(Fst,
19469                                                                                  Var("s",
19470                                                                                      PTy(F32,
19471                                                                                          qTy))))),
19472                                                                        Close
19473                                                                          (Var("v",
19474                                                                               F32),
19475                                                                           MB(MU(Bop(Add,
19476                                                                                     Var("v",
19477                                                                                         F32),
19478                                                                                     LW(4,
19479                                                                                        32)),
19480                                                                                 PTy(F32,
19481                                                                                     qTy)),
19482                                                                              Close
19483                                                                                (Var("v",
19484                                                                                     F32),
19485                                                                                 MW(Close
19486                                                                                      (Var("s",
19487                                                                                           PTy(F32,
19488                                                                                               qTy)),
19489                                                                                       TP[Var("v",
19490                                                                                              F32),
19491                                                                                          Mop(Snd,
19492                                                                                              Var("s",
19493                                                                                                  PTy(F32,
19494                                                                                                      qTy)))])))))))),
19495                                                               MU(LU,
19496                                                                  PTy(F32,
19497                                                                      qTy))))]),
19498                                                 Close
19499                                                   (AVar uTy,
19500                                                    MB(MR(Close
19501                                                            (Var("s",
19502                                                                 PTy(F32,
19503                                                                     qTy)),
19504                                                             Dest
19505                                                               ("data_abort",
19506                                                                bTy,
19507                                                                Mop(Snd,
19508                                                                    Var("s",
19509                                                                        PTy(F32,
19510                                                                            qTy)))))),
19511                                                       Close
19512                                                         (bVar"v",
19513                                                          MB(ITB([(bVar"v",
19514                                                                   MB(MW(Close
19515                                                                           (Var("s",
19516                                                                                PTy(F32,
19517                                                                                    qTy)),
19518                                                                            TP[Mop(Fst,
19519                                                                                   Var("s",
19520                                                                                       PTy(F32,
19521                                                                                           qTy))),
19522                                                                               Rupd
19523                                                                                 ("REG",
19524                                                                                  TP[Mop(Snd,
19525                                                                                         Var("s",
19526                                                                                             PTy(F32,
19527                                                                                                 qTy))),
19528                                                                                     Var("oreg",
19529                                                                                         ATy(CTy"RName",
19530                                                                                             F32))])])),
19531                                                                      Close
19532                                                                        (AVar
19533                                                                           uTy,
19534                                                                         MD(Call
19535                                                                              ("TakeDataAbortException",
19536                                                                               ATy(qTy,
19537                                                                                   PTy(uTy,
19538                                                                                       qTy)),
19539                                                                               LU),
19540                                                                            F32)))),
19541                                                                  (Bop(Bit,
19542                                                                       Var("registers",
19543                                                                           F16),
19544                                                                       LN
19545                                                                        15),
19546                                                                   MB(MR(Close
19547                                                                           (Var("s",
19548                                                                                PTy(F32,
19549                                                                                    qTy)),
19550                                                                            Mop(Fst,
19551                                                                                Var("s",
19552                                                                                    PTy(F32,
19553                                                                                        qTy))))),
19554                                                                      Close
19555                                                                        (Var("v",
19556                                                                             F32),
19557                                                                         MB(MB(MU(TP[Var("v",
19558                                                                                         F32),
19559                                                                                     LN
19560                                                                                      4],
19561                                                                                  PTy(F32,
19562                                                                                      qTy)),
19563                                                                               Close
19564                                                                                 (Var("v",
19565                                                                                      PTy(F32,
19566                                                                                          nTy)),
19567                                                                                  MD(Call
19568                                                                                       ("MemA",
19569                                                                                        ATy(qTy,
19570                                                                                            PTy(F32,
19571                                                                                                qTy)),
19572                                                                                        Var("v",
19573                                                                                            PTy(F32,
19574                                                                                                nTy))),
19575                                                                                     F32))),
19576                                                                            Close
19577                                                                              (Var("new_pc_value",
19578                                                                                   F32),
19579                                                                               MB(MR(Close
19580                                                                                       (Var("s",
19581                                                                                            PTy(F32,
19582                                                                                                qTy)),
19583                                                                                        Dest
19584                                                                                          ("data_abort",
19585                                                                                           bTy,
19586                                                                                           Mop(Snd,
19587                                                                                               Var("s",
19588                                                                                                   PTy(F32,
19589                                                                                                       qTy)))))),
19590                                                                                  Close
19591                                                                                    (bVar"b",
19592                                                                                     ITE(bVar"b",
19593                                                                                         MB(MW(Close
19594                                                                                                 (Var("s",
19595                                                                                                      PTy(F32,
19596                                                                                                          qTy)),
19597                                                                                                  TP[Mop(Fst,
19598                                                                                                         Var("s",
19599                                                                                                             PTy(F32,
19600                                                                                                                 qTy))),
19601                                                                                                     Rupd
19602                                                                                                       ("REG",
19603                                                                                                        TP[Mop(Snd,
19604                                                                                                               Var("s",
19605                                                                                                                   PTy(F32,
19606                                                                                                                       qTy))),
19607                                                                                                           Var("oreg",
19608                                                                                                               ATy(CTy"RName",
19609                                                                                                                   F32))])])),
19610                                                                                            Close
19611                                                                                              (AVar
19612                                                                                                 uTy,
19613                                                                                               MD(Call
19614                                                                                                    ("TakeDataAbortException",
19615                                                                                                     ATy(qTy,
19616                                                                                                         PTy(uTy,
19617                                                                                                             qTy)),
19618                                                                                                     LU),
19619                                                                                                  F32))),
19620                                                                                         MD(Call
19621                                                                                              ("LoadWritePC",
19622                                                                                               ATy(qTy,
19623                                                                                                   PTy(uTy,
19624                                                                                                       qTy)),
19625                                                                                               Var("new_pc_value",
19626                                                                                                   F32)),
19627                                                                                            F32)))))))))],
19628                                                                 MD(Call
19629                                                                      ("IncPC",
19630                                                                       ATy(qTy,
19631                                                                           PTy(uTy,
19632                                                                               qTy)),
19633                                                                       LU),
19634                                                                    F32)),
19635                                                             Close
19636                                                               (AVar uTy,
19637                                                                ITE(bVar"wback",
19638                                                                    ITE(Bop(Bit,
19639                                                                            Var("registers",
19640                                                                                F16),
19641                                                                            Mop(Cast
19642                                                                                  nTy,
19643                                                                                Var("n",
19644                                                                                    F4))),
19645                                                                        MB(MW(Close
19646                                                                                (Var("s",
19647                                                                                     PTy(F32,
19648                                                                                         qTy)),
19649                                                                                 TP[Mop(Fst,
19650                                                                                        Var("s",
19651                                                                                            PTy(F32,
19652                                                                                                qTy))),
19653                                                                                    Rupd
19654                                                                                      ("transfer_unknown",
19655                                                                                       TP[Mop(Snd,
19656                                                                                              Var("s",
19657                                                                                                  PTy(F32,
19658                                                                                                      qTy))),
19659                                                                                          LT])])),
19660                                                                           Close
19661                                                                             (AVar
19662                                                                                uTy,
19663                                                                              MD(Call
19664                                                                                   ("write'R",
19665                                                                                    ATy(qTy,
19666                                                                                        PTy(uTy,
19667                                                                                            qTy)),
19668                                                                                    TP[LX F32,
19669                                                                                       Var("n",
19670                                                                                           F4)]),
19671                                                                                 F32))),
19672                                                                        MD(Call
19673                                                                             ("write'R",
19674                                                                              ATy(qTy,
19675                                                                                  PTy(uTy,
19676                                                                                      qTy)),
19677                                                                              TP[ITE(bVar"increment",
19678                                                                                     Bop(Add,
19679                                                                                         Var("Rn",
19680                                                                                             F32),
19681                                                                                         Var("length",
19682                                                                                             F32)),
19683                                                                                     Bop(Sub,
19684                                                                                         Var("Rn",
19685                                                                                             F32),
19686                                                                                         Var("length",
19687                                                                                             F32))),
19688                                                                                 Var("n",
19689                                                                                     F4)]),
19690                                                                           F32)),
19691                                                                    MU(LU,
19692                                                                       PTy(F32,
19693                                                                           qTy)))))))))))))))))))),
19694             MU(LU,qTy)))))
19695;
19696val dfn'LoadMultipleExceptionReturn_def = Def
19697  ("dfn'LoadMultipleExceptionReturn",
19698   TP[bVar"increment",bVar"wordhigher",bVar"wback",Var("n",F4),
19699      Var("registers",FTy 15)],
19700   MB(Call("CurrentModeIsHyp",ATy(qTy,PTy(bTy,qTy)),LU),
19701      Close
19702        (bVar"v",
19703         MB(ITE(bVar"v",
19704                Call("TakeUndefInstrException",ATy(qTy,PTy(uTy,qTy)),LU),
19705                MU(LU,qTy)),
19706            Close
19707              (AVar uTy,
19708               MB(Call
19709                    ("CurrentModeIsUserOrSystem",ATy(qTy,PTy(bTy,qTy)),LU),
19710                  Close
19711                    (bVar"v",
19712                     MB(ITE(bVar"v",
19713                            Call
19714                              ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
19715                               Call
19716                                 ("UNPREDICTABLE",CTy"exception",
19717                                  LS"LoadMultipleExceptionReturn")),
19718                            MU(LU,qTy)),
19719                        Close
19720                          (AVar uTy,
19721                           MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
19722                              Close
19723                                (Var("Rn",F32),
19724                                 MB(Call
19725                                      ("BitCount",ATy(qTy,PTy(nTy,qTy)),
19726                                       Var("registers",FTy 15)),
19727                                    Close
19728                                      (nVar"v",
19729                                       MB(MB(MB(MU(Mop(Cast F32,nVar"v"),
19730                                                   qTy),
19731                                                Close
19732                                                  (Var("v",F32),
19733                                                   MU(Bop(Mul,LW(4,32),
19734                                                          Var("v",F32)),
19735                                                      qTy))),
19736                                             Close
19737                                               (Var("v",F32),
19738                                                MU(Bop(Add,Var("v",F32),
19739                                                       LW(4,32)),qTy))),
19740                                          Close
19741                                            (Var("length",F32),
19742                                             MN(ITE(bVar"increment",
19743                                                    Var("Rn",F32),
19744                                                    Bop(Sub,Var("Rn",F32),
19745                                                        Var("length",F32))),
19746                                                MB(ITE(bVar"wordhigher",
19747                                                       MB(MR(Close
19748                                                               (Var("s",
19749                                                                    PTy(F32,
19750                                                                        qTy)),
19751                                                                Mop(Fst,
19752                                                                    Var("s",
19753                                                                        PTy(F32,
19754                                                                            qTy))))),
19755                                                          Close
19756                                                            (Var("v",F32),
19757                                                             MB(MU(Bop(Add,
19758                                                                       Var("v",
19759                                                                           F32),
19760                                                                       LW(4,
19761                                                                          32)),
19762                                                                   PTy(F32,
19763                                                                       qTy)),
19764                                                                Close
19765                                                                  (Var("v",
19766                                                                       F32),
19767                                                                   MW(Close
19768                                                                        (Var("s",
19769                                                                             PTy(F32,
19770                                                                                 qTy)),
19771                                                                         TP[Var("v",
19772                                                                                F32),
19773                                                                            Mop(Snd,
19774                                                                                Var("s",
19775                                                                                    PTy(F32,
19776                                                                                        qTy)))])))))),
19777                                                       MU(LU,PTy(F32,qTy))),
19778                                                   Close
19779                                                     (AVar uTy,
19780                                                      MB(MR(Close
19781                                                              (Var("s",
19782                                                                   PTy(F32,
19783                                                                       qTy)),
19784                                                               Dest
19785                                                                 ("REG",
19786                                                                  ATy(CTy"RName",
19787                                                                      F32),
19788                                                                  Mop(Snd,
19789                                                                      Var("s",
19790                                                                          PTy(F32,
19791                                                                              qTy)))))),
19792                                                         Close
19793                                                           (Var("oreg",
19794                                                                ATy(CTy"RName",
19795                                                                    F32)),
19796                                                            MB(For(TP[LN 0,
19797                                                                      LN
19798                                                                       14,
19799                                                                      Close
19800                                                                        (nVar"i",
19801                                                                         ITE(Bop(Bit,
19802                                                                                 Var("registers",
19803                                                                                     FTy 15),
19804                                                                                 nVar"i"),
19805                                                                             MB(MB(MR(Close
19806                                                                                        (Var("s",
19807                                                                                             PTy(F32,
19808                                                                                                 qTy)),
19809                                                                                         Mop(Fst,
19810                                                                                             Var("s",
19811                                                                                                 PTy(F32,
19812                                                                                                     qTy))))),
19813                                                                                   Close
19814                                                                                     (Var("v",
19815                                                                                          F32),
19816                                                                                      MB(MB(MB(MU(TP[Var("v",
19817                                                                                                         F32),
19818                                                                                                     LN
19819                                                                                                      4],
19820                                                                                                  PTy(F32,
19821                                                                                                      qTy)),
19822                                                                                               Close
19823                                                                                                 (Var("v",
19824                                                                                                      PTy(F32,
19825                                                                                                          nTy)),
19826                                                                                                  MD(Call
19827                                                                                                       ("MemA",
19828                                                                                                        ATy(qTy,
19829                                                                                                            PTy(F32,
19830                                                                                                                qTy)),
19831                                                                                                        Var("v",
19832                                                                                                            PTy(F32,
19833                                                                                                                nTy))),
19834                                                                                                     F32))),
19835                                                                                            Close
19836                                                                                              (Var("v",
19837                                                                                                   F32),
19838                                                                                               MU(TP[Var("v",
19839                                                                                                         F32),
19840                                                                                                     Mop(Cast
19841                                                                                                           F4,
19842                                                                                                         nVar"i")],
19843                                                                                                  PTy(F32,
19844                                                                                                      qTy)))),
19845                                                                                         Close
19846                                                                                           (Var("v",
19847                                                                                                PTy(F32,
19848                                                                                                    F4)),
19849                                                                                            MD(Call
19850                                                                                                 ("write'R",
19851                                                                                                  ATy(qTy,
19852                                                                                                      PTy(uTy,
19853                                                                                                          qTy)),
19854                                                                                                  Var("v",
19855                                                                                                      PTy(F32,
19856                                                                                                          F4))),
19857                                                                                               F32))))),
19858                                                                                Close
19859                                                                                  (AVar
19860                                                                                     uTy,
19861                                                                                   MB(MR(Close
19862                                                                                           (Var("s",
19863                                                                                                PTy(F32,
19864                                                                                                    qTy)),
19865                                                                                            Mop(Fst,
19866                                                                                                Var("s",
19867                                                                                                    PTy(F32,
19868                                                                                                        qTy))))),
19869                                                                                      Close
19870                                                                                        (Var("v",
19871                                                                                             F32),
19872                                                                                         MB(MU(Bop(Add,
19873                                                                                                   Var("v",
19874                                                                                                       F32),
19875                                                                                                   LW(4,
19876                                                                                                      32)),
19877                                                                                               PTy(F32,
19878                                                                                                   qTy)),
19879                                                                                            Close
19880                                                                                              (Var("v",
19881                                                                                                   F32),
19882                                                                                               MW(Close
19883                                                                                                    (Var("s",
19884                                                                                                         PTy(F32,
19885                                                                                                             qTy)),
19886                                                                                                     TP[Var("v",
19887                                                                                                            F32),
19888                                                                                                        Mop(Snd,
19889                                                                                                            Var("s",
19890                                                                                                                PTy(F32,
19891                                                                                                                    qTy)))])))))))),
19892                                                                             MU(LU,
19893                                                                                PTy(F32,
19894                                                                                    qTy))))]),
19895                                                               Close
19896                                                                 (AVar uTy,
19897                                                                  MB(MR(Close
19898                                                                          (Var("s",
19899                                                                               PTy(F32,
19900                                                                                   qTy)),
19901                                                                           Mop(Fst,
19902                                                                               Var("s",
19903                                                                                   PTy(F32,
19904                                                                                       qTy))))),
19905                                                                     Close
19906                                                                       (Var("v",
19907                                                                            F32),
19908                                                                        MB(MB(MU(TP[Var("v",
19909                                                                                        F32),
19910                                                                                    LN
19911                                                                                     4],
19912                                                                                 PTy(F32,
19913                                                                                     qTy)),
19914                                                                              Close
19915                                                                                (Var("v",
19916                                                                                     PTy(F32,
19917                                                                                         nTy)),
19918                                                                                 MD(Call
19919                                                                                      ("MemA",
19920                                                                                       ATy(qTy,
19921                                                                                           PTy(F32,
19922                                                                                               qTy)),
19923                                                                                       Var("v",
19924                                                                                           PTy(F32,
19925                                                                                               nTy))),
19926                                                                                    F32))),
19927                                                                           Close
19928                                                                             (Var("new_pc_value",
19929                                                                                  F32),
19930                                                                              MB(MR(Close
19931                                                                                      (Var("s",
19932                                                                                           PTy(F32,
19933                                                                                               qTy)),
19934                                                                                       Dest
19935                                                                                         ("data_abort",
19936                                                                                          bTy,
19937                                                                                          Mop(Snd,
19938                                                                                              Var("s",
19939                                                                                                  PTy(F32,
19940                                                                                                      qTy)))))),
19941                                                                                 Close
19942                                                                                   (bVar"b",
19943                                                                                    ITE(bVar"b",
19944                                                                                        MB(MW(Close
19945                                                                                                (Var("s",
19946                                                                                                     PTy(F32,
19947                                                                                                         qTy)),
19948                                                                                                 TP[Mop(Fst,
19949                                                                                                        Var("s",
19950                                                                                                            PTy(F32,
19951                                                                                                                qTy))),
19952                                                                                                    Rupd
19953                                                                                                      ("REG",
19954                                                                                                       TP[Mop(Snd,
19955                                                                                                              Var("s",
19956                                                                                                                  PTy(F32,
19957                                                                                                                      qTy))),
19958                                                                                                          Var("oreg",
19959                                                                                                              ATy(CTy"RName",
19960                                                                                                                  F32))])])),
19961                                                                                           Close
19962                                                                                             (AVar
19963                                                                                                uTy,
19964                                                                                              MD(Call
19965                                                                                                   ("TakeDataAbortException",
19966                                                                                                    ATy(qTy,
19967                                                                                                        PTy(uTy,
19968                                                                                                            qTy)),
19969                                                                                                    LU),
19970                                                                                                 F32))),
19971                                                                                        MB(ITE(bVar"wback",
19972                                                                                               ITE(Bop(Bit,
19973                                                                                                       Var("registers",
19974                                                                                                           FTy 15),
19975                                                                                                       Mop(Cast
19976                                                                                                             nTy,
19977                                                                                                           Var("n",
19978                                                                                                               F4))),
19979                                                                                                   MB(MW(Close
19980                                                                                                           (Var("s",
19981                                                                                                                PTy(F32,
19982                                                                                                                    qTy)),
19983                                                                                                            TP[Mop(Fst,
19984                                                                                                                   Var("s",
19985                                                                                                                       PTy(F32,
19986                                                                                                                           qTy))),
19987                                                                                                               Rupd
19988                                                                                                                 ("transfer_unknown",
19989                                                                                                                  TP[Mop(Snd,
19990                                                                                                                         Var("s",
19991                                                                                                                             PTy(F32,
19992                                                                                                                                 qTy))),
19993                                                                                                                     LT])])),
19994                                                                                                      Close
19995                                                                                                        (AVar
19996                                                                                                           uTy,
19997                                                                                                         MD(Call
19998                                                                                                              ("write'R",
19999                                                                                                               ATy(qTy,
20000                                                                                                                   PTy(uTy,
20001                                                                                                                       qTy)),
20002                                                                                                               TP[LX F32,
20003                                                                                                                  Var("n",
20004                                                                                                                      F4)]),
20005                                                                                                            F32))),
20006                                                                                                   MD(Call
20007                                                                                                        ("write'R",
20008                                                                                                         ATy(qTy,
20009                                                                                                             PTy(uTy,
20010                                                                                                                 qTy)),
20011                                                                                                         TP[ITE(bVar"increment",
20012                                                                                                                Bop(Add,
20013                                                                                                                    Var("Rn",
20014                                                                                                                        F32),
20015                                                                                                                    Var("length",
20016                                                                                                                        F32)),
20017                                                                                                                Bop(Sub,
20018                                                                                                                    Var("Rn",
20019                                                                                                                        F32),
20020                                                                                                                    Var("length",
20021                                                                                                                        F32))),
20022                                                                                                            Var("n",
20023                                                                                                                F4)]),
20024                                                                                                      F32)),
20025                                                                                               MU(LU,
20026                                                                                                  PTy(F32,
20027                                                                                                      qTy))),
20028                                                                                           Close
20029                                                                                             (AVar
20030                                                                                                uTy,
20031                                                                                              MB(MD(Const
20032                                                                                                      ("SPSR",
20033                                                                                                       ATy(qTy,
20034                                                                                                           PTy(CTy"PSR",
20035                                                                                                               qTy))),
20036                                                                                                    F32),
20037                                                                                                 Close
20038                                                                                                   (Var("v",
20039                                                                                                        CTy"PSR"),
20040                                                                                                    MB(MB(MB(MU(Call
20041                                                                                                                  ("reg'PSR",
20042                                                                                                                   F32,
20043                                                                                                                   Var("v",
20044                                                                                                                       CTy"PSR")),
20045                                                                                                                PTy(F32,
20046                                                                                                                    qTy)),
20047                                                                                                             Close
20048                                                                                                               (Var("v",
20049                                                                                                                    F32),
20050                                                                                                                MU(TP[Var("v",
20051                                                                                                                          F32),
20052                                                                                                                      LW(15,
20053                                                                                                                         4),
20054                                                                                                                      LT],
20055                                                                                                                   PTy(F32,
20056                                                                                                                       qTy)))),
20057                                                                                                          Close
20058                                                                                                            (Var("v",
20059                                                                                                                 PTy(F32,
20060                                                                                                                     PTy(F4,
20061                                                                                                                         bTy))),
20062                                                                                                             MD(Call
20063                                                                                                                  ("CPSRWriteByInstr",
20064                                                                                                                   ATy(qTy,
20065                                                                                                                       PTy(uTy,
20066                                                                                                                           qTy)),
20067                                                                                                                   Var("v",
20068                                                                                                                       PTy(F32,
20069                                                                                                                           PTy(F4,
20070                                                                                                                               bTy)))),
20071                                                                                                                F32))),
20072                                                                                                       Close
20073                                                                                                         (AVar
20074                                                                                                            uTy,
20075                                                                                                          MD(Call
20076                                                                                                               ("BranchWritePC",
20077                                                                                                                ATy(qTy,
20078                                                                                                                    PTy(uTy,
20079                                                                                                                        qTy)),
20080                                                                                                                Var("new_pc_value",
20081                                                                                                                    F32)),
20082                                                                                                             F32))))))))))))))))))))))))))))))))))))
20083;
20084val dfn'LoadMultipleUserRegisters_def = Def
20085  ("dfn'LoadMultipleUserRegisters",
20086   TP[bVar"increment",bVar"wordhigher",Var("n",F4),Var("registers",FTy 15)],
20087   MB(Call("CurrentModeIsHyp",ATy(qTy,PTy(bTy,qTy)),LU),
20088      Close
20089        (bVar"v",
20090         MB(ITE(bVar"v",
20091                Call("TakeUndefInstrException",ATy(qTy,PTy(uTy,qTy)),LU),
20092                MU(LU,qTy)),
20093            Close
20094              (AVar uTy,
20095               MB(Call
20096                    ("CurrentModeIsUserOrSystem",ATy(qTy,PTy(bTy,qTy)),LU),
20097                  Close
20098                    (bVar"v",
20099                     MB(ITE(bVar"v",
20100                            Call
20101                              ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
20102                               Call
20103                                 ("UNPREDICTABLE",CTy"exception",
20104                                  LS"LoadMultipleUserRegisters")),
20105                            MU(LU,qTy)),
20106                        Close
20107                          (AVar uTy,
20108                           MB(Call
20109                                ("BitCount",ATy(qTy,PTy(nTy,qTy)),
20110                                 Var("registers",FTy 15)),
20111                              Close
20112                                (nVar"v",
20113                                 MB(MB(MU(Mop(Cast F32,nVar"v"),qTy),
20114                                       Close
20115                                         (Var("v",F32),
20116                                          MU(Bop(Mul,LW(4,32),Var("v",F32)),
20117                                             qTy))),
20118                                    Close
20119                                      (Var("length",F32),
20120                                       MB(ITE(bVar"increment",
20121                                              Call
20122                                                ("R",
20123                                                 ATy(qTy,PTy(F32,qTy)),
20124                                                 Var("n",F4)),
20125                                              MB(Call
20126                                                   ("R",
20127                                                    ATy(qTy,PTy(F32,qTy)),
20128                                                    Var("n",F4)),
20129                                                 Close
20130                                                   (Var("v",F32),
20131                                                    MU(Bop(Sub,
20132                                                           Var("v",F32),
20133                                                           Var("length",
20134                                                               F32)),qTy)))),
20135                                          Close
20136                                            (Var("v",F32),
20137                                             MN(Var("v",F32),
20138                                                MB(ITE(bVar"wordhigher",
20139                                                       MB(MR(Close
20140                                                               (Var("s",
20141                                                                    PTy(F32,
20142                                                                        qTy)),
20143                                                                Mop(Fst,
20144                                                                    Var("s",
20145                                                                        PTy(F32,
20146                                                                            qTy))))),
20147                                                          Close
20148                                                            (Var("v",F32),
20149                                                             MB(MU(Bop(Add,
20150                                                                       Var("v",
20151                                                                           F32),
20152                                                                       LW(4,
20153                                                                          32)),
20154                                                                   PTy(F32,
20155                                                                       qTy)),
20156                                                                Close
20157                                                                  (Var("v",
20158                                                                       F32),
20159                                                                   MW(Close
20160                                                                        (Var("s",
20161                                                                             PTy(F32,
20162                                                                                 qTy)),
20163                                                                         TP[Var("v",
20164                                                                                F32),
20165                                                                            Mop(Snd,
20166                                                                                Var("s",
20167                                                                                    PTy(F32,
20168                                                                                        qTy)))])))))),
20169                                                       MU(LU,PTy(F32,qTy))),
20170                                                   Close
20171                                                     (AVar uTy,
20172                                                      MB(MR(Close
20173                                                              (Var("s",
20174                                                                   PTy(F32,
20175                                                                       qTy)),
20176                                                               Dest
20177                                                                 ("REG",
20178                                                                  ATy(CTy"RName",
20179                                                                      F32),
20180                                                                  Mop(Snd,
20181                                                                      Var("s",
20182                                                                          PTy(F32,
20183                                                                              qTy)))))),
20184                                                         Close
20185                                                           (Var("oreg",
20186                                                                ATy(CTy"RName",
20187                                                                    F32)),
20188                                                            MB(For(TP[LN 0,
20189                                                                      LN
20190                                                                       14,
20191                                                                      Close
20192                                                                        (nVar"i",
20193                                                                         ITE(Bop(Bit,
20194                                                                                 Var("registers",
20195                                                                                     FTy 15),
20196                                                                                 nVar"i"),
20197                                                                             MB(MB(MR(Close
20198                                                                                        (Var("s",
20199                                                                                             PTy(F32,
20200                                                                                                 qTy)),
20201                                                                                         Mop(Fst,
20202                                                                                             Var("s",
20203                                                                                                 PTy(F32,
20204                                                                                                     qTy))))),
20205                                                                                   Close
20206                                                                                     (Var("v",
20207                                                                                          F32),
20208                                                                                      MB(MB(MB(MU(TP[Var("v",
20209                                                                                                         F32),
20210                                                                                                     LN
20211                                                                                                      4],
20212                                                                                                  PTy(F32,
20213                                                                                                      qTy)),
20214                                                                                               Close
20215                                                                                                 (Var("v",
20216                                                                                                      PTy(F32,
20217                                                                                                          nTy)),
20218                                                                                                  MD(Call
20219                                                                                                       ("MemA",
20220                                                                                                        ATy(qTy,
20221                                                                                                            PTy(F32,
20222                                                                                                                qTy)),
20223                                                                                                        Var("v",
20224                                                                                                            PTy(F32,
20225                                                                                                                nTy))),
20226                                                                                                     F32))),
20227                                                                                            Close
20228                                                                                              (Var("v",
20229                                                                                                   F32),
20230                                                                                               MU(TP[Var("v",
20231                                                                                                         F32),
20232                                                                                                     Mop(Cast
20233                                                                                                           F4,
20234                                                                                                         nVar"i"),
20235                                                                                                     LW(16,
20236                                                                                                        5)],
20237                                                                                                  PTy(F32,
20238                                                                                                      qTy)))),
20239                                                                                         Close
20240                                                                                           (Var("v",
20241                                                                                                PTy(F32,
20242                                                                                                    PTy(F4,
20243                                                                                                        FTy 5))),
20244                                                                                            MD(Call
20245                                                                                                 ("write'Rmode",
20246                                                                                                  ATy(qTy,
20247                                                                                                      PTy(uTy,
20248                                                                                                          qTy)),
20249                                                                                                  Var("v",
20250                                                                                                      PTy(F32,
20251                                                                                                          PTy(F4,
20252                                                                                                              FTy 5)))),
20253                                                                                               F32))))),
20254                                                                                Close
20255                                                                                  (AVar
20256                                                                                     uTy,
20257                                                                                   MB(MR(Close
20258                                                                                           (Var("s",
20259                                                                                                PTy(F32,
20260                                                                                                    qTy)),
20261                                                                                            Mop(Fst,
20262                                                                                                Var("s",
20263                                                                                                    PTy(F32,
20264                                                                                                        qTy))))),
20265                                                                                      Close
20266                                                                                        (Var("v",
20267                                                                                             F32),
20268                                                                                         MB(MU(Bop(Add,
20269                                                                                                   Var("v",
20270                                                                                                       F32),
20271                                                                                                   LW(4,
20272                                                                                                      32)),
20273                                                                                               PTy(F32,
20274                                                                                                   qTy)),
20275                                                                                            Close
20276                                                                                              (Var("v",
20277                                                                                                   F32),
20278                                                                                               MW(Close
20279                                                                                                    (Var("s",
20280                                                                                                         PTy(F32,
20281                                                                                                             qTy)),
20282                                                                                                     TP[Var("v",
20283                                                                                                            F32),
20284                                                                                                        Mop(Snd,
20285                                                                                                            Var("s",
20286                                                                                                                PTy(F32,
20287                                                                                                                    qTy)))])))))))),
20288                                                                             MU(LU,
20289                                                                                PTy(F32,
20290                                                                                    qTy))))]),
20291                                                               Close
20292                                                                 (AVar uTy,
20293                                                                  MB(MR(Close
20294                                                                          (Var("s",
20295                                                                               PTy(F32,
20296                                                                                   qTy)),
20297                                                                           Dest
20298                                                                             ("data_abort",
20299                                                                              bTy,
20300                                                                              Mop(Snd,
20301                                                                                  Var("s",
20302                                                                                      PTy(F32,
20303                                                                                          qTy)))))),
20304                                                                     Close
20305                                                                       (bVar"b",
20306                                                                        ITE(bVar"b",
20307                                                                            MB(MW(Close
20308                                                                                    (Var("s",
20309                                                                                         PTy(F32,
20310                                                                                             qTy)),
20311                                                                                     TP[Mop(Fst,
20312                                                                                            Var("s",
20313                                                                                                PTy(F32,
20314                                                                                                    qTy))),
20315                                                                                        Rupd
20316                                                                                          ("REG",
20317                                                                                           TP[Mop(Snd,
20318                                                                                                  Var("s",
20319                                                                                                      PTy(F32,
20320                                                                                                          qTy))),
20321                                                                                              Var("oreg",
20322                                                                                                  ATy(CTy"RName",
20323                                                                                                      F32))])])),
20324                                                                               Close
20325                                                                                 (AVar
20326                                                                                    uTy,
20327                                                                                  MD(Call
20328                                                                                       ("TakeDataAbortException",
20329                                                                                        ATy(qTy,
20330                                                                                            PTy(uTy,
20331                                                                                                qTy)),
20332                                                                                        LU),
20333                                                                                     F32))),
20334                                                                            MD(Call
20335                                                                                 ("IncPC",
20336                                                                                  ATy(qTy,
20337                                                                                      PTy(uTy,
20338                                                                                          qTy)),
20339                                                                                  LU),
20340                                                                               F32))))))))))))))))))))))))))
20341;
20342val dfn'LoadDual_def = Def
20343  ("dfn'LoadDual",
20344   TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("t2",F4),
20345      Var("n",F4),Var("m",CTy"offset2")],
20346   MB(Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
20347      Close
20348        (bVar"b",
20349         ITE(bVar"b",
20350             MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
20351                Close
20352                  (Var("Rn",F32),
20353                   MB(CS(Var("m",CTy"offset2"),
20354                         [(Call("register_form2",CTy"offset2",Var("m",F4)),
20355                           Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4))),
20356                          (Call
20357                             ("immediate_form2",CTy"offset2",
20358                              Var("imm32",F32)),MU(Var("imm32",F32),qTy))]),
20359                      Close
20360                        (Var("offset",F32),
20361                         Let(Var("offset_addr",F32),
20362                             ITE(bVar"add",
20363                                 Bop(Add,Var("Rn",F32),Var("offset",F32)),
20364                                 Bop(Sub,Var("Rn",F32),Var("offset",F32))),
20365                             Let(Var("address",F32),
20366                                 ITE(bVar"index",Var("offset_addr",F32),
20367                                     Var("Rn",F32)),
20368                                 MB(Call
20369                                      ("MemA",ATy(qTy,PTy(F32,qTy)),
20370                                       TP[Var("address",F32),LN 4]),
20371                                    Close
20372                                      (Var("data1",F32),
20373                                       MB(Call
20374                                            ("MemA",ATy(qTy,PTy(F32,qTy)),
20375                                             TP[Bop(Add,
20376                                                    Var("address",F32),
20377                                                    LW(4,32)),LN 4]),
20378                                          Close
20379                                            (Var("data2",F32),
20380                                             MB(MR(Close
20381                                                     (qVar"s",
20382                                                      Dest
20383                                                        ("data_abort",bTy,
20384                                                         qVar"s"))),
20385                                                Close
20386                                                  (bVar"b",
20387                                                   ITE(bVar"b",
20388                                                       Call
20389                                                         ("TakeDataAbortException",
20390                                                          ATy(qTy,
20391                                                              PTy(uTy,qTy)),
20392                                                          LU),
20393                                                       MB(Call
20394                                                            ("write'R",
20395                                                             ATy(qTy,
20396                                                                 PTy(uTy,
20397                                                                     qTy)),
20398                                                             TP[Var("data1",
20399                                                                    F32),
20400                                                                Var("t",F4)]),
20401                                                          Close
20402                                                            (AVar uTy,
20403                                                             MB(Call
20404                                                                  ("write'R",
20405                                                                   ATy(qTy,
20406                                                                       PTy(uTy,
20407                                                                           qTy)),
20408                                                                   TP[Var("data2",
20409                                                                          F32),
20410                                                                      Var("t2",
20411                                                                          F4)]),
20412                                                                Close
20413                                                                  (AVar
20414                                                                     uTy,
20415                                                                   MB(ITE(bVar"wback",
20416                                                                          Call
20417                                                                            ("write'R",
20418                                                                             ATy(qTy,
20419                                                                                 PTy(uTy,
20420                                                                                     qTy)),
20421                                                                             TP[Var("offset_addr",
20422                                                                                    F32),
20423                                                                                Var("n",
20424                                                                                    F4)]),
20425                                                                          MU(LU,
20426                                                                             qTy)),
20427                                                                      Close
20428                                                                        (AVar
20429                                                                           uTy,
20430                                                                         Call
20431                                                                           ("IncPC",
20432                                                                            ATy(qTy,
20433                                                                                PTy(uTy,
20434                                                                                    qTy)),
20435                                                                            LU)))))))))))))))))))),
20436             MU(LU,qTy)))))
20437;
20438val dfn'LoadDualLiteral_def = Def
20439  ("dfn'LoadDualLiteral",
20440   TP[bVar"add",Var("t",F4),Var("t2",F4),Var("imm32",F32)],
20441   MB(Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),LW(15,4)),
20442      Close
20443        (bVar"b",
20444         ITE(bVar"b",
20445             MB(ITE(bVar"add",
20446                    MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
20447                       Close
20448                         (Var("v",F32),
20449                          MB(MB(MU(TP[Var("v",F32),LN 4],qTy),
20450                                Close
20451                                  (Var("v",PTy(F32,nTy)),
20452                                   MU(Call
20453                                        ("Align",F32,Var("v",PTy(F32,nTy))),
20454                                      qTy))),
20455                             Close
20456                               (Var("v",F32),
20457                                MU(Bop(Add,Var("v",F32),Var("imm32",F32)),
20458                                   qTy))))),
20459                    MB(Const("PC",ATy(qTy,PTy(F32,qTy))),
20460                       Close
20461                         (Var("v",F32),
20462                          MB(MB(MU(TP[Var("v",F32),LN 4],qTy),
20463                                Close
20464                                  (Var("v",PTy(F32,nTy)),
20465                                   MU(Call
20466                                        ("Align",F32,Var("v",PTy(F32,nTy))),
20467                                      qTy))),
20468                             Close
20469                               (Var("v",F32),
20470                                MU(Bop(Sub,Var("v",F32),Var("imm32",F32)),
20471                                   qTy)))))),
20472                Close
20473                  (Var("address",F32),
20474                   MB(Call
20475                        ("MemA",ATy(qTy,PTy(F32,qTy)),
20476                         TP[Var("address",F32),LN 4]),
20477                      Close
20478                        (Var("data1",F32),
20479                         MB(Call
20480                              ("MemA",ATy(qTy,PTy(F32,qTy)),
20481                               TP[Bop(Add,Var("address",F32),LW(4,32)),
20482                                  LN 4]),
20483                            Close
20484                              (Var("data2",F32),
20485                               MB(MR(Close
20486                                       (qVar"s",
20487                                        Dest("data_abort",bTy,qVar"s"))),
20488                                  Close
20489                                    (bVar"b",
20490                                     ITE(bVar"b",
20491                                         Call
20492                                           ("TakeDataAbortException",
20493                                            ATy(qTy,PTy(uTy,qTy)),LU),
20494                                         MB(Call
20495                                              ("write'R",
20496                                               ATy(qTy,PTy(uTy,qTy)),
20497                                               TP[Var("data1",F32),
20498                                                  Var("t",F4)]),
20499                                            Close
20500                                              (AVar uTy,
20501                                               MB(Call
20502                                                    ("write'R",
20503                                                     ATy(qTy,PTy(uTy,qTy)),
20504                                                     TP[Var("data2",F32),
20505                                                        Var("t2",F4)]),
20506                                                  Close
20507                                                    (AVar uTy,
20508                                                     Call
20509                                                       ("IncPC",
20510                                                        ATy(qTy,
20511                                                            PTy(uTy,qTy)),
20512                                                        LU)))))))))))))),
20513             MU(LU,qTy)))))
20514;
20515val dfn'LoadExclusive_def = Def
20516  ("dfn'LoadExclusive",TP[Var("t",F4),Var("n",F4),Var("imm32",F32)],
20517   MB(Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
20518      Close
20519        (bVar"b",
20520         ITE(bVar"b",
20521             MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
20522                Close
20523                  (Var("v",F32),
20524                   MB(MU(Bop(Add,Var("v",F32),Var("imm32",F32)),qTy),
20525                      Close
20526                        (Var("address",F32),
20527                         MB(MR(Close
20528                                 (qVar"s",
20529                                  Dest
20530                                    ("SetExclusiveMonitors",
20531                                     ATy(PTy(F32,
20532                                             PTy(nTy,
20533                                                 PTy(LTy(STy F32),
20534                                                     STy(PTy(F32,nTy))))),
20535                                         PTy(LTy(STy F32),
20536                                             STy(PTy(F32,nTy)))),qVar"s"))),
20537                            Close
20538                              (Var("v",
20539                                   ATy(PTy(F32,
20540                                           PTy(nTy,
20541                                               PTy(LTy(STy F32),
20542                                                   STy(PTy(F32,nTy))))),
20543                                       PTy(LTy(STy F32),STy(PTy(F32,nTy))))),
20544                               MB(MB(MB(MR(Close
20545                                             (qVar"s",
20546                                              Dest
20547                                                ("exclusive_state",
20548                                                 PTy(LTy(STy F32),
20549                                                     STy(PTy(F32,nTy))),
20550                                                 qVar"s"))),
20551                                        Close
20552                                          (Var("v0",
20553                                               PTy(LTy(STy F32),
20554                                                   STy(PTy(F32,nTy)))),
20555                                           MB(MB(MU(TP[LN 4,
20556                                                       Var("v0",
20557                                                           PTy(LTy(STy F32),
20558                                                               STy(PTy(F32,
20559                                                                       nTy))))],
20560                                                    qTy),
20561                                                 Close
20562                                                   (Var("v",
20563                                                        PTy(nTy,
20564                                                            PTy(LTy(STy F32),
20565                                                                STy(PTy(F32,
20566                                                                        nTy))))),
20567                                                    MU(TP[Var("address",
20568                                                              F32),
20569                                                          Var("v",
20570                                                              PTy(nTy,
20571                                                                  PTy(LTy(STy F32),
20572                                                                      STy(PTy(F32,
20573                                                                              nTy)))))],
20574                                                       qTy))),
20575                                              Close
20576                                                (Var("v0",
20577                                                     PTy(F32,
20578                                                         PTy(nTy,
20579                                                             PTy(LTy(STy F32),
20580                                                                 STy(PTy(F32,
20581                                                                         nTy)))))),
20582                                                 MU(Apply
20583                                                      (Var("v",
20584                                                           ATy(PTy(F32,
20585                                                                   PTy(nTy,
20586                                                                       PTy(LTy(STy F32),
20587                                                                           STy(PTy(F32,
20588                                                                                   nTy))))),
20589                                                               PTy(LTy(STy F32),
20590                                                                   STy(PTy(F32,
20591                                                                           nTy))))),
20592                                                       Var("v0",
20593                                                           PTy(F32,
20594                                                               PTy(nTy,
20595                                                                   PTy(LTy(STy F32),
20596                                                                       STy(PTy(F32,
20597                                                                               nTy))))))),
20598                                                    qTy))))),
20599                                     Close
20600                                       (Var("v",
20601                                            PTy(LTy(STy F32),
20602                                                STy(PTy(F32,nTy)))),
20603                                        MW(Close
20604                                             (qVar"s",
20605                                              Rupd
20606                                                ("exclusive_state",
20607                                                 TP[qVar"s",
20608                                                    Var("v",
20609                                                        PTy(LTy(STy F32),
20610                                                            STy(PTy(F32,
20611                                                                    nTy))))]))))),
20612                                  Close
20613                                    (AVar uTy,
20614                                     MB(Call
20615                                          ("MemA",ATy(qTy,PTy(F32,qTy)),
20616                                           TP[Var("address",F32),LN 4]),
20617                                        Close
20618                                          (Var("data",F32),
20619                                           MB(MR(Close
20620                                                   (qVar"s",
20621                                                    Dest
20622                                                      ("data_abort",bTy,
20623                                                       qVar"s"))),
20624                                              Close
20625                                                (bVar"b",
20626                                                 ITE(bVar"b",
20627                                                     Call
20628                                                       ("TakeDataAbortException",
20629                                                        ATy(qTy,
20630                                                            PTy(uTy,qTy)),
20631                                                        LU),
20632                                                     MB(Call
20633                                                          ("write'R",
20634                                                           ATy(qTy,
20635                                                               PTy(uTy,qTy)),
20636                                                           TP[Var("data",
20637                                                                  F32),
20638                                                              Var("t",F4)]),
20639                                                        Close
20640                                                          (AVar uTy,
20641                                                           Call
20642                                                             ("IncPC",
20643                                                              ATy(qTy,
20644                                                                  PTy(uTy,
20645                                                                      qTy)),
20646                                                              LU)))))))))))))))),
20647             MU(LU,qTy)))))
20648;
20649val dfn'LoadExclusiveByte_def = Def
20650  ("dfn'LoadExclusiveByte",TP[Var("t",F4),Var("n",F4)],
20651   MB(Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
20652      Close
20653        (bVar"b",
20654         ITE(bVar"b",
20655             MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
20656                Close
20657                  (Var("address",F32),
20658                   MB(MR(Close
20659                           (qVar"s",
20660                            Dest
20661                              ("SetExclusiveMonitors",
20662                               ATy(PTy(F32,
20663                                       PTy(nTy,
20664                                           PTy(LTy(STy F32),
20665                                               STy(PTy(F32,nTy))))),
20666                                   PTy(LTy(STy F32),STy(PTy(F32,nTy)))),
20667                               qVar"s"))),
20668                      Close
20669                        (Var("v",
20670                             ATy(PTy(F32,
20671                                     PTy(nTy,
20672                                         PTy(LTy(STy F32),
20673                                             STy(PTy(F32,nTy))))),
20674                                 PTy(LTy(STy F32),STy(PTy(F32,nTy))))),
20675                         MB(MB(MB(MR(Close
20676                                       (qVar"s",
20677                                        Dest
20678                                          ("exclusive_state",
20679                                           PTy(LTy(STy F32),
20680                                               STy(PTy(F32,nTy))),qVar"s"))),
20681                                  Close
20682                                    (Var("v0",
20683                                         PTy(LTy(STy F32),
20684                                             STy(PTy(F32,nTy)))),
20685                                     MB(MB(MU(TP[LN 1,
20686                                                 Var("v0",
20687                                                     PTy(LTy(STy F32),
20688                                                         STy(PTy(F32,nTy))))],
20689                                              qTy),
20690                                           Close
20691                                             (Var("v",
20692                                                  PTy(nTy,
20693                                                      PTy(LTy(STy F32),
20694                                                          STy(PTy(F32,nTy))))),
20695                                              MU(TP[Var("address",F32),
20696                                                    Var("v",
20697                                                        PTy(nTy,
20698                                                            PTy(LTy(STy F32),
20699                                                                STy(PTy(F32,
20700                                                                        nTy)))))],
20701                                                 qTy))),
20702                                        Close
20703                                          (Var("v0",
20704                                               PTy(F32,
20705                                                   PTy(nTy,
20706                                                       PTy(LTy(STy F32),
20707                                                           STy(PTy(F32,nTy)))))),
20708                                           MU(Apply
20709                                                (Var("v",
20710                                                     ATy(PTy(F32,
20711                                                             PTy(nTy,
20712                                                                 PTy(LTy(STy F32),
20713                                                                     STy(PTy(F32,
20714                                                                             nTy))))),
20715                                                         PTy(LTy(STy F32),
20716                                                             STy(PTy(F32,
20717                                                                     nTy))))),
20718                                                 Var("v0",
20719                                                     PTy(F32,
20720                                                         PTy(nTy,
20721                                                             PTy(LTy(STy F32),
20722                                                                 STy(PTy(F32,
20723                                                                         nTy))))))),
20724                                              qTy))))),
20725                               Close
20726                                 (Var("v",
20727                                      PTy(LTy(STy F32),STy(PTy(F32,nTy)))),
20728                                  MW(Close
20729                                       (qVar"s",
20730                                        Rupd
20731                                          ("exclusive_state",
20732                                           TP[qVar"s",
20733                                              Var("v",
20734                                                  PTy(LTy(STy F32),
20735                                                      STy(PTy(F32,nTy))))]))))),
20736                            Close
20737                              (AVar uTy,
20738                               MB(Call
20739                                    ("MemA",ATy(qTy,PTy(F8,qTy)),
20740                                     TP[Var("address",F32),LN 1]),
20741                                  Close
20742                                    (Var("data",F8),
20743                                     MB(MR(Close
20744                                             (qVar"s",
20745                                              Dest
20746                                                ("data_abort",bTy,qVar"s"))),
20747                                        Close
20748                                          (bVar"b",
20749                                           ITE(bVar"b",
20750                                               Call
20751                                                 ("TakeDataAbortException",
20752                                                  ATy(qTy,PTy(uTy,qTy)),LU),
20753                                               MB(Call
20754                                                    ("write'R",
20755                                                     ATy(qTy,PTy(uTy,qTy)),
20756                                                     TP[Mop(Cast F32,
20757                                                            Var("data",F8)),
20758                                                        Var("t",F4)]),
20759                                                  Close
20760                                                    (AVar uTy,
20761                                                     Call
20762                                                       ("IncPC",
20763                                                        ATy(qTy,
20764                                                            PTy(uTy,qTy)),
20765                                                        LU)))))))))))))),
20766             MU(LU,qTy)))))
20767;
20768val dfn'LoadExclusiveHalf_def = Def
20769  ("dfn'LoadExclusiveHalf",TP[Var("t",F4),Var("n",F4)],
20770   MB(Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
20771      Close
20772        (bVar"b",
20773         ITE(bVar"b",
20774             MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
20775                Close
20776                  (Var("address",F32),
20777                   MB(MR(Close
20778                           (qVar"s",
20779                            Dest
20780                              ("SetExclusiveMonitors",
20781                               ATy(PTy(F32,
20782                                       PTy(nTy,
20783                                           PTy(LTy(STy F32),
20784                                               STy(PTy(F32,nTy))))),
20785                                   PTy(LTy(STy F32),STy(PTy(F32,nTy)))),
20786                               qVar"s"))),
20787                      Close
20788                        (Var("v",
20789                             ATy(PTy(F32,
20790                                     PTy(nTy,
20791                                         PTy(LTy(STy F32),
20792                                             STy(PTy(F32,nTy))))),
20793                                 PTy(LTy(STy F32),STy(PTy(F32,nTy))))),
20794                         MB(MB(MB(MR(Close
20795                                       (qVar"s",
20796                                        Dest
20797                                          ("exclusive_state",
20798                                           PTy(LTy(STy F32),
20799                                               STy(PTy(F32,nTy))),qVar"s"))),
20800                                  Close
20801                                    (Var("v0",
20802                                         PTy(LTy(STy F32),
20803                                             STy(PTy(F32,nTy)))),
20804                                     MB(MB(MU(TP[LN 2,
20805                                                 Var("v0",
20806                                                     PTy(LTy(STy F32),
20807                                                         STy(PTy(F32,nTy))))],
20808                                              qTy),
20809                                           Close
20810                                             (Var("v",
20811                                                  PTy(nTy,
20812                                                      PTy(LTy(STy F32),
20813                                                          STy(PTy(F32,nTy))))),
20814                                              MU(TP[Var("address",F32),
20815                                                    Var("v",
20816                                                        PTy(nTy,
20817                                                            PTy(LTy(STy F32),
20818                                                                STy(PTy(F32,
20819                                                                        nTy)))))],
20820                                                 qTy))),
20821                                        Close
20822                                          (Var("v0",
20823                                               PTy(F32,
20824                                                   PTy(nTy,
20825                                                       PTy(LTy(STy F32),
20826                                                           STy(PTy(F32,nTy)))))),
20827                                           MU(Apply
20828                                                (Var("v",
20829                                                     ATy(PTy(F32,
20830                                                             PTy(nTy,
20831                                                                 PTy(LTy(STy F32),
20832                                                                     STy(PTy(F32,
20833                                                                             nTy))))),
20834                                                         PTy(LTy(STy F32),
20835                                                             STy(PTy(F32,
20836                                                                     nTy))))),
20837                                                 Var("v0",
20838                                                     PTy(F32,
20839                                                         PTy(nTy,
20840                                                             PTy(LTy(STy F32),
20841                                                                 STy(PTy(F32,
20842                                                                         nTy))))))),
20843                                              qTy))))),
20844                               Close
20845                                 (Var("v",
20846                                      PTy(LTy(STy F32),STy(PTy(F32,nTy)))),
20847                                  MW(Close
20848                                       (qVar"s",
20849                                        Rupd
20850                                          ("exclusive_state",
20851                                           TP[qVar"s",
20852                                              Var("v",
20853                                                  PTy(LTy(STy F32),
20854                                                      STy(PTy(F32,nTy))))]))))),
20855                            Close
20856                              (AVar uTy,
20857                               MB(Call
20858                                    ("MemA",ATy(qTy,PTy(F16,qTy)),
20859                                     TP[Var("address",F32),LN 2]),
20860                                  Close
20861                                    (Var("data",F16),
20862                                     MB(MR(Close
20863                                             (qVar"s",
20864                                              Dest
20865                                                ("data_abort",bTy,qVar"s"))),
20866                                        Close
20867                                          (bVar"b",
20868                                           ITE(bVar"b",
20869                                               Call
20870                                                 ("TakeDataAbortException",
20871                                                  ATy(qTy,PTy(uTy,qTy)),LU),
20872                                               MB(Call
20873                                                    ("write'R",
20874                                                     ATy(qTy,PTy(uTy,qTy)),
20875                                                     TP[Mop(Cast F32,
20876                                                            Var("data",F16)),
20877                                                        Var("t",F4)]),
20878                                                  Close
20879                                                    (AVar uTy,
20880                                                     Call
20881                                                       ("IncPC",
20882                                                        ATy(qTy,
20883                                                            PTy(uTy,qTy)),
20884                                                        LU)))))))))))))),
20885             MU(LU,qTy)))))
20886;
20887val dfn'LoadExclusiveDoubleword_def = Def
20888  ("dfn'LoadExclusiveDoubleword",TP[Var("t",F4),Var("t2",F4),Var("n",F4)],
20889   MB(Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
20890      Close
20891        (bVar"b",
20892         ITE(bVar"b",
20893             MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
20894                Close
20895                  (Var("address",F32),
20896                   MB(MR(Close
20897                           (qVar"s",
20898                            Dest
20899                              ("SetExclusiveMonitors",
20900                               ATy(PTy(F32,
20901                                       PTy(nTy,
20902                                           PTy(LTy(STy F32),
20903                                               STy(PTy(F32,nTy))))),
20904                                   PTy(LTy(STy F32),STy(PTy(F32,nTy)))),
20905                               qVar"s"))),
20906                      Close
20907                        (Var("v",
20908                             ATy(PTy(F32,
20909                                     PTy(nTy,
20910                                         PTy(LTy(STy F32),
20911                                             STy(PTy(F32,nTy))))),
20912                                 PTy(LTy(STy F32),STy(PTy(F32,nTy))))),
20913                         MB(MB(MB(MR(Close
20914                                       (qVar"s",
20915                                        Dest
20916                                          ("exclusive_state",
20917                                           PTy(LTy(STy F32),
20918                                               STy(PTy(F32,nTy))),qVar"s"))),
20919                                  Close
20920                                    (Var("v0",
20921                                         PTy(LTy(STy F32),
20922                                             STy(PTy(F32,nTy)))),
20923                                     MB(MB(MU(TP[LN 8,
20924                                                 Var("v0",
20925                                                     PTy(LTy(STy F32),
20926                                                         STy(PTy(F32,nTy))))],
20927                                              qTy),
20928                                           Close
20929                                             (Var("v",
20930                                                  PTy(nTy,
20931                                                      PTy(LTy(STy F32),
20932                                                          STy(PTy(F32,nTy))))),
20933                                              MU(TP[Var("address",F32),
20934                                                    Var("v",
20935                                                        PTy(nTy,
20936                                                            PTy(LTy(STy F32),
20937                                                                STy(PTy(F32,
20938                                                                        nTy)))))],
20939                                                 qTy))),
20940                                        Close
20941                                          (Var("v0",
20942                                               PTy(F32,
20943                                                   PTy(nTy,
20944                                                       PTy(LTy(STy F32),
20945                                                           STy(PTy(F32,nTy)))))),
20946                                           MU(Apply
20947                                                (Var("v",
20948                                                     ATy(PTy(F32,
20949                                                             PTy(nTy,
20950                                                                 PTy(LTy(STy F32),
20951                                                                     STy(PTy(F32,
20952                                                                             nTy))))),
20953                                                         PTy(LTy(STy F32),
20954                                                             STy(PTy(F32,
20955                                                                     nTy))))),
20956                                                 Var("v0",
20957                                                     PTy(F32,
20958                                                         PTy(nTy,
20959                                                             PTy(LTy(STy F32),
20960                                                                 STy(PTy(F32,
20961                                                                         nTy))))))),
20962                                              qTy))))),
20963                               Close
20964                                 (Var("v",
20965                                      PTy(LTy(STy F32),STy(PTy(F32,nTy)))),
20966                                  MW(Close
20967                                       (qVar"s",
20968                                        Rupd
20969                                          ("exclusive_state",
20970                                           TP[qVar"s",
20971                                              Var("v",
20972                                                  PTy(LTy(STy F32),
20973                                                      STy(PTy(F32,nTy))))]))))),
20974                            Close
20975                              (AVar uTy,
20976                               MB(Call
20977                                    ("MemA",ATy(qTy,PTy(F64,qTy)),
20978                                     TP[Var("address",F32),LN 8]),
20979                                  Close
20980                                    (Var("value",F64),
20981                                     MB(MR(Close
20982                                             (qVar"s",
20983                                              Dest
20984                                                ("data_abort",bTy,qVar"s"))),
20985                                        Close
20986                                          (bVar"b",
20987                                           ITE(bVar"b",
20988                                               Call
20989                                                 ("TakeDataAbortException",
20990                                                  ATy(qTy,PTy(uTy,qTy)),LU),
20991                                               MB(Call
20992                                                    ("BigEndian",
20993                                                     ATy(qTy,PTy(bTy,qTy)),
20994                                                     LU),
20995                                                  Close
20996                                                    (bVar"v",
20997                                                     MB(MB(MB(MU(ITE(bVar"v",
20998                                                                     EX(Var("value",
20999                                                                            F64),
21000                                                                        LN
21001                                                                         63,
21002                                                                        LN
21003                                                                         32,
21004                                                                        F32),
21005                                                                     EX(Var("value",
21006                                                                            F64),
21007                                                                        LN
21008                                                                         31,
21009                                                                        LN
21010                                                                         0,
21011                                                                        F32)),
21012                                                                 qTy),
21013                                                              Close
21014                                                                (Var("v",
21015                                                                     F32),
21016                                                                 MU(TP[Var("v",
21017                                                                           F32),
21018                                                                       Var("t",
21019                                                                           F4)],
21020                                                                    qTy))),
21021                                                           Close
21022                                                             (Var("v",
21023                                                                  PTy(F32,
21024                                                                      F4)),
21025                                                              Call
21026                                                                ("write'R",
21027                                                                 ATy(qTy,
21028                                                                     PTy(uTy,
21029                                                                         qTy)),
21030                                                                 Var("v",
21031                                                                     PTy(F32,
21032                                                                         F4))))),
21033                                                        Close
21034                                                          (AVar uTy,
21035                                                           MB(Call
21036                                                                ("BigEndian",
21037                                                                 ATy(qTy,
21038                                                                     PTy(bTy,
21039                                                                         qTy)),
21040                                                                 LU),
21041                                                              Close
21042                                                                (bVar"v",
21043                                                                 MB(MB(MB(MU(ITE(bVar"v",
21044                                                                                 EX(Var("value",
21045                                                                                        F64),
21046                                                                                    LN
21047                                                                                     31,
21048                                                                                    LN
21049                                                                                     0,
21050                                                                                    F32),
21051                                                                                 EX(Var("value",
21052                                                                                        F64),
21053                                                                                    LN
21054                                                                                     63,
21055                                                                                    LN
21056                                                                                     32,
21057                                                                                    F32)),
21058                                                                             qTy),
21059                                                                          Close
21060                                                                            (Var("v",
21061                                                                                 F32),
21062                                                                             MU(TP[Var("v",
21063                                                                                       F32),
21064                                                                                   Var("t2",
21065                                                                                       F4)],
21066                                                                                qTy))),
21067                                                                       Close
21068                                                                         (Var("v",
21069                                                                              PTy(F32,
21070                                                                                  F4)),
21071                                                                          Call
21072                                                                            ("write'R",
21073                                                                             ATy(qTy,
21074                                                                                 PTy(uTy,
21075                                                                                     qTy)),
21076                                                                             Var("v",
21077                                                                                 PTy(F32,
21078                                                                                     F4))))),
21079                                                                    Close
21080                                                                      (AVar
21081                                                                         uTy,
21082                                                                       Call
21083                                                                         ("IncPC",
21084                                                                          ATy(qTy,
21085                                                                              PTy(uTy,
21086                                                                                  qTy)),
21087                                                                          LU)))))))))))))))))))),
21088             MU(LU,qTy)))))
21089;
21090val dfn'StoreWord_def = Def
21091  ("dfn'StoreWord",
21092   TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("n",F4),
21093      Var("m",CTy"offset1")],
21094   MB(Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
21095      Close
21096        (bVar"b",
21097         ITE(bVar"b",
21098             MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
21099                Close
21100                  (Var("Rn",F32),
21101                   MB(CS(Var("m",CTy"offset1"),
21102                         [(Call
21103                             ("register_form1",CTy"offset1",
21104                              TP[Var("m",F4),Var("shift_t",CTy"SRType"),
21105                                 nVar"shift_n"]),
21106                           MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
21107                              Close
21108                                (Var("v",F32),
21109                                 MB(MB(MR(Close
21110                                            (qVar"s",
21111                                             Dest("CPSR",CTy"PSR",qVar"s"))),
21112                                       Close
21113                                         (Var("v0",CTy"PSR"),
21114                                          MB(MB(MB(MU(Dest
21115                                                        ("C",bTy,
21116                                                         Var("v0",CTy"PSR")),
21117                                                      qTy),
21118                                                   Close
21119                                                     (bVar"v",
21120                                                      MU(TP[nVar"shift_n",
21121                                                            bVar"v"],qTy))),
21122                                                Close
21123                                                  (Var("v",PTy(nTy,bTy)),
21124                                                   MU(TP[Var("shift_t",
21125                                                             CTy"SRType"),
21126                                                         Var("v",
21127                                                             PTy(nTy,bTy))],
21128                                                      qTy))),
21129                                             Close
21130                                               (Var("v0",
21131                                                    PTy(CTy"SRType",
21132                                                        PTy(nTy,bTy))),
21133                                                MU(TP[Var("v",F32),
21134                                                      Var("v0",
21135                                                          PTy(CTy"SRType",
21136                                                              PTy(nTy,bTy)))],
21137                                                   qTy))))),
21138                                    Close
21139                                      (Var("v",
21140                                           PTy(F32,
21141                                               PTy(CTy"SRType",
21142                                                   PTy(nTy,bTy)))),
21143                                       Call
21144                                         ("Shift",ATy(qTy,PTy(F32,qTy)),
21145                                          Var("v",
21146                                              PTy(F32,
21147                                                  PTy(CTy"SRType",
21148                                                      PTy(nTy,bTy)))))))))),
21149                          (Call
21150                             ("immediate_form1",CTy"offset1",
21151                              Var("imm32",F32)),MU(Var("imm32",F32),qTy))]),
21152                      Close
21153                        (Var("offset",F32),
21154                         Let(Var("offset_addr",F32),
21155                             ITE(bVar"add",
21156                                 Bop(Add,Var("Rn",F32),Var("offset",F32)),
21157                                 Bop(Sub,Var("Rn",F32),Var("offset",F32))),
21158                             Let(Var("address",F32),
21159                                 ITE(bVar"index",Var("offset_addr",F32),
21160                                     Var("Rn",F32)),
21161                                 MB(ITE(EQ(Var("t",F4),LW(15,4)),
21162                                        Call
21163                                          ("PCStoreValue",
21164                                           ATy(qTy,PTy(F32,qTy)),LU),
21165                                        Call
21166                                          ("R",ATy(qTy,PTy(F32,qTy)),
21167                                           Var("t",F4))),
21168                                    Close
21169                                      (Var("data",F32),
21170                                       MB(Call
21171                                            ("UnalignedSupport",
21172                                             ATy(qTy,PTy(bTy,qTy)),LU),
21173                                          Close
21174                                            (bVar"v",
21175                                             MB(MB(MB(MU(Bop(Or,bVar"v",
21176                                                             Call
21177                                                               ("Aligned",
21178                                                                bTy,
21179                                                                TP[Var("address",
21180                                                                       F32),
21181                                                                   LN 4])),
21182                                                         qTy),
21183                                                      Close
21184                                                        (bVar"b",
21185                                                         ITE(bVar"b",
21186                                                             MU(LT,qTy),
21187                                                             MB(Call
21188                                                                  ("CurrentInstrSet",
21189                                                                   ATy(qTy,
21190                                                                       PTy(CTy"InstrSet",
21191                                                                           qTy)),
21192                                                                   LU),
21193                                                                Close
21194                                                                  (Var("v",
21195                                                                       CTy"InstrSet"),
21196                                                                   MU(EQ(Var("v",
21197                                                                             CTy"InstrSet"),
21198                                                                         LC("InstrSet_ARM",
21199                                                                            CTy"InstrSet")),
21200                                                                      qTy)))))),
21201                                                   Close
21202                                                     (bVar"b",
21203                                                      ITE(bVar"b",
21204                                                          Call
21205                                                            ("write'MemU",
21206                                                             ATy(qTy,
21207                                                                 PTy(uTy,
21208                                                                     qTy)),
21209                                                             TP[Var("data",
21210                                                                    F32),
21211                                                                Var("address",
21212                                                                    F32),
21213                                                                LN 4]),
21214                                                          MB(Call
21215                                                               ("write'MemU",
21216                                                                ATy(qTy,
21217                                                                    PTy(uTy,
21218                                                                        qTy)),
21219                                                                TP[LX F32,
21220                                                                   Var("address",
21221                                                                       F32),
21222                                                                   LN 4]),
21223                                                             Close
21224                                                               (AVar uTy,
21225                                                                MB(MR(Close
21226                                                                        (qVar"s",
21227                                                                         Dest
21228                                                                           ("data_abort",
21229                                                                            bTy,
21230                                                                            qVar"s"))),
21231                                                                   Close
21232                                                                     (bVar"v",
21233                                                                      MB(MU(Mop(Not,
21234                                                                                bVar"v"),
21235                                                                            qTy),
21236                                                                         Close
21237                                                                           (bVar"b",
21238                                                                            ITE(bVar"b",
21239                                                                                MW(Close
21240                                                                                     (qVar"s",
21241                                                                                      Rupd
21242                                                                                        ("transfer_unknown",
21243                                                                                         TP[qVar"s",
21244                                                                                            LT]))),
21245                                                                                MU(LU,
21246                                                                                   qTy))))))))))),
21247                                                Close
21248                                                  (AVar uTy,
21249                                                   MB(MR(Close
21250                                                           (qVar"s",
21251                                                            Dest
21252                                                              ("data_abort",
21253                                                               bTy,qVar"s"))),
21254                                                      Close
21255                                                        (bVar"b",
21256                                                         ITE(bVar"b",
21257                                                             Call
21258                                                               ("TakeDataAbortException",
21259                                                                ATy(qTy,
21260                                                                    PTy(uTy,
21261                                                                        qTy)),
21262                                                                LU),
21263                                                             MB(ITE(bVar"wback",
21264                                                                    Call
21265                                                                      ("write'R",
21266                                                                       ATy(qTy,
21267                                                                           PTy(uTy,
21268                                                                               qTy)),
21269                                                                       TP[Var("offset_addr",
21270                                                                              F32),
21271                                                                          Var("n",
21272                                                                              F4)]),
21273                                                                    MU(LU,
21274                                                                       qTy)),
21275                                                                Close
21276                                                                  (AVar
21277                                                                     uTy,
21278                                                                   Call
21279                                                                     ("IncPC",
21280                                                                      ATy(qTy,
21281                                                                          PTy(uTy,
21282                                                                              qTy)),
21283                                                                      LU)))))))))))))))))),
21284             MU(LU,qTy)))))
21285;
21286val dfn'StoreUnprivileged_def = Def
21287  ("dfn'StoreUnprivileged",
21288   TP[bVar"add",bVar"postindex",Var("t",F4),Var("n",F4),
21289      Var("m",CTy"offset1")],
21290   MB(Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
21291      Close
21292        (bVar"b",
21293         ITE(bVar"b",
21294             MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
21295                Close
21296                  (Var("Rn",F32),
21297                   MB(CS(Var("m",CTy"offset1"),
21298                         [(Call
21299                             ("register_form1",CTy"offset1",
21300                              TP[Var("m",F4),Var("shift_t",CTy"SRType"),
21301                                 nVar"shift_n"]),
21302                           MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
21303                              Close
21304                                (Var("v",F32),
21305                                 MB(MB(MR(Close
21306                                            (qVar"s",
21307                                             Dest("CPSR",CTy"PSR",qVar"s"))),
21308                                       Close
21309                                         (Var("v0",CTy"PSR"),
21310                                          MB(MB(MB(MU(Dest
21311                                                        ("C",bTy,
21312                                                         Var("v0",CTy"PSR")),
21313                                                      qTy),
21314                                                   Close
21315                                                     (bVar"v",
21316                                                      MU(TP[nVar"shift_n",
21317                                                            bVar"v"],qTy))),
21318                                                Close
21319                                                  (Var("v",PTy(nTy,bTy)),
21320                                                   MU(TP[Var("shift_t",
21321                                                             CTy"SRType"),
21322                                                         Var("v",
21323                                                             PTy(nTy,bTy))],
21324                                                      qTy))),
21325                                             Close
21326                                               (Var("v0",
21327                                                    PTy(CTy"SRType",
21328                                                        PTy(nTy,bTy))),
21329                                                MU(TP[Var("v",F32),
21330                                                      Var("v0",
21331                                                          PTy(CTy"SRType",
21332                                                              PTy(nTy,bTy)))],
21333                                                   qTy))))),
21334                                    Close
21335                                      (Var("v",
21336                                           PTy(F32,
21337                                               PTy(CTy"SRType",
21338                                                   PTy(nTy,bTy)))),
21339                                       Call
21340                                         ("Shift",ATy(qTy,PTy(F32,qTy)),
21341                                          Var("v",
21342                                              PTy(F32,
21343                                                  PTy(CTy"SRType",
21344                                                      PTy(nTy,bTy)))))))))),
21345                          (Call
21346                             ("immediate_form1",CTy"offset1",
21347                              Var("imm32",F32)),MU(Var("imm32",F32),qTy))]),
21348                      Close
21349                        (Var("offset",F32),
21350                         Let(Var("offset_addr",F32),
21351                             ITE(bVar"add",
21352                                 Bop(Add,Var("Rn",F32),Var("offset",F32)),
21353                                 Bop(Sub,Var("Rn",F32),Var("offset",F32))),
21354                             Let(Var("address",F32),
21355                                 ITE(bVar"postindex",Var("Rn",F32),
21356                                     Var("offset_addr",F32)),
21357                                 MB(ITE(EQ(Var("t",F4),LW(15,4)),
21358                                        Call
21359                                          ("PCStoreValue",
21360                                           ATy(qTy,PTy(F32,qTy)),LU),
21361                                        Call
21362                                          ("R",ATy(qTy,PTy(F32,qTy)),
21363                                           Var("t",F4))),
21364                                    Close
21365                                      (Var("data",F32),
21366                                       MB(Call
21367                                            ("UnalignedSupport",
21368                                             ATy(qTy,PTy(bTy,qTy)),LU),
21369                                          Close
21370                                            (bVar"v",
21371                                             MB(MB(MB(MU(Bop(Or,bVar"v",
21372                                                             Call
21373                                                               ("Aligned",
21374                                                                bTy,
21375                                                                TP[Var("address",
21376                                                                       F32),
21377                                                                   LN 4])),
21378                                                         qTy),
21379                                                      Close
21380                                                        (bVar"b",
21381                                                         ITE(bVar"b",
21382                                                             MU(LT,qTy),
21383                                                             MB(Call
21384                                                                  ("CurrentInstrSet",
21385                                                                   ATy(qTy,
21386                                                                       PTy(CTy"InstrSet",
21387                                                                           qTy)),
21388                                                                   LU),
21389                                                                Close
21390                                                                  (Var("v",
21391                                                                       CTy"InstrSet"),
21392                                                                   MU(EQ(Var("v",
21393                                                                             CTy"InstrSet"),
21394                                                                         LC("InstrSet_ARM",
21395                                                                            CTy"InstrSet")),
21396                                                                      qTy)))))),
21397                                                   Close
21398                                                     (bVar"b",
21399                                                      ITE(bVar"b",
21400                                                          Call
21401                                                            ("write'MemU_unpriv",
21402                                                             ATy(qTy,
21403                                                                 PTy(uTy,
21404                                                                     qTy)),
21405                                                             TP[Var("data",
21406                                                                    F32),
21407                                                                Var("address",
21408                                                                    F32),
21409                                                                LN 4]),
21410                                                          MB(Call
21411                                                               ("write'MemU_unpriv",
21412                                                                ATy(qTy,
21413                                                                    PTy(uTy,
21414                                                                        qTy)),
21415                                                                TP[LX F32,
21416                                                                   Var("address",
21417                                                                       F32),
21418                                                                   LN 4]),
21419                                                             Close
21420                                                               (AVar uTy,
21421                                                                MB(MR(Close
21422                                                                        (qVar"s",
21423                                                                         Dest
21424                                                                           ("data_abort",
21425                                                                            bTy,
21426                                                                            qVar"s"))),
21427                                                                   Close
21428                                                                     (bVar"v",
21429                                                                      MB(MU(Mop(Not,
21430                                                                                bVar"v"),
21431                                                                            qTy),
21432                                                                         Close
21433                                                                           (bVar"b",
21434                                                                            ITE(bVar"b",
21435                                                                                MW(Close
21436                                                                                     (qVar"s",
21437                                                                                      Rupd
21438                                                                                        ("transfer_unknown",
21439                                                                                         TP[qVar"s",
21440                                                                                            LT]))),
21441                                                                                MU(LU,
21442                                                                                   qTy))))))))))),
21443                                                Close
21444                                                  (AVar uTy,
21445                                                   MB(MR(Close
21446                                                           (qVar"s",
21447                                                            Dest
21448                                                              ("data_abort",
21449                                                               bTy,qVar"s"))),
21450                                                      Close
21451                                                        (bVar"b",
21452                                                         ITE(bVar"b",
21453                                                             Call
21454                                                               ("TakeDataAbortException",
21455                                                                ATy(qTy,
21456                                                                    PTy(uTy,
21457                                                                        qTy)),
21458                                                                LU),
21459                                                             MB(ITE(bVar"postindex",
21460                                                                    Call
21461                                                                      ("write'R",
21462                                                                       ATy(qTy,
21463                                                                           PTy(uTy,
21464                                                                               qTy)),
21465                                                                       TP[Var("offset_addr",
21466                                                                              F32),
21467                                                                          Var("n",
21468                                                                              F4)]),
21469                                                                    MU(LU,
21470                                                                       qTy)),
21471                                                                Close
21472                                                                  (AVar
21473                                                                     uTy,
21474                                                                   Call
21475                                                                     ("IncPC",
21476                                                                      ATy(qTy,
21477                                                                          PTy(uTy,
21478                                                                              qTy)),
21479                                                                      LU)))))))))))))))))),
21480             MU(LU,qTy)))))
21481;
21482val dfn'StoreByte_def = Def
21483  ("dfn'StoreByte",
21484   TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("n",F4),
21485      Var("m",CTy"offset1")],
21486   MB(Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
21487      Close
21488        (bVar"b",
21489         ITE(bVar"b",
21490             MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
21491                Close
21492                  (Var("Rn",F32),
21493                   MB(CS(Var("m",CTy"offset1"),
21494                         [(Call
21495                             ("register_form1",CTy"offset1",
21496                              TP[Var("m",F4),Var("shift_t",CTy"SRType"),
21497                                 nVar"shift_n"]),
21498                           MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
21499                              Close
21500                                (Var("v",F32),
21501                                 MB(MB(MR(Close
21502                                            (qVar"s",
21503                                             Dest("CPSR",CTy"PSR",qVar"s"))),
21504                                       Close
21505                                         (Var("v0",CTy"PSR"),
21506                                          MB(MB(MB(MU(Dest
21507                                                        ("C",bTy,
21508                                                         Var("v0",CTy"PSR")),
21509                                                      qTy),
21510                                                   Close
21511                                                     (bVar"v",
21512                                                      MU(TP[nVar"shift_n",
21513                                                            bVar"v"],qTy))),
21514                                                Close
21515                                                  (Var("v",PTy(nTy,bTy)),
21516                                                   MU(TP[Var("shift_t",
21517                                                             CTy"SRType"),
21518                                                         Var("v",
21519                                                             PTy(nTy,bTy))],
21520                                                      qTy))),
21521                                             Close
21522                                               (Var("v0",
21523                                                    PTy(CTy"SRType",
21524                                                        PTy(nTy,bTy))),
21525                                                MU(TP[Var("v",F32),
21526                                                      Var("v0",
21527                                                          PTy(CTy"SRType",
21528                                                              PTy(nTy,bTy)))],
21529                                                   qTy))))),
21530                                    Close
21531                                      (Var("v",
21532                                           PTy(F32,
21533                                               PTy(CTy"SRType",
21534                                                   PTy(nTy,bTy)))),
21535                                       Call
21536                                         ("Shift",ATy(qTy,PTy(F32,qTy)),
21537                                          Var("v",
21538                                              PTy(F32,
21539                                                  PTy(CTy"SRType",
21540                                                      PTy(nTy,bTy)))))))))),
21541                          (Call
21542                             ("immediate_form1",CTy"offset1",
21543                              Var("imm32",F32)),MU(Var("imm32",F32),qTy))]),
21544                      Close
21545                        (Var("offset",F32),
21546                         Let(Var("offset_addr",F32),
21547                             ITE(bVar"add",
21548                                 Bop(Add,Var("Rn",F32),Var("offset",F32)),
21549                                 Bop(Sub,Var("Rn",F32),Var("offset",F32))),
21550                             MB(MB(Call
21551                                     ("R",ATy(qTy,PTy(F32,qTy)),
21552                                      Var("t",F4)),
21553                                   Close
21554                                     (Var("v",F32),
21555                                      MB(MB(MU(EX(Var("v",F32),LN 7,LN 0,
21556                                                  F8),qTy),
21557                                            Close
21558                                              (Var("v",F8),
21559                                               MU(TP[Var("v",F8),
21560                                                     ITE(bVar"index",
21561                                                         Var("offset_addr",
21562                                                             F32),
21563                                                         Var("Rn",F32)),
21564                                                     LN 1],qTy))),
21565                                         Close
21566                                           (Var("v",PTy(F8,PTy(F32,nTy))),
21567                                            Call
21568                                              ("write'MemU",
21569                                               ATy(qTy,PTy(uTy,qTy)),
21570                                               Var("v",
21571                                                   PTy(F8,PTy(F32,nTy)))))))),
21572                                Close
21573                                  (AVar uTy,
21574                                   MB(MR(Close
21575                                           (qVar"s",
21576                                            Dest("data_abort",bTy,qVar"s"))),
21577                                      Close
21578                                        (bVar"b",
21579                                         ITE(bVar"b",
21580                                             Call
21581                                               ("TakeDataAbortException",
21582                                                ATy(qTy,PTy(uTy,qTy)),LU),
21583                                             MB(ITE(bVar"wback",
21584                                                    Call
21585                                                      ("write'R",
21586                                                       ATy(qTy,
21587                                                           PTy(uTy,qTy)),
21588                                                       TP[Var("offset_addr",
21589                                                              F32),
21590                                                          Var("n",F4)]),
21591                                                    MU(LU,qTy)),
21592                                                Close
21593                                                  (AVar uTy,
21594                                                   Call
21595                                                     ("IncPC",
21596                                                      ATy(qTy,PTy(uTy,qTy)),
21597                                                      LU))))))))))))),
21598             MU(LU,qTy)))))
21599;
21600val dfn'StoreByteUnprivileged_def = Def
21601  ("dfn'StoreByteUnprivileged",
21602   TP[bVar"add",bVar"postindex",Var("t",F4),Var("n",F4),
21603      Var("m",CTy"offset1")],
21604   MB(Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
21605      Close
21606        (bVar"b",
21607         ITE(bVar"b",
21608             MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
21609                Close
21610                  (Var("Rn",F32),
21611                   MB(CS(Var("m",CTy"offset1"),
21612                         [(Call
21613                             ("register_form1",CTy"offset1",
21614                              TP[Var("m",F4),Var("shift_t",CTy"SRType"),
21615                                 nVar"shift_n"]),
21616                           MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
21617                              Close
21618                                (Var("v",F32),
21619                                 MB(MB(MR(Close
21620                                            (qVar"s",
21621                                             Dest("CPSR",CTy"PSR",qVar"s"))),
21622                                       Close
21623                                         (Var("v0",CTy"PSR"),
21624                                          MB(MB(MB(MU(Dest
21625                                                        ("C",bTy,
21626                                                         Var("v0",CTy"PSR")),
21627                                                      qTy),
21628                                                   Close
21629                                                     (bVar"v",
21630                                                      MU(TP[nVar"shift_n",
21631                                                            bVar"v"],qTy))),
21632                                                Close
21633                                                  (Var("v",PTy(nTy,bTy)),
21634                                                   MU(TP[Var("shift_t",
21635                                                             CTy"SRType"),
21636                                                         Var("v",
21637                                                             PTy(nTy,bTy))],
21638                                                      qTy))),
21639                                             Close
21640                                               (Var("v0",
21641                                                    PTy(CTy"SRType",
21642                                                        PTy(nTy,bTy))),
21643                                                MU(TP[Var("v",F32),
21644                                                      Var("v0",
21645                                                          PTy(CTy"SRType",
21646                                                              PTy(nTy,bTy)))],
21647                                                   qTy))))),
21648                                    Close
21649                                      (Var("v",
21650                                           PTy(F32,
21651                                               PTy(CTy"SRType",
21652                                                   PTy(nTy,bTy)))),
21653                                       Call
21654                                         ("Shift",ATy(qTy,PTy(F32,qTy)),
21655                                          Var("v",
21656                                              PTy(F32,
21657                                                  PTy(CTy"SRType",
21658                                                      PTy(nTy,bTy)))))))))),
21659                          (Call
21660                             ("immediate_form1",CTy"offset1",
21661                              Var("imm32",F32)),MU(Var("imm32",F32),qTy))]),
21662                      Close
21663                        (Var("offset",F32),
21664                         Let(Var("offset_addr",F32),
21665                             ITE(bVar"add",
21666                                 Bop(Add,Var("Rn",F32),Var("offset",F32)),
21667                                 Bop(Sub,Var("Rn",F32),Var("offset",F32))),
21668                             MB(MB(Call
21669                                     ("R",ATy(qTy,PTy(F32,qTy)),
21670                                      Var("t",F4)),
21671                                   Close
21672                                     (Var("v",F32),
21673                                      MB(MB(MU(EX(Var("v",F32),LN 7,LN 0,
21674                                                  F8),qTy),
21675                                            Close
21676                                              (Var("v",F8),
21677                                               MU(TP[Var("v",F8),
21678                                                     ITE(bVar"postindex",
21679                                                         Var("Rn",F32),
21680                                                         Var("offset_addr",
21681                                                             F32)),LN 1],
21682                                                  qTy))),
21683                                         Close
21684                                           (Var("v",PTy(F8,PTy(F32,nTy))),
21685                                            Call
21686                                              ("write'MemU_unpriv",
21687                                               ATy(qTy,PTy(uTy,qTy)),
21688                                               Var("v",
21689                                                   PTy(F8,PTy(F32,nTy)))))))),
21690                                Close
21691                                  (AVar uTy,
21692                                   MB(MR(Close
21693                                           (qVar"s",
21694                                            Dest("data_abort",bTy,qVar"s"))),
21695                                      Close
21696                                        (bVar"b",
21697                                         ITE(bVar"b",
21698                                             Call
21699                                               ("TakeDataAbortException",
21700                                                ATy(qTy,PTy(uTy,qTy)),LU),
21701                                             MB(ITE(bVar"postindex",
21702                                                    Call
21703                                                      ("write'R",
21704                                                       ATy(qTy,
21705                                                           PTy(uTy,qTy)),
21706                                                       TP[Var("offset_addr",
21707                                                              F32),
21708                                                          Var("n",F4)]),
21709                                                    MU(LU,qTy)),
21710                                                Close
21711                                                  (AVar uTy,
21712                                                   Call
21713                                                     ("IncPC",
21714                                                      ATy(qTy,PTy(uTy,qTy)),
21715                                                      LU))))))))))))),
21716             MU(LU,qTy)))))
21717;
21718val dfn'StoreHalf_def = Def
21719  ("dfn'StoreHalf",
21720   TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("n",F4),
21721      Var("m",CTy"offset1")],
21722   MB(Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
21723      Close
21724        (bVar"b",
21725         ITE(bVar"b",
21726             MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
21727                Close
21728                  (Var("Rn",F32),
21729                   MB(CS(Var("m",CTy"offset1"),
21730                         [(Call
21731                             ("register_form1",CTy"offset1",
21732                              TP[Var("m",F4),Var("shift_t",CTy"SRType"),
21733                                 nVar"shift_n"]),
21734                           MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
21735                              Close
21736                                (Var("v",F32),
21737                                 MB(MB(MR(Close
21738                                            (qVar"s",
21739                                             Dest("CPSR",CTy"PSR",qVar"s"))),
21740                                       Close
21741                                         (Var("v0",CTy"PSR"),
21742                                          MB(MB(MB(MU(Dest
21743                                                        ("C",bTy,
21744                                                         Var("v0",CTy"PSR")),
21745                                                      qTy),
21746                                                   Close
21747                                                     (bVar"v",
21748                                                      MU(TP[nVar"shift_n",
21749                                                            bVar"v"],qTy))),
21750                                                Close
21751                                                  (Var("v",PTy(nTy,bTy)),
21752                                                   MU(TP[Var("shift_t",
21753                                                             CTy"SRType"),
21754                                                         Var("v",
21755                                                             PTy(nTy,bTy))],
21756                                                      qTy))),
21757                                             Close
21758                                               (Var("v0",
21759                                                    PTy(CTy"SRType",
21760                                                        PTy(nTy,bTy))),
21761                                                MU(TP[Var("v",F32),
21762                                                      Var("v0",
21763                                                          PTy(CTy"SRType",
21764                                                              PTy(nTy,bTy)))],
21765                                                   qTy))))),
21766                                    Close
21767                                      (Var("v",
21768                                           PTy(F32,
21769                                               PTy(CTy"SRType",
21770                                                   PTy(nTy,bTy)))),
21771                                       Call
21772                                         ("Shift",ATy(qTy,PTy(F32,qTy)),
21773                                          Var("v",
21774                                              PTy(F32,
21775                                                  PTy(CTy"SRType",
21776                                                      PTy(nTy,bTy)))))))))),
21777                          (Call
21778                             ("immediate_form1",CTy"offset1",
21779                              Var("imm32",F32)),MU(Var("imm32",F32),qTy))]),
21780                      Close
21781                        (Var("offset",F32),
21782                         Let(Var("offset_addr",F32),
21783                             ITE(bVar"add",
21784                                 Bop(Add,Var("Rn",F32),Var("offset",F32)),
21785                                 Bop(Sub,Var("Rn",F32),Var("offset",F32))),
21786                             Let(Var("address",F32),
21787                                 ITE(bVar"index",Var("offset_addr",F32),
21788                                     Var("Rn",F32)),
21789                                 MB(Call
21790                                      ("UnalignedSupport",
21791                                       ATy(qTy,PTy(bTy,qTy)),LU),
21792                                    Close
21793                                      (bVar"v",
21794                                       MB(MB(MU(Bop(Or,bVar"v",
21795                                                    Call
21796                                                      ("Aligned",bTy,
21797                                                       TP[Var("address",
21798                                                              F32),LN 2])),
21799                                                qTy),
21800                                             Close
21801                                               (bVar"b",
21802                                                ITE(bVar"b",
21803                                                    MB(Call
21804                                                         ("R",
21805                                                          ATy(qTy,
21806                                                              PTy(F32,qTy)),
21807                                                          Var("t",F4)),
21808                                                       Close
21809                                                         (Var("v",F32),
21810                                                          MB(MB(MU(EX(Var("v",
21811                                                                          F32),
21812                                                                      LN
21813                                                                       15,
21814                                                                      LN 0,
21815                                                                      F16),
21816                                                                   qTy),
21817                                                                Close
21818                                                                  (Var("v",
21819                                                                       F16),
21820                                                                   MU(TP[Var("v",
21821                                                                             F16),
21822                                                                         Var("address",
21823                                                                             F32),
21824                                                                         LN
21825                                                                          2],
21826                                                                      qTy))),
21827                                                             Close
21828                                                               (Var("v",
21829                                                                    PTy(F16,
21830                                                                        PTy(F32,
21831                                                                            nTy))),
21832                                                                Call
21833                                                                  ("write'MemU",
21834                                                                   ATy(qTy,
21835                                                                       PTy(uTy,
21836                                                                           qTy)),
21837                                                                   Var("v",
21838                                                                       PTy(F16,
21839                                                                           PTy(F32,
21840                                                                               nTy)))))))),
21841                                                    MB(Call
21842                                                         ("write'MemU",
21843                                                          ATy(qTy,
21844                                                              PTy(uTy,qTy)),
21845                                                          TP[LX F16,
21846                                                             Var("address",
21847                                                                 F32),LN 2]),
21848                                                       Close
21849                                                         (AVar uTy,
21850                                                          MB(MR(Close
21851                                                                  (qVar"s",
21852                                                                   Dest
21853                                                                     ("data_abort",
21854                                                                      bTy,
21855                                                                      qVar"s"))),
21856                                                             Close
21857                                                               (bVar"v",
21858                                                                MB(MU(Mop(Not,
21859                                                                          bVar"v"),
21860                                                                      qTy),
21861                                                                   Close
21862                                                                     (bVar"b",
21863                                                                      ITE(bVar"b",
21864                                                                          MW(Close
21865                                                                               (qVar"s",
21866                                                                                Rupd
21867                                                                                  ("transfer_unknown",
21868                                                                                   TP[qVar"s",
21869                                                                                      LT]))),
21870                                                                          MU(LU,
21871                                                                             qTy))))))))))),
21872                                          Close
21873                                            (AVar uTy,
21874                                             MB(MR(Close
21875                                                     (qVar"s",
21876                                                      Dest
21877                                                        ("data_abort",bTy,
21878                                                         qVar"s"))),
21879                                                Close
21880                                                  (bVar"b",
21881                                                   ITE(bVar"b",
21882                                                       Call
21883                                                         ("TakeDataAbortException",
21884                                                          ATy(qTy,
21885                                                              PTy(uTy,qTy)),
21886                                                          LU),
21887                                                       MB(ITE(bVar"wback",
21888                                                              Call
21889                                                                ("write'R",
21890                                                                 ATy(qTy,
21891                                                                     PTy(uTy,
21892                                                                         qTy)),
21893                                                                 TP[Var("offset_addr",
21894                                                                        F32),
21895                                                                    Var("n",
21896                                                                        F4)]),
21897                                                              MU(LU,qTy)),
21898                                                          Close
21899                                                            (AVar uTy,
21900                                                             Call
21901                                                               ("IncPC",
21902                                                                ATy(qTy,
21903                                                                    PTy(uTy,
21904                                                                        qTy)),
21905                                                                LU)))))))))))))))),
21906             MU(LU,qTy)))))
21907;
21908val dfn'StoreHalfUnprivileged_def = Def
21909  ("dfn'StoreHalfUnprivileged",
21910   TP[bVar"add",bVar"postindex",Var("t",F4),Var("n",F4),
21911      Var("m",CTy"offset2")],
21912   MB(Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
21913      Close
21914        (bVar"b",
21915         ITE(bVar"b",
21916             MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
21917                Close
21918                  (Var("Rn",F32),
21919                   MB(CS(Var("m",CTy"offset2"),
21920                         [(Call("register_form2",CTy"offset2",Var("m",F4)),
21921                           Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4))),
21922                          (Call
21923                             ("immediate_form2",CTy"offset2",
21924                              Var("imm32",F32)),MU(Var("imm32",F32),qTy))]),
21925                      Close
21926                        (Var("offset",F32),
21927                         Let(Var("offset_addr",F32),
21928                             ITE(bVar"add",
21929                                 Bop(Add,Var("Rn",F32),Var("offset",F32)),
21930                                 Bop(Sub,Var("Rn",F32),Var("offset",F32))),
21931                             Let(Var("address",F32),
21932                                 ITE(bVar"postindex",Var("Rn",F32),
21933                                     Var("offset_addr",F32)),
21934                                 MB(Call
21935                                      ("UnalignedSupport",
21936                                       ATy(qTy,PTy(bTy,qTy)),LU),
21937                                    Close
21938                                      (bVar"v",
21939                                       MB(MB(MU(Bop(Or,bVar"v",
21940                                                    Call
21941                                                      ("Aligned",bTy,
21942                                                       TP[Var("address",
21943                                                              F32),LN 2])),
21944                                                qTy),
21945                                             Close
21946                                               (bVar"b",
21947                                                ITE(bVar"b",
21948                                                    MB(Call
21949                                                         ("R",
21950                                                          ATy(qTy,
21951                                                              PTy(F32,qTy)),
21952                                                          Var("t",F4)),
21953                                                       Close
21954                                                         (Var("v",F32),
21955                                                          MB(MB(MU(EX(Var("v",
21956                                                                          F32),
21957                                                                      LN
21958                                                                       15,
21959                                                                      LN 0,
21960                                                                      F16),
21961                                                                   qTy),
21962                                                                Close
21963                                                                  (Var("v",
21964                                                                       F16),
21965                                                                   MU(TP[Var("v",
21966                                                                             F16),
21967                                                                         Var("address",
21968                                                                             F32),
21969                                                                         LN
21970                                                                          2],
21971                                                                      qTy))),
21972                                                             Close
21973                                                               (Var("v",
21974                                                                    PTy(F16,
21975                                                                        PTy(F32,
21976                                                                            nTy))),
21977                                                                Call
21978                                                                  ("write'MemU_unpriv",
21979                                                                   ATy(qTy,
21980                                                                       PTy(uTy,
21981                                                                           qTy)),
21982                                                                   Var("v",
21983                                                                       PTy(F16,
21984                                                                           PTy(F32,
21985                                                                               nTy)))))))),
21986                                                    MB(Call
21987                                                         ("write'MemU_unpriv",
21988                                                          ATy(qTy,
21989                                                              PTy(uTy,qTy)),
21990                                                          TP[LX F16,
21991                                                             Var("address",
21992                                                                 F32),LN 2]),
21993                                                       Close
21994                                                         (AVar uTy,
21995                                                          MB(MR(Close
21996                                                                  (qVar"s",
21997                                                                   Dest
21998                                                                     ("data_abort",
21999                                                                      bTy,
22000                                                                      qVar"s"))),
22001                                                             Close
22002                                                               (bVar"v",
22003                                                                MB(MU(Mop(Not,
22004                                                                          bVar"v"),
22005                                                                      qTy),
22006                                                                   Close
22007                                                                     (bVar"b",
22008                                                                      ITE(bVar"b",
22009                                                                          MW(Close
22010                                                                               (qVar"s",
22011                                                                                Rupd
22012                                                                                  ("transfer_unknown",
22013                                                                                   TP[qVar"s",
22014                                                                                      LT]))),
22015                                                                          MU(LU,
22016                                                                             qTy))))))))))),
22017                                          Close
22018                                            (AVar uTy,
22019                                             MB(MR(Close
22020                                                     (qVar"s",
22021                                                      Dest
22022                                                        ("data_abort",bTy,
22023                                                         qVar"s"))),
22024                                                Close
22025                                                  (bVar"b",
22026                                                   ITE(bVar"b",
22027                                                       Call
22028                                                         ("TakeDataAbortException",
22029                                                          ATy(qTy,
22030                                                              PTy(uTy,qTy)),
22031                                                          LU),
22032                                                       MB(ITE(bVar"postindex",
22033                                                              Call
22034                                                                ("write'R",
22035                                                                 ATy(qTy,
22036                                                                     PTy(uTy,
22037                                                                         qTy)),
22038                                                                 TP[Var("offset_addr",
22039                                                                        F32),
22040                                                                    Var("n",
22041                                                                        F4)]),
22042                                                              MU(LU,qTy)),
22043                                                          Close
22044                                                            (AVar uTy,
22045                                                             Call
22046                                                               ("IncPC",
22047                                                                ATy(qTy,
22048                                                                    PTy(uTy,
22049                                                                        qTy)),
22050                                                                LU)))))))))))))))),
22051             MU(LU,qTy)))))
22052;
22053val dfn'StoreMultiple_def = Def
22054  ("dfn'StoreMultiple",
22055   TP[bVar"increment",bVar"index",bVar"wback",Var("n",F4),
22056      Var("registers",F16)],
22057   MB(Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
22058      Close
22059        (bVar"b",
22060         ITE(bVar"b",
22061             MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
22062                Close
22063                  (Var("Rn",F32),
22064                   MB(Call
22065                        ("BitCount",ATy(qTy,PTy(nTy,qTy)),
22066                         Var("registers",F16)),
22067                      Close
22068                        (nVar"v",
22069                         MB(MB(MU(Mop(Cast F32,nVar"v"),qTy),
22070                               Close
22071                                 (Var("v",F32),
22072                                  MU(Bop(Mul,LW(4,32),Var("v",F32)),qTy))),
22073                            Close
22074                              (Var("length",F32),
22075                               MN(ITE(bVar"increment",Var("Rn",F32),
22076                                      Bop(Sub,Var("Rn",F32),
22077                                          Var("length",F32))),
22078                                  MB(ITE(EQ(bVar"index",bVar"increment"),
22079                                         MB(MR(Close
22080                                                 (Var("s",PTy(F32,qTy)),
22081                                                  Mop(Fst,
22082                                                      Var("s",PTy(F32,qTy))))),
22083                                            Close
22084                                              (Var("v",F32),
22085                                               MB(MU(Bop(Add,Var("v",F32),
22086                                                         LW(4,32)),
22087                                                     PTy(F32,qTy)),
22088                                                  Close
22089                                                    (Var("v",F32),
22090                                                     MW(Close
22091                                                          (Var("s",
22092                                                               PTy(F32,qTy)),
22093                                                           TP[Var("v",F32),
22094                                                              Mop(Snd,
22095                                                                  Var("s",
22096                                                                      PTy(F32,
22097                                                                          qTy)))])))))),
22098                                         MU(LU,PTy(F32,qTy))),
22099                                     Close
22100                                       (AVar uTy,
22101                                        MB(MR(Close
22102                                                (Var("s",PTy(F32,qTy)),
22103                                                 Dest
22104                                                   ("MEM",ATy(F32,F8),
22105                                                    Mop(Snd,
22106                                                        Var("s",
22107                                                            PTy(F32,qTy)))))),
22108                                           Close
22109                                             (Var("omem",ATy(F32,F8)),
22110                                              MB(For(TP[LN 0,LN 14,
22111                                                        Close
22112                                                          (nVar"i",
22113                                                           ITE(Bop(Bit,
22114                                                                   Var("registers",
22115                                                                       F16),
22116                                                                   Mop(Cast
22117                                                                         nTy,
22118                                                                       nVar"i")),
22119                                                               MB(ITE(Bop(And,
22120                                                                          Bop(And,
22121                                                                              EQ(Mop(Cast
22122                                                                                       F4,
22123                                                                                     nVar"i"),
22124                                                                                 Var("n",
22125                                                                                     F4)),
22126                                                                              bVar"wback"),
22127                                                                          Mop(Not,
22128                                                                              EQ(nVar"i",
22129                                                                                 Call
22130                                                                                   ("LowestSetBit",
22131                                                                                    nTy,
22132                                                                                    Var("registers",
22133                                                                                        F16))))),
22134                                                                      MB(MR(Close
22135                                                                              (Var("s",
22136                                                                                   PTy(F32,
22137                                                                                       qTy)),
22138                                                                               Mop(Fst,
22139                                                                                   Var("s",
22140                                                                                       PTy(F32,
22141                                                                                           qTy))))),
22142                                                                         Close
22143                                                                           (Var("v",
22144                                                                                F32),
22145                                                                            MB(MB(MU(TP[Var("v",
22146                                                                                            F32),
22147                                                                                        LN
22148                                                                                         4],
22149                                                                                     PTy(F32,
22150                                                                                         qTy)),
22151                                                                                  Close
22152                                                                                    (Var("x",
22153                                                                                         PTy(F32,
22154                                                                                             nTy)),
22155                                                                                     MD(Call
22156                                                                                          ("write'MemA",
22157                                                                                           ATy(qTy,
22158                                                                                               PTy(uTy,
22159                                                                                                   qTy)),
22160                                                                                           TP[LX F32,
22161                                                                                              Var("x",
22162                                                                                                  PTy(F32,
22163                                                                                                      nTy))]),
22164                                                                                        F32))),
22165                                                                               Close
22166                                                                                 (AVar
22167                                                                                    uTy,
22168                                                                                  MB(MR(Close
22169                                                                                          (Var("s",
22170                                                                                               PTy(F32,
22171                                                                                                   qTy)),
22172                                                                                           Dest
22173                                                                                             ("data_abort",
22174                                                                                              bTy,
22175                                                                                              Mop(Snd,
22176                                                                                                  Var("s",
22177                                                                                                      PTy(F32,
22178                                                                                                          qTy)))))),
22179                                                                                     Close
22180                                                                                       (bVar"v",
22181                                                                                        MB(MU(Mop(Not,
22182                                                                                                  bVar"v"),
22183                                                                                              PTy(F32,
22184                                                                                                  qTy)),
22185                                                                                           Close
22186                                                                                             (bVar"b",
22187                                                                                              ITE(bVar"b",
22188                                                                                                  MW(Close
22189                                                                                                       (Var("s",
22190                                                                                                            PTy(F32,
22191                                                                                                                qTy)),
22192                                                                                                        TP[Mop(Fst,
22193                                                                                                               Var("s",
22194                                                                                                                   PTy(F32,
22195                                                                                                                       qTy))),
22196                                                                                                           Rupd
22197                                                                                                             ("transfer_unknown",
22198                                                                                                              TP[Mop(Snd,
22199                                                                                                                     Var("s",
22200                                                                                                                         PTy(F32,
22201                                                                                                                             qTy))),
22202                                                                                                                 LT])])),
22203                                                                                                  MU(LU,
22204                                                                                                     PTy(F32,
22205                                                                                                         qTy))))))))))),
22206                                                                      MB(MR(Close
22207                                                                              (Var("s",
22208                                                                                   PTy(F32,
22209                                                                                       qTy)),
22210                                                                               Mop(Fst,
22211                                                                                   Var("s",
22212                                                                                       PTy(F32,
22213                                                                                           qTy))))),
22214                                                                         Close
22215                                                                           (Var("v",
22216                                                                                F32),
22217                                                                            MB(MU(TP[Var("v",
22218                                                                                         F32),
22219                                                                                     LN
22220                                                                                      4],
22221                                                                                  PTy(F32,
22222                                                                                      qTy)),
22223                                                                               Close
22224                                                                                 (Var("x",
22225                                                                                      PTy(F32,
22226                                                                                          nTy)),
22227                                                                                  MB(MD(Call
22228                                                                                          ("R",
22229                                                                                           ATy(qTy,
22230                                                                                               PTy(F32,
22231                                                                                                   qTy)),
22232                                                                                           Mop(Cast
22233                                                                                                 F4,
22234                                                                                               nVar"i")),
22235                                                                                        F32),
22236                                                                                     Close
22237                                                                                       (Var("v",
22238                                                                                            F32),
22239                                                                                        MB(MU(TP[Var("v",
22240                                                                                                     F32),
22241                                                                                                 Var("x",
22242                                                                                                     PTy(F32,
22243                                                                                                         nTy))],
22244                                                                                              PTy(F32,
22245                                                                                                  qTy)),
22246                                                                                           Close
22247                                                                                             (Var("v",
22248                                                                                                  PTy(F32,
22249                                                                                                      PTy(F32,
22250                                                                                                          nTy))),
22251                                                                                              MD(Call
22252                                                                                                   ("write'MemA",
22253                                                                                                    ATy(qTy,
22254                                                                                                        PTy(uTy,
22255                                                                                                            qTy)),
22256                                                                                                    Var("v",
22257                                                                                                        PTy(F32,
22258                                                                                                            PTy(F32,
22259                                                                                                                nTy)))),
22260                                                                                                 F32)))))))))),
22261                                                                  Close
22262                                                                    (AVar
22263                                                                       uTy,
22264                                                                     MB(MR(Close
22265                                                                             (Var("s",
22266                                                                                  PTy(F32,
22267                                                                                      qTy)),
22268                                                                              Mop(Fst,
22269                                                                                  Var("s",
22270                                                                                      PTy(F32,
22271                                                                                          qTy))))),
22272                                                                        Close
22273                                                                          (Var("v",
22274                                                                               F32),
22275                                                                           MB(MU(Bop(Add,
22276                                                                                     Var("v",
22277                                                                                         F32),
22278                                                                                     LW(4,
22279                                                                                        32)),
22280                                                                                 PTy(F32,
22281                                                                                     qTy)),
22282                                                                              Close
22283                                                                                (Var("v",
22284                                                                                     F32),
22285                                                                                 MW(Close
22286                                                                                      (Var("s",
22287                                                                                           PTy(F32,
22288                                                                                               qTy)),
22289                                                                                       TP[Var("v",
22290                                                                                              F32),
22291                                                                                          Mop(Snd,
22292                                                                                              Var("s",
22293                                                                                                  PTy(F32,
22294                                                                                                      qTy)))])))))))),
22295                                                               MU(LU,
22296                                                                  PTy(F32,
22297                                                                      qTy))))]),
22298                                                 Close
22299                                                   (AVar uTy,
22300                                                    MB(ITE(Bop(Bit,
22301                                                               Var("registers",
22302                                                                   F16),
22303                                                               LN 15),
22304                                                           MB(MR(Close
22305                                                                   (Var("s",
22306                                                                        PTy(F32,
22307                                                                            qTy)),
22308                                                                    Mop(Fst,
22309                                                                        Var("s",
22310                                                                            PTy(F32,
22311                                                                                qTy))))),
22312                                                              Close
22313                                                                (Var("v",
22314                                                                     F32),
22315                                                                 MB(MU(TP[Var("v",
22316                                                                              F32),
22317                                                                          LN
22318                                                                           4],
22319                                                                       PTy(F32,
22320                                                                           qTy)),
22321                                                                    Close
22322                                                                      (Var("x",
22323                                                                           PTy(F32,
22324                                                                               nTy)),
22325                                                                       MB(MD(Call
22326                                                                               ("PCStoreValue",
22327                                                                                ATy(qTy,
22328                                                                                    PTy(F32,
22329                                                                                        qTy)),
22330                                                                                LU),
22331                                                                             F32),
22332                                                                          Close
22333                                                                            (Var("v",
22334                                                                                 F32),
22335                                                                             MB(MU(TP[Var("v",
22336                                                                                          F32),
22337                                                                                      Var("x",
22338                                                                                          PTy(F32,
22339                                                                                              nTy))],
22340                                                                                   PTy(F32,
22341                                                                                       qTy)),
22342                                                                                Close
22343                                                                                  (Var("v",
22344                                                                                       PTy(F32,
22345                                                                                           PTy(F32,
22346                                                                                               nTy))),
22347                                                                                   MD(Call
22348                                                                                        ("write'MemA",
22349                                                                                         ATy(qTy,
22350                                                                                             PTy(uTy,
22351                                                                                                 qTy)),
22352                                                                                         Var("v",
22353                                                                                             PTy(F32,
22354                                                                                                 PTy(F32,
22355                                                                                                     nTy)))),
22356                                                                                      F32))))))))),
22357                                                           MU(LU,
22358                                                              PTy(F32,qTy))),
22359                                                       Close
22360                                                         (AVar uTy,
22361                                                          MB(MR(Close
22362                                                                  (Var("s",
22363                                                                       PTy(F32,
22364                                                                           qTy)),
22365                                                                   Dest
22366                                                                     ("data_abort",
22367                                                                      bTy,
22368                                                                      Mop(Snd,
22369                                                                          Var("s",
22370                                                                              PTy(F32,
22371                                                                                  qTy)))))),
22372                                                             Close
22373                                                               (bVar"b",
22374                                                                ITE(bVar"b",
22375                                                                    MB(MW(Close
22376                                                                            (Var("s",
22377                                                                                 PTy(F32,
22378                                                                                     qTy)),
22379                                                                             TP[Mop(Fst,
22380                                                                                    Var("s",
22381                                                                                        PTy(F32,
22382                                                                                            qTy))),
22383                                                                                Rupd
22384                                                                                  ("MEM",
22385                                                                                   TP[Mop(Snd,
22386                                                                                          Var("s",
22387                                                                                              PTy(F32,
22388                                                                                                  qTy))),
22389                                                                                      Var("omem",
22390                                                                                          ATy(F32,
22391                                                                                              F8))])])),
22392                                                                       Close
22393                                                                         (AVar
22394                                                                            uTy,
22395                                                                          MD(Call
22396                                                                               ("TakeDataAbortException",
22397                                                                                ATy(qTy,
22398                                                                                    PTy(uTy,
22399                                                                                        qTy)),
22400                                                                                LU),
22401                                                                             F32))),
22402                                                                    MB(ITE(bVar"wback",
22403                                                                           MD(Call
22404                                                                                ("write'R",
22405                                                                                 ATy(qTy,
22406                                                                                     PTy(uTy,
22407                                                                                         qTy)),
22408                                                                                 TP[ITE(bVar"increment",
22409                                                                                        Bop(Add,
22410                                                                                            Var("Rn",
22411                                                                                                F32),
22412                                                                                            Var("length",
22413                                                                                                F32)),
22414                                                                                        Bop(Sub,
22415                                                                                            Var("Rn",
22416                                                                                                F32),
22417                                                                                            Var("length",
22418                                                                                                F32))),
22419                                                                                    Var("n",
22420                                                                                        F4)]),
22421                                                                              F32),
22422                                                                           MU(LU,
22423                                                                              PTy(F32,
22424                                                                                  qTy))),
22425                                                                       Close
22426                                                                         (AVar
22427                                                                            uTy,
22428                                                                          MD(Call
22429                                                                               ("IncPC",
22430                                                                                ATy(qTy,
22431                                                                                    PTy(uTy,
22432                                                                                        qTy)),
22433                                                                                LU),
22434                                                                             F32))))))))))))))))))))),
22435             MU(LU,qTy)))))
22436;
22437val dfn'StoreMultipleUserRegisters_def = Def
22438  ("dfn'StoreMultipleUserRegisters",
22439   TP[bVar"increment",bVar"wordhigher",Var("n",F4),Var("registers",F16)],
22440   MB(Call("CurrentModeIsHyp",ATy(qTy,PTy(bTy,qTy)),LU),
22441      Close
22442        (bVar"v",
22443         MB(ITE(bVar"v",
22444                Call("TakeUndefInstrException",ATy(qTy,PTy(uTy,qTy)),LU),
22445                MU(LU,qTy)),
22446            Close
22447              (AVar uTy,
22448               MB(Call
22449                    ("CurrentModeIsUserOrSystem",ATy(qTy,PTy(bTy,qTy)),LU),
22450                  Close
22451                    (bVar"v",
22452                     MB(ITE(bVar"v",
22453                            Call
22454                              ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
22455                               Call
22456                                 ("UNPREDICTABLE",CTy"exception",
22457                                  LS"StoreMultipleUserRegisters")),
22458                            MU(LU,qTy)),
22459                        Close
22460                          (AVar uTy,
22461                           MB(Call
22462                                ("BitCount",ATy(qTy,PTy(nTy,qTy)),
22463                                 Var("registers",F16)),
22464                              Close
22465                                (nVar"v",
22466                                 MB(MB(MU(Mop(Cast F32,nVar"v"),qTy),
22467                                       Close
22468                                         (Var("v",F32),
22469                                          MU(Bop(Mul,LW(4,32),Var("v",F32)),
22470                                             qTy))),
22471                                    Close
22472                                      (Var("length",F32),
22473                                       MB(ITE(bVar"increment",
22474                                              Call
22475                                                ("R",
22476                                                 ATy(qTy,PTy(F32,qTy)),
22477                                                 Var("n",F4)),
22478                                              MB(Call
22479                                                   ("R",
22480                                                    ATy(qTy,PTy(F32,qTy)),
22481                                                    Var("n",F4)),
22482                                                 Close
22483                                                   (Var("v",F32),
22484                                                    MU(Bop(Sub,
22485                                                           Var("v",F32),
22486                                                           Var("length",
22487                                                               F32)),qTy)))),
22488                                          Close
22489                                            (Var("v",F32),
22490                                             MN(Var("v",F32),
22491                                                MB(ITE(bVar"wordhigher",
22492                                                       MB(MR(Close
22493                                                               (Var("s",
22494                                                                    PTy(F32,
22495                                                                        qTy)),
22496                                                                Mop(Fst,
22497                                                                    Var("s",
22498                                                                        PTy(F32,
22499                                                                            qTy))))),
22500                                                          Close
22501                                                            (Var("v",F32),
22502                                                             MB(MU(Bop(Add,
22503                                                                       Var("v",
22504                                                                           F32),
22505                                                                       LW(4,
22506                                                                          32)),
22507                                                                   PTy(F32,
22508                                                                       qTy)),
22509                                                                Close
22510                                                                  (Var("v",
22511                                                                       F32),
22512                                                                   MW(Close
22513                                                                        (Var("s",
22514                                                                             PTy(F32,
22515                                                                                 qTy)),
22516                                                                         TP[Var("v",
22517                                                                                F32),
22518                                                                            Mop(Snd,
22519                                                                                Var("s",
22520                                                                                    PTy(F32,
22521                                                                                        qTy)))])))))),
22522                                                       MU(LU,PTy(F32,qTy))),
22523                                                   Close
22524                                                     (AVar uTy,
22525                                                      MB(MR(Close
22526                                                              (Var("s",
22527                                                                   PTy(F32,
22528                                                                       qTy)),
22529                                                               Dest
22530                                                                 ("MEM",
22531                                                                  ATy(F32,
22532                                                                      F8),
22533                                                                  Mop(Snd,
22534                                                                      Var("s",
22535                                                                          PTy(F32,
22536                                                                              qTy)))))),
22537                                                         Close
22538                                                           (Var("omem",
22539                                                                ATy(F32,F8)),
22540                                                            MB(For(TP[LN 0,
22541                                                                      LN
22542                                                                       14,
22543                                                                      Close
22544                                                                        (nVar"i",
22545                                                                         ITE(Bop(Bit,
22546                                                                                 Var("registers",
22547                                                                                     F16),
22548                                                                                 Mop(Cast
22549                                                                                       nTy,
22550                                                                                     nVar"i")),
22551                                                                             MB(MR(Close
22552                                                                                     (Var("s",
22553                                                                                          PTy(F32,
22554                                                                                              qTy)),
22555                                                                                      Mop(Fst,
22556                                                                                          Var("s",
22557                                                                                              PTy(F32,
22558                                                                                                  qTy))))),
22559                                                                                Close
22560                                                                                  (Var("v",
22561                                                                                       F32),
22562                                                                                   MB(MB(MU(TP[Var("v",
22563                                                                                                   F32),
22564                                                                                               LN
22565                                                                                                4],
22566                                                                                            PTy(F32,
22567                                                                                                qTy)),
22568                                                                                         Close
22569                                                                                           (Var("x",
22570                                                                                                PTy(F32,
22571                                                                                                    nTy)),
22572                                                                                            MB(MD(Call
22573                                                                                                    ("Rmode",
22574                                                                                                     ATy(qTy,
22575                                                                                                         PTy(F32,
22576                                                                                                             qTy)),
22577                                                                                                     TP[Mop(Cast
22578                                                                                                              F4,
22579                                                                                                            nVar"i"),
22580                                                                                                        LW(16,
22581                                                                                                           5)]),
22582                                                                                                  F32),
22583                                                                                               Close
22584                                                                                                 (Var("v",
22585                                                                                                      F32),
22586                                                                                                  MB(MU(TP[Var("v",
22587                                                                                                               F32),
22588                                                                                                           Var("x",
22589                                                                                                               PTy(F32,
22590                                                                                                                   nTy))],
22591                                                                                                        PTy(F32,
22592                                                                                                            qTy)),
22593                                                                                                     Close
22594                                                                                                       (Var("v",
22595                                                                                                            PTy(F32,
22596                                                                                                                PTy(F32,
22597                                                                                                                    nTy))),
22598                                                                                                        MD(Call
22599                                                                                                             ("write'MemA",
22600                                                                                                              ATy(qTy,
22601                                                                                                                  PTy(uTy,
22602                                                                                                                      qTy)),
22603                                                                                                              Var("v",
22604                                                                                                                  PTy(F32,
22605                                                                                                                      PTy(F32,
22606                                                                                                                          nTy)))),
22607                                                                                                           F32))))))),
22608                                                                                      Close
22609                                                                                        (AVar
22610                                                                                           uTy,
22611                                                                                         MB(MR(Close
22612                                                                                                 (Var("s",
22613                                                                                                      PTy(F32,
22614                                                                                                          qTy)),
22615                                                                                                  Mop(Fst,
22616                                                                                                      Var("s",
22617                                                                                                          PTy(F32,
22618                                                                                                              qTy))))),
22619                                                                                            Close
22620                                                                                              (Var("v",
22621                                                                                                   F32),
22622                                                                                               MB(MU(Bop(Add,
22623                                                                                                         Var("v",
22624                                                                                                             F32),
22625                                                                                                         LW(4,
22626                                                                                                            32)),
22627                                                                                                     PTy(F32,
22628                                                                                                         qTy)),
22629                                                                                                  Close
22630                                                                                                    (Var("v",
22631                                                                                                         F32),
22632                                                                                                     MW(Close
22633                                                                                                          (Var("s",
22634                                                                                                               PTy(F32,
22635                                                                                                                   qTy)),
22636                                                                                                           TP[Var("v",
22637                                                                                                                  F32),
22638                                                                                                              Mop(Snd,
22639                                                                                                                  Var("s",
22640                                                                                                                      PTy(F32,
22641                                                                                                                          qTy)))])))))))))),
22642                                                                             MU(LU,
22643                                                                                PTy(F32,
22644                                                                                    qTy))))]),
22645                                                               Close
22646                                                                 (AVar uTy,
22647                                                                  MB(ITE(Bop(Bit,
22648                                                                             Var("registers",
22649                                                                                 F16),
22650                                                                             LN
22651                                                                              15),
22652                                                                         MB(MR(Close
22653                                                                                 (Var("s",
22654                                                                                      PTy(F32,
22655                                                                                          qTy)),
22656                                                                                  Mop(Fst,
22657                                                                                      Var("s",
22658                                                                                          PTy(F32,
22659                                                                                              qTy))))),
22660                                                                            Close
22661                                                                              (Var("v",
22662                                                                                   F32),
22663                                                                               MB(MU(TP[Var("v",
22664                                                                                            F32),
22665                                                                                        LN
22666                                                                                         4],
22667                                                                                     PTy(F32,
22668                                                                                         qTy)),
22669                                                                                  Close
22670                                                                                    (Var("x",
22671                                                                                         PTy(F32,
22672                                                                                             nTy)),
22673                                                                                     MB(MD(Call
22674                                                                                             ("PCStoreValue",
22675                                                                                              ATy(qTy,
22676                                                                                                  PTy(F32,
22677                                                                                                      qTy)),
22678                                                                                              LU),
22679                                                                                           F32),
22680                                                                                        Close
22681                                                                                          (Var("v",
22682                                                                                               F32),
22683                                                                                           MB(MU(TP[Var("v",
22684                                                                                                        F32),
22685                                                                                                    Var("x",
22686                                                                                                        PTy(F32,
22687                                                                                                            nTy))],
22688                                                                                                 PTy(F32,
22689                                                                                                     qTy)),
22690                                                                                              Close
22691                                                                                                (Var("v",
22692                                                                                                     PTy(F32,
22693                                                                                                         PTy(F32,
22694                                                                                                             nTy))),
22695                                                                                                 MD(Call
22696                                                                                                      ("write'MemA",
22697                                                                                                       ATy(qTy,
22698                                                                                                           PTy(uTy,
22699                                                                                                               qTy)),
22700                                                                                                       Var("v",
22701                                                                                                           PTy(F32,
22702                                                                                                               PTy(F32,
22703                                                                                                                   nTy)))),
22704                                                                                                    F32))))))))),
22705                                                                         MU(LU,
22706                                                                            PTy(F32,
22707                                                                                qTy))),
22708                                                                     Close
22709                                                                       (AVar
22710                                                                          uTy,
22711                                                                        MB(MR(Close
22712                                                                                (Var("s",
22713                                                                                     PTy(F32,
22714                                                                                         qTy)),
22715                                                                                 Dest
22716                                                                                   ("data_abort",
22717                                                                                    bTy,
22718                                                                                    Mop(Snd,
22719                                                                                        Var("s",
22720                                                                                            PTy(F32,
22721                                                                                                qTy)))))),
22722                                                                           Close
22723                                                                             (bVar"b",
22724                                                                              ITE(bVar"b",
22725                                                                                  MB(MW(Close
22726                                                                                          (Var("s",
22727                                                                                               PTy(F32,
22728                                                                                                   qTy)),
22729                                                                                           TP[Mop(Fst,
22730                                                                                                  Var("s",
22731                                                                                                      PTy(F32,
22732                                                                                                          qTy))),
22733                                                                                              Rupd
22734                                                                                                ("MEM",
22735                                                                                                 TP[Mop(Snd,
22736                                                                                                        Var("s",
22737                                                                                                            PTy(F32,
22738                                                                                                                qTy))),
22739                                                                                                    Var("omem",
22740                                                                                                        ATy(F32,
22741                                                                                                            F8))])])),
22742                                                                                     Close
22743                                                                                       (AVar
22744                                                                                          uTy,
22745                                                                                        MD(Call
22746                                                                                             ("TakeDataAbortException",
22747                                                                                              ATy(qTy,
22748                                                                                                  PTy(uTy,
22749                                                                                                      qTy)),
22750                                                                                              LU),
22751                                                                                           F32))),
22752                                                                                  MD(Call
22753                                                                                       ("IncPC",
22754                                                                                        ATy(qTy,
22755                                                                                            PTy(uTy,
22756                                                                                                qTy)),
22757                                                                                        LU),
22758                                                                                     F32))))))))))))))))))))))))))))
22759;
22760val dfn'StoreDual_def = Def
22761  ("dfn'StoreDual",
22762   TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("t2",F4),
22763      Var("n",F4),Var("m",CTy"offset2")],
22764   MB(Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
22765      Close
22766        (bVar"b",
22767         ITE(bVar"b",
22768             MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
22769                Close
22770                  (Var("Rn",F32),
22771                   MB(CS(Var("m",CTy"offset2"),
22772                         [(Call("register_form2",CTy"offset2",Var("m",F4)),
22773                           Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4))),
22774                          (Call
22775                             ("immediate_form2",CTy"offset2",
22776                              Var("imm32",F32)),MU(Var("imm32",F32),qTy))]),
22777                      Close
22778                        (Var("offset",F32),
22779                         Let(Var("offset_addr",F32),
22780                             ITE(bVar"add",
22781                                 Bop(Add,Var("Rn",F32),Var("offset",F32)),
22782                                 Bop(Sub,Var("Rn",F32),Var("offset",F32))),
22783                             Let(Var("address",F32),
22784                                 ITE(bVar"index",Var("offset_addr",F32),
22785                                     Var("Rn",F32)),
22786                                 MB(MR(Close
22787                                         (qVar"s",
22788                                          Dest("MEM",ATy(F32,F8),qVar"s"))),
22789                                    Close
22790                                      (Var("omem",ATy(F32,F8)),
22791                                       MB(MB(Call
22792                                               ("R",ATy(qTy,PTy(F32,qTy)),
22793                                                Var("t",F4)),
22794                                             Close
22795                                               (Var("v",F32),
22796                                                MB(MU(TP[Var("v",F32),
22797                                                         Var("address",F32),
22798                                                         LN 4],qTy),
22799                                                   Close
22800                                                     (Var("v",
22801                                                          PTy(F32,
22802                                                              PTy(F32,nTy))),
22803                                                      Call
22804                                                        ("write'MemA",
22805                                                         ATy(qTy,
22806                                                             PTy(uTy,qTy)),
22807                                                         Var("v",
22808                                                             PTy(F32,
22809                                                                 PTy(F32,
22810                                                                     nTy)))))))),
22811                                          Close
22812                                            (AVar uTy,
22813                                             MB(MB(Call
22814                                                     ("R",
22815                                                      ATy(qTy,PTy(F32,qTy)),
22816                                                      Var("t2",F4)),
22817                                                   Close
22818                                                     (Var("v",F32),
22819                                                      MB(MU(TP[Var("v",F32),
22820                                                               Bop(Add,
22821                                                                   Var("address",
22822                                                                       F32),
22823                                                                   LW(4,32)),
22824                                                               LN 4],qTy),
22825                                                         Close
22826                                                           (Var("v",
22827                                                                PTy(F32,
22828                                                                    PTy(F32,
22829                                                                        nTy))),
22830                                                            Call
22831                                                              ("write'MemA",
22832                                                               ATy(qTy,
22833                                                                   PTy(uTy,
22834                                                                       qTy)),
22835                                                               Var("v",
22836                                                                   PTy(F32,
22837                                                                       PTy(F32,
22838                                                                           nTy)))))))),
22839                                                Close
22840                                                  (AVar uTy,
22841                                                   MB(MR(Close
22842                                                           (qVar"s",
22843                                                            Dest
22844                                                              ("data_abort",
22845                                                               bTy,qVar"s"))),
22846                                                      Close
22847                                                        (bVar"b",
22848                                                         ITE(bVar"b",
22849                                                             MB(MW(Close
22850                                                                     (qVar"s",
22851                                                                      Rupd
22852                                                                        ("MEM",
22853                                                                         TP[qVar"s",
22854                                                                            Var("omem",
22855                                                                                ATy(F32,
22856                                                                                    F8))]))),
22857                                                                Close
22858                                                                  (AVar
22859                                                                     uTy,
22860                                                                   Call
22861                                                                     ("TakeDataAbortException",
22862                                                                      ATy(qTy,
22863                                                                          PTy(uTy,
22864                                                                              qTy)),
22865                                                                      LU))),
22866                                                             MB(ITE(bVar"wback",
22867                                                                    Call
22868                                                                      ("write'R",
22869                                                                       ATy(qTy,
22870                                                                           PTy(uTy,
22871                                                                               qTy)),
22872                                                                       TP[Var("offset_addr",
22873                                                                              F32),
22874                                                                          Var("n",
22875                                                                              F4)]),
22876                                                                    MU(LU,
22877                                                                       qTy)),
22878                                                                Close
22879                                                                  (AVar
22880                                                                     uTy,
22881                                                                   Call
22882                                                                     ("IncPC",
22883                                                                      ATy(qTy,
22884                                                                          PTy(uTy,
22885                                                                              qTy)),
22886                                                                      LU)))))))))))))))))),
22887             MU(LU,qTy)))))
22888;
22889val dfn'StoreExclusive_def = Def
22890  ("dfn'StoreExclusive",
22891   TP[Var("d",F4),Var("t",F4),Var("n",F4),Var("imm32",F32)],
22892   MB(Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
22893      Close
22894        (bVar"b",
22895         ITE(bVar"b",
22896             MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
22897                Close
22898                  (Var("v",F32),
22899                   MB(MU(Bop(Add,Var("v",F32),Var("imm32",F32)),qTy),
22900                      Close
22901                        (Var("address",F32),
22902                         MB(MR(Close
22903                                 (qVar"s",
22904                                  Dest
22905                                    ("ExclusiveMonitorsPass",
22906                                     ATy(PTy(F32,
22907                                             PTy(nTy,
22908                                                 PTy(LTy(STy F32),
22909                                                     STy(PTy(F32,nTy))))),
22910                                         bTy),qVar"s"))),
22911                            Close
22912                              (Var("v",
22913                                   ATy(PTy(F32,
22914                                           PTy(nTy,
22915                                               PTy(LTy(STy F32),
22916                                                   STy(PTy(F32,nTy))))),
22917                                       bTy)),
22918                               MB(MB(MB(MR(Close
22919                                             (qVar"s",
22920                                              Dest
22921                                                ("exclusive_state",
22922                                                 PTy(LTy(STy F32),
22923                                                     STy(PTy(F32,nTy))),
22924                                                 qVar"s"))),
22925                                        Close
22926                                          (Var("v0",
22927                                               PTy(LTy(STy F32),
22928                                                   STy(PTy(F32,nTy)))),
22929                                           MB(MB(MU(TP[LN 4,
22930                                                       Var("v0",
22931                                                           PTy(LTy(STy F32),
22932                                                               STy(PTy(F32,
22933                                                                       nTy))))],
22934                                                    qTy),
22935                                                 Close
22936                                                   (Var("v",
22937                                                        PTy(nTy,
22938                                                            PTy(LTy(STy F32),
22939                                                                STy(PTy(F32,
22940                                                                        nTy))))),
22941                                                    MU(TP[Var("address",
22942                                                              F32),
22943                                                          Var("v",
22944                                                              PTy(nTy,
22945                                                                  PTy(LTy(STy F32),
22946                                                                      STy(PTy(F32,
22947                                                                              nTy)))))],
22948                                                       qTy))),
22949                                              Close
22950                                                (Var("v0",
22951                                                     PTy(F32,
22952                                                         PTy(nTy,
22953                                                             PTy(LTy(STy F32),
22954                                                                 STy(PTy(F32,
22955                                                                         nTy)))))),
22956                                                 MU(Apply
22957                                                      (Var("v",
22958                                                           ATy(PTy(F32,
22959                                                                   PTy(nTy,
22960                                                                       PTy(LTy(STy F32),
22961                                                                           STy(PTy(F32,
22962                                                                                   nTy))))),
22963                                                               bTy)),
22964                                                       Var("v0",
22965                                                           PTy(F32,
22966                                                               PTy(nTy,
22967                                                                   PTy(LTy(STy F32),
22968                                                                       STy(PTy(F32,
22969                                                                               nTy))))))),
22970                                                    qTy))))),
22971                                     Close
22972                                       (bVar"b",
22973                                        ITE(bVar"b",
22974                                            MB(MB(Call
22975                                                    ("R",
22976                                                     ATy(qTy,PTy(F32,qTy)),
22977                                                     Var("t",F4)),
22978                                                  Close
22979                                                    (Var("v",F32),
22980                                                     MB(MU(TP[Var("v",F32),
22981                                                              Var("address",
22982                                                                  F32),
22983                                                              LN 4],qTy),
22984                                                        Close
22985                                                          (Var("v",
22986                                                               PTy(F32,
22987                                                                   PTy(F32,
22988                                                                       nTy))),
22989                                                           Call
22990                                                             ("write'MemA",
22991                                                              ATy(qTy,
22992                                                                  PTy(uTy,
22993                                                                      qTy)),
22994                                                              Var("v",
22995                                                                  PTy(F32,
22996                                                                      PTy(F32,
22997                                                                          nTy)))))))),
22998                                               Close
22999                                                 (AVar uTy,
23000                                                  MB(MR(Close
23001                                                          (qVar"s",
23002                                                           Dest
23003                                                             ("data_abort",
23004                                                              bTy,qVar"s"))),
23005                                                     Close
23006                                                       (bVar"v",
23007                                                        MB(MU(Mop(Not,
23008                                                                  bVar"v"),
23009                                                              qTy),
23010                                                           Close
23011                                                             (bVar"b",
23012                                                              ITE(bVar"b",
23013                                                                  Call
23014                                                                    ("write'R",
23015                                                                     ATy(qTy,
23016                                                                         PTy(uTy,
23017                                                                             qTy)),
23018                                                                     TP[LW(0,
23019                                                                           32),
23020                                                                        Var("d",
23021                                                                            F4)]),
23022                                                                  MU(LU,
23023                                                                     qTy)))))))),
23024                                            Call
23025                                              ("write'R",
23026                                               ATy(qTy,PTy(uTy,qTy)),
23027                                               TP[LW(1,32),Var("d",F4)])))),
23028                                  Close
23029                                    (AVar uTy,
23030                                     MB(MR(Close
23031                                             (qVar"s",
23032                                              Dest
23033                                                ("data_abort",bTy,qVar"s"))),
23034                                        Close
23035                                          (bVar"b",
23036                                           ITE(bVar"b",
23037                                               Call
23038                                                 ("TakeDataAbortException",
23039                                                  ATy(qTy,PTy(uTy,qTy)),LU),
23040                                               Call
23041                                                 ("IncPC",
23042                                                  ATy(qTy,PTy(uTy,qTy)),LU)))))))))))),
23043             MU(LU,qTy)))))
23044;
23045val dfn'StoreExclusiveByte_def = Def
23046  ("dfn'StoreExclusiveByte",TP[Var("d",F4),Var("t",F4),Var("n",F4)],
23047   MB(Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
23048      Close
23049        (bVar"b",
23050         ITE(bVar"b",
23051             MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
23052                Close
23053                  (Var("address",F32),
23054                   MB(MR(Close
23055                           (qVar"s",
23056                            Dest
23057                              ("ExclusiveMonitorsPass",
23058                               ATy(PTy(F32,
23059                                       PTy(nTy,
23060                                           PTy(LTy(STy F32),
23061                                               STy(PTy(F32,nTy))))),bTy),
23062                               qVar"s"))),
23063                      Close
23064                        (Var("v",
23065                             ATy(PTy(F32,
23066                                     PTy(nTy,
23067                                         PTy(LTy(STy F32),
23068                                             STy(PTy(F32,nTy))))),bTy)),
23069                         MB(MB(MB(MR(Close
23070                                       (qVar"s",
23071                                        Dest
23072                                          ("exclusive_state",
23073                                           PTy(LTy(STy F32),
23074                                               STy(PTy(F32,nTy))),qVar"s"))),
23075                                  Close
23076                                    (Var("v0",
23077                                         PTy(LTy(STy F32),
23078                                             STy(PTy(F32,nTy)))),
23079                                     MB(MB(MU(TP[LN 1,
23080                                                 Var("v0",
23081                                                     PTy(LTy(STy F32),
23082                                                         STy(PTy(F32,nTy))))],
23083                                              qTy),
23084                                           Close
23085                                             (Var("v",
23086                                                  PTy(nTy,
23087                                                      PTy(LTy(STy F32),
23088                                                          STy(PTy(F32,nTy))))),
23089                                              MU(TP[Var("address",F32),
23090                                                    Var("v",
23091                                                        PTy(nTy,
23092                                                            PTy(LTy(STy F32),
23093                                                                STy(PTy(F32,
23094                                                                        nTy)))))],
23095                                                 qTy))),
23096                                        Close
23097                                          (Var("v0",
23098                                               PTy(F32,
23099                                                   PTy(nTy,
23100                                                       PTy(LTy(STy F32),
23101                                                           STy(PTy(F32,nTy)))))),
23102                                           MU(Apply
23103                                                (Var("v",
23104                                                     ATy(PTy(F32,
23105                                                             PTy(nTy,
23106                                                                 PTy(LTy(STy F32),
23107                                                                     STy(PTy(F32,
23108                                                                             nTy))))),
23109                                                         bTy)),
23110                                                 Var("v0",
23111                                                     PTy(F32,
23112                                                         PTy(nTy,
23113                                                             PTy(LTy(STy F32),
23114                                                                 STy(PTy(F32,
23115                                                                         nTy))))))),
23116                                              qTy))))),
23117                               Close
23118                                 (bVar"b",
23119                                  ITE(bVar"b",
23120                                      MB(MB(Call
23121                                              ("R",ATy(qTy,PTy(F32,qTy)),
23122                                               Var("t",F4)),
23123                                            Close
23124                                              (Var("v",F32),
23125                                               MB(MB(MU(EX(Var("v",F32),
23126                                                           LN 7,LN 0,F8),
23127                                                        qTy),
23128                                                     Close
23129                                                       (Var("v",F8),
23130                                                        MU(TP[Var("v",F8),
23131                                                              Var("address",
23132                                                                  F32),
23133                                                              LN 1],qTy))),
23134                                                  Close
23135                                                    (Var("v",
23136                                                         PTy(F8,
23137                                                             PTy(F32,nTy))),
23138                                                     Call
23139                                                       ("write'MemA",
23140                                                        ATy(qTy,
23141                                                            PTy(uTy,qTy)),
23142                                                        Var("v",
23143                                                            PTy(F8,
23144                                                                PTy(F32,
23145                                                                    nTy)))))))),
23146                                         Close
23147                                           (AVar uTy,
23148                                            MB(MR(Close
23149                                                    (qVar"s",
23150                                                     Dest
23151                                                       ("data_abort",bTy,
23152                                                        qVar"s"))),
23153                                               Close
23154                                                 (bVar"v",
23155                                                  MB(MU(Mop(Not,bVar"v"),
23156                                                        qTy),
23157                                                     Close
23158                                                       (bVar"b",
23159                                                        ITE(bVar"b",
23160                                                            Call
23161                                                              ("write'R",
23162                                                               ATy(qTy,
23163                                                                   PTy(uTy,
23164                                                                       qTy)),
23165                                                               TP[LW(0,32),
23166                                                                  Var("d",
23167                                                                      F4)]),
23168                                                            MU(LU,qTy)))))))),
23169                                      Call
23170                                        ("write'R",ATy(qTy,PTy(uTy,qTy)),
23171                                         TP[LW(1,32),Var("d",F4)])))),
23172                            Close
23173                              (AVar uTy,
23174                               MB(MR(Close
23175                                       (qVar"s",
23176                                        Dest("data_abort",bTy,qVar"s"))),
23177                                  Close
23178                                    (bVar"b",
23179                                     ITE(bVar"b",
23180                                         Call
23181                                           ("TakeDataAbortException",
23182                                            ATy(qTy,PTy(uTy,qTy)),LU),
23183                                         Call
23184                                           ("IncPC",ATy(qTy,PTy(uTy,qTy)),
23185                                            LU)))))))))),MU(LU,qTy)))))
23186;
23187val dfn'StoreExclusiveHalf_def = Def
23188  ("dfn'StoreExclusiveHalf",TP[Var("d",F4),Var("t",F4),Var("n",F4)],
23189   MB(Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
23190      Close
23191        (bVar"b",
23192         ITE(bVar"b",
23193             MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
23194                Close
23195                  (Var("address",F32),
23196                   MB(MR(Close
23197                           (qVar"s",
23198                            Dest
23199                              ("ExclusiveMonitorsPass",
23200                               ATy(PTy(F32,
23201                                       PTy(nTy,
23202                                           PTy(LTy(STy F32),
23203                                               STy(PTy(F32,nTy))))),bTy),
23204                               qVar"s"))),
23205                      Close
23206                        (Var("v",
23207                             ATy(PTy(F32,
23208                                     PTy(nTy,
23209                                         PTy(LTy(STy F32),
23210                                             STy(PTy(F32,nTy))))),bTy)),
23211                         MB(MB(MB(MR(Close
23212                                       (qVar"s",
23213                                        Dest
23214                                          ("exclusive_state",
23215                                           PTy(LTy(STy F32),
23216                                               STy(PTy(F32,nTy))),qVar"s"))),
23217                                  Close
23218                                    (Var("v0",
23219                                         PTy(LTy(STy F32),
23220                                             STy(PTy(F32,nTy)))),
23221                                     MB(MB(MU(TP[LN 2,
23222                                                 Var("v0",
23223                                                     PTy(LTy(STy F32),
23224                                                         STy(PTy(F32,nTy))))],
23225                                              qTy),
23226                                           Close
23227                                             (Var("v",
23228                                                  PTy(nTy,
23229                                                      PTy(LTy(STy F32),
23230                                                          STy(PTy(F32,nTy))))),
23231                                              MU(TP[Var("address",F32),
23232                                                    Var("v",
23233                                                        PTy(nTy,
23234                                                            PTy(LTy(STy F32),
23235                                                                STy(PTy(F32,
23236                                                                        nTy)))))],
23237                                                 qTy))),
23238                                        Close
23239                                          (Var("v0",
23240                                               PTy(F32,
23241                                                   PTy(nTy,
23242                                                       PTy(LTy(STy F32),
23243                                                           STy(PTy(F32,nTy)))))),
23244                                           MU(Apply
23245                                                (Var("v",
23246                                                     ATy(PTy(F32,
23247                                                             PTy(nTy,
23248                                                                 PTy(LTy(STy F32),
23249                                                                     STy(PTy(F32,
23250                                                                             nTy))))),
23251                                                         bTy)),
23252                                                 Var("v0",
23253                                                     PTy(F32,
23254                                                         PTy(nTy,
23255                                                             PTy(LTy(STy F32),
23256                                                                 STy(PTy(F32,
23257                                                                         nTy))))))),
23258                                              qTy))))),
23259                               Close
23260                                 (bVar"b",
23261                                  ITE(bVar"b",
23262                                      MB(MB(Call
23263                                              ("R",ATy(qTy,PTy(F32,qTy)),
23264                                               Var("t",F4)),
23265                                            Close
23266                                              (Var("v",F32),
23267                                               MB(MB(MU(EX(Var("v",F32),
23268                                                           LN 15,LN 0,F16),
23269                                                        qTy),
23270                                                     Close
23271                                                       (Var("v",F16),
23272                                                        MU(TP[Var("v",F16),
23273                                                              Var("address",
23274                                                                  F32),
23275                                                              LN 2],qTy))),
23276                                                  Close
23277                                                    (Var("v",
23278                                                         PTy(F16,
23279                                                             PTy(F32,nTy))),
23280                                                     Call
23281                                                       ("write'MemA",
23282                                                        ATy(qTy,
23283                                                            PTy(uTy,qTy)),
23284                                                        Var("v",
23285                                                            PTy(F16,
23286                                                                PTy(F32,
23287                                                                    nTy)))))))),
23288                                         Close
23289                                           (AVar uTy,
23290                                            MB(MR(Close
23291                                                    (qVar"s",
23292                                                     Dest
23293                                                       ("data_abort",bTy,
23294                                                        qVar"s"))),
23295                                               Close
23296                                                 (bVar"v",
23297                                                  MB(MU(Mop(Not,bVar"v"),
23298                                                        qTy),
23299                                                     Close
23300                                                       (bVar"b",
23301                                                        ITE(bVar"b",
23302                                                            Call
23303                                                              ("write'R",
23304                                                               ATy(qTy,
23305                                                                   PTy(uTy,
23306                                                                       qTy)),
23307                                                               TP[LW(0,32),
23308                                                                  Var("d",
23309                                                                      F4)]),
23310                                                            MU(LU,qTy)))))))),
23311                                      Call
23312                                        ("write'R",ATy(qTy,PTy(uTy,qTy)),
23313                                         TP[LW(1,32),Var("d",F4)])))),
23314                            Close
23315                              (AVar uTy,
23316                               MB(MR(Close
23317                                       (qVar"s",
23318                                        Dest("data_abort",bTy,qVar"s"))),
23319                                  Close
23320                                    (bVar"b",
23321                                     ITE(bVar"b",
23322                                         Call
23323                                           ("TakeDataAbortException",
23324                                            ATy(qTy,PTy(uTy,qTy)),LU),
23325                                         Call
23326                                           ("IncPC",ATy(qTy,PTy(uTy,qTy)),
23327                                            LU)))))))))),MU(LU,qTy)))))
23328;
23329val dfn'StoreExclusiveDoubleword_def = Def
23330  ("dfn'StoreExclusiveDoubleword",
23331   TP[Var("d",F4),Var("t",F4),Var("t2",F4),Var("n",F4)],
23332   MB(Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
23333      Close
23334        (bVar"b",
23335         ITE(bVar"b",
23336             MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
23337                Close
23338                  (Var("address",F32),
23339                   MB(Call("BigEndian",ATy(qTy,PTy(bTy,qTy)),LU),
23340                      Close
23341                        (bVar"v",
23342                         MB(ITE(bVar"v",
23343                                MB(Call
23344                                     ("R",ATy(qTy,PTy(F32,qTy)),
23345                                      Var("t",F4)),
23346                                   Close
23347                                     (Var("v",F32),
23348                                      MB(Call
23349                                           ("R",ATy(qTy,PTy(F32,qTy)),
23350                                            Var("t2",F4)),
23351                                         Close
23352                                           (Var("v0",F32),
23353                                            MU(CC[Var("v",F32),
23354                                                  Var("v0",F32)],qTy))))),
23355                                MB(Call
23356                                     ("R",ATy(qTy,PTy(F32,qTy)),
23357                                      Var("t2",F4)),
23358                                   Close
23359                                     (Var("v",F32),
23360                                      MB(Call
23361                                           ("R",ATy(qTy,PTy(F32,qTy)),
23362                                            Var("t",F4)),
23363                                         Close
23364                                           (Var("v0",F32),
23365                                            MU(CC[Var("v",F32),
23366                                                  Var("v0",F32)],qTy)))))),
23367                            Close
23368                              (Var("value",F64),
23369                               MB(MR(Close
23370                                       (qVar"s",
23371                                        Dest
23372                                          ("ExclusiveMonitorsPass",
23373                                           ATy(PTy(F32,
23374                                                   PTy(nTy,
23375                                                       PTy(LTy(STy F32),
23376                                                           STy(PTy(F32,nTy))))),
23377                                               bTy),qVar"s"))),
23378                                  Close
23379                                    (Var("v",
23380                                         ATy(PTy(F32,
23381                                                 PTy(nTy,
23382                                                     PTy(LTy(STy F32),
23383                                                         STy(PTy(F32,nTy))))),
23384                                             bTy)),
23385                                     MB(MB(MB(MR(Close
23386                                                   (qVar"s",
23387                                                    Dest
23388                                                      ("exclusive_state",
23389                                                       PTy(LTy(STy F32),
23390                                                           STy(PTy(F32,nTy))),
23391                                                       qVar"s"))),
23392                                              Close
23393                                                (Var("v0",
23394                                                     PTy(LTy(STy F32),
23395                                                         STy(PTy(F32,nTy)))),
23396                                                 MB(MB(MU(TP[LN 8,
23397                                                             Var("v0",
23398                                                                 PTy(LTy(STy F32),
23399                                                                     STy(PTy(F32,
23400                                                                             nTy))))],
23401                                                          qTy),
23402                                                       Close
23403                                                         (Var("v",
23404                                                              PTy(nTy,
23405                                                                  PTy(LTy(STy F32),
23406                                                                      STy(PTy(F32,
23407                                                                              nTy))))),
23408                                                          MU(TP[Var("address",
23409                                                                    F32),
23410                                                                Var("v",
23411                                                                    PTy(nTy,
23412                                                                        PTy(LTy(STy F32),
23413                                                                            STy(PTy(F32,
23414                                                                                    nTy)))))],
23415                                                             qTy))),
23416                                                    Close
23417                                                      (Var("v0",
23418                                                           PTy(F32,
23419                                                               PTy(nTy,
23420                                                                   PTy(LTy(STy F32),
23421                                                                       STy(PTy(F32,
23422                                                                               nTy)))))),
23423                                                       MU(Apply
23424                                                            (Var("v",
23425                                                                 ATy(PTy(F32,
23426                                                                         PTy(nTy,
23427                                                                             PTy(LTy(STy F32),
23428                                                                                 STy(PTy(F32,
23429                                                                                         nTy))))),
23430                                                                     bTy)),
23431                                                             Var("v0",
23432                                                                 PTy(F32,
23433                                                                     PTy(nTy,
23434                                                                         PTy(LTy(STy F32),
23435                                                                             STy(PTy(F32,
23436                                                                                     nTy))))))),
23437                                                          qTy))))),
23438                                           Close
23439                                             (bVar"b",
23440                                              ITE(bVar"b",
23441                                                  MB(Call
23442                                                       ("write'MemA",
23443                                                        ATy(qTy,
23444                                                            PTy(uTy,qTy)),
23445                                                        TP[Var("value",F64),
23446                                                           Var("address",
23447                                                               F32),LN 8]),
23448                                                     Close
23449                                                       (AVar uTy,
23450                                                        MB(MR(Close
23451                                                                (qVar"s",
23452                                                                 Dest
23453                                                                   ("data_abort",
23454                                                                    bTy,
23455                                                                    qVar"s"))),
23456                                                           Close
23457                                                             (bVar"v",
23458                                                              MB(MU(Mop(Not,
23459                                                                        bVar"v"),
23460                                                                    qTy),
23461                                                                 Close
23462                                                                   (bVar"b",
23463                                                                    ITE(bVar"b",
23464                                                                        Call
23465                                                                          ("write'R",
23466                                                                           ATy(qTy,
23467                                                                               PTy(uTy,
23468                                                                                   qTy)),
23469                                                                           TP[LW(0,
23470                                                                                 32),
23471                                                                              Var("d",
23472                                                                                  F4)]),
23473                                                                        MU(LU,
23474                                                                           qTy)))))))),
23475                                                  Call
23476                                                    ("write'R",
23477                                                     ATy(qTy,PTy(uTy,qTy)),
23478                                                     TP[LW(1,32),
23479                                                        Var("d",F4)])))),
23480                                        Close
23481                                          (AVar uTy,
23482                                           MB(MR(Close
23483                                                   (qVar"s",
23484                                                    Dest
23485                                                      ("data_abort",bTy,
23486                                                       qVar"s"))),
23487                                              Close
23488                                                (bVar"b",
23489                                                 ITE(bVar"b",
23490                                                     Call
23491                                                       ("TakeDataAbortException",
23492                                                        ATy(qTy,
23493                                                            PTy(uTy,qTy)),
23494                                                        LU),
23495                                                     Call
23496                                                       ("IncPC",
23497                                                        ATy(qTy,
23498                                                            PTy(uTy,qTy)),
23499                                                        LU)))))))))))))),
23500             MU(LU,qTy)))))
23501;
23502val dfn'ClearExclusive_def = Def0
23503  ("dfn'ClearExclusive",
23504   MB(MR(Close
23505           (qVar"s",
23506            Dest
23507              ("ClearExclusiveLocal",
23508               ATy(PTy(iTy,PTy(LTy(STy F32),STy(PTy(F32,nTy)))),
23509                   PTy(LTy(STy F32),STy(PTy(F32,nTy)))),qVar"s"))),
23510      Close
23511        (Var("v",
23512             ATy(PTy(iTy,PTy(LTy(STy F32),STy(PTy(F32,nTy)))),
23513                 PTy(LTy(STy F32),STy(PTy(F32,nTy))))),
23514         MB(MB(MB(MR(Close
23515                       (qVar"s",
23516                        Dest
23517                          ("exclusive_state",
23518                           PTy(LTy(STy F32),STy(PTy(F32,nTy))),qVar"s"))),
23519                  Close
23520                    (Var("v0",PTy(LTy(STy F32),STy(PTy(F32,nTy)))),
23521                     MB(MU(TP[Call("ProcessorID",iTy,LU),
23522                              Var("v0",PTy(LTy(STy F32),STy(PTy(F32,nTy))))],
23523                           qTy),
23524                        Close
23525                          (Var("v0",
23526                               PTy(iTy,PTy(LTy(STy F32),STy(PTy(F32,nTy))))),
23527                           MU(Apply
23528                                (Var("v",
23529                                     ATy(PTy(iTy,
23530                                             PTy(LTy(STy F32),
23531                                                 STy(PTy(F32,nTy)))),
23532                                         PTy(LTy(STy F32),
23533                                             STy(PTy(F32,nTy))))),
23534                                 Var("v0",
23535                                     PTy(iTy,
23536                                         PTy(LTy(STy F32),
23537                                             STy(PTy(F32,nTy)))))),qTy))))),
23538               Close
23539                 (Var("v",PTy(LTy(STy F32),STy(PTy(F32,nTy)))),
23540                  MW(Close
23541                       (qVar"s",
23542                        Rupd
23543                          ("exclusive_state",
23544                           TP[qVar"s",
23545                              Var("v",PTy(LTy(STy F32),STy(PTy(F32,nTy))))]))))),
23546            Close(AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))))
23547;
23548val dfn'Swap_def = Def
23549  ("dfn'Swap",TP[bVar"b",Var("t",F4),Var("t2",F4),Var("n",F4)],
23550   MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
23551      Close
23552        (Var("Rn",F32),
23553         MB(ITE(bVar"b",
23554                MB(Call
23555                     ("MemA",ATy(qTy,PTy(F8,qTy)),TP[Var("Rn",F32),LN 1]),
23556                   Close
23557                     (Var("data",F8),
23558                      MB(MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("t2",F4)),
23559                            Close
23560                              (Var("v",F32),
23561                               MB(MB(MU(EX(Var("v",F32),LN 7,LN 0,F8),qTy),
23562                                     Close
23563                                       (Var("v",F8),
23564                                        MU(TP[Var("v",F8),Var("Rn",F32),
23565                                              LN 1],qTy))),
23566                                  Close
23567                                    (Var("v",PTy(F8,PTy(F32,nTy))),
23568                                     Call
23569                                       ("write'MemA",
23570                                        ATy(qTy,PTy(uTy,qTy)),
23571                                        Var("v",PTy(F8,PTy(F32,nTy)))))))),
23572                         Close
23573                           (AVar uTy,
23574                            Call
23575                              ("write'R",ATy(qTy,PTy(uTy,qTy)),
23576                               TP[Mop(Cast F32,Var("data",F8)),Var("t",F4)]))))),
23577                MB(Call
23578                     ("MemA",ATy(qTy,PTy(F32,qTy)),TP[Var("Rn",F32),LN 4]),
23579                   Close
23580                     (Var("data",F32),
23581                      MB(MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("t2",F4)),
23582                            Close
23583                              (Var("v",F32),
23584                               MB(MU(TP[Var("v",F32),Var("Rn",F32),LN 4],
23585                                     qTy),
23586                                  Close
23587                                    (Var("v",PTy(F32,PTy(F32,nTy))),
23588                                     Call
23589                                       ("write'MemA",
23590                                        ATy(qTy,PTy(uTy,qTy)),
23591                                        Var("v",PTy(F32,PTy(F32,nTy)))))))),
23592                         Close
23593                           (AVar uTy,
23594                            MB(Call
23595                                 ("ROR",ATy(qTy,PTy(F32,qTy)),
23596                                  TP[Var("data",F32),
23597                                     Bop(Mul,LN 8,
23598                                         Mop(Cast nTy,
23599                                             EX(Var("Rn",F32),LN 1,LN 0,
23600                                                FTy 2)))]),
23601                               Close
23602                                 (Var("v",F32),
23603                                  MB(MU(TP[Var("v",F32),Var("t",F4)],qTy),
23604                                     Close
23605                                       (Var("v",PTy(F32,F4)),
23606                                        Call
23607                                          ("write'R",
23608                                           ATy(qTy,PTy(uTy,qTy)),
23609                                           Var("v",PTy(F32,F4)))))))))))),
23610            Close
23611              (AVar uTy,
23612               MB(MR(Close(qVar"s",Dest("data_abort",bTy,qVar"s"))),
23613                  Close
23614                    (bVar"b",
23615                     ITE(bVar"b",
23616                         Call
23617                           ("TakeDataAbortException",
23618                            ATy(qTy,PTy(uTy,qTy)),LU),
23619                         Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU)))))))))
23620;
23621val doChangeProcessorState_def = Def
23622  ("doChangeProcessorState",
23623   TP[bVar"enable",bVar"disable",bVar"affectA",bVar"affectI",
23624      bVar"affectF",bVar"changemode",Var("mode",FTy 5)],
23625   MB(Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU),
23626      Close
23627        (bVar"v",
23628         MB(ITE(bVar"v",
23629                MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
23630                   Close
23631                     (Var("v",CTy"PSR"),
23632                      MN(Var("v",CTy"PSR"),
23633                         MB(ITE(bVar"enable",
23634                                MB(ITE(bVar"affectA",
23635                                       MB(MR(Close
23636                                               (Var("s",PTy(CTy"PSR",qTy)),
23637                                                Mop(Fst,
23638                                                    Var("s",
23639                                                        PTy(CTy"PSR",qTy))))),
23640                                          Close
23641                                            (Var("v",CTy"PSR"),
23642                                             MB(MB(MU(TP[Var("v",CTy"PSR"),
23643                                                         LF],
23644                                                      PTy(CTy"PSR",qTy)),
23645                                                   Close
23646                                                     (Var("v",
23647                                                          PTy(CTy"PSR",bTy)),
23648                                                      MU(Rupd
23649                                                           ("A",
23650                                                            Var("v",
23651                                                                PTy(CTy"PSR",
23652                                                                    bTy))),
23653                                                         PTy(CTy"PSR",qTy)))),
23654                                                Close
23655                                                  (Var("v",CTy"PSR"),
23656                                                   MW(Close
23657                                                        (Var("s",
23658                                                             PTy(CTy"PSR",
23659                                                                 qTy)),
23660                                                         TP[Var("v",
23661                                                                CTy"PSR"),
23662                                                            Mop(Snd,
23663                                                                Var("s",
23664                                                                    PTy(CTy"PSR",
23665                                                                        qTy)))])))))),
23666                                       MU(LU,PTy(CTy"PSR",qTy))),
23667                                   Close
23668                                     (AVar uTy,
23669                                      MB(ITE(bVar"affectI",
23670                                             MB(MR(Close
23671                                                     (Var("s",
23672                                                          PTy(CTy"PSR",qTy)),
23673                                                      Mop(Fst,
23674                                                          Var("s",
23675                                                              PTy(CTy"PSR",
23676                                                                  qTy))))),
23677                                                Close
23678                                                  (Var("v",CTy"PSR"),
23679                                                   MB(MB(MU(TP[Var("v",
23680                                                                   CTy"PSR"),
23681                                                               LF],
23682                                                            PTy(CTy"PSR",
23683                                                                qTy)),
23684                                                         Close
23685                                                           (Var("v",
23686                                                                PTy(CTy"PSR",
23687                                                                    bTy)),
23688                                                            MU(Rupd
23689                                                                 ("I",
23690                                                                  Var("v",
23691                                                                      PTy(CTy"PSR",
23692                                                                          bTy))),
23693                                                               PTy(CTy"PSR",
23694                                                                   qTy)))),
23695                                                      Close
23696                                                        (Var("v",CTy"PSR"),
23697                                                         MW(Close
23698                                                              (Var("s",
23699                                                                   PTy(CTy"PSR",
23700                                                                       qTy)),
23701                                                               TP[Var("v",
23702                                                                      CTy"PSR"),
23703                                                                  Mop(Snd,
23704                                                                      Var("s",
23705                                                                          PTy(CTy"PSR",
23706                                                                              qTy)))])))))),
23707                                             MU(LU,PTy(CTy"PSR",qTy))),
23708                                         Close
23709                                           (AVar uTy,
23710                                            ITE(bVar"affectF",
23711                                                MB(MR(Close
23712                                                        (Var("s",
23713                                                             PTy(CTy"PSR",
23714                                                                 qTy)),
23715                                                         Mop(Fst,
23716                                                             Var("s",
23717                                                                 PTy(CTy"PSR",
23718                                                                     qTy))))),
23719                                                   Close
23720                                                     (Var("v",CTy"PSR"),
23721                                                      MB(MB(MU(TP[Var("v",
23722                                                                      CTy"PSR"),
23723                                                                  LF],
23724                                                               PTy(CTy"PSR",
23725                                                                   qTy)),
23726                                                            Close
23727                                                              (Var("v",
23728                                                                   PTy(CTy"PSR",
23729                                                                       bTy)),
23730                                                               MU(Rupd
23731                                                                    ("F",
23732                                                                     Var("v",
23733                                                                         PTy(CTy"PSR",
23734                                                                             bTy))),
23735                                                                  PTy(CTy"PSR",
23736                                                                      qTy)))),
23737                                                         Close
23738                                                           (Var("v",
23739                                                                CTy"PSR"),
23740                                                            MW(Close
23741                                                                 (Var("s",
23742                                                                      PTy(CTy"PSR",
23743                                                                          qTy)),
23744                                                                  TP[Var("v",
23745                                                                         CTy"PSR"),
23746                                                                     Mop(Snd,
23747                                                                         Var("s",
23748                                                                             PTy(CTy"PSR",
23749                                                                                 qTy)))])))))),
23750                                                MU(LU,PTy(CTy"PSR",qTy))))))),
23751                                MU(LU,PTy(CTy"PSR",qTy))),
23752                            Close
23753                              (AVar uTy,
23754                               MB(ITE(bVar"disable",
23755                                      MB(ITE(bVar"affectA",
23756                                             MB(MR(Close
23757                                                     (Var("s",
23758                                                          PTy(CTy"PSR",qTy)),
23759                                                      Mop(Fst,
23760                                                          Var("s",
23761                                                              PTy(CTy"PSR",
23762                                                                  qTy))))),
23763                                                Close
23764                                                  (Var("v",CTy"PSR"),
23765                                                   MB(MB(MU(TP[Var("v",
23766                                                                   CTy"PSR"),
23767                                                               LT],
23768                                                            PTy(CTy"PSR",
23769                                                                qTy)),
23770                                                         Close
23771                                                           (Var("v",
23772                                                                PTy(CTy"PSR",
23773                                                                    bTy)),
23774                                                            MU(Rupd
23775                                                                 ("A",
23776                                                                  Var("v",
23777                                                                      PTy(CTy"PSR",
23778                                                                          bTy))),
23779                                                               PTy(CTy"PSR",
23780                                                                   qTy)))),
23781                                                      Close
23782                                                        (Var("v",CTy"PSR"),
23783                                                         MW(Close
23784                                                              (Var("s",
23785                                                                   PTy(CTy"PSR",
23786                                                                       qTy)),
23787                                                               TP[Var("v",
23788                                                                      CTy"PSR"),
23789                                                                  Mop(Snd,
23790                                                                      Var("s",
23791                                                                          PTy(CTy"PSR",
23792                                                                              qTy)))])))))),
23793                                             MU(LU,PTy(CTy"PSR",qTy))),
23794                                         Close
23795                                           (AVar uTy,
23796                                            MB(ITE(bVar"affectI",
23797                                                   MB(MR(Close
23798                                                           (Var("s",
23799                                                                PTy(CTy"PSR",
23800                                                                    qTy)),
23801                                                            Mop(Fst,
23802                                                                Var("s",
23803                                                                    PTy(CTy"PSR",
23804                                                                        qTy))))),
23805                                                      Close
23806                                                        (Var("v",CTy"PSR"),
23807                                                         MB(MB(MU(TP[Var("v",
23808                                                                         CTy"PSR"),
23809                                                                     LT],
23810                                                                  PTy(CTy"PSR",
23811                                                                      qTy)),
23812                                                               Close
23813                                                                 (Var("v",
23814                                                                      PTy(CTy"PSR",
23815                                                                          bTy)),
23816                                                                  MU(Rupd
23817                                                                       ("I",
23818                                                                        Var("v",
23819                                                                            PTy(CTy"PSR",
23820                                                                                bTy))),
23821                                                                     PTy(CTy"PSR",
23822                                                                         qTy)))),
23823                                                            Close
23824                                                              (Var("v",
23825                                                                   CTy"PSR"),
23826                                                               MW(Close
23827                                                                    (Var("s",
23828                                                                         PTy(CTy"PSR",
23829                                                                             qTy)),
23830                                                                     TP[Var("v",
23831                                                                            CTy"PSR"),
23832                                                                        Mop(Snd,
23833                                                                            Var("s",
23834                                                                                PTy(CTy"PSR",
23835                                                                                    qTy)))])))))),
23836                                                   MU(LU,PTy(CTy"PSR",qTy))),
23837                                               Close
23838                                                 (AVar uTy,
23839                                                  ITE(bVar"affectF",
23840                                                      MB(MR(Close
23841                                                              (Var("s",
23842                                                                   PTy(CTy"PSR",
23843                                                                       qTy)),
23844                                                               Mop(Fst,
23845                                                                   Var("s",
23846                                                                       PTy(CTy"PSR",
23847                                                                           qTy))))),
23848                                                         Close
23849                                                           (Var("v",
23850                                                                CTy"PSR"),
23851                                                            MB(MB(MU(TP[Var("v",
23852                                                                            CTy"PSR"),
23853                                                                        LT],
23854                                                                     PTy(CTy"PSR",
23855                                                                         qTy)),
23856                                                                  Close
23857                                                                    (Var("v",
23858                                                                         PTy(CTy"PSR",
23859                                                                             bTy)),
23860                                                                     MU(Rupd
23861                                                                          ("F",
23862                                                                           Var("v",
23863                                                                               PTy(CTy"PSR",
23864                                                                                   bTy))),
23865                                                                        PTy(CTy"PSR",
23866                                                                            qTy)))),
23867                                                               Close
23868                                                                 (Var("v",
23869                                                                      CTy"PSR"),
23870                                                                  MW(Close
23871                                                                       (Var("s",
23872                                                                            PTy(CTy"PSR",
23873                                                                                qTy)),
23874                                                                        TP[Var("v",
23875                                                                               CTy"PSR"),
23876                                                                           Mop(Snd,
23877                                                                               Var("s",
23878                                                                                   PTy(CTy"PSR",
23879                                                                                       qTy)))])))))),
23880                                                      MU(LU,
23881                                                         PTy(CTy"PSR",qTy))))))),
23882                                      MU(LU,PTy(CTy"PSR",qTy))),
23883                                  Close
23884                                    (AVar uTy,
23885                                     MB(ITE(bVar"changemode",
23886                                            MB(MR(Close
23887                                                    (Var("s",
23888                                                         PTy(CTy"PSR",qTy)),
23889                                                     Mop(Fst,
23890                                                         Var("s",
23891                                                             PTy(CTy"PSR",
23892                                                                 qTy))))),
23893                                               Close
23894                                                 (Var("v",CTy"PSR"),
23895                                                  MB(MB(MU(TP[Var("v",
23896                                                                  CTy"PSR"),
23897                                                              Var("mode",
23898                                                                  FTy 5)],
23899                                                           PTy(CTy"PSR",
23900                                                               qTy)),
23901                                                        Close
23902                                                          (Var("v",
23903                                                               PTy(CTy"PSR",
23904                                                                   FTy 5)),
23905                                                           MU(Rupd
23906                                                                ("M",
23907                                                                 Var("v",
23908                                                                     PTy(CTy"PSR",
23909                                                                         FTy 5))),
23910                                                              PTy(CTy"PSR",
23911                                                                  qTy)))),
23912                                                     Close
23913                                                       (Var("v",CTy"PSR"),
23914                                                        MW(Close
23915                                                             (Var("s",
23916                                                                  PTy(CTy"PSR",
23917                                                                      qTy)),
23918                                                              TP[Var("v",
23919                                                                     CTy"PSR"),
23920                                                                 Mop(Snd,
23921                                                                     Var("s",
23922                                                                         PTy(CTy"PSR",
23923                                                                             qTy)))])))))),
23924                                            MU(LU,PTy(CTy"PSR",qTy))),
23925                                        Close
23926                                          (AVar uTy,
23927                                           MB(MR(Close
23928                                                   (Var("s",
23929                                                        PTy(CTy"PSR",qTy)),
23930                                                    Mop(Fst,
23931                                                        Var("s",
23932                                                            PTy(CTy"PSR",
23933                                                                qTy))))),
23934                                              Close
23935                                                (Var("v",CTy"PSR"),
23936                                                 MB(MB(MB(MU(Call
23937                                                               ("reg'PSR",
23938                                                                F32,
23939                                                                Var("v",
23940                                                                    CTy"PSR")),
23941                                                             PTy(CTy"PSR",
23942                                                                 qTy)),
23943                                                          Close
23944                                                            (Var("v",F32),
23945                                                             MU(TP[Var("v",
23946                                                                       F32),
23947                                                                   LW(15,4),
23948                                                                   LF],
23949                                                                PTy(CTy"PSR",
23950                                                                    qTy)))),
23951                                                       Close
23952                                                         (Var("v",
23953                                                              PTy(F32,
23954                                                                  PTy(F4,
23955                                                                      bTy))),
23956                                                          MD(Call
23957                                                               ("CPSRWriteByInstr",
23958                                                                ATy(qTy,
23959                                                                    PTy(uTy,
23960                                                                        qTy)),
23961                                                                Var("v",
23962                                                                    PTy(F32,
23963                                                                        PTy(F4,
23964                                                                            bTy)))),
23965                                                             CTy"PSR"))),
23966                                                    Close
23967                                                      (AVar uTy,
23968                                                       MB(MR(Close
23969                                                               (Var("s",
23970                                                                    PTy(CTy"PSR",
23971                                                                        qTy)),
23972                                                                Dest
23973                                                                  ("CPSR",
23974                                                                   CTy"PSR",
23975                                                                   Mop(Snd,
23976                                                                       Var("s",
23977                                                                           PTy(CTy"PSR",
23978                                                                               qTy)))))),
23979                                                          Close
23980                                                            (Var("v",
23981                                                                 CTy"PSR"),
23982                                                             MB(MB(MB(MU(Dest
23983                                                                           ("M",
23984                                                                            FTy 5,
23985                                                                            Var("v",
23986                                                                                CTy"PSR")),
23987                                                                         PTy(CTy"PSR",
23988                                                                             qTy)),
23989                                                                      Close
23990                                                                        (Var("v",
23991                                                                             FTy 5),
23992                                                                         MU(EQ(Var("v",
23993                                                                                   FTy 5),
23994                                                                               LW(26,
23995                                                                                  5)),
23996                                                                            PTy(CTy"PSR",
23997                                                                                qTy)))),
23998                                                                   Close
23999                                                                     (bVar"b",
24000                                                                      ITE(bVar"b",
24001                                                                          MB(MD(Call
24002                                                                                  ("CurrentInstrSet",
24003                                                                                   ATy(qTy,
24004                                                                                       PTy(CTy"InstrSet",
24005                                                                                           qTy)),
24006                                                                                   LU),
24007                                                                                CTy"PSR"),
24008                                                                             Close
24009                                                                               (Var("v",
24010                                                                                    CTy"InstrSet"),
24011                                                                                MU(EQ(Var("v",
24012                                                                                          CTy"InstrSet"),
24013                                                                                      LC("InstrSet_ThumbEE",
24014                                                                                         CTy"InstrSet")),
24015                                                                                   PTy(CTy"PSR",
24016                                                                                       qTy)))),
24017                                                                          MU(LF,
24018                                                                             PTy(CTy"PSR",
24019                                                                                 qTy))))),
24020                                                                Close
24021                                                                  (bVar"b",
24022                                                                   ITE(bVar"b",
24023                                                                       MD(Call
24024                                                                            ("raise'exception",
24025                                                                             ATy(qTy,
24026                                                                                 PTy(uTy,
24027                                                                                     qTy)),
24028                                                                             Call
24029                                                                               ("UNPREDICTABLE",
24030                                                                                CTy"exception",
24031                                                                                LS
24032                                                                                 "ChangeProcessorState")),
24033                                                                          CTy"PSR"),
24034                                                                       MU(LU,
24035                                                                          PTy(CTy"PSR",
24036                                                                              qTy)))))))))))))))))))),
24037                MU(LU,qTy)),
24038            Close(AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))))
24039;
24040val dfn'ChangeProcessorState_def = Def
24041  ("dfn'ChangeProcessorState",
24042   TP[bVar"enable",bVar"disable",bVar"affectA",bVar"affectI",
24043      bVar"affectF",bVar"changemode",Var("mode",FTy 5)],
24044   Call
24045     ("doChangeProcessorState",ATy(qTy,PTy(uTy,qTy)),
24046      TP[bVar"enable",bVar"disable",bVar"affectA",bVar"affectI",
24047         bVar"affectF",bVar"changemode",Var("mode",FTy 5)]))
24048;
24049val dfn'ChangeProcessorStateT1_def = Def
24050  ("dfn'ChangeProcessorStateT1",
24051   TP[bVar"enable",bVar"affectA",bVar"affectI",bVar"affectF"],
24052   Call
24053     ("doChangeProcessorState",ATy(qTy,PTy(uTy,qTy)),
24054      TP[bVar"enable",Mop(Not,bVar"enable"),bVar"affectA",bVar"affectI",
24055         bVar"affectF",LF,LX(FTy 5)]))
24056;
24057val dfn'ExceptionReturn_def = Def0
24058  ("dfn'ExceptionReturn",
24059   MB(Call("CurrentModeIsUserOrSystem",ATy(qTy,PTy(bTy,qTy)),LU),
24060      Close
24061        (bVar"v",
24062         MB(ITE(bVar"v",MU(LT,qTy),
24063                MB(Call
24064                     ("CurrentInstrSet",ATy(qTy,PTy(CTy"InstrSet",qTy)),LU),
24065                   Close
24066                     (Var("v",CTy"InstrSet"),
24067                      MU(EQ(Var("v",CTy"InstrSet"),
24068                            LC("InstrSet_ThumbEE",CTy"InstrSet")),qTy)))),
24069            Close
24070              (bVar"b",
24071               ITE(bVar"b",
24072                   Call
24073                     ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
24074                      Call
24075                        ("UNPREDICTABLE",CTy"exception",
24076                         LS"ExceptionReturn")),
24077                   MB(Call("CurrentModeIsHyp",ATy(qTy,PTy(bTy,qTy)),LU),
24078                      Close
24079                        (bVar"v",
24080                         MB(ITE(bVar"v",
24081                                MR(Close
24082                                     (qVar"s",Dest("ELR_hyp",F32,qVar"s"))),
24083                                Call("R",ATy(qTy,PTy(F32,qTy)),LW(14,4))),
24084                            Close
24085                              (Var("new_pc_value",F32),
24086                               MB(Const("SPSR",ATy(qTy,PTy(CTy"PSR",qTy))),
24087                                  Close
24088                                    (Var("v",CTy"PSR"),
24089                                     MB(MB(MB(MU(Call
24090                                                   ("reg'PSR",F32,
24091                                                    Var("v",CTy"PSR")),qTy),
24092                                              Close
24093                                                (Var("v",F32),
24094                                                 MU(TP[Var("v",F32),
24095                                                       LW(15,4),LT],qTy))),
24096                                           Close
24097                                             (Var("v",PTy(F32,PTy(F4,bTy))),
24098                                              Call
24099                                                ("CPSRWriteByInstr",
24100                                                 ATy(qTy,PTy(uTy,qTy)),
24101                                                 Var("v",
24102                                                     PTy(F32,PTy(F4,bTy)))))),
24103                                        Close
24104                                          (AVar uTy,
24105                                           MB(MR(Close
24106                                                   (qVar"s",
24107                                                    Dest
24108                                                      ("CPSR",CTy"PSR",
24109                                                       qVar"s"))),
24110                                              Close
24111                                                (Var("v",CTy"PSR"),
24112                                                 MB(MB(MB(MU(Dest
24113                                                               ("M",FTy 5,
24114                                                                Var("v",
24115                                                                    CTy"PSR")),
24116                                                             qTy),
24117                                                          Close
24118                                                            (Var("v",FTy 5),
24119                                                             MU(EQ(Var("v",
24120                                                                       FTy 5),
24121                                                                   LW(26,5)),
24122                                                                qTy))),
24123                                                       Close
24124                                                         (bVar"b",
24125                                                          ITE(bVar"b",
24126                                                              MB(Call
24127                                                                   ("CurrentInstrSet",
24128                                                                    ATy(qTy,
24129                                                                        PTy(CTy"InstrSet",
24130                                                                            qTy)),
24131                                                                    LU),
24132                                                                 Close
24133                                                                   (Var("v",
24134                                                                        CTy"InstrSet"),
24135                                                                    MU(EQ(Var("v",
24136                                                                              CTy"InstrSet"),
24137                                                                          LC("InstrSet_ThumbEE",
24138                                                                             CTy"InstrSet")),
24139                                                                       qTy))),
24140                                                              MU(LF,qTy)))),
24141                                                    Close
24142                                                      (bVar"b",
24143                                                       ITE(bVar"b",
24144                                                           Call
24145                                                             ("raise'exception",
24146                                                              ATy(qTy,
24147                                                                  PTy(uTy,
24148                                                                      qTy)),
24149                                                              Call
24150                                                                ("UNPREDICTABLE",
24151                                                                 CTy"exception",
24152                                                                 LS
24153                                                                  "ExceptionReturn")),
24154                                                           Call
24155                                                             ("BranchWritePC",
24156                                                              ATy(qTy,
24157                                                                  PTy(uTy,
24158                                                                      qTy)),
24159                                                              Var("new_pc_value",
24160                                                                  F32)))))))))))))))))))))
24161;
24162val dfn'HypervisorCall_def = Def
24163  ("dfn'HypervisorCall",Var("imm16",F16),
24164   MB(Call("HaveVirtExt",ATy(qTy,PTy(bTy,qTy)),LU),
24165      Close
24166        (bVar"v",
24167         MB(MB(MB(MU(Mop(Not,bVar"v"),qTy),
24168                  Close
24169                    (bVar"b",
24170                     ITE(bVar"b",MU(LT,qTy),
24171                         Call("IsSecure",ATy(qTy,PTy(bTy,qTy)),LU)))),
24172               Close
24173                 (bVar"b",
24174                  ITE(bVar"b",MU(LT,qTy),
24175                      MB(Call
24176                           ("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),
24177                            LU),Close(bVar"v",MU(Mop(Not,bVar"v"),qTy)))))),
24178            Close
24179              (bVar"b",
24180               ITE(bVar"b",
24181                   Call
24182                     ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
24183                      Call
24184                        ("UNPREDICTABLE",CTy"exception",LS"HypervisorCall")),
24185                   MB(MR(Close(qVar"s",Dest("CP15",CTy"CP15",qVar"s"))),
24186                      Close
24187                        (Var("v",CTy"CP15"),
24188                         MB(MB(MB(MU(Dest
24189                                       ("SCR",CTy"SCR",Var("v",CTy"CP15")),
24190                                     qTy),
24191                                  Close
24192                                    (Var("v",CTy"SCR"),
24193                                     MU(Dest("HCE",bTy,Var("v",CTy"SCR")),
24194                                        qTy))),
24195                               Close(bVar"v",MU(Mop(Not,bVar"v"),qTy))),
24196                            Close
24197                              (bVar"b",
24198                               ITE(bVar"b",
24199                                   MB(Call
24200                                        ("CurrentModeIsHyp",
24201                                         ATy(qTy,PTy(bTy,qTy)),LU),
24202                                      Close
24203                                        (bVar"b",
24204                                         ITE(bVar"b",
24205                                             Call
24206                                               ("raise'exception",
24207                                                ATy(qTy,PTy(uTy,qTy)),
24208                                                Call
24209                                                  ("UNPREDICTABLE",
24210                                                   CTy"exception",
24211                                                   LS"HypervisorCall")),
24212                                             Call
24213                                               ("TakeUndefInstrException",
24214                                                ATy(qTy,PTy(uTy,qTy)),LU)))),
24215                                   Call
24216                                     ("CallHypervisor",
24217                                      ATy(qTy,PTy(uTy,qTy)),
24218                                      Var("imm16",F16)))))))))))))
24219;
24220val dfn'MoveToRegisterFromSpecial_def = Def
24221  ("dfn'MoveToRegisterFromSpecial",TP[bVar"read_spsr",Var("d",F4)],
24222   MB(ITE(bVar"read_spsr",
24223          MB(Call("CurrentModeIsUserOrSystem",ATy(qTy,PTy(bTy,qTy)),LU),
24224             Close
24225               (bVar"b",
24226                ITE(bVar"b",
24227                    Call
24228                      ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
24229                       Call
24230                         ("UNPREDICTABLE",CTy"exception",
24231                          LS"MoveToRegisterFromSpecial")),
24232                    MB(Const("SPSR",ATy(qTy,PTy(CTy"PSR",qTy))),
24233                       Close
24234                         (Var("v",CTy"PSR"),
24235                          MB(MB(MU(Call("reg'PSR",F32,Var("v",CTy"PSR")),
24236                                   qTy),
24237                                Close
24238                                  (Var("v",F32),
24239                                   MU(TP[Var("v",F32),Var("d",F4)],qTy))),
24240                             Close
24241                               (Var("v",PTy(F32,F4)),
24242                                Call
24243                                  ("write'R",ATy(qTy,PTy(uTy,qTy)),
24244                                   Var("v",PTy(F32,F4)))))))))),
24245          MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
24246             Close
24247               (Var("v",CTy"PSR"),
24248                MB(MB(MB(MU(Call("reg'PSR",F32,Var("v",CTy"PSR")),qTy),
24249                         Close
24250                           (Var("v",F32),
24251                            MU(Bop(BAnd,Var("v",F32),LW(4177462239,32)),
24252                               qTy))),
24253                      Close
24254                        (Var("v",F32),MU(TP[Var("v",F32),Var("d",F4)],qTy))),
24255                   Close
24256                     (Var("v",PTy(F32,F4)),
24257                      Call
24258                        ("write'R",ATy(qTy,PTy(uTy,qTy)),
24259                         Var("v",PTy(F32,F4)))))))),
24260      Close(AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))
24261;
24262val dfn'MoveToRegisterFromBankedOrSpecial_def = Def
24263  ("dfn'MoveToRegisterFromBankedOrSpecial",
24264   TP[bVar"read_spsr",Var("SYSm",FTy 5),Var("d",F4)],
24265   MB(Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU),
24266      Close
24267        (bVar"v",
24268         MB(MB(MU(Mop(Not,bVar"v"),qTy),
24269               Close
24270                 (bVar"b",
24271                  ITE(bVar"b",
24272                      Call
24273                        ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
24274                         Call
24275                           ("UNPREDICTABLE",CTy"exception",
24276                            LS"MoveToRegisterFromBankedOrSpecial")),
24277                      MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
24278                         Close
24279                           (Var("v",CTy"PSR"),
24280                            MB(MU(Dest("M",FTy 5,Var("v",CTy"PSR")),qTy),
24281                               Close
24282                                 (Var("mode",FTy 5),
24283                                  ITE(bVar"read_spsr",
24284                                      MB(Call
24285                                           ("SPSRAccessValid",
24286                                            ATy(qTy,PTy(uTy,qTy)),
24287                                            TP[Var("SYSm",FTy 5),
24288                                               Var("mode",FTy 5)]),
24289                                         Close
24290                                           (uVar"_0",
24291                                            CS(Var("SYSm",FTy 5),
24292                                               [(LW(14,5),
24293                                                 MB(MR(Close
24294                                                         (qVar"s",
24295                                                          Dest
24296                                                            ("SPSR_fiq",
24297                                                             CTy"PSR",
24298                                                             qVar"s"))),
24299                                                    Close
24300                                                      (Var("v",CTy"PSR"),
24301                                                       MB(MB(MU(Call
24302                                                                  ("reg'PSR",
24303                                                                   F32,
24304                                                                   Var("v",
24305                                                                       CTy"PSR")),
24306                                                                qTy),
24307                                                             Close
24308                                                               (Var("v",
24309                                                                    F32),
24310                                                                MU(TP[Var("v",
24311                                                                          F32),
24312                                                                      Var("d",
24313                                                                          F4)],
24314                                                                   qTy))),
24315                                                          Close
24316                                                            (Var("v",
24317                                                                 PTy(F32,
24318                                                                     F4)),
24319                                                             Call
24320                                                               ("write'R",
24321                                                                ATy(qTy,
24322                                                                    PTy(uTy,
24323                                                                        qTy)),
24324                                                                Var("v",
24325                                                                    PTy(F32,
24326                                                                        F4)))))))),
24327                                                (LW(16,5),
24328                                                 MB(MR(Close
24329                                                         (qVar"s",
24330                                                          Dest
24331                                                            ("SPSR_irq",
24332                                                             CTy"PSR",
24333                                                             qVar"s"))),
24334                                                    Close
24335                                                      (Var("v",CTy"PSR"),
24336                                                       MB(MB(MU(Call
24337                                                                  ("reg'PSR",
24338                                                                   F32,
24339                                                                   Var("v",
24340                                                                       CTy"PSR")),
24341                                                                qTy),
24342                                                             Close
24343                                                               (Var("v",
24344                                                                    F32),
24345                                                                MU(TP[Var("v",
24346                                                                          F32),
24347                                                                      Var("d",
24348                                                                          F4)],
24349                                                                   qTy))),
24350                                                          Close
24351                                                            (Var("v",
24352                                                                 PTy(F32,
24353                                                                     F4)),
24354                                                             Call
24355                                                               ("write'R",
24356                                                                ATy(qTy,
24357                                                                    PTy(uTy,
24358                                                                        qTy)),
24359                                                                Var("v",
24360                                                                    PTy(F32,
24361                                                                        F4)))))))),
24362                                                (LW(18,5),
24363                                                 MB(MR(Close
24364                                                         (qVar"s",
24365                                                          Dest
24366                                                            ("SPSR_svc",
24367                                                             CTy"PSR",
24368                                                             qVar"s"))),
24369                                                    Close
24370                                                      (Var("v",CTy"PSR"),
24371                                                       MB(MB(MU(Call
24372                                                                  ("reg'PSR",
24373                                                                   F32,
24374                                                                   Var("v",
24375                                                                       CTy"PSR")),
24376                                                                qTy),
24377                                                             Close
24378                                                               (Var("v",
24379                                                                    F32),
24380                                                                MU(TP[Var("v",
24381                                                                          F32),
24382                                                                      Var("d",
24383                                                                          F4)],
24384                                                                   qTy))),
24385                                                          Close
24386                                                            (Var("v",
24387                                                                 PTy(F32,
24388                                                                     F4)),
24389                                                             Call
24390                                                               ("write'R",
24391                                                                ATy(qTy,
24392                                                                    PTy(uTy,
24393                                                                        qTy)),
24394                                                                Var("v",
24395                                                                    PTy(F32,
24396                                                                        F4)))))))),
24397                                                (LW(20,5),
24398                                                 MB(MR(Close
24399                                                         (qVar"s",
24400                                                          Dest
24401                                                            ("SPSR_abt",
24402                                                             CTy"PSR",
24403                                                             qVar"s"))),
24404                                                    Close
24405                                                      (Var("v",CTy"PSR"),
24406                                                       MB(MB(MU(Call
24407                                                                  ("reg'PSR",
24408                                                                   F32,
24409                                                                   Var("v",
24410                                                                       CTy"PSR")),
24411                                                                qTy),
24412                                                             Close
24413                                                               (Var("v",
24414                                                                    F32),
24415                                                                MU(TP[Var("v",
24416                                                                          F32),
24417                                                                      Var("d",
24418                                                                          F4)],
24419                                                                   qTy))),
24420                                                          Close
24421                                                            (Var("v",
24422                                                                 PTy(F32,
24423                                                                     F4)),
24424                                                             Call
24425                                                               ("write'R",
24426                                                                ATy(qTy,
24427                                                                    PTy(uTy,
24428                                                                        qTy)),
24429                                                                Var("v",
24430                                                                    PTy(F32,
24431                                                                        F4)))))))),
24432                                                (LW(22,5),
24433                                                 MB(MR(Close
24434                                                         (qVar"s",
24435                                                          Dest
24436                                                            ("SPSR_und",
24437                                                             CTy"PSR",
24438                                                             qVar"s"))),
24439                                                    Close
24440                                                      (Var("v",CTy"PSR"),
24441                                                       MB(MB(MU(Call
24442                                                                  ("reg'PSR",
24443                                                                   F32,
24444                                                                   Var("v",
24445                                                                       CTy"PSR")),
24446                                                                qTy),
24447                                                             Close
24448                                                               (Var("v",
24449                                                                    F32),
24450                                                                MU(TP[Var("v",
24451                                                                          F32),
24452                                                                      Var("d",
24453                                                                          F4)],
24454                                                                   qTy))),
24455                                                          Close
24456                                                            (Var("v",
24457                                                                 PTy(F32,
24458                                                                     F4)),
24459                                                             Call
24460                                                               ("write'R",
24461                                                                ATy(qTy,
24462                                                                    PTy(uTy,
24463                                                                        qTy)),
24464                                                                Var("v",
24465                                                                    PTy(F32,
24466                                                                        F4)))))))),
24467                                                (LW(28,5),
24468                                                 MB(MR(Close
24469                                                         (qVar"s",
24470                                                          Dest
24471                                                            ("SPSR_mon",
24472                                                             CTy"PSR",
24473                                                             qVar"s"))),
24474                                                    Close
24475                                                      (Var("v",CTy"PSR"),
24476                                                       MB(MB(MU(Call
24477                                                                  ("reg'PSR",
24478                                                                   F32,
24479                                                                   Var("v",
24480                                                                       CTy"PSR")),
24481                                                                qTy),
24482                                                             Close
24483                                                               (Var("v",
24484                                                                    F32),
24485                                                                MU(TP[Var("v",
24486                                                                          F32),
24487                                                                      Var("d",
24488                                                                          F4)],
24489                                                                   qTy))),
24490                                                          Close
24491                                                            (Var("v",
24492                                                                 PTy(F32,
24493                                                                     F4)),
24494                                                             Call
24495                                                               ("write'R",
24496                                                                ATy(qTy,
24497                                                                    PTy(uTy,
24498                                                                        qTy)),
24499                                                                Var("v",
24500                                                                    PTy(F32,
24501                                                                        F4)))))))),
24502                                                (LW(30,5),
24503                                                 MB(MR(Close
24504                                                         (qVar"s",
24505                                                          Dest
24506                                                            ("SPSR_hyp",
24507                                                             CTy"PSR",
24508                                                             qVar"s"))),
24509                                                    Close
24510                                                      (Var("v",CTy"PSR"),
24511                                                       MB(MB(MU(Call
24512                                                                  ("reg'PSR",
24513                                                                   F32,
24514                                                                   Var("v",
24515                                                                       CTy"PSR")),
24516                                                                qTy),
24517                                                             Close
24518                                                               (Var("v",
24519                                                                    F32),
24520                                                                MU(TP[Var("v",
24521                                                                          F32),
24522                                                                      Var("d",
24523                                                                          F4)],
24524                                                                   qTy))),
24525                                                          Close
24526                                                            (Var("v",
24527                                                                 PTy(F32,
24528                                                                     F4)),
24529                                                             Call
24530                                                               ("write'R",
24531                                                                ATy(qTy,
24532                                                                    PTy(uTy,
24533                                                                        qTy)),
24534                                                                Var("v",
24535                                                                    PTy(F32,
24536                                                                        F4)))))))),
24537                                                (AVar(FTy 5),MU(LU,qTy))]))),
24538                                      MB(Call
24539                                           ("BankedRegisterAccessValid",
24540                                            ATy(qTy,PTy(uTy,qTy)),
24541                                            TP[Var("SYSm",FTy 5),
24542                                               Var("mode",FTy 5)]),
24543                                         Close
24544                                           (AVar uTy,
24545                                            ITB([(EQ(EX(Var("SYSm",FTy 5),
24546                                                        LN 4,LN 3,FTy 2),
24547                                                     LW(0,2)),
24548                                                  MB(Call
24549                                                       ("Rmode",
24550                                                        ATy(qTy,
24551                                                            PTy(F32,qTy)),
24552                                                        TP[Bop(Add,
24553                                                               Mop(Cast F4,
24554                                                                   EX(Var("SYSm",
24555                                                                          FTy 5),
24556                                                                      LN 2,
24557                                                                      LN 0,
24558                                                                      FTy 3)),
24559                                                               LW(8,4)),
24560                                                           LW(16,5)]),
24561                                                     Close
24562                                                       (Var("v",F32),
24563                                                        MB(MU(TP[Var("v",
24564                                                                     F32),
24565                                                                 Var("d",
24566                                                                     F4)],
24567                                                              qTy),
24568                                                           Close
24569                                                             (Var("v",
24570                                                                  PTy(F32,
24571                                                                      F4)),
24572                                                              Call
24573                                                                ("write'R",
24574                                                                 ATy(qTy,
24575                                                                     PTy(uTy,
24576                                                                         qTy)),
24577                                                                 Var("v",
24578                                                                     PTy(F32,
24579                                                                         F4)))))))),
24580                                                 (EQ(EX(Var("SYSm",FTy 5),
24581                                                        LN 4,LN 3,FTy 2),
24582                                                     LW(1,2)),
24583                                                  MB(Call
24584                                                       ("Rmode",
24585                                                        ATy(qTy,
24586                                                            PTy(F32,qTy)),
24587                                                        TP[Bop(Add,
24588                                                               Mop(Cast F4,
24589                                                                   EX(Var("SYSm",
24590                                                                          FTy 5),
24591                                                                      LN 2,
24592                                                                      LN 0,
24593                                                                      FTy 3)),
24594                                                               LW(8,4)),
24595                                                           LW(17,5)]),
24596                                                     Close
24597                                                       (Var("v",F32),
24598                                                        MB(MU(TP[Var("v",
24599                                                                     F32),
24600                                                                 Var("d",
24601                                                                     F4)],
24602                                                              qTy),
24603                                                           Close
24604                                                             (Var("v",
24605                                                                  PTy(F32,
24606                                                                      F4)),
24607                                                              Call
24608                                                                ("write'R",
24609                                                                 ATy(qTy,
24610                                                                     PTy(uTy,
24611                                                                         qTy)),
24612                                                                 Var("v",
24613                                                                     PTy(F32,
24614                                                                         F4)))))))),
24615                                                 (EQ(EX(Var("SYSm",FTy 5),
24616                                                        LN 4,LN 3,FTy 2),
24617                                                     LW(3,2)),
24618                                                  ITB([(Mop(Not,
24619                                                            Bop(Bit,
24620                                                                Var("SYSm",
24621                                                                    FTy 5),
24622                                                                LN 1)),
24623                                                        MB(Call
24624                                                             ("Rmode",
24625                                                              ATy(qTy,
24626                                                                  PTy(F32,
24627                                                                      qTy)),
24628                                                              TP[Bop(Add,
24629                                                                     Mop(Cast
24630                                                                           F4,
24631                                                                         Bop(Bit,
24632                                                                             Var("SYSm",
24633                                                                                 FTy 5),
24634                                                                             LN
24635                                                                              0)),
24636                                                                     LW(13,
24637                                                                        4)),
24638                                                                 LW(22,5)]),
24639                                                           Close
24640                                                             (Var("v",F32),
24641                                                              MB(MU(TP[Var("v",
24642                                                                           F32),
24643                                                                       Var("d",
24644                                                                           F4)],
24645                                                                    qTy),
24646                                                                 Close
24647                                                                   (Var("v",
24648                                                                        PTy(F32,
24649                                                                            F4)),
24650                                                                    Call
24651                                                                      ("write'R",
24652                                                                       ATy(qTy,
24653                                                                           PTy(uTy,
24654                                                                               qTy)),
24655                                                                       Var("v",
24656                                                                           PTy(F32,
24657                                                                               F4)))))))),
24658                                                       (Mop(Not,
24659                                                            Bop(Bit,
24660                                                                Var("SYSm",
24661                                                                    FTy 5),
24662                                                                LN 0)),
24663                                                        MB(Call
24664                                                             ("Rmode",
24665                                                              ATy(qTy,
24666                                                                  PTy(F32,
24667                                                                      qTy)),
24668                                                              TP[LW(13,4),
24669                                                                 LW(26,5)]),
24670                                                           Close
24671                                                             (Var("v",F32),
24672                                                              MB(MU(TP[Var("v",
24673                                                                           F32),
24674                                                                       Var("d",
24675                                                                           F4)],
24676                                                                    qTy),
24677                                                                 Close
24678                                                                   (Var("v",
24679                                                                        PTy(F32,
24680                                                                            F4)),
24681                                                                    Call
24682                                                                      ("write'R",
24683                                                                       ATy(qTy,
24684                                                                           PTy(uTy,
24685                                                                               qTy)),
24686                                                                       Var("v",
24687                                                                           PTy(F32,
24688                                                                               F4))))))))],
24689                                                      MB(MR(Close
24690                                                              (qVar"s",
24691                                                               Dest
24692                                                                 ("ELR_hyp",
24693                                                                  F32,
24694                                                                  qVar"s"))),
24695                                                         Close
24696                                                           (Var("v",F32),
24697                                                            MB(MU(TP[Var("v",
24698                                                                         F32),
24699                                                                     Var("d",
24700                                                                         F4)],
24701                                                                  qTy),
24702                                                               Close
24703                                                                 (Var("v",
24704                                                                      PTy(F32,
24705                                                                          F4)),
24706                                                                  Call
24707                                                                    ("write'R",
24708                                                                     ATy(qTy,
24709                                                                         PTy(uTy,
24710                                                                             qTy)),
24711                                                                     Var("v",
24712                                                                         PTy(F32,
24713                                                                             F4)))))))))],
24714                                                MN(LX(FTy 5),
24715                                                   MB(MR(Close
24716                                                           (Var("s",
24717                                                                PTy(FTy 5,
24718                                                                    qTy)),
24719                                                            Mop(Fst,
24720                                                                Var("s",
24721                                                                    PTy(FTy 5,
24722                                                                        qTy))))),
24723                                                      Close
24724                                                        (Var("v",FTy 5),
24725                                                         MB(MB(MU(BFI(LN 0,
24726                                                                      LN 0,
24727                                                                      Mop(Cast
24728                                                                            F1,
24729                                                                          Bop(Or,
24730                                                                              Bop(Bit,
24731                                                                                  Var("SYSm",
24732                                                                                      FTy 5),
24733                                                                                  LN
24734                                                                                   2),
24735                                                                              Bop(Bit,
24736                                                                                  Var("SYSm",
24737                                                                                      FTy 5),
24738                                                                                  LN
24739                                                                                   1))),
24740                                                                      Var("v",
24741                                                                          FTy 5)),
24742                                                                  PTy(FTy 5,
24743                                                                      qTy)),
24744                                                               Close
24745                                                                 (Var("v",
24746                                                                      FTy 5),
24747                                                                  MW(Close
24748                                                                       (Var("s",
24749                                                                            PTy(FTy 5,
24750                                                                                qTy)),
24751                                                                        TP[Var("v",
24752                                                                               FTy 5),
24753                                                                           Mop(Snd,
24754                                                                               Var("s",
24755                                                                                   PTy(FTy 5,
24756                                                                                       qTy)))])))),
24757                                                            Close
24758                                                              (AVar uTy,
24759                                                               MB(MR(Close
24760                                                                       (Var("s",
24761                                                                            PTy(FTy 5,
24762                                                                                qTy)),
24763                                                                        Mop(Fst,
24764                                                                            Var("s",
24765                                                                                PTy(FTy 5,
24766                                                                                    qTy))))),
24767                                                                  Close
24768                                                                    (Var("v",
24769                                                                         FTy 5),
24770                                                                     MB(MB(MU(BFI(LN
24771                                                                                   1,
24772                                                                                  LN
24773                                                                                   1,
24774                                                                                  Mop(Cast
24775                                                                                        F1,
24776                                                                                      LT),
24777                                                                                  Var("v",
24778                                                                                      FTy 5)),
24779                                                                              PTy(FTy 5,
24780                                                                                  qTy)),
24781                                                                           Close
24782                                                                             (Var("v",
24783                                                                                  FTy 5),
24784                                                                              MW(Close
24785                                                                                   (Var("s",
24786                                                                                        PTy(FTy 5,
24787                                                                                            qTy)),
24788                                                                                    TP[Var("v",
24789                                                                                           FTy 5),
24790                                                                                       Mop(Snd,
24791                                                                                           Var("s",
24792                                                                                               PTy(FTy 5,
24793                                                                                                   qTy)))])))),
24794                                                                        Close
24795                                                                          (AVar
24796                                                                             uTy,
24797                                                                           MB(MR(Close
24798                                                                                   (Var("s",
24799                                                                                        PTy(FTy 5,
24800                                                                                            qTy)),
24801                                                                                    Mop(Fst,
24802                                                                                        Var("s",
24803                                                                                            PTy(FTy 5,
24804                                                                                                qTy))))),
24805                                                                              Close
24806                                                                                (Var("v",
24807                                                                                     FTy 5),
24808                                                                                 MB(MB(MU(BFI(LN
24809                                                                                               2,
24810                                                                                              LN
24811                                                                                               2,
24812                                                                                              Mop(Cast
24813                                                                                                    F1,
24814                                                                                                  Bop(And,
24815                                                                                                      Bop(Bit,
24816                                                                                                          Var("SYSm",
24817                                                                                                              FTy 5),
24818                                                                                                          LN
24819                                                                                                           2),
24820                                                                                                      Mop(Not,
24821                                                                                                          Bop(Bit,
24822                                                                                                              Var("SYSm",
24823                                                                                                                  FTy 5),
24824                                                                                                              LN
24825                                                                                                               1)))),
24826                                                                                              Var("v",
24827                                                                                                  FTy 5)),
24828                                                                                          PTy(FTy 5,
24829                                                                                              qTy)),
24830                                                                                       Close
24831                                                                                         (Var("v",
24832                                                                                              FTy 5),
24833                                                                                          MW(Close
24834                                                                                               (Var("s",
24835                                                                                                    PTy(FTy 5,
24836                                                                                                        qTy)),
24837                                                                                                TP[Var("v",
24838                                                                                                       FTy 5),
24839                                                                                                   Mop(Snd,
24840                                                                                                       Var("s",
24841                                                                                                           PTy(FTy 5,
24842                                                                                                               qTy)))])))),
24843                                                                                    Close
24844                                                                                      (AVar
24845                                                                                         uTy,
24846                                                                                       MB(MR(Close
24847                                                                                               (Var("s",
24848                                                                                                    PTy(FTy 5,
24849                                                                                                        qTy)),
24850                                                                                                Mop(Fst,
24851                                                                                                    Var("s",
24852                                                                                                        PTy(FTy 5,
24853                                                                                                            qTy))))),
24854                                                                                          Close
24855                                                                                            (Var("v",
24856                                                                                                 FTy 5),
24857                                                                                             MB(MB(MU(BFI(LN
24858                                                                                                           3,
24859                                                                                                          LN
24860                                                                                                           3,
24861                                                                                                          Mop(Cast
24862                                                                                                                F1,
24863                                                                                                              Bop(And,
24864                                                                                                                  Bop(Bit,
24865                                                                                                                      Var("SYSm",
24866                                                                                                                          FTy 5),
24867                                                                                                                      LN
24868                                                                                                                       2),
24869                                                                                                                  Bop(Bit,
24870                                                                                                                      Var("SYSm",
24871                                                                                                                          FTy 5),
24872                                                                                                                      LN
24873                                                                                                                       1))),
24874                                                                                                          Var("v",
24875                                                                                                              FTy 5)),
24876                                                                                                      PTy(FTy 5,
24877                                                                                                          qTy)),
24878                                                                                                   Close
24879                                                                                                     (Var("v",
24880                                                                                                          FTy 5),
24881                                                                                                      MW(Close
24882                                                                                                           (Var("s",
24883                                                                                                                PTy(FTy 5,
24884                                                                                                                    qTy)),
24885                                                                                                            TP[Var("v",
24886                                                                                                                   FTy 5),
24887                                                                                                               Mop(Snd,
24888                                                                                                                   Var("s",
24889                                                                                                                       PTy(FTy 5,
24890                                                                                                                           qTy)))])))),
24891                                                                                                Close
24892                                                                                                  (AVar
24893                                                                                                     uTy,
24894                                                                                                   MB(MR(Close
24895                                                                                                           (Var("s",
24896                                                                                                                PTy(FTy 5,
24897                                                                                                                    qTy)),
24898                                                                                                            Mop(Fst,
24899                                                                                                                Var("s",
24900                                                                                                                    PTy(FTy 5,
24901                                                                                                                        qTy))))),
24902                                                                                                      Close
24903                                                                                                        (Var("v",
24904                                                                                                             FTy 5),
24905                                                                                                         MB(MB(MU(BFI(LN
24906                                                                                                                       4,
24907                                                                                                                      LN
24908                                                                                                                       4,
24909                                                                                                                      Mop(Cast
24910                                                                                                                            F1,
24911                                                                                                                          LT),
24912                                                                                                                      Var("v",
24913                                                                                                                          FTy 5)),
24914                                                                                                                  PTy(FTy 5,
24915                                                                                                                      qTy)),
24916                                                                                                               Close
24917                                                                                                                 (Var("v",
24918                                                                                                                      FTy 5),
24919                                                                                                                  MW(Close
24920                                                                                                                       (Var("s",
24921                                                                                                                            PTy(FTy 5,
24922                                                                                                                                qTy)),
24923                                                                                                                        TP[Var("v",
24924                                                                                                                               FTy 5),
24925                                                                                                                           Mop(Snd,
24926                                                                                                                               Var("s",
24927                                                                                                                                   PTy(FTy 5,
24928                                                                                                                                       qTy)))])))),
24929                                                                                                            Close
24930                                                                                                              (AVar
24931                                                                                                                 uTy,
24932                                                                                                               MB(MR(Close
24933                                                                                                                       (Var("s",
24934                                                                                                                            PTy(FTy 5,
24935                                                                                                                                qTy)),
24936                                                                                                                        Mop(Fst,
24937                                                                                                                            Var("s",
24938                                                                                                                                PTy(FTy 5,
24939                                                                                                                                    qTy))))),
24940                                                                                                                  Close
24941                                                                                                                    (Var("v",
24942                                                                                                                         FTy 5),
24943                                                                                                                     MB(MU(EQ(Var("mode",
24944                                                                                                                                  FTy 5),
24945                                                                                                                              Var("v",
24946                                                                                                                                  FTy 5)),
24947                                                                                                                           PTy(FTy 5,
24948                                                                                                                               qTy)),
24949                                                                                                                        Close
24950                                                                                                                          (bVar"b",
24951                                                                                                                           ITE(bVar"b",
24952                                                                                                                               MD(Call
24953                                                                                                                                    ("raise'exception",
24954                                                                                                                                     ATy(qTy,
24955                                                                                                                                         PTy(uTy,
24956                                                                                                                                             qTy)),
24957                                                                                                                                     Call
24958                                                                                                                                       ("UNPREDICTABLE",
24959                                                                                                                                        CTy"exception",
24960                                                                                                                                        LS
24961                                                                                                                                         "MoveToRegisterFromBankedOrSpecial")),
24962                                                                                                                                  FTy 5),
24963                                                                                                                               MB(MR(Close
24964                                                                                                                                       (Var("s",
24965                                                                                                                                            PTy(FTy 5,
24966                                                                                                                                                qTy)),
24967                                                                                                                                        Mop(Fst,
24968                                                                                                                                            Var("s",
24969                                                                                                                                                PTy(FTy 5,
24970                                                                                                                                                    qTy))))),
24971                                                                                                                                  Close
24972                                                                                                                                    (Var("v",
24973                                                                                                                                         FTy 5),
24974                                                                                                                                     MB(MB(MB(MU(TP[Bop(Add,
24975                                                                                                                                                        Mop(Cast
24976                                                                                                                                                              F4,
24977                                                                                                                                                            Bop(Bit,
24978                                                                                                                                                                Var("SYSm",
24979                                                                                                                                                                    FTy 5),
24980                                                                                                                                                                LN
24981                                                                                                                                                                 0)),
24982                                                                                                                                                        LW(13,
24983                                                                                                                                                           4)),
24984                                                                                                                                                    Var("v",
24985                                                                                                                                                        FTy 5)],
24986                                                                                                                                                 PTy(FTy 5,
24987                                                                                                                                                     qTy)),
24988                                                                                                                                              Close
24989                                                                                                                                                (Var("v",
24990                                                                                                                                                     PTy(F4,
24991                                                                                                                                                         FTy 5)),
24992                                                                                                                                                 MD(Call
24993                                                                                                                                                      ("Rmode",
24994                                                                                                                                                       ATy(qTy,
24995                                                                                                                                                           PTy(F32,
24996                                                                                                                                                               qTy)),
24997                                                                                                                                                       Var("v",
24998                                                                                                                                                           PTy(F4,
24999                                                                                                                                                               FTy 5))),
25000                                                                                                                                                    FTy 5))),
25001                                                                                                                                           Close
25002                                                                                                                                             (Var("v",
25003                                                                                                                                                  F32),
25004                                                                                                                                              MU(TP[Var("v",
25005                                                                                                                                                        F32),
25006                                                                                                                                                    Var("d",
25007                                                                                                                                                        F4)],
25008                                                                                                                                                 PTy(FTy 5,
25009                                                                                                                                                     qTy)))),
25010                                                                                                                                        Close
25011                                                                                                                                          (Var("v",
25012                                                                                                                                               PTy(F32,
25013                                                                                                                                                   F4)),
25014                                                                                                                                           MD(Call
25015                                                                                                                                                ("write'R",
25016                                                                                                                                                 ATy(qTy,
25017                                                                                                                                                     PTy(uTy,
25018                                                                                                                                                         qTy)),
25019                                                                                                                                                 Var("v",
25020                                                                                                                                                     PTy(F32,
25021                                                                                                                                                         F4))),
25022                                                                                                                                              FTy 5)))))))))))))))))))))))))))))))))))))))))),
25023            Close(AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))))
25024;
25025val dfn'MoveToSpecialFromImmediate_def = Def
25026  ("dfn'MoveToSpecialFromImmediate",
25027   TP[bVar"write_spsr",Var("imm32",F32),Var("mask",F4)],
25028   MB(ITE(bVar"write_spsr",
25029          Call
25030            ("SPSRWriteByInstr",ATy(qTy,PTy(uTy,qTy)),
25031             TP[Var("imm32",F32),Var("mask",F4)]),
25032          MB(Call
25033               ("CPSRWriteByInstr",ATy(qTy,PTy(uTy,qTy)),
25034                TP[Var("imm32",F32),Var("mask",F4),LF]),
25035             Close
25036               (AVar uTy,
25037                MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
25038                   Close
25039                     (Var("v",CTy"PSR"),
25040                      MB(MB(MB(MU(Dest("M",FTy 5,Var("v",CTy"PSR")),qTy),
25041                               Close
25042                                 (Var("v",FTy 5),
25043                                  MU(EQ(Var("v",FTy 5),LW(26,5)),qTy))),
25044                            Close
25045                              (bVar"b",
25046                               ITE(bVar"b",
25047                                   MB(Call
25048                                        ("CurrentInstrSet",
25049                                         ATy(qTy,PTy(CTy"InstrSet",qTy)),
25050                                         LU),
25051                                      Close
25052                                        (Var("v",CTy"InstrSet"),
25053                                         MU(EQ(Var("v",CTy"InstrSet"),
25054                                               LC("InstrSet_ThumbEE",
25055                                                  CTy"InstrSet")),qTy))),
25056                                   MU(LF,qTy)))),
25057                         Close
25058                           (bVar"b",
25059                            ITE(bVar"b",
25060                                Call
25061                                  ("raise'exception",
25062                                   ATy(qTy,PTy(uTy,qTy)),
25063                                   Call
25064                                     ("UNPREDICTABLE",CTy"exception",
25065                                      LS"MoveToSpecialFromImmediate")),
25066                                MU(LU,qTy))))))))),
25067      Close(AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))
25068;
25069val dfn'MoveToSpecialFromRegister_def = Def
25070  ("dfn'MoveToSpecialFromRegister",
25071   TP[bVar"write_spsr",Var("n",F4),Var("mask",F4)],
25072   MB(ITE(bVar"write_spsr",
25073          MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
25074             Close
25075               (Var("v",F32),
25076                MB(MU(TP[Var("v",F32),Var("mask",F4)],qTy),
25077                   Close
25078                     (Var("v",PTy(F32,F4)),
25079                      Call
25080                        ("SPSRWriteByInstr",ATy(qTy,PTy(uTy,qTy)),
25081                         Var("v",PTy(F32,F4))))))),
25082          MB(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
25083             Close
25084               (Var("v",F32),
25085                MB(MB(MU(TP[Var("v",F32),Var("mask",F4),LF],qTy),
25086                      Close
25087                        (Var("v",PTy(F32,PTy(F4,bTy))),
25088                         Call
25089                           ("CPSRWriteByInstr",ATy(qTy,PTy(uTy,qTy)),
25090                            Var("v",PTy(F32,PTy(F4,bTy)))))),
25091                   Close
25092                     (AVar uTy,
25093                      MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
25094                         Close
25095                           (Var("v",CTy"PSR"),
25096                            MB(MB(MB(MU(Dest("M",FTy 5,Var("v",CTy"PSR")),
25097                                        qTy),
25098                                     Close
25099                                       (Var("v",FTy 5),
25100                                        MU(EQ(Var("v",FTy 5),LW(26,5)),qTy))),
25101                                  Close
25102                                    (bVar"b",
25103                                     ITE(bVar"b",
25104                                         MB(Call
25105                                              ("CurrentInstrSet",
25106                                               ATy(qTy,
25107                                                   PTy(CTy"InstrSet",qTy)),
25108                                               LU),
25109                                            Close
25110                                              (Var("v",CTy"InstrSet"),
25111                                               MU(EQ(Var("v",CTy"InstrSet"),
25112                                                     LC("InstrSet_ThumbEE",
25113                                                        CTy"InstrSet")),
25114                                                  qTy))),MU(LF,qTy)))),
25115                               Close
25116                                 (bVar"b",
25117                                  ITE(bVar"b",
25118                                      Call
25119                                        ("raise'exception",
25120                                         ATy(qTy,PTy(uTy,qTy)),
25121                                         Call
25122                                           ("UNPREDICTABLE",
25123                                            CTy"exception",
25124                                            LS"MoveToSpecialFromRegister")),
25125                                      MU(LU,qTy))))))))))),
25126      Close(AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))
25127;
25128val dfn'MoveToBankedOrSpecialRegister_def = Def
25129  ("dfn'MoveToBankedOrSpecialRegister",
25130   TP[bVar"write_spsr",Var("SYSm",FTy 5),Var("n",F4)],
25131   MB(Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU),
25132      Close
25133        (bVar"v",
25134         MB(MU(Mop(Not,bVar"v"),qTy),
25135            Close
25136              (bVar"b",
25137               ITE(bVar"b",
25138                   Call
25139                     ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
25140                      Call
25141                        ("UNPREDICTABLE",CTy"exception",
25142                         LS"MoveToBankedOrSpecialRegister")),
25143                   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
25144                      Close
25145                        (Var("v",CTy"PSR"),
25146                         MB(MU(Dest("M",FTy 5,Var("v",CTy"PSR")),qTy),
25147                            Close
25148                              (Var("mode",FTy 5),
25149                               MB(ITE(bVar"write_spsr",
25150                                      MB(Call
25151                                           ("SPSRAccessValid",
25152                                            ATy(qTy,PTy(uTy,qTy)),
25153                                            TP[Var("SYSm",FTy 5),
25154                                               Var("mode",FTy 5)]),
25155                                         Close
25156                                           (uVar"_0",
25157                                            CS(Var("SYSm",FTy 5),
25158                                               [(LW(14,5),
25159                                                 MB(MR(Close
25160                                                         (qVar"s",
25161                                                          Dest
25162                                                            ("SPSR_fiq",
25163                                                             CTy"PSR",
25164                                                             qVar"s"))),
25165                                                    Close
25166                                                      (Var("v",CTy"PSR"),
25167                                                       MB(MB(MB(Call
25168                                                                  ("R",
25169                                                                   ATy(qTy,
25170                                                                       PTy(F32,
25171                                                                           qTy)),
25172                                                                   Var("n",
25173                                                                       F4)),
25174                                                                Close
25175                                                                  (Var("v0",
25176                                                                       F32),
25177                                                                   MU(TP[Var("v",
25178                                                                             CTy"PSR"),
25179                                                                         Var("v0",
25180                                                                             F32)],
25181                                                                      qTy))),
25182                                                             Close
25183                                                               (Var("v",
25184                                                                    PTy(CTy"PSR",
25185                                                                        F32)),
25186                                                                MU(Call
25187                                                                     ("write'reg'PSR",
25188                                                                      CTy"PSR",
25189                                                                      Var("v",
25190                                                                          PTy(CTy"PSR",
25191                                                                              F32))),
25192                                                                   qTy))),
25193                                                          Close
25194                                                            (Var("v",
25195                                                                 CTy"PSR"),
25196                                                             MW(Close
25197                                                                  (qVar"s",
25198                                                                   Rupd
25199                                                                     ("SPSR_fiq",
25200                                                                      TP[qVar"s",
25201                                                                         Var("v",
25202                                                                             CTy"PSR")])))))))),
25203                                                (LW(16,5),
25204                                                 MB(MR(Close
25205                                                         (qVar"s",
25206                                                          Dest
25207                                                            ("SPSR_irq",
25208                                                             CTy"PSR",
25209                                                             qVar"s"))),
25210                                                    Close
25211                                                      (Var("v",CTy"PSR"),
25212                                                       MB(MB(MB(Call
25213                                                                  ("R",
25214                                                                   ATy(qTy,
25215                                                                       PTy(F32,
25216                                                                           qTy)),
25217                                                                   Var("n",
25218                                                                       F4)),
25219                                                                Close
25220                                                                  (Var("v0",
25221                                                                       F32),
25222                                                                   MU(TP[Var("v",
25223                                                                             CTy"PSR"),
25224                                                                         Var("v0",
25225                                                                             F32)],
25226                                                                      qTy))),
25227                                                             Close
25228                                                               (Var("v",
25229                                                                    PTy(CTy"PSR",
25230                                                                        F32)),
25231                                                                MU(Call
25232                                                                     ("write'reg'PSR",
25233                                                                      CTy"PSR",
25234                                                                      Var("v",
25235                                                                          PTy(CTy"PSR",
25236                                                                              F32))),
25237                                                                   qTy))),
25238                                                          Close
25239                                                            (Var("v",
25240                                                                 CTy"PSR"),
25241                                                             MW(Close
25242                                                                  (qVar"s",
25243                                                                   Rupd
25244                                                                     ("SPSR_irq",
25245                                                                      TP[qVar"s",
25246                                                                         Var("v",
25247                                                                             CTy"PSR")])))))))),
25248                                                (LW(18,5),
25249                                                 MB(MR(Close
25250                                                         (qVar"s",
25251                                                          Dest
25252                                                            ("SPSR_svc",
25253                                                             CTy"PSR",
25254                                                             qVar"s"))),
25255                                                    Close
25256                                                      (Var("v",CTy"PSR"),
25257                                                       MB(MB(MB(Call
25258                                                                  ("R",
25259                                                                   ATy(qTy,
25260                                                                       PTy(F32,
25261                                                                           qTy)),
25262                                                                   Var("n",
25263                                                                       F4)),
25264                                                                Close
25265                                                                  (Var("v0",
25266                                                                       F32),
25267                                                                   MU(TP[Var("v",
25268                                                                             CTy"PSR"),
25269                                                                         Var("v0",
25270                                                                             F32)],
25271                                                                      qTy))),
25272                                                             Close
25273                                                               (Var("v",
25274                                                                    PTy(CTy"PSR",
25275                                                                        F32)),
25276                                                                MU(Call
25277                                                                     ("write'reg'PSR",
25278                                                                      CTy"PSR",
25279                                                                      Var("v",
25280                                                                          PTy(CTy"PSR",
25281                                                                              F32))),
25282                                                                   qTy))),
25283                                                          Close
25284                                                            (Var("v",
25285                                                                 CTy"PSR"),
25286                                                             MW(Close
25287                                                                  (qVar"s",
25288                                                                   Rupd
25289                                                                     ("SPSR_svc",
25290                                                                      TP[qVar"s",
25291                                                                         Var("v",
25292                                                                             CTy"PSR")])))))))),
25293                                                (LW(20,5),
25294                                                 MB(MR(Close
25295                                                         (qVar"s",
25296                                                          Dest
25297                                                            ("SPSR_abt",
25298                                                             CTy"PSR",
25299                                                             qVar"s"))),
25300                                                    Close
25301                                                      (Var("v",CTy"PSR"),
25302                                                       MB(MB(MB(Call
25303                                                                  ("R",
25304                                                                   ATy(qTy,
25305                                                                       PTy(F32,
25306                                                                           qTy)),
25307                                                                   Var("n",
25308                                                                       F4)),
25309                                                                Close
25310                                                                  (Var("v0",
25311                                                                       F32),
25312                                                                   MU(TP[Var("v",
25313                                                                             CTy"PSR"),
25314                                                                         Var("v0",
25315                                                                             F32)],
25316                                                                      qTy))),
25317                                                             Close
25318                                                               (Var("v",
25319                                                                    PTy(CTy"PSR",
25320                                                                        F32)),
25321                                                                MU(Call
25322                                                                     ("write'reg'PSR",
25323                                                                      CTy"PSR",
25324                                                                      Var("v",
25325                                                                          PTy(CTy"PSR",
25326                                                                              F32))),
25327                                                                   qTy))),
25328                                                          Close
25329                                                            (Var("v",
25330                                                                 CTy"PSR"),
25331                                                             MW(Close
25332                                                                  (qVar"s",
25333                                                                   Rupd
25334                                                                     ("SPSR_abt",
25335                                                                      TP[qVar"s",
25336                                                                         Var("v",
25337                                                                             CTy"PSR")])))))))),
25338                                                (LW(22,5),
25339                                                 MB(MR(Close
25340                                                         (qVar"s",
25341                                                          Dest
25342                                                            ("SPSR_und",
25343                                                             CTy"PSR",
25344                                                             qVar"s"))),
25345                                                    Close
25346                                                      (Var("v",CTy"PSR"),
25347                                                       MB(MB(MB(Call
25348                                                                  ("R",
25349                                                                   ATy(qTy,
25350                                                                       PTy(F32,
25351                                                                           qTy)),
25352                                                                   Var("n",
25353                                                                       F4)),
25354                                                                Close
25355                                                                  (Var("v0",
25356                                                                       F32),
25357                                                                   MU(TP[Var("v",
25358                                                                             CTy"PSR"),
25359                                                                         Var("v0",
25360                                                                             F32)],
25361                                                                      qTy))),
25362                                                             Close
25363                                                               (Var("v",
25364                                                                    PTy(CTy"PSR",
25365                                                                        F32)),
25366                                                                MU(Call
25367                                                                     ("write'reg'PSR",
25368                                                                      CTy"PSR",
25369                                                                      Var("v",
25370                                                                          PTy(CTy"PSR",
25371                                                                              F32))),
25372                                                                   qTy))),
25373                                                          Close
25374                                                            (Var("v",
25375                                                                 CTy"PSR"),
25376                                                             MW(Close
25377                                                                  (qVar"s",
25378                                                                   Rupd
25379                                                                     ("SPSR_und",
25380                                                                      TP[qVar"s",
25381                                                                         Var("v",
25382                                                                             CTy"PSR")])))))))),
25383                                                (LW(28,5),
25384                                                 MB(MR(Close
25385                                                         (qVar"s",
25386                                                          Dest
25387                                                            ("SPSR_mon",
25388                                                             CTy"PSR",
25389                                                             qVar"s"))),
25390                                                    Close
25391                                                      (Var("v",CTy"PSR"),
25392                                                       MB(MB(MB(Call
25393                                                                  ("R",
25394                                                                   ATy(qTy,
25395                                                                       PTy(F32,
25396                                                                           qTy)),
25397                                                                   Var("n",
25398                                                                       F4)),
25399                                                                Close
25400                                                                  (Var("v0",
25401                                                                       F32),
25402                                                                   MU(TP[Var("v",
25403                                                                             CTy"PSR"),
25404                                                                         Var("v0",
25405                                                                             F32)],
25406                                                                      qTy))),
25407                                                             Close
25408                                                               (Var("v",
25409                                                                    PTy(CTy"PSR",
25410                                                                        F32)),
25411                                                                MU(Call
25412                                                                     ("write'reg'PSR",
25413                                                                      CTy"PSR",
25414                                                                      Var("v",
25415                                                                          PTy(CTy"PSR",
25416                                                                              F32))),
25417                                                                   qTy))),
25418                                                          Close
25419                                                            (Var("v",
25420                                                                 CTy"PSR"),
25421                                                             MW(Close
25422                                                                  (qVar"s",
25423                                                                   Rupd
25424                                                                     ("SPSR_mon",
25425                                                                      TP[qVar"s",
25426                                                                         Var("v",
25427                                                                             CTy"PSR")])))))))),
25428                                                (LW(30,5),
25429                                                 MB(MR(Close
25430                                                         (qVar"s",
25431                                                          Dest
25432                                                            ("SPSR_hyp",
25433                                                             CTy"PSR",
25434                                                             qVar"s"))),
25435                                                    Close
25436                                                      (Var("v",CTy"PSR"),
25437                                                       MB(MB(MB(Call
25438                                                                  ("R",
25439                                                                   ATy(qTy,
25440                                                                       PTy(F32,
25441                                                                           qTy)),
25442                                                                   Var("n",
25443                                                                       F4)),
25444                                                                Close
25445                                                                  (Var("v0",
25446                                                                       F32),
25447                                                                   MU(TP[Var("v",
25448                                                                             CTy"PSR"),
25449                                                                         Var("v0",
25450                                                                             F32)],
25451                                                                      qTy))),
25452                                                             Close
25453                                                               (Var("v",
25454                                                                    PTy(CTy"PSR",
25455                                                                        F32)),
25456                                                                MU(Call
25457                                                                     ("write'reg'PSR",
25458                                                                      CTy"PSR",
25459                                                                      Var("v",
25460                                                                          PTy(CTy"PSR",
25461                                                                              F32))),
25462                                                                   qTy))),
25463                                                          Close
25464                                                            (Var("v",
25465                                                                 CTy"PSR"),
25466                                                             MW(Close
25467                                                                  (qVar"s",
25468                                                                   Rupd
25469                                                                     ("SPSR_hyp",
25470                                                                      TP[qVar"s",
25471                                                                         Var("v",
25472                                                                             CTy"PSR")])))))))),
25473                                                (AVar(FTy 5),MU(LU,qTy))]))),
25474                                      MB(Call
25475                                           ("BankedRegisterAccessValid",
25476                                            ATy(qTy,PTy(uTy,qTy)),
25477                                            TP[Var("SYSm",FTy 5),
25478                                               Var("mode",FTy 5)]),
25479                                         Close
25480                                           (AVar uTy,
25481                                            ITB([(EQ(EX(Var("SYSm",FTy 5),
25482                                                        LN 4,LN 3,FTy 2),
25483                                                     LW(0,2)),
25484                                                  MB(Call
25485                                                       ("R",
25486                                                        ATy(qTy,
25487                                                            PTy(F32,qTy)),
25488                                                        Var("n",F4)),
25489                                                     Close
25490                                                       (Var("v",F32),
25491                                                        MB(MU(TP[Var("v",
25492                                                                     F32),
25493                                                                 Bop(Add,
25494                                                                     Mop(Cast
25495                                                                           F4,
25496                                                                         EX(Var("SYSm",
25497                                                                                FTy 5),
25498                                                                            LN
25499                                                                             2,
25500                                                                            LN
25501                                                                             0,
25502                                                                            FTy 3)),
25503                                                                     LW(8,
25504                                                                        4)),
25505                                                                 LW(16,5)],
25506                                                              qTy),
25507                                                           Close
25508                                                             (Var("v",
25509                                                                  PTy(F32,
25510                                                                      PTy(F4,
25511                                                                          FTy 5))),
25512                                                              Call
25513                                                                ("write'Rmode",
25514                                                                 ATy(qTy,
25515                                                                     PTy(uTy,
25516                                                                         qTy)),
25517                                                                 Var("v",
25518                                                                     PTy(F32,
25519                                                                         PTy(F4,
25520                                                                             FTy 5))))))))),
25521                                                 (EQ(EX(Var("SYSm",FTy 5),
25522                                                        LN 4,LN 3,FTy 2),
25523                                                     LW(1,2)),
25524                                                  MB(Call
25525                                                       ("R",
25526                                                        ATy(qTy,
25527                                                            PTy(F32,qTy)),
25528                                                        Var("n",F4)),
25529                                                     Close
25530                                                       (Var("v",F32),
25531                                                        MB(MU(TP[Var("v",
25532                                                                     F32),
25533                                                                 Bop(Add,
25534                                                                     Mop(Cast
25535                                                                           F4,
25536                                                                         EX(Var("SYSm",
25537                                                                                FTy 5),
25538                                                                            LN
25539                                                                             2,
25540                                                                            LN
25541                                                                             0,
25542                                                                            FTy 3)),
25543                                                                     LW(8,
25544                                                                        4)),
25545                                                                 LW(17,5)],
25546                                                              qTy),
25547                                                           Close
25548                                                             (Var("v",
25549                                                                  PTy(F32,
25550                                                                      PTy(F4,
25551                                                                          FTy 5))),
25552                                                              Call
25553                                                                ("write'Rmode",
25554                                                                 ATy(qTy,
25555                                                                     PTy(uTy,
25556                                                                         qTy)),
25557                                                                 Var("v",
25558                                                                     PTy(F32,
25559                                                                         PTy(F4,
25560                                                                             FTy 5))))))))),
25561                                                 (EQ(EX(Var("SYSm",FTy 5),
25562                                                        LN 4,LN 3,FTy 2),
25563                                                     LW(3,2)),
25564                                                  ITB([(Mop(Not,
25565                                                            Bop(Bit,
25566                                                                Var("SYSm",
25567                                                                    FTy 5),
25568                                                                LN 1)),
25569                                                        MB(Call
25570                                                             ("R",
25571                                                              ATy(qTy,
25572                                                                  PTy(F32,
25573                                                                      qTy)),
25574                                                              Var("n",F4)),
25575                                                           Close
25576                                                             (Var("v",F32),
25577                                                              MB(MU(TP[Var("v",
25578                                                                           F32),
25579                                                                       Bop(Add,
25580                                                                           Mop(Cast
25581                                                                                 F4,
25582                                                                               Bop(Bit,
25583                                                                                   Var("SYSm",
25584                                                                                       FTy 5),
25585                                                                                   LN
25586                                                                                    0)),
25587                                                                           LW(13,
25588                                                                              4)),
25589                                                                       LW(22,
25590                                                                          5)],
25591                                                                    qTy),
25592                                                                 Close
25593                                                                   (Var("v",
25594                                                                        PTy(F32,
25595                                                                            PTy(F4,
25596                                                                                FTy 5))),
25597                                                                    Call
25598                                                                      ("write'Rmode",
25599                                                                       ATy(qTy,
25600                                                                           PTy(uTy,
25601                                                                               qTy)),
25602                                                                       Var("v",
25603                                                                           PTy(F32,
25604                                                                               PTy(F4,
25605                                                                                   FTy 5))))))))),
25606                                                       (Mop(Not,
25607                                                            Bop(Bit,
25608                                                                Var("SYSm",
25609                                                                    FTy 5),
25610                                                                LN 0)),
25611                                                        MB(Call
25612                                                             ("R",
25613                                                              ATy(qTy,
25614                                                                  PTy(F32,
25615                                                                      qTy)),
25616                                                              Var("n",F4)),
25617                                                           Close
25618                                                             (Var("v",F32),
25619                                                              MB(MU(TP[Var("v",
25620                                                                           F32),
25621                                                                       LW(13,
25622                                                                          4),
25623                                                                       LW(26,
25624                                                                          5)],
25625                                                                    qTy),
25626                                                                 Close
25627                                                                   (Var("v",
25628                                                                        PTy(F32,
25629                                                                            PTy(F4,
25630                                                                                FTy 5))),
25631                                                                    Call
25632                                                                      ("write'Rmode",
25633                                                                       ATy(qTy,
25634                                                                           PTy(uTy,
25635                                                                               qTy)),
25636                                                                       Var("v",
25637                                                                           PTy(F32,
25638                                                                               PTy(F4,
25639                                                                                   FTy 5)))))))))],
25640                                                      MB(Call
25641                                                           ("R",
25642                                                            ATy(qTy,
25643                                                                PTy(F32,
25644                                                                    qTy)),
25645                                                            Var("n",F4)),
25646                                                         Close
25647                                                           (Var("v",F32),
25648                                                            MW(Close
25649                                                                 (qVar"s",
25650                                                                  Rupd
25651                                                                    ("ELR_hyp",
25652                                                                     TP[qVar"s",
25653                                                                        Var("v",
25654                                                                            F32)])))))))],
25655                                                MN(LX(FTy 5),
25656                                                   MB(MR(Close
25657                                                           (Var("s",
25658                                                                PTy(FTy 5,
25659                                                                    qTy)),
25660                                                            Mop(Fst,
25661                                                                Var("s",
25662                                                                    PTy(FTy 5,
25663                                                                        qTy))))),
25664                                                      Close
25665                                                        (Var("v",FTy 5),
25666                                                         MB(MB(MU(BFI(LN 0,
25667                                                                      LN 0,
25668                                                                      Mop(Cast
25669                                                                            F1,
25670                                                                          Bop(Or,
25671                                                                              Bop(Bit,
25672                                                                                  Var("SYSm",
25673                                                                                      FTy 5),
25674                                                                                  LN
25675                                                                                   2),
25676                                                                              Bop(Bit,
25677                                                                                  Var("SYSm",
25678                                                                                      FTy 5),
25679                                                                                  LN
25680                                                                                   1))),
25681                                                                      Var("v",
25682                                                                          FTy 5)),
25683                                                                  PTy(FTy 5,
25684                                                                      qTy)),
25685                                                               Close
25686                                                                 (Var("v",
25687                                                                      FTy 5),
25688                                                                  MW(Close
25689                                                                       (Var("s",
25690                                                                            PTy(FTy 5,
25691                                                                                qTy)),
25692                                                                        TP[Var("v",
25693                                                                               FTy 5),
25694                                                                           Mop(Snd,
25695                                                                               Var("s",
25696                                                                                   PTy(FTy 5,
25697                                                                                       qTy)))])))),
25698                                                            Close
25699                                                              (AVar uTy,
25700                                                               MB(MR(Close
25701                                                                       (Var("s",
25702                                                                            PTy(FTy 5,
25703                                                                                qTy)),
25704                                                                        Mop(Fst,
25705                                                                            Var("s",
25706                                                                                PTy(FTy 5,
25707                                                                                    qTy))))),
25708                                                                  Close
25709                                                                    (Var("v",
25710                                                                         FTy 5),
25711                                                                     MB(MB(MU(BFI(LN
25712                                                                                   1,
25713                                                                                  LN
25714                                                                                   1,
25715                                                                                  Mop(Cast
25716                                                                                        F1,
25717                                                                                      LT),
25718                                                                                  Var("v",
25719                                                                                      FTy 5)),
25720                                                                              PTy(FTy 5,
25721                                                                                  qTy)),
25722                                                                           Close
25723                                                                             (Var("v",
25724                                                                                  FTy 5),
25725                                                                              MW(Close
25726                                                                                   (Var("s",
25727                                                                                        PTy(FTy 5,
25728                                                                                            qTy)),
25729                                                                                    TP[Var("v",
25730                                                                                           FTy 5),
25731                                                                                       Mop(Snd,
25732                                                                                           Var("s",
25733                                                                                               PTy(FTy 5,
25734                                                                                                   qTy)))])))),
25735                                                                        Close
25736                                                                          (AVar
25737                                                                             uTy,
25738                                                                           MB(MR(Close
25739                                                                                   (Var("s",
25740                                                                                        PTy(FTy 5,
25741                                                                                            qTy)),
25742                                                                                    Mop(Fst,
25743                                                                                        Var("s",
25744                                                                                            PTy(FTy 5,
25745                                                                                                qTy))))),
25746                                                                              Close
25747                                                                                (Var("v",
25748                                                                                     FTy 5),
25749                                                                                 MB(MB(MU(BFI(LN
25750                                                                                               2,
25751                                                                                              LN
25752                                                                                               2,
25753                                                                                              Mop(Cast
25754                                                                                                    F1,
25755                                                                                                  Bop(And,
25756                                                                                                      Bop(Bit,
25757                                                                                                          Var("SYSm",
25758                                                                                                              FTy 5),
25759                                                                                                          LN
25760                                                                                                           2),
25761                                                                                                      Mop(Not,
25762                                                                                                          Bop(Bit,
25763                                                                                                              Var("SYSm",
25764                                                                                                                  FTy 5),
25765                                                                                                              LN
25766                                                                                                               1)))),
25767                                                                                              Var("v",
25768                                                                                                  FTy 5)),
25769                                                                                          PTy(FTy 5,
25770                                                                                              qTy)),
25771                                                                                       Close
25772                                                                                         (Var("v",
25773                                                                                              FTy 5),
25774                                                                                          MW(Close
25775                                                                                               (Var("s",
25776                                                                                                    PTy(FTy 5,
25777                                                                                                        qTy)),
25778                                                                                                TP[Var("v",
25779                                                                                                       FTy 5),
25780                                                                                                   Mop(Snd,
25781                                                                                                       Var("s",
25782                                                                                                           PTy(FTy 5,
25783                                                                                                               qTy)))])))),
25784                                                                                    Close
25785                                                                                      (AVar
25786                                                                                         uTy,
25787                                                                                       MB(MR(Close
25788                                                                                               (Var("s",
25789                                                                                                    PTy(FTy 5,
25790                                                                                                        qTy)),
25791                                                                                                Mop(Fst,
25792                                                                                                    Var("s",
25793                                                                                                        PTy(FTy 5,
25794                                                                                                            qTy))))),
25795                                                                                          Close
25796                                                                                            (Var("v",
25797                                                                                                 FTy 5),
25798                                                                                             MB(MB(MU(BFI(LN
25799                                                                                                           3,
25800                                                                                                          LN
25801                                                                                                           3,
25802                                                                                                          Mop(Cast
25803                                                                                                                F1,
25804                                                                                                              Bop(And,
25805                                                                                                                  Bop(Bit,
25806                                                                                                                      Var("SYSm",
25807                                                                                                                          FTy 5),
25808                                                                                                                      LN
25809                                                                                                                       2),
25810                                                                                                                  Bop(Bit,
25811                                                                                                                      Var("SYSm",
25812                                                                                                                          FTy 5),
25813                                                                                                                      LN
25814                                                                                                                       1))),
25815                                                                                                          Var("v",
25816                                                                                                              FTy 5)),
25817                                                                                                      PTy(FTy 5,
25818                                                                                                          qTy)),
25819                                                                                                   Close
25820                                                                                                     (Var("v",
25821                                                                                                          FTy 5),
25822                                                                                                      MW(Close
25823                                                                                                           (Var("s",
25824                                                                                                                PTy(FTy 5,
25825                                                                                                                    qTy)),
25826                                                                                                            TP[Var("v",
25827                                                                                                                   FTy 5),
25828                                                                                                               Mop(Snd,
25829                                                                                                                   Var("s",
25830                                                                                                                       PTy(FTy 5,
25831                                                                                                                           qTy)))])))),
25832                                                                                                Close
25833                                                                                                  (AVar
25834                                                                                                     uTy,
25835                                                                                                   MB(MR(Close
25836                                                                                                           (Var("s",
25837                                                                                                                PTy(FTy 5,
25838                                                                                                                    qTy)),
25839                                                                                                            Mop(Fst,
25840                                                                                                                Var("s",
25841                                                                                                                    PTy(FTy 5,
25842                                                                                                                        qTy))))),
25843                                                                                                      Close
25844                                                                                                        (Var("v",
25845                                                                                                             FTy 5),
25846                                                                                                         MB(MB(MU(BFI(LN
25847                                                                                                                       4,
25848                                                                                                                      LN
25849                                                                                                                       4,
25850                                                                                                                      Mop(Cast
25851                                                                                                                            F1,
25852                                                                                                                          LT),
25853                                                                                                                      Var("v",
25854                                                                                                                          FTy 5)),
25855                                                                                                                  PTy(FTy 5,
25856                                                                                                                      qTy)),
25857                                                                                                               Close
25858                                                                                                                 (Var("v",
25859                                                                                                                      FTy 5),
25860                                                                                                                  MW(Close
25861                                                                                                                       (Var("s",
25862                                                                                                                            PTy(FTy 5,
25863                                                                                                                                qTy)),
25864                                                                                                                        TP[Var("v",
25865                                                                                                                               FTy 5),
25866                                                                                                                           Mop(Snd,
25867                                                                                                                               Var("s",
25868                                                                                                                                   PTy(FTy 5,
25869                                                                                                                                       qTy)))])))),
25870                                                                                                            Close
25871                                                                                                              (AVar
25872                                                                                                                 uTy,
25873                                                                                                               MB(MR(Close
25874                                                                                                                       (Var("s",
25875                                                                                                                            PTy(FTy 5,
25876                                                                                                                                qTy)),
25877                                                                                                                        Mop(Fst,
25878                                                                                                                            Var("s",
25879                                                                                                                                PTy(FTy 5,
25880                                                                                                                                    qTy))))),
25881                                                                                                                  Close
25882                                                                                                                    (Var("v",
25883                                                                                                                         FTy 5),
25884                                                                                                                     MB(MU(EQ(Var("mode",
25885                                                                                                                                  FTy 5),
25886                                                                                                                              Var("v",
25887                                                                                                                                  FTy 5)),
25888                                                                                                                           PTy(FTy 5,
25889                                                                                                                               qTy)),
25890                                                                                                                        Close
25891                                                                                                                          (bVar"b",
25892                                                                                                                           ITE(bVar"b",
25893                                                                                                                               MD(Call
25894                                                                                                                                    ("raise'exception",
25895                                                                                                                                     ATy(qTy,
25896                                                                                                                                         PTy(uTy,
25897                                                                                                                                             qTy)),
25898                                                                                                                                     Call
25899                                                                                                                                       ("UNPREDICTABLE",
25900                                                                                                                                        CTy"exception",
25901                                                                                                                                        LS
25902                                                                                                                                         "MoveToBankedOrSpecialRegister")),
25903                                                                                                                                  FTy 5),
25904                                                                                                                               MB(MR(Close
25905                                                                                                                                       (Var("s",
25906                                                                                                                                            PTy(FTy 5,
25907                                                                                                                                                qTy)),
25908                                                                                                                                        Mop(Fst,
25909                                                                                                                                            Var("s",
25910                                                                                                                                                PTy(FTy 5,
25911                                                                                                                                                    qTy))))),
25912                                                                                                                                  Close
25913                                                                                                                                    (Var("v",
25914                                                                                                                                         FTy 5),
25915                                                                                                                                     MB(MU(TP[Bop(Add,
25916                                                                                                                                                  Mop(Cast
25917                                                                                                                                                        F4,
25918                                                                                                                                                      Bop(Bit,
25919                                                                                                                                                          Var("SYSm",
25920                                                                                                                                                              FTy 5),
25921                                                                                                                                                          LN
25922                                                                                                                                                           0)),
25923                                                                                                                                                  LW(13,
25924                                                                                                                                                     4)),
25925                                                                                                                                              Var("v",
25926                                                                                                                                                  FTy 5)],
25927                                                                                                                                           PTy(FTy 5,
25928                                                                                                                                               qTy)),
25929                                                                                                                                        Close
25930                                                                                                                                          (Var("x",
25931                                                                                                                                               PTy(F4,
25932                                                                                                                                                   FTy 5)),
25933                                                                                                                                           MB(MD(Call
25934                                                                                                                                                   ("R",
25935                                                                                                                                                    ATy(qTy,
25936                                                                                                                                                        PTy(F32,
25937                                                                                                                                                            qTy)),
25938                                                                                                                                                    Var("n",
25939                                                                                                                                                        F4)),
25940                                                                                                                                                 FTy 5),
25941                                                                                                                                              Close
25942                                                                                                                                                (Var("v",
25943                                                                                                                                                     F32),
25944                                                                                                                                                 MB(MU(TP[Var("v",
25945                                                                                                                                                              F32),
25946                                                                                                                                                          Var("x",
25947                                                                                                                                                              PTy(F4,
25948                                                                                                                                                                  FTy 5))],
25949                                                                                                                                                       PTy(FTy 5,
25950                                                                                                                                                           qTy)),
25951                                                                                                                                                    Close
25952                                                                                                                                                      (Var("v",
25953                                                                                                                                                           PTy(F32,
25954                                                                                                                                                               PTy(F4,
25955                                                                                                                                                                   FTy 5))),
25956                                                                                                                                                       MD(Call
25957                                                                                                                                                            ("write'Rmode",
25958                                                                                                                                                             ATy(qTy,
25959                                                                                                                                                                 PTy(uTy,
25960                                                                                                                                                                     qTy)),
25961                                                                                                                                                             Var("v",
25962                                                                                                                                                                 PTy(F32,
25963                                                                                                                                                                     PTy(F4,
25964                                                                                                                                                                         FTy 5)))),
25965                                                                                                                                                          FTy 5))))))))))))))))))))))))))))))))))))))),
25966                                  Close
25967                                    (AVar uTy,
25968                                     Call
25969                                       ("IncPC",ATy(qTy,PTy(uTy,qTy)),LU)))))))))))))
25970;
25971val dfn'ReturnFromException_def = Def
25972  ("dfn'ReturnFromException",
25973   TP[bVar"increment",bVar"wordhigher",bVar"wback",Var("n",F4)],
25974   MB(Call("CurrentModeIsHyp",ATy(qTy,PTy(bTy,qTy)),LU),
25975      Close
25976        (bVar"b",
25977         ITE(bVar"b",
25978             Call("TakeUndefInstrException",ATy(qTy,PTy(uTy,qTy)),LU),
25979             MB(Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU),
25980                Close
25981                  (bVar"v",
25982                   MB(MB(MU(Mop(Not,bVar"v"),qTy),
25983                         Close
25984                           (bVar"b",
25985                            ITE(bVar"b",MU(LT,qTy),
25986                                MB(Call
25987                                     ("CurrentInstrSet",
25988                                      ATy(qTy,PTy(CTy"InstrSet",qTy)),LU),
25989                                   Close
25990                                     (Var("v",CTy"InstrSet"),
25991                                      MU(EQ(Var("v",CTy"InstrSet"),
25992                                            LC("InstrSet_ThumbEE",
25993                                               CTy"InstrSet")),qTy)))))),
25994                      Close
25995                        (bVar"b",
25996                         ITE(bVar"b",
25997                             Call
25998                               ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
25999                                Call
26000                                  ("UNPREDICTABLE",CTy"exception",
26001                                   LS"ReturnFromException")),
26002                             MB(Call
26003                                  ("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
26004                                Close
26005                                  (Var("Rn",F32),
26006                                   Let(Var("address",F32),
26007                                       ITE(bVar"increment",Var("Rn",F32),
26008                                           Bop(Sub,Var("Rn",F32),LW(8,32))),
26009                                       Let(Var("address",F32),
26010                                           ITE(bVar"wordhigher",
26011                                               Bop(Add,Var("address",F32),
26012                                                   LW(4,32)),
26013                                               Var("address",F32)),
26014                                           MB(Call
26015                                                ("MemA",
26016                                                 ATy(qTy,PTy(F32,qTy)),
26017                                                 TP[Var("address",F32),
26018                                                    LN 4]),
26019                                              Close
26020                                                (Var("new_pc_value",F32),
26021                                                 MB(Call
26022                                                      ("MemA",
26023                                                       ATy(qTy,
26024                                                           PTy(F32,qTy)),
26025                                                       TP[Bop(Add,
26026                                                              Var("address",
26027                                                                  F32),
26028                                                              LW(4,32)),
26029                                                          LN 4]),
26030                                                    Close
26031                                                      (Var("data",F32),
26032                                                       MB(MR(Close
26033                                                               (qVar"s",
26034                                                                Dest
26035                                                                  ("data_abort",
26036                                                                   bTy,
26037                                                                   qVar"s"))),
26038                                                          Close
26039                                                            (bVar"b",
26040                                                             ITE(bVar"b",
26041                                                                 Call
26042                                                                   ("TakeDataAbortException",
26043                                                                    ATy(qTy,
26044                                                                        PTy(uTy,
26045                                                                            qTy)),
26046                                                                    LU),
26047                                                                 MB(Call
26048                                                                      ("CPSRWriteByInstr",
26049                                                                       ATy(qTy,
26050                                                                           PTy(uTy,
26051                                                                               qTy)),
26052                                                                       TP[Var("data",
26053                                                                              F32),
26054                                                                          LW(15,
26055                                                                             4),
26056                                                                          LT]),
26057                                                                    Close
26058                                                                      (AVar
26059                                                                         uTy,
26060                                                                       MB(MR(Close
26061                                                                               (qVar"s",
26062                                                                                Dest
26063                                                                                  ("CPSR",
26064                                                                                   CTy"PSR",
26065                                                                                   qVar"s"))),
26066                                                                          Close
26067                                                                            (Var("v",
26068                                                                                 CTy"PSR"),
26069                                                                             MB(MB(MB(MB(MU(Dest
26070                                                                                              ("M",
26071                                                                                               FTy 5,
26072                                                                                               Var("v",
26073                                                                                                   CTy"PSR")),
26074                                                                                            qTy),
26075                                                                                         Close
26076                                                                                           (Var("v",
26077                                                                                                FTy 5),
26078                                                                                            MU(EQ(Var("v",
26079                                                                                                      FTy 5),
26080                                                                                                  LW(26,
26081                                                                                                     5)),
26082                                                                                               qTy))),
26083                                                                                      Close
26084                                                                                        (bVar"b",
26085                                                                                         ITE(bVar"b",
26086                                                                                             MB(MR(Close
26087                                                                                                     (qVar"s",
26088                                                                                                      Dest
26089                                                                                                        ("CPSR",
26090                                                                                                         CTy"PSR",
26091                                                                                                         qVar"s"))),
26092                                                                                                Close
26093                                                                                                  (Var("v",
26094                                                                                                       CTy"PSR"),
26095                                                                                                   MU(Dest
26096                                                                                                        ("J",
26097                                                                                                         bTy,
26098                                                                                                         Var("v",
26099                                                                                                             CTy"PSR")),
26100                                                                                                      qTy))),
26101                                                                                             MU(LF,
26102                                                                                                qTy)))),
26103                                                                                   Close
26104                                                                                     (bVar"b",
26105                                                                                      ITE(bVar"b",
26106                                                                                          MB(MR(Close
26107                                                                                                  (qVar"s",
26108                                                                                                   Dest
26109                                                                                                     ("CPSR",
26110                                                                                                      CTy"PSR",
26111                                                                                                      qVar"s"))),
26112                                                                                             Close
26113                                                                                               (Var("v",
26114                                                                                                    CTy"PSR"),
26115                                                                                                MU(Dest
26116                                                                                                     ("T",
26117                                                                                                      bTy,
26118                                                                                                      Var("v",
26119                                                                                                          CTy"PSR")),
26120                                                                                                   qTy))),
26121                                                                                          MU(LF,
26122                                                                                             qTy)))),
26123                                                                                Close
26124                                                                                  (bVar"b",
26125                                                                                   ITE(bVar"b",
26126                                                                                       Call
26127                                                                                         ("raise'exception",
26128                                                                                          ATy(qTy,
26129                                                                                              PTy(uTy,
26130                                                                                                  qTy)),
26131                                                                                          Call
26132                                                                                            ("UNPREDICTABLE",
26133                                                                                             CTy"exception",
26134                                                                                             LS
26135                                                                                              "ReturnFromException")),
26136                                                                                       Call
26137                                                                                         ("BranchWritePC",
26138                                                                                          ATy(qTy,
26139                                                                                              PTy(uTy,
26140                                                                                                  qTy)),
26141                                                                                          Var("new_pc_value",
26142                                                                                              F32)))))))))))))))))))))))))))))
26143;
26144val dfn'SecureMonitorCall_def = Def
26145  ("dfn'SecureMonitorCall",Var("imm4",F4),
26146   MB(Call("HaveSecurityExt",ATy(qTy,PTy(bTy,qTy)),LU),
26147      Close
26148        (bVar"v",
26149         MB(ITE(bVar"v",
26150                Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU),
26151                MU(LF,qTy)),
26152            Close
26153              (bVar"b",
26154               ITE(bVar"b",
26155                   MB(Call("HaveVirtExt",ATy(qTy,PTy(bTy,qTy)),LU),
26156                      Close
26157                        (bVar"v",
26158                         MB(MB(MB(ITE(bVar"v",
26159                                      MB(Call
26160                                           ("IsSecure",
26161                                            ATy(qTy,PTy(bTy,qTy)),LU),
26162                                         Close
26163                                           (bVar"v",
26164                                            MU(Mop(Not,bVar"v"),qTy))),
26165                                      MU(LF,qTy)),
26166                                  Close
26167                                    (bVar"b",
26168                                     ITE(bVar"b",
26169                                         MB(Call
26170                                              ("CurrentModeIsHyp",
26171                                               ATy(qTy,PTy(bTy,qTy)),LU),
26172                                            Close
26173                                              (bVar"v",
26174                                               MU(Mop(Not,bVar"v"),qTy))),
26175                                         MU(LF,qTy)))),
26176                               Close
26177                                 (bVar"b",
26178                                  ITE(bVar"b",
26179                                      MB(MR(Close
26180                                              (qVar"s",
26181                                               Dest
26182                                                 ("CP15",CTy"CP15",qVar"s"))),
26183                                         Close
26184                                           (Var("v",CTy"CP15"),
26185                                            MB(MU(Dest
26186                                                    ("HCR",CTy"HCR",
26187                                                     Var("v",CTy"CP15")),
26188                                                  qTy),
26189                                               Close
26190                                                 (Var("v",CTy"HCR"),
26191                                                  MU(Dest
26192                                                       ("TSC",bTy,
26193                                                        Var("v",CTy"HCR")),
26194                                                     qTy))))),MU(LF,qTy)))),
26195                            Close
26196                              (bVar"b",
26197                               ITE(bVar"b",
26198                                   MB(Call
26199                                        ("WriteHSR",ATy(qTy,PTy(uTy,qTy)),
26200                                         TP[LW(19,6),LW(0,25)]),
26201                                      Close
26202                                        (AVar uTy,
26203                                         Call
26204                                           ("TakeHypTrapException",
26205                                            ATy(qTy,PTy(uTy,qTy)),LU))),
26206                                   MB(MR(Close
26207                                           (qVar"s",
26208                                            Dest("CP15",CTy"CP15",qVar"s"))),
26209                                      Close
26210                                        (Var("v",CTy"CP15"),
26211                                         MB(MB(MU(Dest
26212                                                    ("SCR",CTy"SCR",
26213                                                     Var("v",CTy"CP15")),
26214                                                  qTy),
26215                                               Close
26216                                                 (Var("v",CTy"SCR"),
26217                                                  MU(Dest
26218                                                       ("SCD",bTy,
26219                                                        Var("v",CTy"SCR")),
26220                                                     qTy))),
26221                                            Close
26222                                              (bVar"b",
26223                                               ITE(bVar"b",
26224                                                   MB(Call
26225                                                        ("IsSecure",
26226                                                         ATy(qTy,
26227                                                             PTy(bTy,qTy)),
26228                                                         LU),
26229                                                      Close
26230                                                        (bVar"b",
26231                                                         ITE(bVar"b",
26232                                                             Call
26233                                                               ("raise'exception",
26234                                                                ATy(qTy,
26235                                                                    PTy(uTy,
26236                                                                        qTy)),
26237                                                                Call
26238                                                                  ("UNPREDICTABLE",
26239                                                                   CTy"exception",
26240                                                                   LS
26241                                                                    "SecureMonitorCall")),
26242                                                             Call
26243                                                               ("TakeUndefInstrException",
26244                                                                ATy(qTy,
26245                                                                    PTy(uTy,
26246                                                                        qTy)),
26247                                                                LU)))),
26248                                                   Call
26249                                                     ("TakeSMCException",
26250                                                      ATy(qTy,PTy(uTy,qTy)),
26251                                                      LU))))))))))),
26252                   Call
26253                     ("TakeUndefInstrException",ATy(qTy,PTy(uTy,qTy)),LU)))))))
26254;
26255val dfn'SupervisorCall_def = Def
26256  ("dfn'SupervisorCall",Var("imm32",F32),
26257   Call
26258     ("CallSupervisor",ATy(qTy,PTy(uTy,qTy)),
26259      EX(Var("imm32",F32),LN 15,LN 0,F16)))
26260;
26261val dfn'StoreReturnState_def = Def
26262  ("dfn'StoreReturnState",
26263   TP[bVar"increment",bVar"wordhigher",bVar"wback",Var("mode",FTy 5)],
26264   MB(Call("CurrentModeIsHyp",ATy(qTy,PTy(bTy,qTy)),LU),
26265      Close
26266        (bVar"b",
26267         ITE(bVar"b",
26268             Call("TakeUndefInstrException",ATy(qTy,PTy(uTy,qTy)),LU),
26269             MB(Call("CurrentModeIsUserOrSystem",ATy(qTy,PTy(bTy,qTy)),LU),
26270                Close
26271                  (bVar"v",
26272                   MB(ITE(bVar"v",MU(LT,qTy),
26273                          MB(Call
26274                               ("CurrentInstrSet",
26275                                ATy(qTy,PTy(CTy"InstrSet",qTy)),LU),
26276                             Close
26277                               (Var("v",CTy"InstrSet"),
26278                                MU(EQ(Var("v",CTy"InstrSet"),
26279                                      LC("InstrSet_ThumbEE",CTy"InstrSet")),
26280                                   qTy)))),
26281                      Close
26282                        (bVar"b",
26283                         ITB([(bVar"b",
26284                               Call
26285                                 ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
26286                                  Call
26287                                    ("UNPREDICTABLE",CTy"exception",
26288                                     LS"StoreReturnState"))),
26289                              (EQ(Var("mode",FTy 5),LW(26,5)),
26290                               Call
26291                                 ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
26292                                  Call
26293                                    ("UNPREDICTABLE",CTy"exception",
26294                                     LS"StoreReturnState")))],
26295                             MB(Call("IsSecure",ATy(qTy,PTy(bTy,qTy)),LU),
26296                                Close
26297                                  (bVar"v",
26298                                   MB(MB(MU(Mop(Not,bVar"v"),qTy),
26299                                         Close
26300                                           (bVar"b",
26301                                            ITE(bVar"b",
26302                                                MB(MR(Close
26303                                                        (qVar"s",
26304                                                         Dest
26305                                                           ("CP15",
26306                                                            CTy"CP15",
26307                                                            qVar"s"))),
26308                                                   Close
26309                                                     (Var("v",CTy"CP15"),
26310                                                      MB(MB(MB(MB(MU(Dest
26311                                                                       ("NSACR",
26312                                                                        CTy"NSACR",
26313                                                                        Var("v",
26314                                                                            CTy"CP15")),
26315                                                                     qTy),
26316                                                                  Close
26317                                                                    (Var("v",
26318                                                                         CTy"NSACR"),
26319                                                                     MU(Dest
26320                                                                          ("RFR",
26321                                                                           bTy,
26322                                                                           Var("v",
26323                                                                               CTy"NSACR")),
26324                                                                        qTy))),
26325                                                               Close
26326                                                                 (bVar"v",
26327                                                                  MU(Bop(And,
26328                                                                         EQ(Var("mode",
26329                                                                                FTy 5),
26330                                                                            LW(17,
26331                                                                               5)),
26332                                                                         bVar"v"),
26333                                                                     qTy))),
26334                                                            Close
26335                                                              (bVar"v",
26336                                                               MU(Bop(Or,
26337                                                                      EQ(Var("mode",
26338                                                                             FTy 5),
26339                                                                         LW(22,
26340                                                                            5)),
26341                                                                      bVar"v"),
26342                                                                  qTy))),
26343                                                         Close
26344                                                           (bVar"b",
26345                                                            ITE(bVar"b",
26346                                                                Call
26347                                                                  ("raise'exception",
26348                                                                   ATy(qTy,
26349                                                                       PTy(uTy,
26350                                                                           qTy)),
26351                                                                   Call
26352                                                                     ("UNPREDICTABLE",
26353                                                                      CTy"exception",
26354                                                                      LS
26355                                                                       "StoreReturnState")),
26356                                                                MU(LU,qTy)))))),
26357                                                MU(LU,qTy)))),
26358                                      Close
26359                                        (AVar uTy,
26360                                         MB(Call
26361                                              ("Rmode",
26362                                               ATy(qTy,PTy(F32,qTy)),
26363                                               TP[LW(13,4),
26364                                                  Var("mode",FTy 5)]),
26365                                            Close
26366                                              (Var("base",F32),
26367                                               Let(Var("address",F32),
26368                                                   ITE(bVar"increment",
26369                                                       Var("base",F32),
26370                                                       Bop(Sub,
26371                                                           Var("base",F32),
26372                                                           LW(8,32))),
26373                                                   Let(Var("address",F32),
26374                                                       ITE(bVar"wordhigher",
26375                                                           Bop(Add,
26376                                                               Var("address",
26377                                                                   F32),
26378                                                               LW(4,32)),
26379                                                           Var("address",
26380                                                               F32)),
26381                                                       MB(MB(Const
26382                                                               ("LR",
26383                                                                ATy(qTy,
26384                                                                    PTy(F32,
26385                                                                        qTy))),
26386                                                             Close
26387                                                               (Var("v",
26388                                                                    F32),
26389                                                                MB(MU(TP[Var("v",
26390                                                                             F32),
26391                                                                         Var("address",
26392                                                                             F32),
26393                                                                         LN
26394                                                                          4],
26395                                                                      qTy),
26396                                                                   Close
26397                                                                     (Var("v",
26398                                                                          PTy(F32,
26399                                                                              PTy(F32,
26400                                                                                  nTy))),
26401                                                                      Call
26402                                                                        ("write'MemA",
26403                                                                         ATy(qTy,
26404                                                                             PTy(uTy,
26405                                                                                 qTy)),
26406                                                                         Var("v",
26407                                                                             PTy(F32,
26408                                                                                 PTy(F32,
26409                                                                                     nTy)))))))),
26410                                                          Close
26411                                                            (AVar uTy,
26412                                                             MB(MB(Const
26413                                                                     ("SPSR",
26414                                                                      ATy(qTy,
26415                                                                          PTy(CTy"PSR",
26416                                                                              qTy))),
26417                                                                   Close
26418                                                                     (Var("v",
26419                                                                          CTy"PSR"),
26420                                                                      MB(MB(MU(Call
26421                                                                                 ("reg'PSR",
26422                                                                                  F32,
26423                                                                                  Var("v",
26424                                                                                      CTy"PSR")),
26425                                                                               qTy),
26426                                                                            Close
26427                                                                              (Var("v",
26428                                                                                   F32),
26429                                                                               MU(TP[Var("v",
26430                                                                                         F32),
26431                                                                                     Bop(Add,
26432                                                                                         Var("address",
26433                                                                                             F32),
26434                                                                                         LW(4,
26435                                                                                            32)),
26436                                                                                     LN
26437                                                                                      4],
26438                                                                                  qTy))),
26439                                                                         Close
26440                                                                           (Var("v",
26441                                                                                PTy(F32,
26442                                                                                    PTy(F32,
26443                                                                                        nTy))),
26444                                                                            Call
26445                                                                              ("write'MemA",
26446                                                                               ATy(qTy,
26447                                                                                   PTy(uTy,
26448                                                                                       qTy)),
26449                                                                               Var("v",
26450                                                                                   PTy(F32,
26451                                                                                       PTy(F32,
26452                                                                                           nTy)))))))),
26453                                                                Close
26454                                                                  (AVar
26455                                                                     uTy,
26456                                                                   MB(MR(Close
26457                                                                           (qVar"s",
26458                                                                            Dest
26459                                                                              ("data_abort",
26460                                                                               bTy,
26461                                                                               qVar"s"))),
26462                                                                      Close
26463                                                                        (bVar"b",
26464                                                                         ITE(bVar"b",
26465                                                                             Call
26466                                                                               ("TakeDataAbortException",
26467                                                                                ATy(qTy,
26468                                                                                    PTy(uTy,
26469                                                                                        qTy)),
26470                                                                                LU),
26471                                                                             MB(ITE(bVar"wback",
26472                                                                                    Call
26473                                                                                      ("write'Rmode",
26474                                                                                       ATy(qTy,
26475                                                                                           PTy(uTy,
26476                                                                                               qTy)),
26477                                                                                       TP[ITE(bVar"increment",
26478                                                                                              Bop(Add,
26479                                                                                                  Var("base",
26480                                                                                                      F32),
26481                                                                                                  LW(8,
26482                                                                                                     32)),
26483                                                                                              Bop(Sub,
26484                                                                                                  Var("base",
26485                                                                                                      F32),
26486                                                                                                  LW(8,
26487                                                                                                     32))),
26488                                                                                          LW(13,
26489                                                                                             4),
26490                                                                                          Var("mode",
26491                                                                                              FTy 5)]),
26492                                                                                    MU(LU,
26493                                                                                       qTy)),
26494                                                                                Close
26495                                                                                  (AVar
26496                                                                                     uTy,
26497                                                                                   Call
26498                                                                                     ("IncPC",
26499                                                                                      ATy(qTy,
26500                                                                                          PTy(uTy,
26501                                                                                              qTy)),
26502                                                                                      LU)))))))))))))))))))))))))))
26503;
26504val dfn'Setend_def = Def
26505  ("dfn'Setend",bVar"set_bigend",
26506   MB(MR(Close(qVar"s",Dest("CPSR",CTy"PSR",qVar"s"))),
26507      Close
26508        (Var("v",CTy"PSR"),
26509         MB(MB(MB(MU(TP[Var("v",CTy"PSR"),bVar"set_bigend"],qTy),
26510                  Close
26511                    (Var("v",PTy(CTy"PSR",bTy)),
26512                     MU(Rupd("E",Var("v",PTy(CTy"PSR",bTy))),qTy))),
26513               Close
26514                 (Var("v",CTy"PSR"),
26515                  MW(Close
26516                       (qVar"s",Rupd("CPSR",TP[qVar"s",Var("v",CTy"PSR")]))))),
26517            Close(AVar uTy,Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))))))
26518;
26519val dfn'Undefined_def = Def
26520  ("dfn'Undefined",Var("imm32",F32),
26521   Call("TakeUndefInstrException",ATy(qTy,PTy(uTy,qTy)),LU))
26522;
26523val dfn'NoOperation_def = Def0
26524  ("dfn'NoOperation",Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))
26525;
26526val dfn'Breakpoint_def = Def
26527  ("dfn'Breakpoint",Var("imm32",F32),
26528   Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))
26529;
26530val dfn'Debug_def = Def
26531  ("dfn'Debug",Var("option",F4),Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))
26532;
26533val dfn'DataMemoryBarrier_def = Def
26534  ("dfn'DataMemoryBarrier",Var("option",F4),
26535   Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))
26536;
26537val dfn'DataSynchronizationBarrier_def = Def
26538  ("dfn'DataSynchronizationBarrier",Var("option",F4),
26539   Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))
26540;
26541val dfn'InstructionSynchronizationBarrier_def = Def
26542  ("dfn'InstructionSynchronizationBarrier",Var("option",F4),
26543   Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))
26544;
26545val dfn'PreloadData_def = Def
26546  ("dfn'PreloadData",
26547   TP[bVar"add",bVar"is_pldw",Var("n",F4),Var("m",CTy"offset1")],
26548   Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))
26549;
26550val dfn'PreloadDataLiteral_def = Def
26551  ("dfn'PreloadDataLiteral",TP[bVar"add",Var("imm32",F32)],
26552   Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))
26553;
26554val dfn'PreloadInstruction_def = Def
26555  ("dfn'PreloadInstruction",
26556   TP[bVar"add",Var("n",F4),Var("m",CTy"offset1")],
26557   Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))
26558;
26559val dfn'SendEvent_def = Def0
26560  ("dfn'SendEvent",Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))
26561;
26562val dfn'WaitForEvent_def = Def0
26563  ("dfn'WaitForEvent",Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))
26564;
26565val dfn'WaitForInterrupt_def = Def0
26566  ("dfn'WaitForInterrupt",Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))
26567;
26568val dfn'Yield_def = Def0
26569  ("dfn'Yield",Call("IncPC",ATy(qTy,PTy(uTy,qTy)),LU))
26570;
26571val Run_def = Def
26572  ("Run",Var("v0",CTy"instruction"),
26573   CS(Var("v0",CTy"instruction"),
26574      [(Const("ClearExclusive",CTy"instruction"),
26575        Const("dfn'ClearExclusive",ATy(qTy,PTy(uTy,qTy)))),
26576       (Const("NoOperation",CTy"instruction"),
26577        Const("dfn'NoOperation",ATy(qTy,PTy(uTy,qTy)))),
26578       (Call
26579          ("Divide",CTy"instruction",
26580           Var("v126",PTy(bTy,PTy(F4,PTy(F4,F4))))),
26581        Call
26582          ("dfn'Divide",ATy(qTy,PTy(uTy,qTy)),
26583           Var("v126",PTy(bTy,PTy(F4,PTy(F4,F4)))))),
26584       (Call("IfThen",CTy"instruction",Var("v127",PTy(F4,F4))),
26585        Call("dfn'IfThen",ATy(qTy,PTy(uTy,qTy)),Var("v127",PTy(F4,F4)))),
26586       (Call
26587          ("Swap",CTy"instruction",Var("v128",PTy(bTy,PTy(F4,PTy(F4,F4))))),
26588        Call
26589          ("dfn'Swap",ATy(qTy,PTy(uTy,qTy)),
26590           Var("v128",PTy(bTy,PTy(F4,PTy(F4,F4)))))),
26591       (Call("Undefined",CTy"instruction",Var("v129",F32)),
26592        Call("dfn'Undefined",ATy(qTy,PTy(uTy,qTy)),Var("v129",F32))),
26593       (Call("Branch",CTy"instruction",Var("v1",CTy"Branch")),
26594        CS(Var("v1",CTy"Branch"),
26595           [(Call("BranchExchange",CTy"Branch",Var("v2",F4)),
26596             Call("dfn'BranchExchange",ATy(qTy,PTy(uTy,qTy)),Var("v2",F4))),
26597            (Call
26598               ("BranchLinkExchangeImmediate",CTy"Branch",
26599                Var("v3",PTy(CTy"InstrSet",F32))),
26600             Call
26601               ("dfn'BranchLinkExchangeImmediate",ATy(qTy,PTy(uTy,qTy)),
26602                Var("v3",PTy(CTy"InstrSet",F32)))),
26603            (Call("BranchLinkExchangeRegister",CTy"Branch",Var("v4",F4)),
26604             Call
26605               ("dfn'BranchLinkExchangeRegister",ATy(qTy,PTy(uTy,qTy)),
26606                Var("v4",F4))),
26607            (Call("BranchTarget",CTy"Branch",Var("v5",F32)),
26608             Call("dfn'BranchTarget",ATy(qTy,PTy(uTy,qTy)),Var("v5",F32))),
26609            (Call("CheckArray",CTy"Branch",Var("v6",PTy(F4,F4))),
26610             Call
26611               ("dfn'CheckArray",ATy(qTy,PTy(uTy,qTy)),
26612                Var("v6",PTy(F4,F4)))),
26613            (Call
26614               ("CompareBranch",CTy"Branch",Var("v7",PTy(bTy,PTy(F4,F32)))),
26615             Call
26616               ("dfn'CompareBranch",ATy(qTy,PTy(uTy,qTy)),
26617                Var("v7",PTy(bTy,PTy(F4,F32))))),
26618            (Call("HandlerBranchLink",CTy"Branch",Var("v8",PTy(bTy,F32))),
26619             Call
26620               ("dfn'HandlerBranchLink",ATy(qTy,PTy(uTy,qTy)),
26621                Var("v8",PTy(bTy,F32)))),
26622            (Call
26623               ("HandlerBranchLinkParameter",CTy"Branch",
26624                Var("v9",PTy(F32,F32))),
26625             Call
26626               ("dfn'HandlerBranchLinkParameter",ATy(qTy,PTy(uTy,qTy)),
26627                Var("v9",PTy(F32,F32)))),
26628            (Call
26629               ("HandlerBranchParameter",CTy"Branch",
26630                Var("v10",PTy(F32,F32))),
26631             Call
26632               ("dfn'HandlerBranchParameter",ATy(qTy,PTy(uTy,qTy)),
26633                Var("v10",PTy(F32,F32)))),
26634            (Call
26635               ("TableBranchByte",CTy"Branch",
26636                Var("v11",PTy(bTy,PTy(F4,F4)))),
26637             Call
26638               ("dfn'TableBranchByte",ATy(qTy,PTy(uTy,qTy)),
26639                Var("v11",PTy(bTy,PTy(F4,F4)))))])),
26640       (Call("Data",CTy"instruction",Var("v12",CTy"Data")),
26641        CS(Var("v12",CTy"Data"),
26642           [(Call
26643               ("AddSub",CTy"Data",
26644                Var("v13",PTy(bTy,PTy(F4,PTy(F4,FTy 12))))),
26645             Call
26646               ("dfn'AddSub",ATy(qTy,PTy(uTy,qTy)),
26647                Var("v13",PTy(bTy,PTy(F4,PTy(F4,FTy 12)))))),
26648            (Call
26649               ("ArithLogicImmediate",CTy"Data",
26650                Var("v14",PTy(F4,PTy(bTy,PTy(F4,PTy(F4,FTy 12)))))),
26651             Call
26652               ("dfn'ArithLogicImmediate",ATy(qTy,PTy(uTy,qTy)),
26653                Var("v14",PTy(F4,PTy(bTy,PTy(F4,PTy(F4,FTy 12))))))),
26654            (Call("CountLeadingZeroes",CTy"Data",Var("v15",PTy(F4,F4))),
26655             Call
26656               ("dfn'CountLeadingZeroes",ATy(qTy,PTy(uTy,qTy)),
26657                Var("v15",PTy(F4,F4)))),
26658            (Call
26659               ("Move",CTy"Data",
26660                Var("v16",PTy(bTy,PTy(bTy,PTy(F4,FTy 12))))),
26661             Call
26662               ("dfn'Move",ATy(qTy,PTy(uTy,qTy)),
26663                Var("v16",PTy(bTy,PTy(bTy,PTy(F4,FTy 12)))))),
26664            (Call
26665               ("MoveHalfword",CTy"Data",Var("v17",PTy(bTy,PTy(F4,F16)))),
26666             Call
26667               ("dfn'MoveHalfword",ATy(qTy,PTy(uTy,qTy)),
26668                Var("v17",PTy(bTy,PTy(F4,F16))))),
26669            (Call
26670               ("Register",CTy"Data",
26671                Var("v18",
26672                    PTy(F4,
26673                        PTy(bTy,
26674                            PTy(F4,PTy(F4,PTy(F4,PTy(CTy"SRType",nTy)))))))),
26675             Call
26676               ("dfn'Register",ATy(qTy,PTy(uTy,qTy)),
26677                Var("v18",
26678                    PTy(F4,
26679                        PTy(bTy,
26680                            PTy(F4,PTy(F4,PTy(F4,PTy(CTy"SRType",nTy))))))))),
26681            (Call
26682               ("RegisterShiftedRegister",CTy"Data",
26683                Var("v19",
26684                    PTy(F4,
26685                        PTy(bTy,
26686                            PTy(F4,PTy(F4,PTy(F4,PTy(CTy"SRType",F4)))))))),
26687             Call
26688               ("dfn'RegisterShiftedRegister",ATy(qTy,PTy(uTy,qTy)),
26689                Var("v19",
26690                    PTy(F4,
26691                        PTy(bTy,
26692                            PTy(F4,PTy(F4,PTy(F4,PTy(CTy"SRType",F4))))))))),
26693            (Call
26694               ("ShiftImmediate",CTy"Data",
26695                Var("v20",
26696                    PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(CTy"SRType",nTy))))))),
26697             Call
26698               ("dfn'ShiftImmediate",ATy(qTy,PTy(uTy,qTy)),
26699                Var("v20",
26700                    PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(CTy"SRType",nTy)))))))),
26701            (Call
26702               ("ShiftRegister",CTy"Data",
26703                Var("v21",
26704                    PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(CTy"SRType",F4))))))),
26705             Call
26706               ("dfn'ShiftRegister",ATy(qTy,PTy(uTy,qTy)),
26707                Var("v21",
26708                    PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(CTy"SRType",F4)))))))),
26709            (Call
26710               ("TestCompareImmediate",CTy"Data",
26711                Var("v22",PTy(FTy 2,PTy(F4,FTy 12)))),
26712             Call
26713               ("dfn'TestCompareImmediate",ATy(qTy,PTy(uTy,qTy)),
26714                Var("v22",PTy(FTy 2,PTy(F4,FTy 12))))),
26715            (Call
26716               ("TestCompareRegister",CTy"Data",
26717                Var("v23",PTy(FTy 2,PTy(F4,PTy(F4,PTy(CTy"SRType",nTy)))))),
26718             Call
26719               ("dfn'TestCompareRegister",ATy(qTy,PTy(uTy,qTy)),
26720                Var("v23",PTy(FTy 2,PTy(F4,PTy(F4,PTy(CTy"SRType",nTy)))))))])),
26721       (Call("Hint",CTy"instruction",Var("v24",CTy"Hint")),
26722        CS(Var("v24",CTy"Hint"),
26723           [(Const("SendEvent",CTy"Hint"),
26724             Const("dfn'SendEvent",ATy(qTy,PTy(uTy,qTy)))),
26725            (Const("WaitForEvent",CTy"Hint"),
26726             Const("dfn'WaitForEvent",ATy(qTy,PTy(uTy,qTy)))),
26727            (Const("WaitForInterrupt",CTy"Hint"),
26728             Const("dfn'WaitForInterrupt",ATy(qTy,PTy(uTy,qTy)))),
26729            (Const("Yield",CTy"Hint"),
26730             Const("dfn'Yield",ATy(qTy,PTy(uTy,qTy)))),
26731            (Call("Breakpoint",CTy"Hint",Var("v25",F32)),
26732             Call("dfn'Breakpoint",ATy(qTy,PTy(uTy,qTy)),Var("v25",F32))),
26733            (Call("DataMemoryBarrier",CTy"Hint",Var("v26",F4)),
26734             Call
26735               ("dfn'DataMemoryBarrier",ATy(qTy,PTy(uTy,qTy)),
26736                Var("v26",F4))),
26737            (Call("DataSynchronizationBarrier",CTy"Hint",Var("v27",F4)),
26738             Call
26739               ("dfn'DataSynchronizationBarrier",ATy(qTy,PTy(uTy,qTy)),
26740                Var("v27",F4))),
26741            (Call("Debug",CTy"Hint",Var("v28",F4)),
26742             Call("dfn'Debug",ATy(qTy,PTy(uTy,qTy)),Var("v28",F4))),
26743            (Call
26744               ("InstructionSynchronizationBarrier",CTy"Hint",
26745                Var("v29",F4)),
26746             Call
26747               ("dfn'InstructionSynchronizationBarrier",
26748                ATy(qTy,PTy(uTy,qTy)),Var("v29",F4))),
26749            (Call
26750               ("PreloadData",CTy"Hint",
26751                Var("v30",PTy(bTy,PTy(bTy,PTy(F4,CTy"offset1"))))),
26752             Call
26753               ("dfn'PreloadData",ATy(qTy,PTy(uTy,qTy)),
26754                Var("v30",PTy(bTy,PTy(bTy,PTy(F4,CTy"offset1")))))),
26755            (Call("PreloadDataLiteral",CTy"Hint",Var("v31",PTy(bTy,F32))),
26756             Call
26757               ("dfn'PreloadDataLiteral",ATy(qTy,PTy(uTy,qTy)),
26758                Var("v31",PTy(bTy,F32)))),
26759            (Call
26760               ("PreloadInstruction",CTy"Hint",
26761                Var("v32",PTy(bTy,PTy(F4,CTy"offset1")))),
26762             Call
26763               ("dfn'PreloadInstruction",ATy(qTy,PTy(uTy,qTy)),
26764                Var("v32",PTy(bTy,PTy(F4,CTy"offset1")))))])),
26765       (Call("Load",CTy"instruction",Var("v33",CTy"Load")),
26766        CS(Var("v33",CTy"Load"),
26767           [(Call
26768               ("LoadByte",CTy"Load",
26769                Var("v34",
26770                    PTy(bTy,
26771                        PTy(bTy,
26772                            PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))))),
26773             Call
26774               ("dfn'LoadByte",ATy(qTy,PTy(uTy,qTy)),
26775                Var("v34",
26776                    PTy(bTy,
26777                        PTy(bTy,
26778                            PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))))),
26779            (Call
26780               ("LoadByteLiteral",CTy"Load",
26781                Var("v35",PTy(bTy,PTy(bTy,PTy(F4,F32))))),
26782             Call
26783               ("dfn'LoadByteLiteral",ATy(qTy,PTy(uTy,qTy)),
26784                Var("v35",PTy(bTy,PTy(bTy,PTy(F4,F32)))))),
26785            (Call
26786               ("LoadByteUnprivileged",CTy"Load",
26787                Var("v36",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))),
26788             Call
26789               ("dfn'LoadByteUnprivileged",ATy(qTy,PTy(uTy,qTy)),
26790                Var("v36",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))),
26791            (Call
26792               ("LoadDual",CTy"Load",
26793                Var("v37",
26794                    PTy(bTy,
26795                        PTy(bTy,
26796                            PTy(bTy,PTy(F4,PTy(F4,PTy(F4,CTy"offset2")))))))),
26797             Call
26798               ("dfn'LoadDual",ATy(qTy,PTy(uTy,qTy)),
26799                Var("v37",
26800                    PTy(bTy,
26801                        PTy(bTy,
26802                            PTy(bTy,PTy(F4,PTy(F4,PTy(F4,CTy"offset2"))))))))),
26803            (Call
26804               ("LoadDualLiteral",CTy"Load",
26805                Var("v38",PTy(bTy,PTy(F4,PTy(F4,F32))))),
26806             Call
26807               ("dfn'LoadDualLiteral",ATy(qTy,PTy(uTy,qTy)),
26808                Var("v38",PTy(bTy,PTy(F4,PTy(F4,F32)))))),
26809            (Call
26810               ("LoadExclusive",CTy"Load",Var("v39",PTy(F4,PTy(F4,F32)))),
26811             Call
26812               ("dfn'LoadExclusive",ATy(qTy,PTy(uTy,qTy)),
26813                Var("v39",PTy(F4,PTy(F4,F32))))),
26814            (Call("LoadExclusiveByte",CTy"Load",Var("v40",PTy(F4,F4))),
26815             Call
26816               ("dfn'LoadExclusiveByte",ATy(qTy,PTy(uTy,qTy)),
26817                Var("v40",PTy(F4,F4)))),
26818            (Call
26819               ("LoadExclusiveDoubleword",CTy"Load",
26820                Var("v41",PTy(F4,PTy(F4,F4)))),
26821             Call
26822               ("dfn'LoadExclusiveDoubleword",ATy(qTy,PTy(uTy,qTy)),
26823                Var("v41",PTy(F4,PTy(F4,F4))))),
26824            (Call("LoadExclusiveHalf",CTy"Load",Var("v42",PTy(F4,F4))),
26825             Call
26826               ("dfn'LoadExclusiveHalf",ATy(qTy,PTy(uTy,qTy)),
26827                Var("v42",PTy(F4,F4)))),
26828            (Call
26829               ("LoadHalf",CTy"Load",
26830                Var("v43",
26831                    PTy(bTy,
26832                        PTy(bTy,
26833                            PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))))),
26834             Call
26835               ("dfn'LoadHalf",ATy(qTy,PTy(uTy,qTy)),
26836                Var("v43",
26837                    PTy(bTy,
26838                        PTy(bTy,
26839                            PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))))),
26840            (Call
26841               ("LoadHalfLiteral",CTy"Load",
26842                Var("v44",PTy(bTy,PTy(bTy,PTy(F4,F32))))),
26843             Call
26844               ("dfn'LoadHalfLiteral",ATy(qTy,PTy(uTy,qTy)),
26845                Var("v44",PTy(bTy,PTy(bTy,PTy(F4,F32)))))),
26846            (Call
26847               ("LoadHalfUnprivileged",CTy"Load",
26848                Var("v45",
26849                    PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset2"))))))),
26850             Call
26851               ("dfn'LoadHalfUnprivileged",ATy(qTy,PTy(uTy,qTy)),
26852                Var("v45",
26853                    PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset2")))))))),
26854            (Call("LoadLiteral",CTy"Load",Var("v46",PTy(bTy,PTy(F4,F32)))),
26855             Call
26856               ("dfn'LoadLiteral",ATy(qTy,PTy(uTy,qTy)),
26857                Var("v46",PTy(bTy,PTy(F4,F32))))),
26858            (Call
26859               ("LoadMultiple",CTy"Load",
26860                Var("v47",PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,F16)))))),
26861             Call
26862               ("dfn'LoadMultiple",ATy(qTy,PTy(uTy,qTy)),
26863                Var("v47",PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,F16))))))),
26864            (Call
26865               ("LoadMultipleExceptionReturn",CTy"Load",
26866                Var("v48",PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,FTy 15)))))),
26867             Call
26868               ("dfn'LoadMultipleExceptionReturn",ATy(qTy,PTy(uTy,qTy)),
26869                Var("v48",PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,FTy 15))))))),
26870            (Call
26871               ("LoadMultipleUserRegisters",CTy"Load",
26872                Var("v49",PTy(bTy,PTy(bTy,PTy(F4,FTy 15))))),
26873             Call
26874               ("dfn'LoadMultipleUserRegisters",ATy(qTy,PTy(uTy,qTy)),
26875                Var("v49",PTy(bTy,PTy(bTy,PTy(F4,FTy 15)))))),
26876            (Call
26877               ("LoadSignedByteUnprivileged",CTy"Load",
26878                Var("v50",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset2")))))),
26879             Call
26880               ("dfn'LoadSignedByteUnprivileged",ATy(qTy,PTy(uTy,qTy)),
26881                Var("v50",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset2"))))))),
26882            (Call
26883               ("LoadUnprivileged",CTy"Load",
26884                Var("v51",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))),
26885             Call
26886               ("dfn'LoadUnprivileged",ATy(qTy,PTy(uTy,qTy)),
26887                Var("v51",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))),
26888            (Call
26889               ("LoadWord",CTy"Load",
26890                Var("v52",
26891                    PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))),
26892             Call
26893               ("dfn'LoadWord",ATy(qTy,PTy(uTy,qTy)),
26894                Var("v52",
26895                    PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))))])),
26896       (Call("Media",CTy"instruction",Var("v53",CTy"Media")),
26897        CS(Var("v53",CTy"Media"),
26898           [(Call
26899               ("BitFieldClearOrInsert",CTy"Media",
26900                Var("v54",PTy(F4,PTy(F4,PTy(nTy,nTy))))),
26901             Call
26902               ("dfn'BitFieldClearOrInsert",ATy(qTy,PTy(uTy,qTy)),
26903                Var("v54",PTy(F4,PTy(F4,PTy(nTy,nTy)))))),
26904            (Call
26905               ("BitFieldExtract",CTy"Media",
26906                Var("v55",PTy(bTy,PTy(F4,PTy(F4,PTy(nTy,nTy)))))),
26907             Call
26908               ("dfn'BitFieldExtract",ATy(qTy,PTy(uTy,qTy)),
26909                Var("v55",PTy(bTy,PTy(F4,PTy(F4,PTy(nTy,nTy))))))),
26910            (Call("ByteReverse",CTy"Media",Var("v56",PTy(F4,F4))),
26911             Call
26912               ("dfn'ByteReverse",ATy(qTy,PTy(uTy,qTy)),
26913                Var("v56",PTy(F4,F4)))),
26914            (Call
26915               ("ByteReversePackedHalfword",CTy"Media",
26916                Var("v57",PTy(F4,F4))),
26917             Call
26918               ("dfn'ByteReversePackedHalfword",ATy(qTy,PTy(uTy,qTy)),
26919                Var("v57",PTy(F4,F4)))),
26920            (Call
26921               ("ByteReverseSignedHalfword",CTy"Media",
26922                Var("v58",PTy(F4,F4))),
26923             Call
26924               ("dfn'ByteReverseSignedHalfword",ATy(qTy,PTy(uTy,qTy)),
26925                Var("v58",PTy(F4,F4)))),
26926            (Call
26927               ("ExtendByte",CTy"Media",
26928                Var("v59",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,nTy)))))),
26929             Call
26930               ("dfn'ExtendByte",ATy(qTy,PTy(uTy,qTy)),
26931                Var("v59",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,nTy))))))),
26932            (Call
26933               ("ExtendByte16",CTy"Media",
26934                Var("v60",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,nTy)))))),
26935             Call
26936               ("dfn'ExtendByte16",ATy(qTy,PTy(uTy,qTy)),
26937                Var("v60",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,nTy))))))),
26938            (Call
26939               ("ExtendHalfword",CTy"Media",
26940                Var("v61",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,nTy)))))),
26941             Call
26942               ("dfn'ExtendHalfword",ATy(qTy,PTy(uTy,qTy)),
26943                Var("v61",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,nTy))))))),
26944            (Call
26945               ("PackHalfword",CTy"Media",
26946                Var("v62",
26947                    PTy(CTy"SRType",PTy(nTy,PTy(bTy,PTy(F4,PTy(F4,F4))))))),
26948             Call
26949               ("dfn'PackHalfword",ATy(qTy,PTy(uTy,qTy)),
26950                Var("v62",
26951                    PTy(CTy"SRType",PTy(nTy,PTy(bTy,PTy(F4,PTy(F4,F4)))))))),
26952            (Call("ReverseBits",CTy"Media",Var("v63",PTy(F4,F4))),
26953             Call
26954               ("dfn'ReverseBits",ATy(qTy,PTy(uTy,qTy)),
26955                Var("v63",PTy(F4,F4)))),
26956            (Call
26957               ("Saturate",CTy"Media",
26958                Var("v64",
26959                    PTy(CTy"SRType",PTy(nTy,PTy(nTy,PTy(bTy,PTy(F4,F4))))))),
26960             Call
26961               ("dfn'Saturate",ATy(qTy,PTy(uTy,qTy)),
26962                Var("v64",
26963                    PTy(CTy"SRType",PTy(nTy,PTy(nTy,PTy(bTy,PTy(F4,F4)))))))),
26964            (Call
26965               ("Saturate16",CTy"Media",
26966                Var("v65",PTy(nTy,PTy(bTy,PTy(F4,F4))))),
26967             Call
26968               ("dfn'Saturate16",ATy(qTy,PTy(uTy,qTy)),
26969                Var("v65",PTy(nTy,PTy(bTy,PTy(F4,F4)))))),
26970            (Call
26971               ("SaturatingAddSubtract",CTy"Media",
26972                Var("v66",PTy(FTy 2,PTy(F4,PTy(F4,F4))))),
26973             Call
26974               ("dfn'SaturatingAddSubtract",ATy(qTy,PTy(uTy,qTy)),
26975                Var("v66",PTy(FTy 2,PTy(F4,PTy(F4,F4)))))),
26976            (Call("SelectBytes",CTy"Media",Var("v67",PTy(F4,PTy(F4,F4)))),
26977             Call
26978               ("dfn'SelectBytes",ATy(qTy,PTy(uTy,qTy)),
26979                Var("v67",PTy(F4,PTy(F4,F4)))))])),
26980       (Call("Multiply",CTy"instruction",Var("v68",CTy"Multiply")),
26981        CS(Var("v68",CTy"Multiply"),
26982           [(Call
26983               ("Multiply32",CTy"Multiply",
26984                Var("v69",PTy(bTy,PTy(F4,PTy(F4,F4))))),
26985             Call
26986               ("dfn'Multiply32",ATy(qTy,PTy(uTy,qTy)),
26987                Var("v69",PTy(bTy,PTy(F4,PTy(F4,F4)))))),
26988            (Call
26989               ("MultiplyAccumulate",CTy"Multiply",
26990                Var("v70",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))),
26991             Call
26992               ("dfn'MultiplyAccumulate",ATy(qTy,PTy(uTy,qTy)),
26993                Var("v70",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))))),
26994            (Call
26995               ("MultiplyAccumulateAccumulate",CTy"Multiply",
26996                Var("v71",PTy(F4,PTy(F4,PTy(F4,F4))))),
26997             Call
26998               ("dfn'MultiplyAccumulateAccumulate",ATy(qTy,PTy(uTy,qTy)),
26999                Var("v71",PTy(F4,PTy(F4,PTy(F4,F4)))))),
27000            (Call
27001               ("MultiplyLong",CTy"Multiply",
27002                Var("v72",
27003                    PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))))),
27004             Call
27005               ("dfn'MultiplyLong",ATy(qTy,PTy(uTy,qTy)),
27006                Var("v72",
27007                    PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))))))),
27008            (Call
27009               ("MultiplySubtract",CTy"Multiply",
27010                Var("v73",PTy(F4,PTy(F4,PTy(F4,F4))))),
27011             Call
27012               ("dfn'MultiplySubtract",ATy(qTy,PTy(uTy,qTy)),
27013                Var("v73",PTy(F4,PTy(F4,PTy(F4,F4)))))),
27014            (Call
27015               ("Signed16Multiply32Accumulate",CTy"Multiply",
27016                Var("v74",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))))),
27017             Call
27018               ("dfn'Signed16Multiply32Accumulate",ATy(qTy,PTy(uTy,qTy)),
27019                Var("v74",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))))),
27020            (Call
27021               ("Signed16Multiply32Result",CTy"Multiply",
27022                Var("v75",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,F4)))))),
27023             Call
27024               ("dfn'Signed16Multiply32Result",ATy(qTy,PTy(uTy,qTy)),
27025                Var("v75",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,F4))))))),
27026            (Call
27027               ("Signed16Multiply64Accumulate",CTy"Multiply",
27028                Var("v76",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))))),
27029             Call
27030               ("dfn'Signed16Multiply64Accumulate",ATy(qTy,PTy(uTy,qTy)),
27031                Var("v76",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))))),
27032            (Call
27033               ("Signed16x32Multiply32Accumulate",CTy"Multiply",
27034                Var("v77",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))),
27035             Call
27036               ("dfn'Signed16x32Multiply32Accumulate",
27037                ATy(qTy,PTy(uTy,qTy)),
27038                Var("v77",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))))),
27039            (Call
27040               ("Signed16x32Multiply32Result",CTy"Multiply",
27041                Var("v78",PTy(bTy,PTy(F4,PTy(F4,F4))))),
27042             Call
27043               ("dfn'Signed16x32Multiply32Result",ATy(qTy,PTy(uTy,qTy)),
27044                Var("v78",PTy(bTy,PTy(F4,PTy(F4,F4)))))),
27045            (Call
27046               ("SignedMostSignificantMultiply",CTy"Multiply",
27047                Var("v79",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))),
27048             Call
27049               ("dfn'SignedMostSignificantMultiply",ATy(qTy,PTy(uTy,qTy)),
27050                Var("v79",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))))),
27051            (Call
27052               ("SignedMostSignificantMultiplySubtract",CTy"Multiply",
27053                Var("v80",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))),
27054             Call
27055               ("dfn'SignedMostSignificantMultiplySubtract",
27056                ATy(qTy,PTy(uTy,qTy)),
27057                Var("v80",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))))),
27058            (Call
27059               ("SignedMultiplyDual",CTy"Multiply",
27060                Var("v81",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))))),
27061             Call
27062               ("dfn'SignedMultiplyDual",ATy(qTy,PTy(uTy,qTy)),
27063                Var("v81",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))))),
27064            (Call
27065               ("SignedMultiplyLongDual",CTy"Multiply",
27066                Var("v82",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))))),
27067             Call
27068               ("dfn'SignedMultiplyLongDual",ATy(qTy,PTy(uTy,qTy)),
27069                Var("v82",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))))))])),
27070       (Call("SIMD",CTy"instruction",Var("v83",CTy"SIMD")),
27071        CS(Var("v83",CTy"SIMD"),
27072           [(Call
27073               ("SignedAddSub16",CTy"SIMD",
27074                Var("v84",PTy(FTy 2,PTy(F4,PTy(F4,F4))))),
27075             Call
27076               ("dfn'SignedAddSub16",ATy(qTy,PTy(uTy,qTy)),
27077                Var("v84",PTy(FTy 2,PTy(F4,PTy(F4,F4)))))),
27078            (Call
27079               ("SignedAddSub8",CTy"SIMD",
27080                Var("v85",PTy(bTy,PTy(F4,PTy(F4,F4))))),
27081             Call
27082               ("dfn'SignedAddSub8",ATy(qTy,PTy(uTy,qTy)),
27083                Var("v85",PTy(bTy,PTy(F4,PTy(F4,F4)))))),
27084            (Call
27085               ("SignedHalvingAddSub16",CTy"SIMD",
27086                Var("v86",PTy(FTy 2,PTy(F4,PTy(F4,F4))))),
27087             Call
27088               ("dfn'SignedHalvingAddSub16",ATy(qTy,PTy(uTy,qTy)),
27089                Var("v86",PTy(FTy 2,PTy(F4,PTy(F4,F4)))))),
27090            (Call
27091               ("SignedHalvingAddSub8",CTy"SIMD",
27092                Var("v87",PTy(bTy,PTy(F4,PTy(F4,F4))))),
27093             Call
27094               ("dfn'SignedHalvingAddSub8",ATy(qTy,PTy(uTy,qTy)),
27095                Var("v87",PTy(bTy,PTy(F4,PTy(F4,F4)))))),
27096            (Call
27097               ("SignedSaturatingAddSub16",CTy"SIMD",
27098                Var("v88",PTy(FTy 2,PTy(F4,PTy(F4,F4))))),
27099             Call
27100               ("dfn'SignedSaturatingAddSub16",ATy(qTy,PTy(uTy,qTy)),
27101                Var("v88",PTy(FTy 2,PTy(F4,PTy(F4,F4)))))),
27102            (Call
27103               ("SignedSaturatingAddSub8",CTy"SIMD",
27104                Var("v89",PTy(bTy,PTy(F4,PTy(F4,F4))))),
27105             Call
27106               ("dfn'SignedSaturatingAddSub8",ATy(qTy,PTy(uTy,qTy)),
27107                Var("v89",PTy(bTy,PTy(F4,PTy(F4,F4)))))),
27108            (Call
27109               ("UnsignedAddSub16",CTy"SIMD",
27110                Var("v90",PTy(FTy 2,PTy(F4,PTy(F4,F4))))),
27111             Call
27112               ("dfn'UnsignedAddSub16",ATy(qTy,PTy(uTy,qTy)),
27113                Var("v90",PTy(FTy 2,PTy(F4,PTy(F4,F4)))))),
27114            (Call
27115               ("UnsignedAddSub8",CTy"SIMD",
27116                Var("v91",PTy(bTy,PTy(F4,PTy(F4,F4))))),
27117             Call
27118               ("dfn'UnsignedAddSub8",ATy(qTy,PTy(uTy,qTy)),
27119                Var("v91",PTy(bTy,PTy(F4,PTy(F4,F4)))))),
27120            (Call
27121               ("UnsignedHalvingAddSub16",CTy"SIMD",
27122                Var("v92",PTy(FTy 2,PTy(F4,PTy(F4,F4))))),
27123             Call
27124               ("dfn'UnsignedHalvingAddSub16",ATy(qTy,PTy(uTy,qTy)),
27125                Var("v92",PTy(FTy 2,PTy(F4,PTy(F4,F4)))))),
27126            (Call
27127               ("UnsignedHalvingAddSub8",CTy"SIMD",
27128                Var("v93",PTy(bTy,PTy(F4,PTy(F4,F4))))),
27129             Call
27130               ("dfn'UnsignedHalvingAddSub8",ATy(qTy,PTy(uTy,qTy)),
27131                Var("v93",PTy(bTy,PTy(F4,PTy(F4,F4)))))),
27132            (Call
27133               ("UnsignedSaturatingAddSub16",CTy"SIMD",
27134                Var("v94",PTy(FTy 2,PTy(F4,PTy(F4,F4))))),
27135             Call
27136               ("dfn'UnsignedSaturatingAddSub16",ATy(qTy,PTy(uTy,qTy)),
27137                Var("v94",PTy(FTy 2,PTy(F4,PTy(F4,F4)))))),
27138            (Call
27139               ("UnsignedSaturatingAddSub8",CTy"SIMD",
27140                Var("v95",PTy(bTy,PTy(F4,PTy(F4,F4))))),
27141             Call
27142               ("dfn'UnsignedSaturatingAddSub8",ATy(qTy,PTy(uTy,qTy)),
27143                Var("v95",PTy(bTy,PTy(F4,PTy(F4,F4)))))),
27144            (Call
27145               ("UnsignedSumAbsoluteDifferences",CTy"SIMD",
27146                Var("v96",PTy(F4,PTy(F4,PTy(F4,F4))))),
27147             Call
27148               ("dfn'UnsignedSumAbsoluteDifferences",
27149                ATy(qTy,PTy(uTy,qTy)),
27150                Var("v96",PTy(F4,PTy(F4,PTy(F4,F4))))))])),
27151       (Call("Store",CTy"instruction",Var("v97",CTy"Store")),
27152        CS(Var("v97",CTy"Store"),
27153           [(Call
27154               ("StoreByte",CTy"Store",
27155                Var("v98",
27156                    PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))),
27157             Call
27158               ("dfn'StoreByte",ATy(qTy,PTy(uTy,qTy)),
27159                Var("v98",
27160                    PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))))),
27161            (Call
27162               ("StoreByteUnprivileged",CTy"Store",
27163                Var("v99",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))),
27164             Call
27165               ("dfn'StoreByteUnprivileged",ATy(qTy,PTy(uTy,qTy)),
27166                Var("v99",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))),
27167            (Call
27168               ("StoreDual",CTy"Store",
27169                Var("v100",
27170                    PTy(bTy,
27171                        PTy(bTy,
27172                            PTy(bTy,PTy(F4,PTy(F4,PTy(F4,CTy"offset2")))))))),
27173             Call
27174               ("dfn'StoreDual",ATy(qTy,PTy(uTy,qTy)),
27175                Var("v100",
27176                    PTy(bTy,
27177                        PTy(bTy,
27178                            PTy(bTy,PTy(F4,PTy(F4,PTy(F4,CTy"offset2"))))))))),
27179            (Call
27180               ("StoreExclusive",CTy"Store",
27181                Var("v101",PTy(F4,PTy(F4,PTy(F4,F32))))),
27182             Call
27183               ("dfn'StoreExclusive",ATy(qTy,PTy(uTy,qTy)),
27184                Var("v101",PTy(F4,PTy(F4,PTy(F4,F32)))))),
27185            (Call
27186               ("StoreExclusiveByte",CTy"Store",
27187                Var("v102",PTy(F4,PTy(F4,F4)))),
27188             Call
27189               ("dfn'StoreExclusiveByte",ATy(qTy,PTy(uTy,qTy)),
27190                Var("v102",PTy(F4,PTy(F4,F4))))),
27191            (Call
27192               ("StoreExclusiveDoubleword",CTy"Store",
27193                Var("v103",PTy(F4,PTy(F4,PTy(F4,F4))))),
27194             Call
27195               ("dfn'StoreExclusiveDoubleword",ATy(qTy,PTy(uTy,qTy)),
27196                Var("v103",PTy(F4,PTy(F4,PTy(F4,F4)))))),
27197            (Call
27198               ("StoreExclusiveHalf",CTy"Store",
27199                Var("v104",PTy(F4,PTy(F4,F4)))),
27200             Call
27201               ("dfn'StoreExclusiveHalf",ATy(qTy,PTy(uTy,qTy)),
27202                Var("v104",PTy(F4,PTy(F4,F4))))),
27203            (Call
27204               ("StoreHalf",CTy"Store",
27205                Var("v105",
27206                    PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))),
27207             Call
27208               ("dfn'StoreHalf",ATy(qTy,PTy(uTy,qTy)),
27209                Var("v105",
27210                    PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))))),
27211            (Call
27212               ("StoreHalfUnprivileged",CTy"Store",
27213                Var("v106",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset2")))))),
27214             Call
27215               ("dfn'StoreHalfUnprivileged",ATy(qTy,PTy(uTy,qTy)),
27216                Var("v106",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset2"))))))),
27217            (Call
27218               ("StoreMultiple",CTy"Store",
27219                Var("v107",PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,F16)))))),
27220             Call
27221               ("dfn'StoreMultiple",ATy(qTy,PTy(uTy,qTy)),
27222                Var("v107",PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,F16))))))),
27223            (Call
27224               ("StoreMultipleUserRegisters",CTy"Store",
27225                Var("v108",PTy(bTy,PTy(bTy,PTy(F4,F16))))),
27226             Call
27227               ("dfn'StoreMultipleUserRegisters",ATy(qTy,PTy(uTy,qTy)),
27228                Var("v108",PTy(bTy,PTy(bTy,PTy(F4,F16)))))),
27229            (Call
27230               ("StoreUnprivileged",CTy"Store",
27231                Var("v109",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))),
27232             Call
27233               ("dfn'StoreUnprivileged",ATy(qTy,PTy(uTy,qTy)),
27234                Var("v109",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))),
27235            (Call
27236               ("StoreWord",CTy"Store",
27237                Var("v110",
27238                    PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))),
27239             Call
27240               ("dfn'StoreWord",ATy(qTy,PTy(uTy,qTy)),
27241                Var("v110",
27242                    PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))))])),
27243       (Call("System",CTy"instruction",Var("v111",CTy"System")),
27244        CS(Var("v111",CTy"System"),
27245           [(Const("ExceptionReturn",CTy"System"),
27246             Const("dfn'ExceptionReturn",ATy(qTy,PTy(uTy,qTy)))),
27247            (Call
27248               ("ChangeProcessorState",CTy"System",
27249                Var("v112",
27250                    PTy(bTy,
27251                        PTy(bTy,PTy(bTy,PTy(bTy,PTy(bTy,PTy(bTy,FTy 5)))))))),
27252             Call
27253               ("dfn'ChangeProcessorState",ATy(qTy,PTy(uTy,qTy)),
27254                Var("v112",
27255                    PTy(bTy,
27256                        PTy(bTy,PTy(bTy,PTy(bTy,PTy(bTy,PTy(bTy,FTy 5))))))))),
27257            (Call
27258               ("ChangeProcessorStateT1",CTy"System",
27259                Var("v113",PTy(bTy,PTy(bTy,PTy(bTy,bTy))))),
27260             Call
27261               ("dfn'ChangeProcessorStateT1",ATy(qTy,PTy(uTy,qTy)),
27262                Var("v113",PTy(bTy,PTy(bTy,PTy(bTy,bTy)))))),
27263            (Call("EnterxLeavex",CTy"System",bVar"v114"),
27264             Call("dfn'EnterxLeavex",ATy(qTy,PTy(uTy,qTy)),bVar"v114")),
27265            (Call("HypervisorCall",CTy"System",Var("v115",F16)),
27266             Call
27267               ("dfn'HypervisorCall",ATy(qTy,PTy(uTy,qTy)),Var("v115",F16))),
27268            (Call
27269               ("MoveToBankedOrSpecialRegister",CTy"System",
27270                Var("v116",PTy(bTy,PTy(FTy 5,F4)))),
27271             Call
27272               ("dfn'MoveToBankedOrSpecialRegister",ATy(qTy,PTy(uTy,qTy)),
27273                Var("v116",PTy(bTy,PTy(FTy 5,F4))))),
27274            (Call
27275               ("MoveToRegisterFromBankedOrSpecial",CTy"System",
27276                Var("v117",PTy(bTy,PTy(FTy 5,F4)))),
27277             Call
27278               ("dfn'MoveToRegisterFromBankedOrSpecial",
27279                ATy(qTy,PTy(uTy,qTy)),Var("v117",PTy(bTy,PTy(FTy 5,F4))))),
27280            (Call
27281               ("MoveToRegisterFromSpecial",CTy"System",
27282                Var("v118",PTy(bTy,F4))),
27283             Call
27284               ("dfn'MoveToRegisterFromSpecial",ATy(qTy,PTy(uTy,qTy)),
27285                Var("v118",PTy(bTy,F4)))),
27286            (Call
27287               ("MoveToSpecialFromImmediate",CTy"System",
27288                Var("v119",PTy(bTy,PTy(F32,F4)))),
27289             Call
27290               ("dfn'MoveToSpecialFromImmediate",ATy(qTy,PTy(uTy,qTy)),
27291                Var("v119",PTy(bTy,PTy(F32,F4))))),
27292            (Call
27293               ("MoveToSpecialFromRegister",CTy"System",
27294                Var("v120",PTy(bTy,PTy(F4,F4)))),
27295             Call
27296               ("dfn'MoveToSpecialFromRegister",ATy(qTy,PTy(uTy,qTy)),
27297                Var("v120",PTy(bTy,PTy(F4,F4))))),
27298            (Call
27299               ("ReturnFromException",CTy"System",
27300                Var("v121",PTy(bTy,PTy(bTy,PTy(bTy,F4))))),
27301             Call
27302               ("dfn'ReturnFromException",ATy(qTy,PTy(uTy,qTy)),
27303                Var("v121",PTy(bTy,PTy(bTy,PTy(bTy,F4)))))),
27304            (Call("SecureMonitorCall",CTy"System",Var("v122",F4)),
27305             Call
27306               ("dfn'SecureMonitorCall",ATy(qTy,PTy(uTy,qTy)),
27307                Var("v122",F4))),
27308            (Call("Setend",CTy"System",bVar"v123"),
27309             Call("dfn'Setend",ATy(qTy,PTy(uTy,qTy)),bVar"v123")),
27310            (Call
27311               ("StoreReturnState",CTy"System",
27312                Var("v124",PTy(bTy,PTy(bTy,PTy(bTy,FTy 5))))),
27313             Call
27314               ("dfn'StoreReturnState",ATy(qTy,PTy(uTy,qTy)),
27315                Var("v124",PTy(bTy,PTy(bTy,PTy(bTy,FTy 5)))))),
27316            (Call("SupervisorCall",CTy"System",Var("v125",F32)),
27317             Call
27318               ("dfn'SupervisorCall",ATy(qTy,PTy(uTy,qTy)),Var("v125",F32)))]))]))
27319;
27320val Fetch_def = Def0
27321  ("Fetch",
27322   MB(Call("CurrentInstrSet",ATy(qTy,PTy(CTy"InstrSet",qTy)),LU),
27323      Close
27324        (Var("iset",CTy"InstrSet"),
27325         MB(MR(Close
27326                 (qVar"s",Dest("Architecture",CTy"Architecture",qVar"s"))),
27327            Close
27328              (Var("v",CTy"Architecture"),
27329               MB(MB(MU(EQ(Var("v",CTy"Architecture"),
27330                           LC("ARMv4",CTy"Architecture")),qTy),
27331                     Close
27332                       (bVar"v",
27333                        MU(Bop(Or,
27334                               EQ(Var("iset",CTy"InstrSet"),
27335                                  LC("InstrSet_ARM",CTy"InstrSet")),
27336                               bVar"v"),qTy))),
27337                  Close
27338                    (bVar"b",
27339                     ITB([(bVar"b",
27340                           MB(MW(Close
27341                                   (qVar"s",
27342                                    Rupd
27343                                      ("Encoding",
27344                                       TP[qVar"s",
27345                                          LC("Encoding_ARM",CTy"Encoding")]))),
27346                              Close
27347                                (AVar uTy,
27348                                 MB(MR(Close
27349                                         (qVar"s",
27350                                          Dest
27351                                            ("REG",ATy(CTy"RName",F32),
27352                                             qVar"s"))),
27353                                    Close
27354                                      (Var("v",ATy(CTy"RName",F32)),
27355                                       MB(MB(MB(MU(Apply
27356                                                     (Var("v",
27357                                                          ATy(CTy"RName",
27358                                                              F32)),
27359                                                      LC("RName_PC",
27360                                                         CTy"RName")),qTy),
27361                                                Close
27362                                                  (Var("v",F32),
27363                                                   MU(TP[Var("v",F32),LN 4],
27364                                                      qTy))),
27365                                             Close
27366                                               (Var("v",PTy(F32,nTy)),
27367                                                Call
27368                                                  ("MemA",
27369                                                   ATy(qTy,PTy(F32,qTy)),
27370                                                   Var("v",PTy(F32,nTy))))),
27371                                          Close
27372                                            (Var("v",F32),
27373                                             MU(Call
27374                                                  ("ARM",CTy"MachineCode",
27375                                                   Var("v",F32)),qTy)))))))),
27376                          (EQ(Var("iset",CTy"InstrSet"),
27377                              LC("InstrSet_Jazelle",CTy"InstrSet")),
27378                           Call
27379                             ("raise'exception",
27380                              ATy(qTy,PTy(CTy"MachineCode",qTy)),
27381                              Call
27382                                ("UNPREDICTABLE",CTy"exception",LS"Fetch")))],
27383                         MB(MR(Close
27384                                 (qVar"s",
27385                                  Dest("REG",ATy(CTy"RName",F32),qVar"s"))),
27386                            Close
27387                              (Var("v",ATy(CTy"RName",F32)),
27388                               MB(MU(Apply
27389                                       (Var("v",ATy(CTy"RName",F32)),
27390                                        LC("RName_PC",CTy"RName")),qTy),
27391                                  Close
27392                                    (Var("fpc",F32),
27393                                     MB(Call
27394                                          ("MemA",ATy(qTy,PTy(F16,qTy)),
27395                                           TP[Var("fpc",F32),LN 2]),
27396                                        Close
27397                                          (Var("ireg",F16),
27398                                           MB(MR(Close
27399                                                   (qVar"s",
27400                                                    Dest
27401                                                      ("data_abort",bTy,
27402                                                       qVar"s"))),
27403                                              Close
27404                                                (bVar"b",
27405                                                 ITB([(bVar"b",
27406                                                       MU(LX(CTy"MachineCode"),
27407                                                          qTy)),
27408                                                      (Bop(And,
27409                                                           EQ(EX(Var("ireg",
27410                                                                     F16),
27411                                                                 LN 15,
27412                                                                 LN 13,
27413                                                                 FTy 3),
27414                                                              LW(7,3)),
27415                                                           Mop(Not,
27416                                                               EQ(EX(Var("ireg",
27417                                                                         F16),
27418                                                                     LN 12,
27419                                                                     LN 11,
27420                                                                     FTy 2),
27421                                                                  LW(0,2)))),
27422                                                       MB(MW(Close
27423                                                               (qVar"s",
27424                                                                Rupd
27425                                                                  ("Encoding",
27426                                                                   TP[qVar"s",
27427                                                                      LC("Encoding_Thumb2",
27428                                                                         CTy"Encoding")]))),
27429                                                          Close
27430                                                            (AVar uTy,
27431                                                             MB(Call
27432                                                                  ("MemA",
27433                                                                   ATy(qTy,
27434                                                                       PTy(F16,
27435                                                                           qTy)),
27436                                                                   TP[Bop(Add,
27437                                                                          Var("fpc",
27438                                                                              F32),
27439                                                                          LW(2,
27440                                                                             32)),
27441                                                                      LN 2]),
27442                                                                Close
27443                                                                  (Var("v",
27444                                                                       F16),
27445                                                                   MB(MU(TP[Var("ireg",
27446                                                                                F16),
27447                                                                            Var("v",
27448                                                                                F16)],
27449                                                                         qTy),
27450                                                                      Close
27451                                                                        (Var("v",
27452                                                                             PTy(F16,
27453                                                                                 F16)),
27454                                                                         MU(Call
27455                                                                              ("Thumb2",
27456                                                                               CTy"MachineCode",
27457                                                                               Var("v",
27458                                                                                   PTy(F16,
27459                                                                                       F16))),
27460                                                                            qTy))))))))],
27461                                                     MB(MW(Close
27462                                                             (qVar"s",
27463                                                              Rupd
27464                                                                ("Encoding",
27465                                                                 TP[qVar"s",
27466                                                                    LC("Encoding_Thumb",
27467                                                                       CTy"Encoding")]))),
27468                                                        Close
27469                                                          (AVar uTy,
27470                                                           MB(Call
27471                                                                ("HaveThumbEE",
27472                                                                 ATy(qTy,
27473                                                                     PTy(bTy,
27474                                                                         qTy)),
27475                                                                 LU),
27476                                                              Close
27477                                                                (bVar"v",
27478                                                                 MB(MB(MU(Mop(Not,
27479                                                                              bVar"v"),
27480                                                                          qTy),
27481                                                                       Close
27482                                                                         (bVar"v",
27483                                                                          MU(Bop(Or,
27484                                                                                 EQ(Var("iset",
27485                                                                                        CTy"InstrSet"),
27486                                                                                    LC("InstrSet_Thumb",
27487                                                                                       CTy"InstrSet")),
27488                                                                                 bVar"v"),
27489                                                                             qTy))),
27490                                                                    Close
27491                                                                      (bVar"b",
27492                                                                       MU(ITE(bVar"b",
27493                                                                              Call
27494                                                                                ("Thumb",
27495                                                                                 CTy"MachineCode",
27496                                                                                 Var("ireg",
27497                                                                                     F16)),
27498                                                                              Call
27499                                                                                ("ThumbEE",
27500                                                                                 CTy"MachineCode",
27501                                                                                 Var("ireg",
27502                                                                                     F16))),
27503                                                                          qTy))))))))))))))))))))))))
27504;
27505val Take_def = Def
27506  ("Take",TP[Var("cond",F4),bVar"defined"],
27507   MB(MW(Close
27508           (qVar"s",Rupd("CurrentCondition",TP[qVar"s",Var("cond",F4)]))),
27509      Close
27510        (AVar uTy,
27511         MB(Call("ConditionPassed",ATy(qTy,PTy(bTy,qTy)),LU),
27512            Close
27513              (bVar"pass",
27514               MB(MW(Close
27515                       (qVar"s",
27516                        Rupd
27517                          ("undefined",
27518                           TP[qVar"s",
27519                              Bop(And,bVar"pass",Mop(Not,bVar"defined"))]))),
27520                  Close
27521                    (AVar uTy,MU(Bop(And,bVar"pass",bVar"defined"),qTy))))))))
27522;
27523val Skip_def = Def
27524  ("Skip",AVar uTy,
27525   MB(MR(Close(qVar"s",Dest("undefined",bTy,qVar"s"))),
27526      Close
27527        (bVar"b",
27528         MU(ITE(bVar"b",Call("Undefined",CTy"instruction",LW(0,32)),
27529                Const("NoOperation",CTy"instruction")),qTy))))
27530;
27531val UndefinedARM_def = Def
27532  ("UndefinedARM",Var("cond",F4),
27533   MB(MW(Close
27534           (qVar"s",Rupd("CurrentCondition",TP[qVar"s",Var("cond",F4)]))),
27535      Close
27536        (AVar uTy,
27537         MB(Call("ConditionPassed",ATy(qTy,PTy(bTy,qTy)),LU),
27538            Close
27539              (bVar"b",
27540               MU(ITE(bVar"b",Call("Undefined",CTy"instruction",LW(0,32)),
27541                      Const("NoOperation",CTy"instruction")),qTy))))))
27542;
27543val UndefinedThumb_def = Def
27544  ("UndefinedThumb",AVar uTy,
27545   MB(Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
27546      Close
27547        (Var("v",F4),
27548         Call
27549           ("UndefinedARM",ATy(qTy,PTy(CTy"instruction",qTy)),Var("v",F4)))))
27550;
27551val DECODE_UNPREDICTABLE_def = Def
27552  ("DECODE_UNPREDICTABLE",TP[Var("mc",CTy"MachineCode"),sVar"s"],
27553   Call
27554     ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
27555      Call
27556        ("UNPREDICTABLE",CTy"exception",
27557         CC[LS"Decode ",
27558            CS(Var("mc",CTy"MachineCode"),
27559               [(Call("ARM",CTy"MachineCode",Var("opc",F32)),
27560                 CC[Mop(Cast sTy,Mop(Cast vTy,Var("opc",F32))),LS"; ARM; "]),
27561                (Call("Thumb",CTy"MachineCode",Var("opc",F16)),
27562                 CC[Mop(Cast sTy,Mop(Cast vTy,Var("opc",F16))),
27563                    LS"; Thumb; "]),
27564                (Call("ThumbEE",CTy"MachineCode",Var("opc",F16)),
27565                 CC[Mop(Cast sTy,Mop(Cast vTy,Var("opc",F16))),
27566                    LS"; ThumbEE; "]),
27567                (Call
27568                   ("Thumb2",CTy"MachineCode",
27569                    TP[Var("opc1",F16),Var("opc2",F16)]),
27570                 CC[Mop(Cast sTy,Mop(Cast vTy,Var("opc1",F16))),LS", ",
27571                    Mop(Cast sTy,Mop(Cast vTy,Var("opc2",F16))),
27572                    LS"; Thumb2; "])]),sVar"s"])))
27573;
27574val DecodeHint_def = Def
27575  ("DecodeHint",TP[Var("cond",F4),Var("op",F8)],
27576   MB(MR(Close(qVar"s",Dest("Architecture",CTy"Architecture",qVar"s"))),
27577      Close
27578        (Var("v",CTy"Architecture"),
27579         MB(MB(MU(EQ(Var("v",CTy"Architecture"),
27580                     LC("ARMv6T2",CTy"Architecture")),qTy),
27581               Close
27582                 (bVar"b",
27583                  ITE(bVar"b",MU(LT,qTy),
27584                      MB(MR(Close
27585                              (qVar"s",
27586                               Dest("Encoding",CTy"Encoding",qVar"s"))),
27587                         Close
27588                           (Var("v",CTy"Encoding"),
27589                            MB(MB(MU(EQ(Var("v",CTy"Encoding"),
27590                                        LC("Encoding_ARM",CTy"Encoding")),
27591                                     qTy),
27592                                  Close
27593                                    (bVar"v",
27594                                     MU(Bop(And,
27595                                            EQ(EX(Var("op",F8),LN 7,LN 4,
27596                                                  F4),LW(15,4)),bVar"v"),
27597                                        qTy))),
27598                               Close
27599                                 (bVar"b",
27600                                  ITE(bVar"b",
27601                                      MB(MR(Close
27602                                              (qVar"s",
27603                                               Dest
27604                                                 ("Architecture",
27605                                                  CTy"Architecture",
27606                                                  qVar"s"))),
27607                                         Close
27608                                           (Var("v",CTy"Architecture"),
27609                                            MU(EQ(Var("v",
27610                                                      CTy"Architecture"),
27611                                                  LC("ARMv6K",
27612                                                     CTy"Architecture")),
27613                                               qTy))),MU(LF,qTy))))))))),
27614            Close
27615              (bVar"b",
27616               ITE(bVar"b",MU(Const("NoOperation",CTy"instruction"),qTy),
27617                   MB(Call("ArchVersion",ATy(qTy,PTy(nTy,qTy)),LU),
27618                      Close
27619                        (nVar"v",
27620                         MB(MB(MB(MB(MU(Bop(Ge,nVar"v",LN 7),qTy),
27621                                     Close
27622                                       (bVar"b",
27623                                        ITE(bVar"b",MU(LT,qTy),
27624                                            MB(MR(Close
27625                                                    (qVar"s",
27626                                                     Dest
27627                                                       ("Encoding",
27628                                                        CTy"Encoding",
27629                                                        qVar"s"))),
27630                                               Close
27631                                                 (Var("v",CTy"Encoding"),
27632                                                  MB(MU(EQ(Var("v",
27633                                                               CTy"Encoding"),
27634                                                           LC("Encoding_ARM",
27635                                                              CTy"Encoding")),
27636                                                        qTy),
27637                                                     Close
27638                                                       (bVar"b",
27639                                                        ITE(bVar"b",
27640                                                            MB(MR(Close
27641                                                                    (qVar"s",
27642                                                                     Dest
27643                                                                       ("Architecture",
27644                                                                        CTy"Architecture",
27645                                                                        qVar"s"))),
27646                                                               Close
27647                                                                 (Var("v",
27648                                                                      CTy"Architecture"),
27649                                                                  MU(EQ(Var("v",
27650                                                                            CTy"Architecture"),
27651                                                                        LC("ARMv6K",
27652                                                                           CTy"Architecture")),
27653                                                                     qTy))),
27654                                                            MU(LF,qTy))))))))),
27655                                  Close
27656                                    (bVar"v",
27657                                     MU(TP[Var("cond",F4),bVar"v"],qTy))),
27658                               Close
27659                                 (Var("v",PTy(F4,bTy)),
27660                                  Call
27661                                    ("Take",ATy(qTy,PTy(bTy,qTy)),
27662                                     Var("v",PTy(F4,bTy))))),
27663                            Close
27664                              (bVar"b",
27665                               ITE(bVar"b",
27666                                   MU(Let(TP[bVar"b'7",bVar"b'6",
27667                                             bVar"b'5",bVar"b'4",
27668                                             bVar"b'3",bVar"b'2",
27669                                             bVar"b'1",bVar"b'0"],
27670                                          BL(8,Var("op",F8)),
27671                                          ITB([(Bop(And,
27672                                                    Mop(Not,bVar"b'7"),
27673                                                    Bop(And,
27674                                                        Mop(Not,bVar"b'6"),
27675                                                        Bop(And,
27676                                                            Mop(Not,
27677                                                                bVar"b'5"),
27678                                                            Bop(And,
27679                                                                Mop(Not,
27680                                                                    bVar"b'4"),
27681                                                                Bop(And,
27682                                                                    Mop(Not,
27683                                                                        bVar"b'3"),
27684                                                                    Bop(And,
27685                                                                        Mop(Not,
27686                                                                            bVar"b'2"),
27687                                                                        Bop(And,
27688                                                                            Mop(Not,
27689                                                                                bVar"b'1"),
27690                                                                            bVar"b'0"))))))),
27691                                                Call
27692                                                  ("Hint",
27693                                                   CTy"instruction",
27694                                                   Const
27695                                                     ("Yield",CTy"Hint"))),
27696                                               (Bop(And,
27697                                                    Mop(Not,bVar"b'7"),
27698                                                    Bop(And,
27699                                                        Mop(Not,bVar"b'6"),
27700                                                        Bop(And,
27701                                                            Mop(Not,
27702                                                                bVar"b'5"),
27703                                                            Bop(And,
27704                                                                Mop(Not,
27705                                                                    bVar"b'4"),
27706                                                                Bop(And,
27707                                                                    Mop(Not,
27708                                                                        bVar"b'3"),
27709                                                                    Bop(And,
27710                                                                        Mop(Not,
27711                                                                            bVar"b'2"),
27712                                                                        Bop(And,
27713                                                                            bVar"b'1",
27714                                                                            Mop(Not,
27715                                                                                bVar"b'0")))))))),
27716                                                Call
27717                                                  ("Hint",
27718                                                   CTy"instruction",
27719                                                   Const
27720                                                     ("WaitForEvent",
27721                                                      CTy"Hint"))),
27722                                               (Bop(And,
27723                                                    Mop(Not,bVar"b'7"),
27724                                                    Bop(And,
27725                                                        Mop(Not,bVar"b'6"),
27726                                                        Bop(And,
27727                                                            Mop(Not,
27728                                                                bVar"b'5"),
27729                                                            Bop(And,
27730                                                                Mop(Not,
27731                                                                    bVar"b'4"),
27732                                                                Bop(And,
27733                                                                    Mop(Not,
27734                                                                        bVar"b'3"),
27735                                                                    Bop(And,
27736                                                                        Mop(Not,
27737                                                                            bVar"b'2"),
27738                                                                        Bop(And,
27739                                                                            bVar"b'1",
27740                                                                            bVar"b'0"))))))),
27741                                                Call
27742                                                  ("Hint",
27743                                                   CTy"instruction",
27744                                                   Const
27745                                                     ("WaitForInterrupt",
27746                                                      CTy"Hint"))),
27747                                               (Bop(And,
27748                                                    Mop(Not,bVar"b'7"),
27749                                                    Bop(And,
27750                                                        Mop(Not,bVar"b'6"),
27751                                                        Bop(And,
27752                                                            Mop(Not,
27753                                                                bVar"b'5"),
27754                                                            Bop(And,
27755                                                                Mop(Not,
27756                                                                    bVar"b'4"),
27757                                                                Bop(And,
27758                                                                    Mop(Not,
27759                                                                        bVar"b'3"),
27760                                                                    Bop(And,
27761                                                                        bVar"b'2",
27762                                                                        Bop(And,
27763                                                                            Mop(Not,
27764                                                                                bVar"b'1"),
27765                                                                            Mop(Not,
27766                                                                                bVar"b'0")))))))),
27767                                                Call
27768                                                  ("Hint",
27769                                                   CTy"instruction",
27770                                                   Const
27771                                                     ("SendEvent",
27772                                                      CTy"Hint"))),
27773                                               (Bop(And,bVar"b'7",
27774                                                    Bop(And,bVar"b'6",
27775                                                        Bop(And,bVar"b'5",
27776                                                            bVar"b'4"))),
27777                                                Call
27778                                                  ("Hint",
27779                                                   CTy"instruction",
27780                                                   Call
27781                                                     ("Debug",CTy"Hint",
27782                                                      Mop(Cast F4,
27783                                                          LL[bVar"b'3",
27784                                                             bVar"b'2",
27785                                                             bVar"b'1",
27786                                                             bVar"b'0"]))))],
27787                                              Const
27788                                                ("NoOperation",
27789                                                 CTy"instruction"))),qTy),
27790                                   Call
27791                                     ("Skip",
27792                                      ATy(qTy,PTy(CTy"instruction",qTy)),
27793                                      LU))))))))))))
27794;
27795val DecodeParallelAdditionSubtraction_def = Def
27796  ("DecodeParallelAdditionSubtraction",
27797   TP[Var("op1",FTy 2),Var("op2",FTy 3),Var("U",F1),Var("Rd",F4),
27798      Var("Rn",F4),Var("Rm",F4)],
27799   ITE(EQ(Var("U",F1),LW(1,1)),
27800       CS(TP[Var("op1",FTy 2),BL(3,Var("op2",FTy 3))],
27801          [(TP[LW(1,2),LF,bVar"x'1",bVar"x'0"],
27802            Call
27803              ("SIMD",CTy"instruction",
27804               Call
27805                 ("UnsignedAddSub16",CTy"SIMD",
27806                  TP[Mop(Cast(FTy 2),LL[bVar"x'1",bVar"x'0"]),
27807                     Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
27808           (TP[LW(1,2),LT,LF,LF],
27809            Call
27810              ("SIMD",CTy"instruction",
27811               Call
27812                 ("UnsignedAddSub8",CTy"SIMD",
27813                  TP[LF,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
27814           (TP[LW(1,2),LT,LT,LT],
27815            Call
27816              ("SIMD",CTy"instruction",
27817               Call
27818                 ("UnsignedAddSub8",CTy"SIMD",
27819                  TP[LT,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
27820           (TP[LW(2,2),LF,bVar"x'1",bVar"x'0"],
27821            Call
27822              ("SIMD",CTy"instruction",
27823               Call
27824                 ("UnsignedSaturatingAddSub16",CTy"SIMD",
27825                  TP[Mop(Cast(FTy 2),LL[bVar"x'1",bVar"x'0"]),
27826                     Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
27827           (TP[LW(2,2),LT,LF,LF],
27828            Call
27829              ("SIMD",CTy"instruction",
27830               Call
27831                 ("UnsignedSaturatingAddSub8",CTy"SIMD",
27832                  TP[LF,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
27833           (TP[LW(2,2),LT,LT,LT],
27834            Call
27835              ("SIMD",CTy"instruction",
27836               Call
27837                 ("UnsignedSaturatingAddSub8",CTy"SIMD",
27838                  TP[LT,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
27839           (TP[LW(3,2),LF,bVar"x'1",bVar"x'0"],
27840            Call
27841              ("SIMD",CTy"instruction",
27842               Call
27843                 ("UnsignedHalvingAddSub16",CTy"SIMD",
27844                  TP[Mop(Cast(FTy 2),LL[bVar"x'1",bVar"x'0"]),
27845                     Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
27846           (TP[LW(3,2),LT,LF,LF],
27847            Call
27848              ("SIMD",CTy"instruction",
27849               Call
27850                 ("UnsignedHalvingAddSub8",CTy"SIMD",
27851                  TP[LF,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
27852           (TP[LW(3,2),LT,LT,LT],
27853            Call
27854              ("SIMD",CTy"instruction",
27855               Call
27856                 ("UnsignedHalvingAddSub8",CTy"SIMD",
27857                  TP[LT,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
27858           (TP[AVar(FTy 2),AVar bTy,AVar bTy,AVar bTy],
27859            Call("Undefined",CTy"instruction",LW(0,32)))]),
27860       CS(TP[Var("op1",FTy 2),BL(3,Var("op2",FTy 3))],
27861          [(TP[LW(1,2),LF,bVar"x'1",bVar"x'0"],
27862            Call
27863              ("SIMD",CTy"instruction",
27864               Call
27865                 ("SignedAddSub16",CTy"SIMD",
27866                  TP[Mop(Cast(FTy 2),LL[bVar"x'1",bVar"x'0"]),
27867                     Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
27868           (TP[LW(1,2),LT,LF,LF],
27869            Call
27870              ("SIMD",CTy"instruction",
27871               Call
27872                 ("SignedAddSub8",CTy"SIMD",
27873                  TP[LF,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
27874           (TP[LW(1,2),LT,LT,LT],
27875            Call
27876              ("SIMD",CTy"instruction",
27877               Call
27878                 ("SignedAddSub8",CTy"SIMD",
27879                  TP[LT,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
27880           (TP[LW(2,2),LF,bVar"x'1",bVar"x'0"],
27881            Call
27882              ("SIMD",CTy"instruction",
27883               Call
27884                 ("SignedSaturatingAddSub16",CTy"SIMD",
27885                  TP[Mop(Cast(FTy 2),LL[bVar"x'1",bVar"x'0"]),
27886                     Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
27887           (TP[LW(2,2),LT,LF,LF],
27888            Call
27889              ("SIMD",CTy"instruction",
27890               Call
27891                 ("SignedSaturatingAddSub8",CTy"SIMD",
27892                  TP[LF,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
27893           (TP[LW(2,2),LT,LT,LT],
27894            Call
27895              ("SIMD",CTy"instruction",
27896               Call
27897                 ("SignedSaturatingAddSub8",CTy"SIMD",
27898                  TP[LT,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
27899           (TP[LW(3,2),LF,bVar"x'1",bVar"x'0"],
27900            Call
27901              ("SIMD",CTy"instruction",
27902               Call
27903                 ("SignedHalvingAddSub16",CTy"SIMD",
27904                  TP[Mop(Cast(FTy 2),LL[bVar"x'1",bVar"x'0"]),
27905                     Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
27906           (TP[LW(3,2),LT,LF,LF],
27907            Call
27908              ("SIMD",CTy"instruction",
27909               Call
27910                 ("SignedHalvingAddSub8",CTy"SIMD",
27911                  TP[LF,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
27912           (TP[LW(3,2),LT,LT,LT],
27913            Call
27914              ("SIMD",CTy"instruction",
27915               Call
27916                 ("SignedHalvingAddSub8",CTy"SIMD",
27917                  TP[LT,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
27918           (TP[AVar(FTy 2),AVar bTy,AVar bTy,AVar bTy],
27919            Call("Undefined",CTy"instruction",LW(0,32)))])))
27920;
27921val DecodeARM_def = Def
27922  ("DecodeARM",Var("w",F32),
27923   Let(Var("mc",CTy"MachineCode"),
27924       Call("ARM",CTy"MachineCode",Var("w",F32)),
27925       Let(Var("cond",F4),EX(Var("w",F32),LN 31,LN 28,F4),
27926           ITE(EQ(Var("cond",F4),LW(15,4)),
27927               Let(TP[bVar"b'27",bVar"b'26",bVar"b'25",bVar"b'24",
27928                      bVar"b'23",bVar"b'22",bVar"b'21",bVar"b'20",
27929                      bVar"b'19",bVar"b'18",bVar"b'17",bVar"b'16",
27930                      bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12",
27931                      bVar"b'11",bVar"b'10",bVar"b'9",bVar"b'8",bVar"b'7",
27932                      bVar"b'6",bVar"b'5",bVar"b'4",bVar"b'3",bVar"b'2",
27933                      bVar"b'1",bVar"b'0"],
27934                   BL(28,EX(Var("w",F32),LN 27,LN 0,FTy 28)),
27935                   ITB([(bVar"b'26",
27936                         ITB([(bVar"b'21",
27937                               ITE(Bop(And,Mop(Not,bVar"b'27"),
27938                                       Bop(And,Mop(Not,bVar"b'25"),
27939                                           Bop(And,bVar"b'24",
27940                                               Bop(And,
27941                                                   Mop(Not,bVar"b'23"),
27942                                                   Bop(And,bVar"b'22",
27943                                                       Bop(And,bVar"b'20",
27944                                                           Mop(Not,
27945                                                               bVar"b'7"))))))),
27946                                   ITB([(Bop(And,Mop(Not,bVar"b'6"),
27947                                             Bop(And,Mop(Not,bVar"b'5"),
27948                                                 bVar"b'4")),
27949                                         MB(MR(Close
27950                                                 (qVar"s",
27951                                                  Dest
27952                                                    ("Architecture",
27953                                                     CTy"Architecture",
27954                                                     qVar"s"))),
27955                                            Close
27956                                              (Var("v",CTy"Architecture"),
27957                                               MB(MB(MB(MU(Bop(In,
27958                                                               Var("v",
27959                                                                   CTy"Architecture"),
27960                                                               SL[LC("ARMv6K",
27961                                                                     CTy"Architecture"),
27962                                                                  LC("ARMv7_A",
27963                                                                     CTy"Architecture"),
27964                                                                  LC("ARMv7_R",
27965                                                                     CTy"Architecture")]),
27966                                                           qTy),
27967                                                        Close
27968                                                          (bVar"v",
27969                                                           MU(TP[LW(14,4),
27970                                                                 bVar"v"],
27971                                                              qTy))),
27972                                                     Close
27973                                                       (Var("v",
27974                                                            PTy(F4,bTy)),
27975                                                        Call
27976                                                          ("Take",
27977                                                           ATy(qTy,
27978                                                               PTy(bTy,qTy)),
27979                                                           Var("v",
27980                                                               PTy(F4,bTy))))),
27981                                                  Close
27982                                                    (bVar"b",
27983                                                     ITE(bVar"b",
27984                                                         MU(Const
27985                                                              ("ClearExclusive",
27986                                                               CTy"instruction"),
27987                                                            qTy),
27988                                                         Call
27989                                                           ("Skip",
27990                                                            ATy(qTy,
27991                                                                PTy(CTy"instruction",
27992                                                                    qTy)),
27993                                                            LU))))))),
27994                                        (Bop(And,bVar"b'19",
27995                                             Bop(And,bVar"b'18",
27996                                                 Bop(And,bVar"b'17",
27997                                                     Bop(And,bVar"b'16",
27998                                                         Bop(And,
27999                                                             bVar"b'15",
28000                                                             Bop(And,
28001                                                                 bVar"b'14",
28002                                                                 Bop(And,
28003                                                                     bVar"b'13",
28004                                                                     Bop(And,
28005                                                                         bVar"b'12",
28006                                                                         Bop(And,
28007                                                                             Mop(Not,
28008                                                                                 bVar"b'11"),
28009                                                                             Bop(And,
28010                                                                                 Mop(Not,
28011                                                                                     bVar"b'10"),
28012                                                                                 Bop(And,
28013                                                                                     Mop(Not,
28014                                                                                         bVar"b'9"),
28015                                                                                     Bop(And,
28016                                                                                         Mop(Not,
28017                                                                                             bVar"b'8"),
28018                                                                                         Bop(And,
28019                                                                                             bVar"b'6",
28020                                                                                             Bop(And,
28021                                                                                                 Mop(Not,
28022                                                                                                     bVar"b'5"),
28023                                                                                                 Mop(Not,
28024                                                                                                     bVar"b'4"))))))))))))))),
28025                                         MB(Call
28026                                              ("ArchVersion",
28027                                               ATy(qTy,PTy(nTy,qTy)),LU),
28028                                            Close
28029                                              (nVar"v",
28030                                               MB(MB(MB(MU(Bop(Ge,nVar"v",
28031                                                               LN 7),qTy),
28032                                                        Close
28033                                                          (bVar"v",
28034                                                           MU(TP[LW(14,4),
28035                                                                 bVar"v"],
28036                                                              qTy))),
28037                                                     Close
28038                                                       (Var("v",
28039                                                            PTy(F4,bTy)),
28040                                                        Call
28041                                                          ("Take",
28042                                                           ATy(qTy,
28043                                                               PTy(bTy,qTy)),
28044                                                           Var("v",
28045                                                               PTy(F4,bTy))))),
28046                                                  Close
28047                                                    (bVar"b",
28048                                                     ITE(bVar"b",
28049                                                         MU(Call
28050                                                              ("Hint",
28051                                                               CTy"instruction",
28052                                                               Call
28053                                                                 ("DataSynchronizationBarrier",
28054                                                                  CTy"Hint",
28055                                                                  Mop(Cast
28056                                                                        F4,
28057                                                                      LL[bVar"b'3",
28058                                                                         bVar"b'2",
28059                                                                         bVar"b'1",
28060                                                                         bVar"b'0"]))),
28061                                                            qTy),
28062                                                         Call
28063                                                           ("Skip",
28064                                                            ATy(qTy,
28065                                                                PTy(CTy"instruction",
28066                                                                    qTy)),
28067                                                            LU))))))),
28068                                        (Bop(And,bVar"b'6",
28069                                             Bop(And,Mop(Not,bVar"b'5"),
28070                                                 bVar"b'4")),
28071                                         MB(Call
28072                                              ("ArchVersion",
28073                                               ATy(qTy,PTy(nTy,qTy)),LU),
28074                                            Close
28075                                              (nVar"v",
28076                                               MB(MB(MB(MU(Bop(Ge,nVar"v",
28077                                                               LN 7),qTy),
28078                                                        Close
28079                                                          (bVar"v",
28080                                                           MU(TP[LW(14,4),
28081                                                                 bVar"v"],
28082                                                              qTy))),
28083                                                     Close
28084                                                       (Var("v",
28085                                                            PTy(F4,bTy)),
28086                                                        Call
28087                                                          ("Take",
28088                                                           ATy(qTy,
28089                                                               PTy(bTy,qTy)),
28090                                                           Var("v",
28091                                                               PTy(F4,bTy))))),
28092                                                  Close
28093                                                    (bVar"b",
28094                                                     ITE(bVar"b",
28095                                                         MU(Call
28096                                                              ("Hint",
28097                                                               CTy"instruction",
28098                                                               Call
28099                                                                 ("DataMemoryBarrier",
28100                                                                  CTy"Hint",
28101                                                                  Mop(Cast
28102                                                                        F4,
28103                                                                      LL[bVar"b'3",
28104                                                                         bVar"b'2",
28105                                                                         bVar"b'1",
28106                                                                         bVar"b'0"]))),
28107                                                            qTy),
28108                                                         Call
28109                                                           ("Skip",
28110                                                            ATy(qTy,
28111                                                                PTy(CTy"instruction",
28112                                                                    qTy)),
28113                                                            LU))))))),
28114                                        (Bop(And,bVar"b'6",
28115                                             Bop(And,bVar"b'5",
28116                                                 Mop(Not,bVar"b'4"))),
28117                                         MB(Call
28118                                              ("ArchVersion",
28119                                               ATy(qTy,PTy(nTy,qTy)),LU),
28120                                            Close
28121                                              (nVar"v",
28122                                               MB(MB(MB(MU(Bop(Ge,nVar"v",
28123                                                               LN 7),qTy),
28124                                                        Close
28125                                                          (bVar"v",
28126                                                           MU(TP[LW(14,4),
28127                                                                 bVar"v"],
28128                                                              qTy))),
28129                                                     Close
28130                                                       (Var("v",
28131                                                            PTy(F4,bTy)),
28132                                                        Call
28133                                                          ("Take",
28134                                                           ATy(qTy,
28135                                                               PTy(bTy,qTy)),
28136                                                           Var("v",
28137                                                               PTy(F4,bTy))))),
28138                                                  Close
28139                                                    (bVar"b",
28140                                                     ITE(bVar"b",
28141                                                         MU(Call
28142                                                              ("Hint",
28143                                                               CTy"instruction",
28144                                                               Call
28145                                                                 ("InstructionSynchronizationBarrier",
28146                                                                  CTy"Hint",
28147                                                                  Mop(Cast
28148                                                                        F4,
28149                                                                      LL[bVar"b'3",
28150                                                                         bVar"b'2",
28151                                                                         bVar"b'1",
28152                                                                         bVar"b'0"]))),
28153                                                            qTy),
28154                                                         Call
28155                                                           ("Skip",
28156                                                            ATy(qTy,
28157                                                                PTy(CTy"instruction",
28158                                                                    qTy)),
28159                                                            LU)))))))],
28160                                       MB(Call
28161                                            ("ArchVersion",
28162                                             ATy(qTy,PTy(nTy,qTy)),LU),
28163                                          Close
28164                                            (nVar"v",
28165                                             MB(MU(Bop(Ge,nVar"v",LN 5),
28166                                                   qTy),
28167                                                Close
28168                                                  (bVar"b",
28169                                                   ITE(bVar"b",
28170                                                       MU(Call
28171                                                            ("Undefined",
28172                                                             CTy"instruction",
28173                                                             LW(0,32)),qTy),
28174                                                       MB(Call
28175                                                            ("DECODE_UNPREDICTABLE",
28176                                                             ATy(qTy,
28177                                                                 PTy(uTy,
28178                                                                     qTy)),
28179                                                             TP[Var("mc",
28180                                                                    CTy"MachineCode"),
28181                                                                LS""]),
28182                                                          Close
28183                                                            (AVar uTy,
28184                                                             MU(LX(CTy"instruction"),
28185                                                                qTy))))))))),
28186                                   MB(Call
28187                                        ("ArchVersion",
28188                                         ATy(qTy,PTy(nTy,qTy)),LU),
28189                                      Close
28190                                        (nVar"v",
28191                                         MB(MU(Bop(Ge,nVar"v",LN 5),qTy),
28192                                            Close
28193                                              (bVar"b",
28194                                               ITE(bVar"b",
28195                                                   MU(Call
28196                                                        ("Undefined",
28197                                                         CTy"instruction",
28198                                                         LW(0,32)),qTy),
28199                                                   MB(Call
28200                                                        ("DECODE_UNPREDICTABLE",
28201                                                         ATy(qTy,
28202                                                             PTy(uTy,qTy)),
28203                                                         TP[Var("mc",
28204                                                                CTy"MachineCode"),
28205                                                            LS""]),
28206                                                      Close
28207                                                        (AVar uTy,
28208                                                         MU(LX(CTy"instruction"),
28209                                                            qTy)))))))))),
28210                              (Bop(And,Mop(Not,bVar"b'27"),bVar"b'20"),
28211                               ITB([(Bop(And,Mop(Not,bVar"b'25"),
28212                                         Bop(And,Mop(Not,bVar"b'24"),
28213                                             bVar"b'22")),
28214                                     MB(Call
28215                                          ("ArchVersion",
28216                                           ATy(qTy,PTy(nTy,qTy)),LU),
28217                                        Close
28218                                          (nVar"v",
28219                                           MB(MB(MB(MU(Bop(Ge,nVar"v",LN 7),
28220                                                       qTy),
28221                                                    Close
28222                                                      (bVar"v",
28223                                                       MU(TP[LW(14,4),
28224                                                             bVar"v"],qTy))),
28225                                                 Close
28226                                                   (Var("v",PTy(F4,bTy)),
28227                                                    Call
28228                                                      ("Take",
28229                                                       ATy(qTy,
28230                                                           PTy(bTy,qTy)),
28231                                                       Var("v",PTy(F4,bTy))))),
28232                                              Close
28233                                                (bVar"b",
28234                                                 ITE(bVar"b",
28235                                                     MU(Call
28236                                                          ("Hint",
28237                                                           CTy"instruction",
28238                                                           Call
28239                                                             ("PreloadInstruction",
28240                                                              CTy"Hint",
28241                                                              TP[EQ(Mop(Cast
28242                                                                          F1,
28243                                                                        LL[bVar"b'23"]),
28244                                                                    LW(1,1)),
28245                                                                 Mop(Cast
28246                                                                       F4,
28247                                                                     LL[bVar"b'19",
28248                                                                        bVar"b'18",
28249                                                                        bVar"b'17",
28250                                                                        bVar"b'16"]),
28251                                                                 Call
28252                                                                   ("immediate_form1",
28253                                                                    CTy"offset1",
28254                                                                    Mop(Cast
28255                                                                          F32,
28256                                                                        Mop(Cast
28257                                                                              (FTy 12),
28258                                                                            LL[bVar"b'11",
28259                                                                               bVar"b'10",
28260                                                                               bVar"b'9",
28261                                                                               bVar"b'8",
28262                                                                               bVar"b'7",
28263                                                                               bVar"b'6",
28264                                                                               bVar"b'5",
28265                                                                               bVar"b'4",
28266                                                                               bVar"b'3",
28267                                                                               bVar"b'2",
28268                                                                               bVar"b'1",
28269                                                                               bVar"b'0"])))])),
28270                                                        qTy),
28271                                                     Call
28272                                                       ("Skip",
28273                                                        ATy(qTy,
28274                                                            PTy(CTy"instruction",
28275                                                                qTy)),LU))))))),
28276                                    (Bop(And,bVar"b'25",
28277                                         Bop(And,Mop(Not,bVar"b'24"),
28278                                             Bop(And,bVar"b'22",
28279                                                 Mop(Not,bVar"b'4")))),
28280                                     Let(Var("Rm",F4),
28281                                         Mop(Cast F4,
28282                                             LL[bVar"b'3",bVar"b'2",
28283                                                bVar"b'1",bVar"b'0"]),
28284                                         MB(Call
28285                                              ("ArchVersion",
28286                                               ATy(qTy,PTy(nTy,qTy)),LU),
28287                                            Close
28288                                              (nVar"v",
28289                                               MB(MB(MB(MU(Bop(Ge,nVar"v",
28290                                                               LN 7),qTy),
28291                                                        Close
28292                                                          (bVar"v",
28293                                                           MU(TP[LW(14,4),
28294                                                                 bVar"v"],
28295                                                              qTy))),
28296                                                     Close
28297                                                       (Var("v",
28298                                                            PTy(F4,bTy)),
28299                                                        Call
28300                                                          ("Take",
28301                                                           ATy(qTy,
28302                                                               PTy(bTy,qTy)),
28303                                                           Var("v",
28304                                                               PTy(F4,bTy))))),
28305                                                  Close
28306                                                    (bVar"b",
28307                                                     ITE(bVar"b",
28308                                                         MB(ITE(EQ(Var("Rm",
28309                                                                       F4),
28310                                                                   LW(15,4)),
28311                                                                Call
28312                                                                  ("DECODE_UNPREDICTABLE",
28313                                                                   ATy(qTy,
28314                                                                       PTy(uTy,
28315                                                                           qTy)),
28316                                                                   TP[Var("mc",
28317                                                                          CTy"MachineCode"),
28318                                                                      LS
28319                                                                       "PreloadInstruction (register)"]),
28320                                                                MU(LU,qTy)),
28321                                                            Close
28322                                                              (AVar uTy,
28323                                                               MU(Let(TP[Var("shift_t",
28324                                                                             CTy"SRType"),
28325                                                                         nVar"shift_n"],
28326                                                                      Call
28327                                                                        ("DecodeImmShift",
28328                                                                         PTy(CTy"SRType",
28329                                                                             nTy),
28330                                                                         TP[Mop(Cast
28331                                                                                  (FTy 2),
28332                                                                                LL[bVar"b'6",
28333                                                                                   bVar"b'5"]),
28334                                                                            Mop(Cast
28335                                                                                  (FTy 5),
28336                                                                                LL[bVar"b'11",
28337                                                                                   bVar"b'10",
28338                                                                                   bVar"b'9",
28339                                                                                   bVar"b'8",
28340                                                                                   bVar"b'7"])]),
28341                                                                      Call
28342                                                                        ("Hint",
28343                                                                         CTy"instruction",
28344                                                                         Call
28345                                                                           ("PreloadInstruction",
28346                                                                            CTy"Hint",
28347                                                                            TP[EQ(Mop(Cast
28348                                                                                        F1,
28349                                                                                      LL[bVar"b'23"]),
28350                                                                                  LW(1,
28351                                                                                     1)),
28352                                                                               Mop(Cast
28353                                                                                     F4,
28354                                                                                   LL[bVar"b'19",
28355                                                                                      bVar"b'18",
28356                                                                                      bVar"b'17",
28357                                                                                      bVar"b'16"]),
28358                                                                               Call
28359                                                                                 ("register_form1",
28360                                                                                  CTy"offset1",
28361                                                                                  TP[Var("Rm",
28362                                                                                         F4),
28363                                                                                     Var("shift_t",
28364                                                                                         CTy"SRType"),
28365                                                                                     nVar"shift_n"])]))),
28366                                                                  qTy))),
28367                                                         Call
28368                                                           ("Skip",
28369                                                            ATy(qTy,
28370                                                                PTy(CTy"instruction",
28371                                                                    qTy)),
28372                                                            LU)))))))),
28373                                    (Bop(And,Mop(Not,bVar"b'25"),
28374                                         Bop(And,bVar"b'24",
28375                                             Bop(And,bVar"b'19",
28376                                                 Bop(And,bVar"b'18",
28377                                                     Bop(And,bVar"b'17",
28378                                                         bVar"b'16"))))),
28379                                     MB(Call
28380                                          ("HaveDSPSupport",
28381                                           ATy(qTy,PTy(bTy,qTy)),LU),
28382                                        Close
28383                                          (bVar"v",
28384                                           MB(MB(MU(TP[LW(14,4),bVar"v"],
28385                                                    qTy),
28386                                                 Close
28387                                                   (Var("v",PTy(F4,bTy)),
28388                                                    Call
28389                                                      ("Take",
28390                                                       ATy(qTy,
28391                                                           PTy(bTy,qTy)),
28392                                                       Var("v",PTy(F4,bTy))))),
28393                                              Close
28394                                                (bVar"b",
28395                                                 ITE(bVar"b",
28396                                                     MU(Call
28397                                                          ("Hint",
28398                                                           CTy"instruction",
28399                                                           Call
28400                                                             ("PreloadDataLiteral",
28401                                                              CTy"Hint",
28402                                                              TP[EQ(Mop(Cast
28403                                                                          F1,
28404                                                                        LL[bVar"b'23"]),
28405                                                                    LW(1,1)),
28406                                                                 Mop(Cast
28407                                                                       F32,
28408                                                                     Mop(Cast
28409                                                                           (FTy 12),
28410                                                                         LL[bVar"b'11",
28411                                                                            bVar"b'10",
28412                                                                            bVar"b'9",
28413                                                                            bVar"b'8",
28414                                                                            bVar"b'7",
28415                                                                            bVar"b'6",
28416                                                                            bVar"b'5",
28417                                                                            bVar"b'4",
28418                                                                            bVar"b'3",
28419                                                                            bVar"b'2",
28420                                                                            bVar"b'1",
28421                                                                            bVar"b'0"]))])),
28422                                                        qTy),
28423                                                     Call
28424                                                       ("Skip",
28425                                                        ATy(qTy,
28426                                                            PTy(CTy"instruction",
28427                                                                qTy)),LU))))))),
28428                                    (Bop(And,Mop(Not,bVar"b'25"),
28429                                         bVar"b'24"),
28430                                     Let(Var("R",F1),
28431                                         Mop(Cast F1,LL[bVar"b'22"]),
28432                                         MB(Call
28433                                              ("ArchVersion",
28434                                               ATy(qTy,PTy(nTy,qTy)),LU),
28435                                            Close
28436                                              (nVar"v",
28437                                               MB(MB(MB(MB(MB(MB(MU(Bop(Ge,
28438                                                                        nVar"v",
28439                                                                        LN
28440                                                                         7),
28441                                                                    qTy),
28442                                                                 Close
28443                                                                   (bVar"v",
28444                                                                    MU(Bop(And,
28445                                                                           EQ(Var("R",
28446                                                                                  F1),
28447                                                                              LW(1,
28448                                                                                 1)),
28449                                                                           bVar"v"),
28450                                                                       qTy))),
28451                                                              Close
28452                                                                (bVar"b",
28453                                                                 ITE(bVar"b",
28454                                                                     MB(MR(Close
28455                                                                             (qVar"s",
28456                                                                              Dest
28457                                                                                ("Extensions",
28458                                                                                 STy(CTy"Extensions"),
28459                                                                                 qVar"s"))),
28460                                                                        Close
28461                                                                          (Var("v",
28462                                                                               STy(CTy"Extensions")),
28463                                                                           MU(Bop(In,
28464                                                                                  LC("Extension_Multiprocessing",
28465                                                                                     CTy"Extensions"),
28466                                                                                  Var("v",
28467                                                                                      STy(CTy"Extensions"))),
28468                                                                              qTy))),
28469                                                                     MU(LF,
28470                                                                        qTy)))),
28471                                                           Close
28472                                                             (bVar"b",
28473                                                              ITE(bVar"b",
28474                                                                  MU(LT,
28475                                                                     qTy),
28476                                                                  MB(Call
28477                                                                       ("HaveDSPSupport",
28478                                                                        ATy(qTy,
28479                                                                            PTy(bTy,
28480                                                                                qTy)),
28481                                                                        LU),
28482                                                                     Close
28483                                                                       (bVar"v",
28484                                                                        MU(Bop(And,
28485                                                                               EQ(Var("R",
28486                                                                                      F1),
28487                                                                                  LW(0,
28488                                                                                     1)),
28489                                                                               bVar"v"),
28490                                                                           qTy)))))),
28491                                                        Close
28492                                                          (bVar"v",
28493                                                           MU(TP[LW(14,4),
28494                                                                 bVar"v"],
28495                                                              qTy))),
28496                                                     Close
28497                                                       (Var("v",
28498                                                            PTy(F4,bTy)),
28499                                                        Call
28500                                                          ("Take",
28501                                                           ATy(qTy,
28502                                                               PTy(bTy,qTy)),
28503                                                           Var("v",
28504                                                               PTy(F4,bTy))))),
28505                                                  Close
28506                                                    (bVar"b",
28507                                                     ITE(bVar"b",
28508                                                         MU(Call
28509                                                              ("Hint",
28510                                                               CTy"instruction",
28511                                                               Call
28512                                                                 ("PreloadData",
28513                                                                  CTy"Hint",
28514                                                                  TP[EQ(Mop(Cast
28515                                                                              F1,
28516                                                                            LL[bVar"b'23"]),
28517                                                                        LW(1,
28518                                                                           1)),
28519                                                                     EQ(Var("R",
28520                                                                            F1),
28521                                                                        LW(0,
28522                                                                           1)),
28523                                                                     Mop(Cast
28524                                                                           F4,
28525                                                                         LL[bVar"b'19",
28526                                                                            bVar"b'18",
28527                                                                            bVar"b'17",
28528                                                                            bVar"b'16"]),
28529                                                                     Call
28530                                                                       ("immediate_form1",
28531                                                                        CTy"offset1",
28532                                                                        Mop(Cast
28533                                                                              F32,
28534                                                                            Mop(Cast
28535                                                                                  (FTy 12),
28536                                                                                LL[bVar"b'11",
28537                                                                                   bVar"b'10",
28538                                                                                   bVar"b'9",
28539                                                                                   bVar"b'8",
28540                                                                                   bVar"b'7",
28541                                                                                   bVar"b'6",
28542                                                                                   bVar"b'5",
28543                                                                                   bVar"b'4",
28544                                                                                   bVar"b'3",
28545                                                                                   bVar"b'2",
28546                                                                                   bVar"b'1",
28547                                                                                   bVar"b'0"])))])),
28548                                                            qTy),
28549                                                         Call
28550                                                           ("Skip",
28551                                                            ATy(qTy,
28552                                                                PTy(CTy"instruction",
28553                                                                    qTy)),
28554                                                            LU)))))))),
28555                                    (Bop(And,bVar"b'25",
28556                                         Bop(And,bVar"b'24",
28557                                             Mop(Not,bVar"b'4"))),
28558                                     Let(Var("Rm",F4),
28559                                         Mop(Cast F4,
28560                                             LL[bVar"b'3",bVar"b'2",
28561                                                bVar"b'1",bVar"b'0"]),
28562                                         Let(Var("Rn",F4),
28563                                             Mop(Cast F4,
28564                                                 LL[bVar"b'19",bVar"b'18",
28565                                                    bVar"b'17",bVar"b'16"]),
28566                                             Let(Var("R",F1),
28567                                                 Mop(Cast F1,
28568                                                     LL[bVar"b'22"]),
28569                                                 MB(Call
28570                                                      ("ArchVersion",
28571                                                       ATy(qTy,
28572                                                           PTy(nTy,qTy)),
28573                                                       LU),
28574                                                    Close
28575                                                      (nVar"v",
28576                                                       MB(MB(MB(MB(MB(MB(MU(Bop(Ge,
28577                                                                                nVar"v",
28578                                                                                LN
28579                                                                                 7),
28580                                                                            qTy),
28581                                                                         Close
28582                                                                           (bVar"v",
28583                                                                            MU(Bop(And,
28584                                                                                   EQ(Var("R",
28585                                                                                          F1),
28586                                                                                      LW(1,
28587                                                                                         1)),
28588                                                                                   bVar"v"),
28589                                                                               qTy))),
28590                                                                      Close
28591                                                                        (bVar"b",
28592                                                                         ITE(bVar"b",
28593                                                                             MB(MR(Close
28594                                                                                     (qVar"s",
28595                                                                                      Dest
28596                                                                                        ("Extensions",
28597                                                                                         STy(CTy"Extensions"),
28598                                                                                         qVar"s"))),
28599                                                                                Close
28600                                                                                  (Var("v",
28601                                                                                       STy(CTy"Extensions")),
28602                                                                                   MU(Bop(In,
28603                                                                                          LC("Extension_Multiprocessing",
28604                                                                                             CTy"Extensions"),
28605                                                                                          Var("v",
28606                                                                                              STy(CTy"Extensions"))),
28607                                                                                      qTy))),
28608                                                                             MU(LF,
28609                                                                                qTy)))),
28610                                                                   Close
28611                                                                     (bVar"b",
28612                                                                      ITE(bVar"b",
28613                                                                          MU(LT,
28614                                                                             qTy),
28615                                                                          MB(Call
28616                                                                               ("HaveDSPSupport",
28617                                                                                ATy(qTy,
28618                                                                                    PTy(bTy,
28619                                                                                        qTy)),
28620                                                                                LU),
28621                                                                             Close
28622                                                                               (bVar"v",
28623                                                                                MU(Bop(And,
28624                                                                                       EQ(Var("R",
28625                                                                                              F1),
28626                                                                                          LW(0,
28627                                                                                             1)),
28628                                                                                       bVar"v"),
28629                                                                                   qTy)))))),
28630                                                                Close
28631                                                                  (bVar"v",
28632                                                                   MU(TP[LW(14,
28633                                                                            4),
28634                                                                         bVar"v"],
28635                                                                      qTy))),
28636                                                             Close
28637                                                               (Var("v",
28638                                                                    PTy(F4,
28639                                                                        bTy)),
28640                                                                Call
28641                                                                  ("Take",
28642                                                                   ATy(qTy,
28643                                                                       PTy(bTy,
28644                                                                           qTy)),
28645                                                                   Var("v",
28646                                                                       PTy(F4,
28647                                                                           bTy))))),
28648                                                          Close
28649                                                            (bVar"b",
28650                                                             ITE(bVar"b",
28651                                                                 Let(bVar"is_pldw",
28652                                                                     EQ(Var("R",
28653                                                                            F1),
28654                                                                        LW(0,
28655                                                                           1)),
28656                                                                     MB(ITE(Bop(Or,
28657                                                                                EQ(Var("Rm",
28658                                                                                       F4),
28659                                                                                   LW(15,
28660                                                                                      4)),
28661                                                                                Bop(And,
28662                                                                                    EQ(Var("Rn",
28663                                                                                           F4),
28664                                                                                       LW(15,
28665                                                                                          4)),
28666                                                                                    bVar"is_pldw")),
28667                                                                            Call
28668                                                                              ("DECODE_UNPREDICTABLE",
28669                                                                               ATy(qTy,
28670                                                                                   PTy(uTy,
28671                                                                                       qTy)),
28672                                                                               TP[Var("mc",
28673                                                                                      CTy"MachineCode"),
28674                                                                                  LS
28675                                                                                   "PreloadData (register)"]),
28676                                                                            MU(LU,
28677                                                                               qTy)),
28678                                                                        Close
28679                                                                          (AVar
28680                                                                             uTy,
28681                                                                           MU(Let(TP[Var("shift_t",
28682                                                                                         CTy"SRType"),
28683                                                                                     nVar"shift_n"],
28684                                                                                  Call
28685                                                                                    ("DecodeImmShift",
28686                                                                                     PTy(CTy"SRType",
28687                                                                                         nTy),
28688                                                                                     TP[Mop(Cast
28689                                                                                              (FTy 2),
28690                                                                                            LL[bVar"b'6",
28691                                                                                               bVar"b'5"]),
28692                                                                                        Mop(Cast
28693                                                                                              (FTy 5),
28694                                                                                            LL[bVar"b'11",
28695                                                                                               bVar"b'10",
28696                                                                                               bVar"b'9",
28697                                                                                               bVar"b'8",
28698                                                                                               bVar"b'7"])]),
28699                                                                                  Call
28700                                                                                    ("Hint",
28701                                                                                     CTy"instruction",
28702                                                                                     Call
28703                                                                                       ("PreloadData",
28704                                                                                        CTy"Hint",
28705                                                                                        TP[EQ(Mop(Cast
28706                                                                                                    F1,
28707                                                                                                  LL[bVar"b'23"]),
28708                                                                                              LW(1,
28709                                                                                                 1)),
28710                                                                                           bVar"is_pldw",
28711                                                                                           Var("Rn",
28712                                                                                               F4),
28713                                                                                           Call
28714                                                                                             ("register_form1",
28715                                                                                              CTy"offset1",
28716                                                                                              TP[Var("Rm",
28717                                                                                                     F4),
28718                                                                                                 Var("shift_t",
28719                                                                                                     CTy"SRType"),
28720                                                                                                 nVar"shift_n"])]))),
28721                                                                              qTy)))),
28722                                                                 Call
28723                                                                   ("Skip",
28724                                                                    ATy(qTy,
28725                                                                        PTy(CTy"instruction",
28726                                                                            qTy)),
28727                                                                    LU))))))))))],
28728                                   MB(Call
28729                                        ("ArchVersion",
28730                                         ATy(qTy,PTy(nTy,qTy)),LU),
28731                                      Close
28732                                        (nVar"v",
28733                                         MB(MU(Bop(Ge,nVar"v",LN 5),qTy),
28734                                            Close
28735                                              (bVar"b",
28736                                               ITE(bVar"b",
28737                                                   MU(Call
28738                                                        ("Undefined",
28739                                                         CTy"instruction",
28740                                                         LW(0,32)),qTy),
28741                                                   MB(Call
28742                                                        ("DECODE_UNPREDICTABLE",
28743                                                         ATy(qTy,
28744                                                             PTy(uTy,qTy)),
28745                                                         TP[Var("mc",
28746                                                                CTy"MachineCode"),
28747                                                            LS""]),
28748                                                      Close
28749                                                        (AVar uTy,
28750                                                         MU(LX(CTy"instruction"),
28751                                                            qTy))))))))))],
28752                             MB(Call
28753                                  ("ArchVersion",ATy(qTy,PTy(nTy,qTy)),LU),
28754                                Close
28755                                  (nVar"v",
28756                                   MB(MU(Bop(Ge,nVar"v",LN 5),qTy),
28757                                      Close
28758                                        (bVar"b",
28759                                         ITE(bVar"b",
28760                                             MU(Call
28761                                                  ("Undefined",
28762                                                   CTy"instruction",
28763                                                   LW(0,32)),qTy),
28764                                             MB(Call
28765                                                  ("DECODE_UNPREDICTABLE",
28766                                                   ATy(qTy,PTy(uTy,qTy)),
28767                                                   TP[Var("mc",
28768                                                          CTy"MachineCode"),
28769                                                      LS""]),
28770                                                Close
28771                                                  (AVar uTy,
28772                                                   MU(LX(CTy"instruction"),
28773                                                      qTy)))))))))),
28774                        (Bop(And,Mop(Not,bVar"b'27"),
28775                             Bop(And,Mop(Not,bVar"b'25"),
28776                                 Bop(And,bVar"b'24",
28777                                     Bop(And,Mop(Not,bVar"b'23"),
28778                                         Bop(And,Mop(Not,bVar"b'22"),
28779                                             Bop(And,Mop(Not,bVar"b'21"),
28780                                                 Bop(And,
28781                                                     Mop(Not,bVar"b'20"),
28782                                                     Bop(And,bVar"b'16",
28783                                                         Bop(And,
28784                                                             Mop(Not,
28785                                                                 bVar"b'7"),
28786                                                             Bop(And,
28787                                                                 Mop(Not,
28788                                                                     bVar"b'6"),
28789                                                                 Bop(And,
28790                                                                     Mop(Not,
28791                                                                         bVar"b'5"),
28792                                                                     Mop(Not,
28793                                                                         bVar"b'4")))))))))))),
28794                         MB(Call("ArchVersion",ATy(qTy,PTy(nTy,qTy)),LU),
28795                            Close
28796                              (nVar"v",
28797                               MB(MB(MB(MU(Bop(Ge,nVar"v",LN 6),qTy),
28798                                        Close
28799                                          (bVar"v",
28800                                           MU(TP[LW(14,4),bVar"v"],qTy))),
28801                                     Close
28802                                       (Var("v",PTy(F4,bTy)),
28803                                        Call
28804                                          ("Take",ATy(qTy,PTy(bTy,qTy)),
28805                                           Var("v",PTy(F4,bTy))))),
28806                                  Close
28807                                    (bVar"b",
28808                                     ITE(bVar"b",
28809                                         MU(Call
28810                                              ("System",CTy"instruction",
28811                                               Call
28812                                                 ("Setend",CTy"System",
28813                                                  EQ(Mop(Cast F1,
28814                                                         LL[bVar"b'9"]),
28815                                                     LW(1,1)))),qTy),
28816                                         Call
28817                                           ("Skip",
28818                                            ATy(qTy,
28819                                                PTy(CTy"instruction",qTy)),
28820                                            LU))))))),
28821                        (Bop(And,Mop(Not,bVar"b'27"),
28822                             Bop(And,Mop(Not,bVar"b'25"),
28823                                 Bop(And,bVar"b'24",
28824                                     Bop(And,Mop(Not,bVar"b'23"),
28825                                         Bop(And,Mop(Not,bVar"b'22"),
28826                                             Bop(And,Mop(Not,bVar"b'21"),
28827                                                 Bop(And,
28828                                                     Mop(Not,bVar"b'20"),
28829                                                     Bop(And,
28830                                                         Mop(Not,
28831                                                             bVar"b'16"),
28832                                                         Mop(Not,bVar"b'5"))))))))),
28833                         Let(Var("mode",FTy 5),
28834                             Mop(Cast(FTy 5),
28835                                 LL[bVar"b'4",bVar"b'3",bVar"b'2",
28836                                    bVar"b'1",bVar"b'0"]),
28837                             Let(Var("F",F1),Mop(Cast F1,LL[bVar"b'6"]),
28838                                 Let(Var("I",F1),
28839                                     Mop(Cast F1,LL[bVar"b'7"]),
28840                                     Let(Var("A",F1),
28841                                         Mop(Cast F1,LL[bVar"b'8"]),
28842                                         Let(Var("M",F1),
28843                                             Mop(Cast F1,LL[bVar"b'17"]),
28844                                             Let(Var("imod",FTy 2),
28845                                                 Mop(Cast(FTy 2),
28846                                                     LL[bVar"b'19",
28847                                                        bVar"b'18"]),
28848                                                 MB(Call
28849                                                      ("ArchVersion",
28850                                                       ATy(qTy,
28851                                                           PTy(nTy,qTy)),
28852                                                       LU),
28853                                                    Close
28854                                                      (nVar"v",
28855                                                       MB(MB(MB(MU(Bop(Ge,
28856                                                                       nVar"v",
28857                                                                       LN
28858                                                                        6),
28859                                                                   qTy),
28860                                                                Close
28861                                                                  (bVar"v",
28862                                                                   MU(TP[LW(14,
28863                                                                            4),
28864                                                                         bVar"v"],
28865                                                                      qTy))),
28866                                                             Close
28867                                                               (Var("v",
28868                                                                    PTy(F4,
28869                                                                        bTy)),
28870                                                                Call
28871                                                                  ("Take",
28872                                                                   ATy(qTy,
28873                                                                       PTy(bTy,
28874                                                                           qTy)),
28875                                                                   Var("v",
28876                                                                       PTy(F4,
28877                                                                           bTy))))),
28878                                                          Close
28879                                                            (bVar"b",
28880                                                             ITE(bVar"b",
28881                                                                 MB(ITE(Bop(Or,
28882                                                                            Bop(Or,
28883                                                                                Bop(Or,
28884                                                                                    Bop(And,
28885                                                                                        Mop(Not,
28886                                                                                            EQ(Var("mode",
28887                                                                                                   FTy 5),
28888                                                                                               LW(0,
28889                                                                                                  5))),
28890                                                                                        EQ(Var("M",
28891                                                                                               F1),
28892                                                                                           LW(0,
28893                                                                                              1))),
28894                                                                                    EQ(Bop(Bit,
28895                                                                                           Var("imod",
28896                                                                                               FTy 2),
28897                                                                                           LN
28898                                                                                            1),
28899                                                                                       EQ(CC[Var("A",
28900                                                                                                 F1),
28901                                                                                             Var("I",
28902                                                                                                 F1),
28903                                                                                             Var("F",
28904                                                                                                 F1)],
28905                                                                                          LW(0,
28906                                                                                             3)))),
28907                                                                                Bop(And,
28908                                                                                    EQ(Var("imod",
28909                                                                                           FTy 2),
28910                                                                                       LW(0,
28911                                                                                          2)),
28912                                                                                    EQ(Var("M",
28913                                                                                           F1),
28914                                                                                       LW(0,
28915                                                                                          1)))),
28916                                                                            EQ(Var("imod",
28917                                                                                   FTy 2),
28918                                                                               LW(1,
28919                                                                                  2))),
28920                                                                        Call
28921                                                                          ("DECODE_UNPREDICTABLE",
28922                                                                           ATy(qTy,
28923                                                                               PTy(uTy,
28924                                                                                   qTy)),
28925                                                                           TP[Var("mc",
28926                                                                                  CTy"MachineCode"),
28927                                                                              LS
28928                                                                               "ChangeProcessorState"]),
28929                                                                        MU(LU,
28930                                                                           qTy)),
28931                                                                    Close
28932                                                                      (AVar
28933                                                                         uTy,
28934                                                                       MU(Call
28935                                                                            ("System",
28936                                                                             CTy"instruction",
28937                                                                             Call
28938                                                                               ("ChangeProcessorState",
28939                                                                                CTy"System",
28940                                                                                TP[EQ(Var("imod",
28941                                                                                          FTy 2),
28942                                                                                      LW(2,
28943                                                                                         2)),
28944                                                                                   EQ(Var("imod",
28945                                                                                          FTy 2),
28946                                                                                      LW(3,
28947                                                                                         2)),
28948                                                                                   EQ(Var("A",
28949                                                                                          F1),
28950                                                                                      LW(1,
28951                                                                                         1)),
28952                                                                                   EQ(Var("I",
28953                                                                                          F1),
28954                                                                                      LW(1,
28955                                                                                         1)),
28956                                                                                   EQ(Var("F",
28957                                                                                          F1),
28958                                                                                      LW(1,
28959                                                                                         1)),
28960                                                                                   EQ(Var("M",
28961                                                                                          F1),
28962                                                                                      LW(1,
28963                                                                                         1)),
28964                                                                                   Var("mode",
28965                                                                                       FTy 5)])),
28966                                                                          qTy))),
28967                                                                 Call
28968                                                                   ("Skip",
28969                                                                    ATy(qTy,
28970                                                                        PTy(CTy"instruction",
28971                                                                            qTy)),
28972                                                                    LU))))))))))))),
28973                        (Bop(And,bVar"b'27",
28974                             Bop(And,Mop(Not,bVar"b'25"),
28975                                 Bop(And,bVar"b'22",Mop(Not,bVar"b'20")))),
28976                         Let(Var("U",F1),Mop(Cast F1,LL[bVar"b'23"]),
28977                             MB(Call
28978                                  ("ArchVersion",ATy(qTy,PTy(nTy,qTy)),LU),
28979                                Close
28980                                  (nVar"v",
28981                                   MB(MB(MB(MU(Bop(Ge,nVar"v",LN 6),qTy),
28982                                            Close
28983                                              (bVar"v",
28984                                               MU(TP[LW(14,4),bVar"v"],qTy))),
28985                                         Close
28986                                           (Var("v",PTy(F4,bTy)),
28987                                            Call
28988                                              ("Take",
28989                                               ATy(qTy,PTy(bTy,qTy)),
28990                                               Var("v",PTy(F4,bTy))))),
28991                                      Close
28992                                        (bVar"b",
28993                                         ITE(bVar"b",
28994                                             MU(Call
28995                                                  ("System",
28996                                                   CTy"instruction",
28997                                                   Call
28998                                                     ("StoreReturnState",
28999                                                      CTy"System",
29000                                                      TP[EQ(Var("U",F1),
29001                                                            LW(1,1)),
29002                                                         EQ(Mop(Cast F1,
29003                                                                LL[bVar"b'24"]),
29004                                                            Var("U",F1)),
29005                                                         EQ(Mop(Cast F1,
29006                                                                LL[bVar"b'21"]),
29007                                                            LW(1,1)),
29008                                                         Mop(Cast(FTy 5),
29009                                                             LL[bVar"b'4",
29010                                                                bVar"b'3",
29011                                                                bVar"b'2",
29012                                                                bVar"b'1",
29013                                                                bVar"b'0"])])),
29014                                                qTy),
29015                                             Call
29016                                               ("Skip",
29017                                                ATy(qTy,
29018                                                    PTy(CTy"instruction",
29019                                                        qTy)),LU)))))))),
29020                        (Bop(And,bVar"b'27",
29021                             Bop(And,Mop(Not,bVar"b'25"),
29022                                 Bop(And,Mop(Not,bVar"b'22"),bVar"b'20"))),
29023                         Let(Var("Rn",F4),
29024                             Mop(Cast F4,
29025                                 LL[bVar"b'19",bVar"b'18",bVar"b'17",
29026                                    bVar"b'16"]),
29027                             Let(Var("U",F1),Mop(Cast F1,LL[bVar"b'23"]),
29028                                 MB(Call
29029                                      ("ArchVersion",
29030                                       ATy(qTy,PTy(nTy,qTy)),LU),
29031                                    Close
29032                                      (nVar"v",
29033                                       MB(MB(MB(MU(Bop(Ge,nVar"v",LN 6),
29034                                                   qTy),
29035                                                Close
29036                                                  (bVar"v",
29037                                                   MU(TP[LW(14,4),bVar"v"],
29038                                                      qTy))),
29039                                             Close
29040                                               (Var("v",PTy(F4,bTy)),
29041                                                Call
29042                                                  ("Take",
29043                                                   ATy(qTy,PTy(bTy,qTy)),
29044                                                   Var("v",PTy(F4,bTy))))),
29045                                          Close
29046                                            (bVar"b",
29047                                             ITE(bVar"b",
29048                                                 MB(ITE(EQ(Var("Rn",F4),
29049                                                           LW(15,4)),
29050                                                        Call
29051                                                          ("DECODE_UNPREDICTABLE",
29052                                                           ATy(qTy,
29053                                                               PTy(uTy,qTy)),
29054                                                           TP[Var("mc",
29055                                                                  CTy"MachineCode"),
29056                                                              LS
29057                                                               "ReturnFromException"]),
29058                                                        MU(LU,qTy)),
29059                                                    Close
29060                                                      (AVar uTy,
29061                                                       MU(Call
29062                                                            ("System",
29063                                                             CTy"instruction",
29064                                                             Call
29065                                                               ("ReturnFromException",
29066                                                                CTy"System",
29067                                                                TP[EQ(Var("U",
29068                                                                          F1),
29069                                                                      LW(1,
29070                                                                         1)),
29071                                                                   EQ(Mop(Cast
29072                                                                            F1,
29073                                                                          LL[bVar"b'24"]),
29074                                                                      Var("U",
29075                                                                          F1)),
29076                                                                   EQ(Mop(Cast
29077                                                                            F1,
29078                                                                          LL[bVar"b'21"]),
29079                                                                      LW(1,
29080                                                                         1)),
29081                                                                   Var("Rn",
29082                                                                       F4)])),
29083                                                          qTy))),
29084                                                 Call
29085                                                   ("Skip",
29086                                                    ATy(qTy,
29087                                                        PTy(CTy"instruction",
29088                                                            qTy)),LU))))))))),
29089                        (Bop(And,bVar"b'27",bVar"b'25"),
29090                         MB(Call("ArchVersion",ATy(qTy,PTy(nTy,qTy)),LU),
29091                            Close
29092                              (nVar"v",
29093                               MB(MB(MB(MU(Bop(Ge,nVar"v",LN 5),qTy),
29094                                        Close
29095                                          (bVar"v",
29096                                           MU(TP[LW(14,4),bVar"v"],qTy))),
29097                                     Close
29098                                       (Var("v",PTy(F4,bTy)),
29099                                        Call
29100                                          ("Take",ATy(qTy,PTy(bTy,qTy)),
29101                                           Var("v",PTy(F4,bTy))))),
29102                                  Close
29103                                    (bVar"b",
29104                                     ITE(bVar"b",
29105                                         MU(Call
29106                                              ("Branch",CTy"instruction",
29107                                               Call
29108                                                 ("BranchLinkExchangeImmediate",
29109                                                  CTy"Branch",
29110                                                  TP[LC("InstrSet_Thumb",
29111                                                        CTy"InstrSet"),
29112                                                     Mop(SE F32,
29113                                                         CC[Mop(Cast
29114                                                                  (FTy 24),
29115                                                                LL[bVar"b'23",
29116                                                                   bVar"b'22",
29117                                                                   bVar"b'21",
29118                                                                   bVar"b'20",
29119                                                                   bVar"b'19",
29120                                                                   bVar"b'18",
29121                                                                   bVar"b'17",
29122                                                                   bVar"b'16",
29123                                                                   bVar"b'15",
29124                                                                   bVar"b'14",
29125                                                                   bVar"b'13",
29126                                                                   bVar"b'12",
29127                                                                   bVar"b'11",
29128                                                                   bVar"b'10",
29129                                                                   bVar"b'9",
29130                                                                   bVar"b'8",
29131                                                                   bVar"b'7",
29132                                                                   bVar"b'6",
29133                                                                   bVar"b'5",
29134                                                                   bVar"b'4",
29135                                                                   bVar"b'3",
29136                                                                   bVar"b'2",
29137                                                                   bVar"b'1",
29138                                                                   bVar"b'0"]),
29139                                                            Mop(Cast F1,
29140                                                                LL[bVar"b'24"]),
29141                                                            LW(0,1)])])),
29142                                            qTy),
29143                                         Call
29144                                           ("Skip",
29145                                            ATy(qTy,
29146                                                PTy(CTy"instruction",qTy)),
29147                                            LU)))))))],
29148                       MB(Call("ArchVersion",ATy(qTy,PTy(nTy,qTy)),LU),
29149                          Close
29150                            (nVar"v",
29151                             MB(MU(Bop(Ge,nVar"v",LN 5),qTy),
29152                                Close
29153                                  (bVar"b",
29154                                   ITE(bVar"b",
29155                                       MU(Call
29156                                            ("Undefined",CTy"instruction",
29157                                             LW(0,32)),qTy),
29158                                       MB(Call
29159                                            ("DECODE_UNPREDICTABLE",
29160                                             ATy(qTy,PTy(uTy,qTy)),
29161                                             TP[Var("mc",CTy"MachineCode"),
29162                                                LS""]),
29163                                          Close
29164                                            (AVar uTy,
29165                                             MU(LX(CTy"instruction"),qTy)))))))))),
29166               Let(TP[bVar"b'27",bVar"b'26",bVar"b'25",bVar"b'24",
29167                      bVar"b'23",bVar"b'22",bVar"b'21",bVar"b'20",
29168                      bVar"b'19",bVar"b'18",bVar"b'17",bVar"b'16",
29169                      bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12",
29170                      bVar"b'11",bVar"b'10",bVar"b'9",bVar"b'8",bVar"b'7",
29171                      bVar"b'6",bVar"b'5",bVar"b'4",bVar"b'3",bVar"b'2",
29172                      bVar"b'1",bVar"b'0"],
29173                   BL(28,EX(Var("w",F32),LN 27,LN 0,FTy 28)),
29174                   ITB([(bVar"b'25",
29175                         ITB([(bVar"b'26",
29176                               ITB([(Bop(And,Mop(Not,bVar"b'27"),
29177                                         Bop(And,bVar"b'24",
29178                                             Bop(And,bVar"b'23",
29179                                                 Bop(And,bVar"b'22",
29180                                                     Bop(And,bVar"b'21",
29181                                                         Bop(And,
29182                                                             bVar"b'20",
29183                                                             Bop(And,
29184                                                                 bVar"b'7",
29185                                                                 Bop(And,
29186                                                                     bVar"b'6",
29187                                                                     Bop(And,
29188                                                                         bVar"b'5",
29189                                                                         bVar"b'4"))))))))),
29190                                     MB(MW(Close
29191                                             (qVar"s",
29192                                              Rupd
29193                                                ("CurrentCondition",
29194                                                 TP[qVar"s",Var("cond",F4)]))),
29195                                        Close
29196                                          (AVar uTy,
29197                                           MB(Call
29198                                                ("ConditionPassed",
29199                                                 ATy(qTy,PTy(bTy,qTy)),LU),
29200                                              Close
29201                                                (bVar"b",
29202                                                 MU(ITE(bVar"b",
29203                                                        Call
29204                                                          ("Undefined",
29205                                                           CTy"instruction",
29206                                                           Mop(Cast F32,
29207                                                               CC[Mop(Cast
29208                                                                        (FTy 12),
29209                                                                      LL[bVar"b'19",
29210                                                                         bVar"b'18",
29211                                                                         bVar"b'17",
29212                                                                         bVar"b'16",
29213                                                                         bVar"b'15",
29214                                                                         bVar"b'14",
29215                                                                         bVar"b'13",
29216                                                                         bVar"b'12",
29217                                                                         bVar"b'11",
29218                                                                         bVar"b'10",
29219                                                                         bVar"b'9",
29220                                                                         bVar"b'8"]),
29221                                                                  Mop(Cast
29222                                                                        F4,
29223                                                                      LL[bVar"b'3",
29224                                                                         bVar"b'2",
29225                                                                         bVar"b'1",
29226                                                                         bVar"b'0"])])),
29227                                                        Const
29228                                                          ("NoOperation",
29229                                                           CTy"instruction")),
29230                                                    qTy)))))),
29231                                    (Bop(And,Mop(Not,bVar"b'27"),
29232                                         Bop(And,Mop(Not,bVar"b'24"),
29233                                             Bop(And,bVar"b'21",
29234                                                 Bop(And,
29235                                                     Mop(Not,bVar"b'20"),
29236                                                     Mop(Not,bVar"b'4"))))),
29237                                     Let(Var("Rm",F4),
29238                                         Mop(Cast F4,
29239                                             LL[bVar"b'3",bVar"b'2",
29240                                                bVar"b'1",bVar"b'0"]),
29241                                         Let(Var("Rt",F4),
29242                                             Mop(Cast F4,
29243                                                 LL[bVar"b'15",bVar"b'14",
29244                                                    bVar"b'13",bVar"b'12"]),
29245                                             Let(Var("Rn",F4),
29246                                                 Mop(Cast F4,
29247                                                     LL[bVar"b'19",
29248                                                        bVar"b'18",
29249                                                        bVar"b'17",
29250                                                        bVar"b'16"]),
29251                                                 Let(Var("B",F1),
29252                                                     Mop(Cast F1,
29253                                                         LL[bVar"b'22"]),
29254                                                     MB(Call
29255                                                          ("Take",
29256                                                           ATy(qTy,
29257                                                               PTy(bTy,qTy)),
29258                                                           TP[Var("cond",
29259                                                                  F4),LT]),
29260                                                        Close
29261                                                          (bVar"b",
29262                                                           ITE(bVar"b",
29263                                                               MB(Call
29264                                                                    ("ArchVersion",
29265                                                                     ATy(qTy,
29266                                                                         PTy(nTy,
29267                                                                             qTy)),
29268                                                                     LU),
29269                                                                  Close
29270                                                                    (nVar"v",
29271                                                                     MB(MB(MB(MB(MU(Bop(Lt,
29272                                                                                        nVar"v",
29273                                                                                        LN
29274                                                                                         6),
29275                                                                                    qTy),
29276                                                                                 Close
29277                                                                                   (bVar"b",
29278                                                                                    MU(Bop(And,
29279                                                                                           bVar"b",
29280                                                                                           EQ(Var("Rm",
29281                                                                                                  F4),
29282                                                                                              Var("Rn",
29283                                                                                                  F4))),
29284                                                                                       qTy))),
29285                                                                              Close
29286                                                                                (bVar"v",
29287                                                                                 MU(Bop(Or,
29288                                                                                        Bop(Or,
29289                                                                                            Bop(Or,
29290                                                                                                Bop(Or,
29291                                                                                                    Bop(And,
29292                                                                                                        EQ(Var("B",
29293                                                                                                               F1),
29294                                                                                                           LW(1,
29295                                                                                                              1)),
29296                                                                                                        EQ(Var("Rt",
29297                                                                                                               F4),
29298                                                                                                           LW(15,
29299                                                                                                              4))),
29300                                                                                                    EQ(Var("Rn",
29301                                                                                                           F4),
29302                                                                                                       LW(15,
29303                                                                                                          4))),
29304                                                                                                EQ(Var("Rn",
29305                                                                                                       F4),
29306                                                                                                   Var("Rt",
29307                                                                                                       F4))),
29308                                                                                            EQ(Var("Rm",
29309                                                                                                   F4),
29310                                                                                               LW(15,
29311                                                                                                  4))),
29312                                                                                        bVar"v"),
29313                                                                                    qTy))),
29314                                                                           Close
29315                                                                             (bVar"b",
29316                                                                              ITE(bVar"b",
29317                                                                                  Call
29318                                                                                    ("DECODE_UNPREDICTABLE",
29319                                                                                     ATy(qTy,
29320                                                                                         PTy(uTy,
29321                                                                                             qTy)),
29322                                                                                     TP[Var("mc",
29323                                                                                            CTy"MachineCode"),
29324                                                                                        LS
29325                                                                                         "StoreUnprivileged (regiser)"]),
29326                                                                                  MU(LU,
29327                                                                                     qTy)))),
29328                                                                        Close
29329                                                                          (AVar
29330                                                                             uTy,
29331                                                                           MU(Let(bVar"add",
29332                                                                                  EQ(Mop(Cast
29333                                                                                           F1,
29334                                                                                         LL[bVar"b'23"]),
29335                                                                                     LW(1,
29336                                                                                        1)),
29337                                                                                  Let(bVar"postindex",
29338                                                                                      LT,
29339                                                                                      Let(TP[Var("shift_t",
29340                                                                                                 CTy"SRType"),
29341                                                                                             nVar"shift_n"],
29342                                                                                          Call
29343                                                                                            ("DecodeImmShift",
29344                                                                                             PTy(CTy"SRType",
29345                                                                                                 nTy),
29346                                                                                             TP[Mop(Cast
29347                                                                                                      (FTy 2),
29348                                                                                                    LL[bVar"b'6",
29349                                                                                                       bVar"b'5"]),
29350                                                                                                Mop(Cast
29351                                                                                                      (FTy 5),
29352                                                                                                    LL[bVar"b'11",
29353                                                                                                       bVar"b'10",
29354                                                                                                       bVar"b'9",
29355                                                                                                       bVar"b'8",
29356                                                                                                       bVar"b'7"])]),
29357                                                                                          Let(Var("m",
29358                                                                                                  CTy"offset1"),
29359                                                                                              Call
29360                                                                                                ("register_form1",
29361                                                                                                 CTy"offset1",
29362                                                                                                 TP[Var("Rm",
29363                                                                                                        F4),
29364                                                                                                    Var("shift_t",
29365                                                                                                        CTy"SRType"),
29366                                                                                                    nVar"shift_n"]),
29367                                                                                              ITE(EQ(Var("B",
29368                                                                                                         F1),
29369                                                                                                     LW(1,
29370                                                                                                        1)),
29371                                                                                                  Call
29372                                                                                                    ("Store",
29373                                                                                                     CTy"instruction",
29374                                                                                                     Call
29375                                                                                                       ("StoreByteUnprivileged",
29376                                                                                                        CTy"Store",
29377                                                                                                        TP[bVar"add",
29378                                                                                                           bVar"postindex",
29379                                                                                                           Var("Rt",
29380                                                                                                               F4),
29381                                                                                                           Var("Rn",
29382                                                                                                               F4),
29383                                                                                                           Var("m",
29384                                                                                                               CTy"offset1")])),
29385                                                                                                  Call
29386                                                                                                    ("Store",
29387                                                                                                     CTy"instruction",
29388                                                                                                     Call
29389                                                                                                       ("StoreUnprivileged",
29390                                                                                                        CTy"Store",
29391                                                                                                        TP[bVar"add",
29392                                                                                                           bVar"postindex",
29393                                                                                                           Var("Rt",
29394                                                                                                               F4),
29395                                                                                                           Var("Rn",
29396                                                                                                               F4),
29397                                                                                                           Var("m",
29398                                                                                                               CTy"offset1")]))))))),
29399                                                                              qTy))))),
29400                                                               Call
29401                                                                 ("Skip",
29402                                                                  ATy(qTy,
29403                                                                      PTy(CTy"instruction",
29404                                                                          qTy)),
29405                                                                  LU))))))))),
29406                                    (Bop(And,Mop(Not,bVar"b'27"),
29407                                         Bop(And,Mop(Not,bVar"b'20"),
29408                                             Mop(Not,bVar"b'4"))),
29409                                     Let(Var("Rm",F4),
29410                                         Mop(Cast F4,
29411                                             LL[bVar"b'3",bVar"b'2",
29412                                                bVar"b'1",bVar"b'0"]),
29413                                         Let(Var("Rt",F4),
29414                                             Mop(Cast F4,
29415                                                 LL[bVar"b'15",bVar"b'14",
29416                                                    bVar"b'13",bVar"b'12"]),
29417                                             Let(Var("Rn",F4),
29418                                                 Mop(Cast F4,
29419                                                     LL[bVar"b'19",
29420                                                        bVar"b'18",
29421                                                        bVar"b'17",
29422                                                        bVar"b'16"]),
29423                                                 Let(Var("B",F1),
29424                                                     Mop(Cast F1,
29425                                                         LL[bVar"b'22"]),
29426                                                     Let(Var("P",F1),
29427                                                         Mop(Cast F1,
29428                                                             LL[bVar"b'24"]),
29429                                                         MB(Call
29430                                                              ("Take",
29431                                                               ATy(qTy,
29432                                                                   PTy(bTy,
29433                                                                       qTy)),
29434                                                               TP[Var("cond",
29435                                                                      F4),
29436                                                                  LT]),
29437                                                            Close
29438                                                              (bVar"b",
29439                                                               ITE(bVar"b",
29440                                                                   Let(bVar"wback",
29441                                                                       Bop(Or,
29442                                                                           EQ(Var("P",
29443                                                                                  F1),
29444                                                                              LW(0,
29445                                                                                 1)),
29446                                                                           EQ(Mop(Cast
29447                                                                                    F1,
29448                                                                                  LL[bVar"b'21"]),
29449                                                                              LW(1,
29450                                                                                 1))),
29451                                                                       MB(Call
29452                                                                            ("ArchVersion",
29453                                                                             ATy(qTy,
29454                                                                                 PTy(nTy,
29455                                                                                     qTy)),
29456                                                                             LU),
29457                                                                          Close
29458                                                                            (nVar"v",
29459                                                                             MB(MB(MB(MB(MB(MU(Bop(Lt,
29460                                                                                                   nVar"v",
29461                                                                                                   LN
29462                                                                                                    6),
29463                                                                                               qTy),
29464                                                                                            Close
29465                                                                                              (bVar"b",
29466                                                                                               MU(Bop(And,
29467                                                                                                      bVar"b",
29468                                                                                                      bVar"wback"),
29469                                                                                                  qTy))),
29470                                                                                         Close
29471                                                                                           (bVar"b",
29472                                                                                            MU(Bop(And,
29473                                                                                                   bVar"b",
29474                                                                                                   EQ(Var("Rm",
29475                                                                                                          F4),
29476                                                                                                      Var("Rn",
29477                                                                                                          F4))),
29478                                                                                               qTy))),
29479                                                                                      Close
29480                                                                                        (bVar"v",
29481                                                                                         MU(Bop(Or,
29482                                                                                                Bop(Or,
29483                                                                                                    Bop(Or,
29484                                                                                                        Bop(And,
29485                                                                                                            EQ(Var("B",
29486                                                                                                                   F1),
29487                                                                                                               LW(1,
29488                                                                                                                  1)),
29489                                                                                                            EQ(Var("Rt",
29490                                                                                                                   F4),
29491                                                                                                               LW(15,
29492                                                                                                                  4))),
29493                                                                                                        EQ(Var("Rm",
29494                                                                                                               F4),
29495                                                                                                           LW(15,
29496                                                                                                              4))),
29497                                                                                                    Bop(And,
29498                                                                                                        bVar"wback",
29499                                                                                                        Bop(Or,
29500                                                                                                            EQ(Var("Rn",
29501                                                                                                                   F4),
29502                                                                                                               LW(15,
29503                                                                                                                  4)),
29504                                                                                                            EQ(Var("Rn",
29505                                                                                                                   F4),
29506                                                                                                               Var("Rt",
29507                                                                                                                   F4))))),
29508                                                                                                bVar"v"),
29509                                                                                            qTy))),
29510                                                                                   Close
29511                                                                                     (bVar"b",
29512                                                                                      ITE(bVar"b",
29513                                                                                          Call
29514                                                                                            ("DECODE_UNPREDICTABLE",
29515                                                                                             ATy(qTy,
29516                                                                                                 PTy(uTy,
29517                                                                                                     qTy)),
29518                                                                                             TP[Var("mc",
29519                                                                                                    CTy"MachineCode"),
29520                                                                                                LS
29521                                                                                                 "Store (regiser)"]),
29522                                                                                          MU(LU,
29523                                                                                             qTy)))),
29524                                                                                Close
29525                                                                                  (AVar
29526                                                                                     uTy,
29527                                                                                   MU(Let(bVar"add",
29528                                                                                          EQ(Mop(Cast
29529                                                                                                   F1,
29530                                                                                                 LL[bVar"b'23"]),
29531                                                                                             LW(1,
29532                                                                                                1)),
29533                                                                                          Let(bVar"index",
29534                                                                                              EQ(Var("P",
29535                                                                                                     F1),
29536                                                                                                 LW(1,
29537                                                                                                    1)),
29538                                                                                              Let(TP[Var("shift_t",
29539                                                                                                         CTy"SRType"),
29540                                                                                                     nVar"shift_n"],
29541                                                                                                  Call
29542                                                                                                    ("DecodeImmShift",
29543                                                                                                     PTy(CTy"SRType",
29544                                                                                                         nTy),
29545                                                                                                     TP[Mop(Cast
29546                                                                                                              (FTy 2),
29547                                                                                                            LL[bVar"b'6",
29548                                                                                                               bVar"b'5"]),
29549                                                                                                        Mop(Cast
29550                                                                                                              (FTy 5),
29551                                                                                                            LL[bVar"b'11",
29552                                                                                                               bVar"b'10",
29553                                                                                                               bVar"b'9",
29554                                                                                                               bVar"b'8",
29555                                                                                                               bVar"b'7"])]),
29556                                                                                                  Let(Var("m",
29557                                                                                                          CTy"offset1"),
29558                                                                                                      Call
29559                                                                                                        ("register_form1",
29560                                                                                                         CTy"offset1",
29561                                                                                                         TP[Var("Rm",
29562                                                                                                                F4),
29563                                                                                                            Var("shift_t",
29564                                                                                                                CTy"SRType"),
29565                                                                                                            nVar"shift_n"]),
29566                                                                                                      ITE(EQ(Var("B",
29567                                                                                                                 F1),
29568                                                                                                             LW(1,
29569                                                                                                                1)),
29570                                                                                                          Call
29571                                                                                                            ("Store",
29572                                                                                                             CTy"instruction",
29573                                                                                                             Call
29574                                                                                                               ("StoreByte",
29575                                                                                                                CTy"Store",
29576                                                                                                                TP[bVar"add",
29577                                                                                                                   bVar"index",
29578                                                                                                                   bVar"wback",
29579                                                                                                                   Var("Rt",
29580                                                                                                                       F4),
29581                                                                                                                   Var("Rn",
29582                                                                                                                       F4),
29583                                                                                                                   Var("m",
29584                                                                                                                       CTy"offset1")])),
29585                                                                                                          Call
29586                                                                                                            ("Store",
29587                                                                                                             CTy"instruction",
29588                                                                                                             Call
29589                                                                                                               ("StoreWord",
29590                                                                                                                CTy"Store",
29591                                                                                                                TP[bVar"add",
29592                                                                                                                   bVar"index",
29593                                                                                                                   bVar"wback",
29594                                                                                                                   Var("Rt",
29595                                                                                                                       F4),
29596                                                                                                                   Var("Rn",
29597                                                                                                                       F4),
29598                                                                                                                   Var("m",
29599                                                                                                                       CTy"offset1")]))))))),
29600                                                                                      qTy)))))),
29601                                                                   Call
29602                                                                     ("Skip",
29603                                                                      ATy(qTy,
29604                                                                          PTy(CTy"instruction",
29605                                                                              qTy)),
29606                                                                      LU)))))))))),
29607                                    (Bop(And,Mop(Not,bVar"b'27"),
29608                                         Bop(And,Mop(Not,bVar"b'24"),
29609                                             Bop(And,bVar"b'21",
29610                                                 Bop(And,bVar"b'20",
29611                                                     Mop(Not,bVar"b'4"))))),
29612                                     Let(Var("Rm",F4),
29613                                         Mop(Cast F4,
29614                                             LL[bVar"b'3",bVar"b'2",
29615                                                bVar"b'1",bVar"b'0"]),
29616                                         Let(Var("Rt",F4),
29617                                             Mop(Cast F4,
29618                                                 LL[bVar"b'15",bVar"b'14",
29619                                                    bVar"b'13",bVar"b'12"]),
29620                                             Let(Var("Rn",F4),
29621                                                 Mop(Cast F4,
29622                                                     LL[bVar"b'19",
29623                                                        bVar"b'18",
29624                                                        bVar"b'17",
29625                                                        bVar"b'16"]),
29626                                                 MB(Call
29627                                                      ("Take",
29628                                                       ATy(qTy,
29629                                                           PTy(bTy,qTy)),
29630                                                       TP[Var("cond",F4),
29631                                                          LT]),
29632                                                    Close
29633                                                      (bVar"b",
29634                                                       ITE(bVar"b",
29635                                                           MB(Call
29636                                                                ("ArchVersion",
29637                                                                 ATy(qTy,
29638                                                                     PTy(nTy,
29639                                                                         qTy)),
29640                                                                 LU),
29641                                                              Close
29642                                                                (nVar"v",
29643                                                                 MB(MB(MB(MB(MU(Bop(Lt,
29644                                                                                    nVar"v",
29645                                                                                    LN
29646                                                                                     6),
29647                                                                                qTy),
29648                                                                             Close
29649                                                                               (bVar"b",
29650                                                                                MU(Bop(And,
29651                                                                                       bVar"b",
29652                                                                                       EQ(Var("Rm",
29653                                                                                              F4),
29654                                                                                          Var("Rn",
29655                                                                                              F4))),
29656                                                                                   qTy))),
29657                                                                          Close
29658                                                                            (bVar"v",
29659                                                                             MU(Bop(Or,
29660                                                                                    Bop(Or,
29661                                                                                        Bop(Or,
29662                                                                                            Bop(Or,
29663                                                                                                EQ(Var("Rt",
29664                                                                                                       F4),
29665                                                                                                   LW(15,
29666                                                                                                      4)),
29667                                                                                                EQ(Var("Rn",
29668                                                                                                       F4),
29669                                                                                                   LW(15,
29670                                                                                                      4))),
29671                                                                                            EQ(Var("Rn",
29672                                                                                                   F4),
29673                                                                                               Var("Rt",
29674                                                                                                   F4))),
29675                                                                                        EQ(Var("Rm",
29676                                                                                               F4),
29677                                                                                           LW(15,
29678                                                                                              4))),
29679                                                                                    bVar"v"),
29680                                                                                qTy))),
29681                                                                       Close
29682                                                                         (bVar"b",
29683                                                                          ITE(bVar"b",
29684                                                                              Call
29685                                                                                ("DECODE_UNPREDICTABLE",
29686                                                                                 ATy(qTy,
29687                                                                                     PTy(uTy,
29688                                                                                         qTy)),
29689                                                                                 TP[Var("mc",
29690                                                                                        CTy"MachineCode"),
29691                                                                                    LS
29692                                                                                     "LoadUnprivileged (regiser)"]),
29693                                                                              MU(LU,
29694                                                                                 qTy)))),
29695                                                                    Close
29696                                                                      (AVar
29697                                                                         uTy,
29698                                                                       MU(Let(bVar"add",
29699                                                                              EQ(Mop(Cast
29700                                                                                       F1,
29701                                                                                     LL[bVar"b'23"]),
29702                                                                                 LW(1,
29703                                                                                    1)),
29704                                                                              Let(bVar"postindex",
29705                                                                                  LT,
29706                                                                                  Let(TP[Var("shift_t",
29707                                                                                             CTy"SRType"),
29708                                                                                         nVar"shift_n"],
29709                                                                                      Call
29710                                                                                        ("DecodeImmShift",
29711                                                                                         PTy(CTy"SRType",
29712                                                                                             nTy),
29713                                                                                         TP[Mop(Cast
29714                                                                                                  (FTy 2),
29715                                                                                                LL[bVar"b'6",
29716                                                                                                   bVar"b'5"]),
29717                                                                                            Mop(Cast
29718                                                                                                  (FTy 5),
29719                                                                                                LL[bVar"b'11",
29720                                                                                                   bVar"b'10",
29721                                                                                                   bVar"b'9",
29722                                                                                                   bVar"b'8",
29723                                                                                                   bVar"b'7"])]),
29724                                                                                      Let(Var("m",
29725                                                                                              CTy"offset1"),
29726                                                                                          Call
29727                                                                                            ("register_form1",
29728                                                                                             CTy"offset1",
29729                                                                                             TP[Var("Rm",
29730                                                                                                    F4),
29731                                                                                                Var("shift_t",
29732                                                                                                    CTy"SRType"),
29733                                                                                                nVar"shift_n"]),
29734                                                                                          ITE(EQ(Mop(Cast
29735                                                                                                       F1,
29736                                                                                                     LL[bVar"b'22"]),
29737                                                                                                 LW(1,
29738                                                                                                    1)),
29739                                                                                              Call
29740                                                                                                ("Load",
29741                                                                                                 CTy"instruction",
29742                                                                                                 Call
29743                                                                                                   ("LoadByteUnprivileged",
29744                                                                                                    CTy"Load",
29745                                                                                                    TP[bVar"add",
29746                                                                                                       bVar"postindex",
29747                                                                                                       Var("Rt",
29748                                                                                                           F4),
29749                                                                                                       Var("Rn",
29750                                                                                                           F4),
29751                                                                                                       Var("m",
29752                                                                                                           CTy"offset1")])),
29753                                                                                              Call
29754                                                                                                ("Load",
29755                                                                                                 CTy"instruction",
29756                                                                                                 Call
29757                                                                                                   ("LoadUnprivileged",
29758                                                                                                    CTy"Load",
29759                                                                                                    TP[bVar"add",
29760                                                                                                       bVar"postindex",
29761                                                                                                       Var("Rt",
29762                                                                                                           F4),
29763                                                                                                       Var("Rn",
29764                                                                                                           F4),
29765                                                                                                       Var("m",
29766                                                                                                           CTy"offset1")]))))))),
29767                                                                          qTy))))),
29768                                                           Call
29769                                                             ("Skip",
29770                                                              ATy(qTy,
29771                                                                  PTy(CTy"instruction",
29772                                                                      qTy)),
29773                                                              LU)))))))),
29774                                    (Bop(And,Mop(Not,bVar"b'27"),
29775                                         Bop(And,bVar"b'20",
29776                                             Mop(Not,bVar"b'4"))),
29777                                     Let(Var("Rm",F4),
29778                                         Mop(Cast F4,
29779                                             LL[bVar"b'3",bVar"b'2",
29780                                                bVar"b'1",bVar"b'0"]),
29781                                         Let(Var("Rt",F4),
29782                                             Mop(Cast F4,
29783                                                 LL[bVar"b'15",bVar"b'14",
29784                                                    bVar"b'13",bVar"b'12"]),
29785                                             Let(Var("Rn",F4),
29786                                                 Mop(Cast F4,
29787                                                     LL[bVar"b'19",
29788                                                        bVar"b'18",
29789                                                        bVar"b'17",
29790                                                        bVar"b'16"]),
29791                                                 Let(Var("B",F1),
29792                                                     Mop(Cast F1,
29793                                                         LL[bVar"b'22"]),
29794                                                     Let(Var("P",F1),
29795                                                         Mop(Cast F1,
29796                                                             LL[bVar"b'24"]),
29797                                                         MB(Call
29798                                                              ("Take",
29799                                                               ATy(qTy,
29800                                                                   PTy(bTy,
29801                                                                       qTy)),
29802                                                               TP[Var("cond",
29803                                                                      F4),
29804                                                                  LT]),
29805                                                            Close
29806                                                              (bVar"b",
29807                                                               ITE(bVar"b",
29808                                                                   Let(bVar"wback",
29809                                                                       Bop(Or,
29810                                                                           EQ(Var("P",
29811                                                                                  F1),
29812                                                                              LW(0,
29813                                                                                 1)),
29814                                                                           EQ(Mop(Cast
29815                                                                                    F1,
29816                                                                                  LL[bVar"b'21"]),
29817                                                                              LW(1,
29818                                                                                 1))),
29819                                                                       MB(Call
29820                                                                            ("ArchVersion",
29821                                                                             ATy(qTy,
29822                                                                                 PTy(nTy,
29823                                                                                     qTy)),
29824                                                                             LU),
29825                                                                          Close
29826                                                                            (nVar"v",
29827                                                                             MB(MB(MB(MB(MB(MU(Bop(Lt,
29828                                                                                                   nVar"v",
29829                                                                                                   LN
29830                                                                                                    6),
29831                                                                                               qTy),
29832                                                                                            Close
29833                                                                                              (bVar"b",
29834                                                                                               MU(Bop(And,
29835                                                                                                      bVar"b",
29836                                                                                                      bVar"wback"),
29837                                                                                                  qTy))),
29838                                                                                         Close
29839                                                                                           (bVar"b",
29840                                                                                            MU(Bop(And,
29841                                                                                                   bVar"b",
29842                                                                                                   EQ(Var("Rm",
29843                                                                                                          F4),
29844                                                                                                      Var("Rn",
29845                                                                                                          F4))),
29846                                                                                               qTy))),
29847                                                                                      Close
29848                                                                                        (bVar"v",
29849                                                                                         MU(Bop(Or,
29850                                                                                                Bop(Or,
29851                                                                                                    Bop(Or,
29852                                                                                                        Bop(And,
29853                                                                                                            EQ(Var("B",
29854                                                                                                                   F1),
29855                                                                                                               LW(1,
29856                                                                                                                  1)),
29857                                                                                                            EQ(Var("Rt",
29858                                                                                                                   F4),
29859                                                                                                               LW(15,
29860                                                                                                                  4))),
29861                                                                                                        EQ(Var("Rm",
29862                                                                                                               F4),
29863                                                                                                           LW(15,
29864                                                                                                              4))),
29865                                                                                                    Bop(And,
29866                                                                                                        bVar"wback",
29867                                                                                                        Bop(Or,
29868                                                                                                            EQ(Var("Rn",
29869                                                                                                                   F4),
29870                                                                                                               LW(15,
29871                                                                                                                  4)),
29872                                                                                                            EQ(Var("Rn",
29873                                                                                                                   F4),
29874                                                                                                               Var("Rt",
29875                                                                                                                   F4))))),
29876                                                                                                bVar"v"),
29877                                                                                            qTy))),
29878                                                                                   Close
29879                                                                                     (bVar"b",
29880                                                                                      ITE(bVar"b",
29881                                                                                          Call
29882                                                                                            ("DECODE_UNPREDICTABLE",
29883                                                                                             ATy(qTy,
29884                                                                                                 PTy(uTy,
29885                                                                                                     qTy)),
29886                                                                                             TP[Var("mc",
29887                                                                                                    CTy"MachineCode"),
29888                                                                                                LS
29889                                                                                                 "LoadWord/Byte (regiser)"]),
29890                                                                                          MU(LU,
29891                                                                                             qTy)))),
29892                                                                                Close
29893                                                                                  (AVar
29894                                                                                     uTy,
29895                                                                                   MU(Let(bVar"add",
29896                                                                                          EQ(Mop(Cast
29897                                                                                                   F1,
29898                                                                                                 LL[bVar"b'23"]),
29899                                                                                             LW(1,
29900                                                                                                1)),
29901                                                                                          Let(bVar"index",
29902                                                                                              EQ(Var("P",
29903                                                                                                     F1),
29904                                                                                                 LW(1,
29905                                                                                                    1)),
29906                                                                                              Let(TP[Var("shift_t",
29907                                                                                                         CTy"SRType"),
29908                                                                                                     nVar"shift_n"],
29909                                                                                                  Call
29910                                                                                                    ("DecodeImmShift",
29911                                                                                                     PTy(CTy"SRType",
29912                                                                                                         nTy),
29913                                                                                                     TP[Mop(Cast
29914                                                                                                              (FTy 2),
29915                                                                                                            LL[bVar"b'6",
29916                                                                                                               bVar"b'5"]),
29917                                                                                                        Mop(Cast
29918                                                                                                              (FTy 5),
29919                                                                                                            LL[bVar"b'11",
29920                                                                                                               bVar"b'10",
29921                                                                                                               bVar"b'9",
29922                                                                                                               bVar"b'8",
29923                                                                                                               bVar"b'7"])]),
29924                                                                                                  Let(Var("m",
29925                                                                                                          CTy"offset1"),
29926                                                                                                      Call
29927                                                                                                        ("register_form1",
29928                                                                                                         CTy"offset1",
29929                                                                                                         TP[Var("Rm",
29930                                                                                                                F4),
29931                                                                                                            Var("shift_t",
29932                                                                                                                CTy"SRType"),
29933                                                                                                            nVar"shift_n"]),
29934                                                                                                      ITE(EQ(Var("B",
29935                                                                                                                 F1),
29936                                                                                                             LW(1,
29937                                                                                                                1)),
29938                                                                                                          Call
29939                                                                                                            ("Load",
29940                                                                                                             CTy"instruction",
29941                                                                                                             Call
29942                                                                                                               ("LoadByte",
29943                                                                                                                CTy"Load",
29944                                                                                                                TP[LT,
29945                                                                                                                   bVar"add",
29946                                                                                                                   bVar"index",
29947                                                                                                                   bVar"wback",
29948                                                                                                                   Var("Rt",
29949                                                                                                                       F4),
29950                                                                                                                   Var("Rn",
29951                                                                                                                       F4),
29952                                                                                                                   Var("m",
29953                                                                                                                       CTy"offset1")])),
29954                                                                                                          Call
29955                                                                                                            ("Load",
29956                                                                                                             CTy"instruction",
29957                                                                                                             Call
29958                                                                                                               ("LoadWord",
29959                                                                                                                CTy"Load",
29960                                                                                                                TP[bVar"add",
29961                                                                                                                   bVar"index",
29962                                                                                                                   bVar"wback",
29963                                                                                                                   Var("Rt",
29964                                                                                                                       F4),
29965                                                                                                                   Var("Rn",
29966                                                                                                                       F4),
29967                                                                                                                   Var("m",
29968                                                                                                                       CTy"offset1")]))))))),
29969                                                                                      qTy)))))),
29970                                                                   Call
29971                                                                     ("Skip",
29972                                                                      ATy(qTy,
29973                                                                          PTy(CTy"instruction",
29974                                                                              qTy)),
29975                                                                      LU)))))))))),
29976                                    (Bop(And,Mop(Not,bVar"b'27"),
29977                                         Bop(And,Mop(Not,bVar"b'24"),
29978                                             Bop(And,Mop(Not,bVar"b'23"),
29979                                                 bVar"b'4"))),
29980                                     Let(Var("Rm",F4),
29981                                         Mop(Cast F4,
29982                                             LL[bVar"b'3",bVar"b'2",
29983                                                bVar"b'1",bVar"b'0"]),
29984                                         Let(Var("Rd",F4),
29985                                             Mop(Cast F4,
29986                                                 LL[bVar"b'15",bVar"b'14",
29987                                                    bVar"b'13",bVar"b'12"]),
29988                                             Let(Var("Rn",F4),
29989                                                 Mop(Cast F4,
29990                                                     LL[bVar"b'19",
29991                                                        bVar"b'18",
29992                                                        bVar"b'17",
29993                                                        bVar"b'16"]),
29994                                                 MB(Call
29995                                                      ("ArchVersion",
29996                                                       ATy(qTy,
29997                                                           PTy(nTy,qTy)),
29998                                                       LU),
29999                                                    Close
30000                                                      (nVar"v",
30001                                                       MB(MB(MB(MU(Bop(Ge,
30002                                                                       nVar"v",
30003                                                                       LN
30004                                                                        6),
30005                                                                   qTy),
30006                                                                Close
30007                                                                  (bVar"v",
30008                                                                   MU(TP[Var("cond",
30009                                                                             F4),
30010                                                                         bVar"v"],
30011                                                                      qTy))),
30012                                                             Close
30013                                                               (Var("v",
30014                                                                    PTy(F4,
30015                                                                        bTy)),
30016                                                                Call
30017                                                                  ("Take",
30018                                                                   ATy(qTy,
30019                                                                       PTy(bTy,
30020                                                                           qTy)),
30021                                                                   Var("v",
30022                                                                       PTy(F4,
30023                                                                           bTy))))),
30024                                                          Close
30025                                                            (bVar"b",
30026                                                             ITE(bVar"b",
30027                                                                 MB(ITE(Bop(Or,
30028                                                                            Bop(Or,
30029                                                                                EQ(Var("Rd",
30030                                                                                       F4),
30031                                                                                   LW(15,
30032                                                                                      4)),
30033                                                                                EQ(Var("Rn",
30034                                                                                       F4),
30035                                                                                   LW(15,
30036                                                                                      4))),
30037                                                                            EQ(Var("Rm",
30038                                                                                   F4),
30039                                                                               LW(15,
30040                                                                                  4))),
30041                                                                        Call
30042                                                                          ("DECODE_UNPREDICTABLE",
30043                                                                           ATy(qTy,
30044                                                                               PTy(uTy,
30045                                                                                   qTy)),
30046                                                                           TP[Var("mc",
30047                                                                                  CTy"MachineCode"),
30048                                                                              LS
30049                                                                               "Parallel addition and subtraction"]),
30050                                                                        MU(LU,
30051                                                                           qTy)),
30052                                                                    Close
30053                                                                      (AVar
30054                                                                         uTy,
30055                                                                       MU(Call
30056                                                                            ("DecodeParallelAdditionSubtraction",
30057                                                                             CTy"instruction",
30058                                                                             TP[Mop(Cast
30059                                                                                      (FTy 2),
30060                                                                                    LL[bVar"b'21",
30061                                                                                       bVar"b'20"]),
30062                                                                                Mop(Cast
30063                                                                                      (FTy 3),
30064                                                                                    LL[bVar"b'7",
30065                                                                                       bVar"b'6",
30066                                                                                       bVar"b'5"]),
30067                                                                                Mop(Cast
30068                                                                                      F1,
30069                                                                                    LL[bVar"b'22"]),
30070                                                                                Var("Rd",
30071                                                                                    F4),
30072                                                                                Var("Rn",
30073                                                                                    F4),
30074                                                                                Var("Rm",
30075                                                                                    F4)]),
30076                                                                          qTy))),
30077                                                                 Call
30078                                                                   ("Skip",
30079                                                                    ATy(qTy,
30080                                                                        PTy(CTy"instruction",
30081                                                                            qTy)),
30082                                                                    LU)))))))))),
30083                                    (Bop(And,Mop(Not,bVar"b'27"),
30084                                         Bop(And,Mop(Not,bVar"b'24"),
30085                                             Bop(And,bVar"b'23",
30086                                                 Bop(And,
30087                                                     Mop(Not,bVar"b'22"),
30088                                                     Bop(And,
30089                                                         Mop(Not,
30090                                                             bVar"b'21"),
30091                                                         Bop(And,
30092                                                             Mop(Not,
30093                                                                 bVar"b'20"),
30094                                                             Bop(And,
30095                                                                 Mop(Not,
30096                                                                     bVar"b'5"),
30097                                                                 bVar"b'4"))))))),
30098                                     Let(Var("Rm",F4),
30099                                         Mop(Cast F4,
30100                                             LL[bVar"b'3",bVar"b'2",
30101                                                bVar"b'1",bVar"b'0"]),
30102                                         Let(Var("tb",F1),
30103                                             Mop(Cast F1,LL[bVar"b'6"]),
30104                                             Let(Var("Rd",F4),
30105                                                 Mop(Cast F4,
30106                                                     LL[bVar"b'15",
30107                                                        bVar"b'14",
30108                                                        bVar"b'13",
30109                                                        bVar"b'12"]),
30110                                                 Let(Var("Rn",F4),
30111                                                     Mop(Cast F4,
30112                                                         LL[bVar"b'19",
30113                                                            bVar"b'18",
30114                                                            bVar"b'17",
30115                                                            bVar"b'16"]),
30116                                                     MB(Call
30117                                                          ("ArchVersion",
30118                                                           ATy(qTy,
30119                                                               PTy(nTy,qTy)),
30120                                                           LU),
30121                                                        Close
30122                                                          (nVar"v",
30123                                                           MB(MB(MB(MU(Bop(Ge,
30124                                                                           nVar"v",
30125                                                                           LN
30126                                                                            6),
30127                                                                       qTy),
30128                                                                    Close
30129                                                                      (bVar"v",
30130                                                                       MU(TP[Var("cond",
30131                                                                                 F4),
30132                                                                             bVar"v"],
30133                                                                          qTy))),
30134                                                                 Close
30135                                                                   (Var("v",
30136                                                                        PTy(F4,
30137                                                                            bTy)),
30138                                                                    Call
30139                                                                      ("Take",
30140                                                                       ATy(qTy,
30141                                                                           PTy(bTy,
30142                                                                               qTy)),
30143                                                                       Var("v",
30144                                                                           PTy(F4,
30145                                                                               bTy))))),
30146                                                              Close
30147                                                                (bVar"b",
30148                                                                 ITE(bVar"b",
30149                                                                     MB(ITE(Bop(Or,
30150                                                                                Bop(Or,
30151                                                                                    EQ(Var("Rd",
30152                                                                                           F4),
30153                                                                                       LW(15,
30154                                                                                          4)),
30155                                                                                    EQ(Var("Rn",
30156                                                                                           F4),
30157                                                                                       LW(15,
30158                                                                                          4))),
30159                                                                                EQ(Var("Rm",
30160                                                                                       F4),
30161                                                                                   LW(15,
30162                                                                                      4))),
30163                                                                            Call
30164                                                                              ("DECODE_UNPREDICTABLE",
30165                                                                               ATy(qTy,
30166                                                                                   PTy(uTy,
30167                                                                                       qTy)),
30168                                                                               TP[Var("mc",
30169                                                                                      CTy"MachineCode"),
30170                                                                                  LS
30171                                                                                   "PackHalfword"]),
30172                                                                            MU(LU,
30173                                                                               qTy)),
30174                                                                        Close
30175                                                                          (AVar
30176                                                                             uTy,
30177                                                                           MU(Let(TP[Var("shift_t",
30178                                                                                         CTy"SRType"),
30179                                                                                     nVar"shift_n"],
30180                                                                                  Call
30181                                                                                    ("DecodeImmShift",
30182                                                                                     PTy(CTy"SRType",
30183                                                                                         nTy),
30184                                                                                     TP[CC[Var("tb",
30185                                                                                               F1),
30186                                                                                           LW(0,
30187                                                                                              1)],
30188                                                                                        Mop(Cast
30189                                                                                              (FTy 5),
30190                                                                                            LL[bVar"b'11",
30191                                                                                               bVar"b'10",
30192                                                                                               bVar"b'9",
30193                                                                                               bVar"b'8",
30194                                                                                               bVar"b'7"])]),
30195                                                                                  Call
30196                                                                                    ("Media",
30197                                                                                     CTy"instruction",
30198                                                                                     Call
30199                                                                                       ("PackHalfword",
30200                                                                                        CTy"Media",
30201                                                                                        TP[Var("shift_t",
30202                                                                                               CTy"SRType"),
30203                                                                                           nVar"shift_n",
30204                                                                                           EQ(Var("tb",
30205                                                                                                  F1),
30206                                                                                              LW(1,
30207                                                                                                 1)),
30208                                                                                           Var("Rd",
30209                                                                                               F4),
30210                                                                                           Var("Rn",
30211                                                                                               F4),
30212                                                                                           Var("Rm",
30213                                                                                               F4)]))),
30214                                                                              qTy))),
30215                                                                     Call
30216                                                                       ("Skip",
30217                                                                        ATy(qTy,
30218                                                                            PTy(CTy"instruction",
30219                                                                                qTy)),
30220                                                                        LU))))))))))),
30221                                    (Bop(And,Mop(Not,bVar"b'27"),
30222                                         Bop(And,Mop(Not,bVar"b'24"),
30223                                             Bop(And,bVar"b'23",
30224                                                 Bop(And,
30225                                                     Mop(Not,bVar"b'22"),
30226                                                     Bop(And,
30227                                                         Mop(Not,
30228                                                             bVar"b'21"),
30229                                                         Bop(And,
30230                                                             Mop(Not,
30231                                                                 bVar"b'20"),
30232                                                             Bop(And,
30233                                                                 bVar"b'7",
30234                                                                 Bop(And,
30235                                                                     Mop(Not,
30236                                                                         bVar"b'6"),
30237                                                                     Bop(And,
30238                                                                         bVar"b'5",
30239                                                                         bVar"b'4"))))))))),
30240                                     Let(Var("Rm",F4),
30241                                         Mop(Cast F4,
30242                                             LL[bVar"b'3",bVar"b'2",
30243                                                bVar"b'1",bVar"b'0"]),
30244                                         Let(Var("Rd",F4),
30245                                             Mop(Cast F4,
30246                                                 LL[bVar"b'15",bVar"b'14",
30247                                                    bVar"b'13",bVar"b'12"]),
30248                                             Let(Var("Rn",F4),
30249                                                 Mop(Cast F4,
30250                                                     LL[bVar"b'19",
30251                                                        bVar"b'18",
30252                                                        bVar"b'17",
30253                                                        bVar"b'16"]),
30254                                                 MB(Call
30255                                                      ("ArchVersion",
30256                                                       ATy(qTy,
30257                                                           PTy(nTy,qTy)),
30258                                                       LU),
30259                                                    Close
30260                                                      (nVar"v",
30261                                                       MB(MB(MB(MU(Bop(Ge,
30262                                                                       nVar"v",
30263                                                                       LN
30264                                                                        6),
30265                                                                   qTy),
30266                                                                Close
30267                                                                  (bVar"v",
30268                                                                   MU(TP[Var("cond",
30269                                                                             F4),
30270                                                                         bVar"v"],
30271                                                                      qTy))),
30272                                                             Close
30273                                                               (Var("v",
30274                                                                    PTy(F4,
30275                                                                        bTy)),
30276                                                                Call
30277                                                                  ("Take",
30278                                                                   ATy(qTy,
30279                                                                       PTy(bTy,
30280                                                                           qTy)),
30281                                                                   Var("v",
30282                                                                       PTy(F4,
30283                                                                           bTy))))),
30284                                                          Close
30285                                                            (bVar"b",
30286                                                             ITE(bVar"b",
30287                                                                 MB(ITE(Bop(Or,
30288                                                                            Bop(Or,
30289                                                                                EQ(Var("Rd",
30290                                                                                       F4),
30291                                                                                   LW(15,
30292                                                                                      4)),
30293                                                                                EQ(Var("Rn",
30294                                                                                       F4),
30295                                                                                   LW(15,
30296                                                                                      4))),
30297                                                                            EQ(Var("Rm",
30298                                                                                   F4),
30299                                                                               LW(15,
30300                                                                                  4))),
30301                                                                        Call
30302                                                                          ("DECODE_UNPREDICTABLE",
30303                                                                           ATy(qTy,
30304                                                                               PTy(uTy,
30305                                                                                   qTy)),
30306                                                                           TP[Var("mc",
30307                                                                                  CTy"MachineCode"),
30308                                                                              LS
30309                                                                               "SelectBytes"]),
30310                                                                        MU(LU,
30311                                                                           qTy)),
30312                                                                    Close
30313                                                                      (AVar
30314                                                                         uTy,
30315                                                                       MU(Call
30316                                                                            ("Media",
30317                                                                             CTy"instruction",
30318                                                                             Call
30319                                                                               ("SelectBytes",
30320                                                                                CTy"Media",
30321                                                                                TP[Var("Rd",
30322                                                                                       F4),
30323                                                                                   Var("Rn",
30324                                                                                       F4),
30325                                                                                   Var("Rm",
30326                                                                                       F4)])),
30327                                                                          qTy))),
30328                                                                 Call
30329                                                                   ("Skip",
30330                                                                    ATy(qTy,
30331                                                                        PTy(CTy"instruction",
30332                                                                            qTy)),
30333                                                                    LU)))))))))),
30334                                    (Bop(And,Mop(Not,bVar"b'27"),
30335                                         Bop(And,Mop(Not,bVar"b'24"),
30336                                             Bop(And,bVar"b'23",
30337                                                 Bop(And,bVar"b'21",
30338                                                     Bop(And,
30339                                                         Mop(Not,bVar"b'5"),
30340                                                         bVar"b'4"))))),
30341                                     Let(Var("Rn",F4),
30342                                         Mop(Cast F4,
30343                                             LL[bVar"b'3",bVar"b'2",
30344                                                bVar"b'1",bVar"b'0"]),
30345                                         Let(Var("Rd",F4),
30346                                             Mop(Cast F4,
30347                                                 LL[bVar"b'15",bVar"b'14",
30348                                                    bVar"b'13",bVar"b'12"]),
30349                                             Let(Var("sat_imm",FTy 5),
30350                                                 Mop(Cast(FTy 5),
30351                                                     LL[bVar"b'20",
30352                                                        bVar"b'19",
30353                                                        bVar"b'18",
30354                                                        bVar"b'17",
30355                                                        bVar"b'16"]),
30356                                                 MB(Call
30357                                                      ("ArchVersion",
30358                                                       ATy(qTy,
30359                                                           PTy(nTy,qTy)),
30360                                                       LU),
30361                                                    Close
30362                                                      (nVar"v",
30363                                                       MB(MB(MB(MU(Bop(Ge,
30364                                                                       nVar"v",
30365                                                                       LN
30366                                                                        6),
30367                                                                   qTy),
30368                                                                Close
30369                                                                  (bVar"v",
30370                                                                   MU(TP[Var("cond",
30371                                                                             F4),
30372                                                                         bVar"v"],
30373                                                                      qTy))),
30374                                                             Close
30375                                                               (Var("v",
30376                                                                    PTy(F4,
30377                                                                        bTy)),
30378                                                                Call
30379                                                                  ("Take",
30380                                                                   ATy(qTy,
30381                                                                       PTy(bTy,
30382                                                                           qTy)),
30383                                                                   Var("v",
30384                                                                       PTy(F4,
30385                                                                           bTy))))),
30386                                                          Close
30387                                                            (bVar"b",
30388                                                             ITE(bVar"b",
30389                                                                 MB(ITE(Bop(Or,
30390                                                                            EQ(Var("Rd",
30391                                                                                   F4),
30392                                                                               LW(15,
30393                                                                                  4)),
30394                                                                            EQ(Var("Rn",
30395                                                                                   F4),
30396                                                                               LW(15,
30397                                                                                  4))),
30398                                                                        Call
30399                                                                          ("DECODE_UNPREDICTABLE",
30400                                                                           ATy(qTy,
30401                                                                               PTy(uTy,
30402                                                                                   qTy)),
30403                                                                           TP[Var("mc",
30404                                                                                  CTy"MachineCode"),
30405                                                                              LS
30406                                                                               "Saturate"]),
30407                                                                        MU(LU,
30408                                                                           qTy)),
30409                                                                    Close
30410                                                                      (AVar
30411                                                                         uTy,
30412                                                                       MU(Let(bVar"unsigned",
30413                                                                              EQ(Mop(Cast
30414                                                                                       F1,
30415                                                                                     LL[bVar"b'22"]),
30416                                                                                 LW(1,
30417                                                                                    1)),
30418                                                                              Let(TP[Var("shift_t",
30419                                                                                         CTy"SRType"),
30420                                                                                     nVar"shift_n"],
30421                                                                                  Call
30422                                                                                    ("DecodeImmShift",
30423                                                                                     PTy(CTy"SRType",
30424                                                                                         nTy),
30425                                                                                     TP[CC[Mop(Cast
30426                                                                                                 F1,
30427                                                                                               LL[bVar"b'6"]),
30428                                                                                           LW(0,
30429                                                                                              1)],
30430                                                                                        Mop(Cast
30431                                                                                              (FTy 5),
30432                                                                                            LL[bVar"b'11",
30433                                                                                               bVar"b'10",
30434                                                                                               bVar"b'9",
30435                                                                                               bVar"b'8",
30436                                                                                               bVar"b'7"])]),
30437                                                                                  Call
30438                                                                                    ("Media",
30439                                                                                     CTy"instruction",
30440                                                                                     Call
30441                                                                                       ("Saturate",
30442                                                                                        CTy"Media",
30443                                                                                        TP[Var("shift_t",
30444                                                                                               CTy"SRType"),
30445                                                                                           nVar"shift_n",
30446                                                                                           ITE(bVar"unsigned",
30447                                                                                               Mop(Cast
30448                                                                                                     nTy,
30449                                                                                                   Var("sat_imm",
30450                                                                                                       FTy 5)),
30451                                                                                               Bop(Add,
30452                                                                                                   Mop(Cast
30453                                                                                                         nTy,
30454                                                                                                       Var("sat_imm",
30455                                                                                                           FTy 5)),
30456                                                                                                   LN
30457                                                                                                    1)),
30458                                                                                           bVar"unsigned",
30459                                                                                           Var("Rd",
30460                                                                                               F4),
30461                                                                                           Var("Rn",
30462                                                                                               F4)])))),
30463                                                                          qTy))),
30464                                                                 Call
30465                                                                   ("Skip",
30466                                                                    ATy(qTy,
30467                                                                        PTy(CTy"instruction",
30468                                                                            qTy)),
30469                                                                    LU)))))))))),
30470                                    (Bop(And,Mop(Not,bVar"b'27"),
30471                                         Bop(And,Mop(Not,bVar"b'24"),
30472                                             Bop(And,bVar"b'23",
30473                                                 Bop(And,bVar"b'21",
30474                                                     Bop(And,
30475                                                         Mop(Not,
30476                                                             bVar"b'20"),
30477                                                         Bop(And,
30478                                                             Mop(Not,
30479                                                                 bVar"b'7"),
30480                                                             Bop(And,
30481                                                                 Mop(Not,
30482                                                                     bVar"b'6"),
30483                                                                 Bop(And,
30484                                                                     bVar"b'5",
30485                                                                     bVar"b'4")))))))),
30486                                     Let(Var("Rn",F4),
30487                                         Mop(Cast F4,
30488                                             LL[bVar"b'3",bVar"b'2",
30489                                                bVar"b'1",bVar"b'0"]),
30490                                         Let(Var("Rd",F4),
30491                                             Mop(Cast F4,
30492                                                 LL[bVar"b'15",bVar"b'14",
30493                                                    bVar"b'13",bVar"b'12"]),
30494                                             Let(Var("sat_imm",F4),
30495                                                 Mop(Cast F4,
30496                                                     LL[bVar"b'19",
30497                                                        bVar"b'18",
30498                                                        bVar"b'17",
30499                                                        bVar"b'16"]),
30500                                                 MB(Call
30501                                                      ("ArchVersion",
30502                                                       ATy(qTy,
30503                                                           PTy(nTy,qTy)),
30504                                                       LU),
30505                                                    Close
30506                                                      (nVar"v",
30507                                                       MB(MB(MB(MU(Bop(Ge,
30508                                                                       nVar"v",
30509                                                                       LN
30510                                                                        6),
30511                                                                   qTy),
30512                                                                Close
30513                                                                  (bVar"v",
30514                                                                   MU(TP[Var("cond",
30515                                                                             F4),
30516                                                                         bVar"v"],
30517                                                                      qTy))),
30518                                                             Close
30519                                                               (Var("v",
30520                                                                    PTy(F4,
30521                                                                        bTy)),
30522                                                                Call
30523                                                                  ("Take",
30524                                                                   ATy(qTy,
30525                                                                       PTy(bTy,
30526                                                                           qTy)),
30527                                                                   Var("v",
30528                                                                       PTy(F4,
30529                                                                           bTy))))),
30530                                                          Close
30531                                                            (bVar"b",
30532                                                             ITE(bVar"b",
30533                                                                 MB(ITE(Bop(Or,
30534                                                                            EQ(Var("Rd",
30535                                                                                   F4),
30536                                                                               LW(15,
30537                                                                                  4)),
30538                                                                            EQ(Var("Rn",
30539                                                                                   F4),
30540                                                                               LW(15,
30541                                                                                  4))),
30542                                                                        Call
30543                                                                          ("DECODE_UNPREDICTABLE",
30544                                                                           ATy(qTy,
30545                                                                               PTy(uTy,
30546                                                                                   qTy)),
30547                                                                           TP[Var("mc",
30548                                                                                  CTy"MachineCode"),
30549                                                                              LS
30550                                                                               "Saturate16"]),
30551                                                                        MU(LU,
30552                                                                           qTy)),
30553                                                                    Close
30554                                                                      (AVar
30555                                                                         uTy,
30556                                                                       MU(Let(bVar"unsigned",
30557                                                                              EQ(Mop(Cast
30558                                                                                       F1,
30559                                                                                     LL[bVar"b'22"]),
30560                                                                                 LW(1,
30561                                                                                    1)),
30562                                                                              Call
30563                                                                                ("Media",
30564                                                                                 CTy"instruction",
30565                                                                                 Call
30566                                                                                   ("Saturate16",
30567                                                                                    CTy"Media",
30568                                                                                    TP[ITE(bVar"unsigned",
30569                                                                                           Mop(Cast
30570                                                                                                 nTy,
30571                                                                                               Var("sat_imm",
30572                                                                                                   F4)),
30573                                                                                           Bop(Add,
30574                                                                                               Mop(Cast
30575                                                                                                     nTy,
30576                                                                                                   Var("sat_imm",
30577                                                                                                       F4)),
30578                                                                                               LN
30579                                                                                                1)),
30580                                                                                       bVar"unsigned",
30581                                                                                       Var("Rd",
30582                                                                                           F4),
30583                                                                                       Var("Rn",
30584                                                                                           F4)]))),
30585                                                                          qTy))),
30586                                                                 Call
30587                                                                   ("Skip",
30588                                                                    ATy(qTy,
30589                                                                        PTy(CTy"instruction",
30590                                                                            qTy)),
30591                                                                    LU)))))))))),
30592                                    (Bop(And,Mop(Not,bVar"b'27"),
30593                                         Bop(And,Mop(Not,bVar"b'24"),
30594                                             Bop(And,bVar"b'23",
30595                                                 Bop(And,
30596                                                     Mop(Not,bVar"b'21"),
30597                                                     Bop(And,
30598                                                         Mop(Not,
30599                                                             bVar"b'20"),
30600                                                         Bop(And,
30601                                                             Mop(Not,
30602                                                                 bVar"b'7"),
30603                                                             Bop(And,
30604                                                                 bVar"b'6",
30605                                                                 Bop(And,
30606                                                                     bVar"b'5",
30607                                                                     bVar"b'4")))))))),
30608                                     Let(Var("Rm",F4),
30609                                         Mop(Cast F4,
30610                                             LL[bVar"b'3",bVar"b'2",
30611                                                bVar"b'1",bVar"b'0"]),
30612                                         Let(Var("Rd",F4),
30613                                             Mop(Cast F4,
30614                                                 LL[bVar"b'15",bVar"b'14",
30615                                                    bVar"b'13",bVar"b'12"]),
30616                                             MB(Call
30617                                                  ("ArchVersion",
30618                                                   ATy(qTy,PTy(nTy,qTy)),
30619                                                   LU),
30620                                                Close
30621                                                  (nVar"v",
30622                                                   MB(MB(MB(MU(Bop(Ge,
30623                                                                   nVar"v",
30624                                                                   LN 6),
30625                                                               qTy),
30626                                                            Close
30627                                                              (bVar"v",
30628                                                               MU(TP[Var("cond",
30629                                                                         F4),
30630                                                                     bVar"v"],
30631                                                                  qTy))),
30632                                                         Close
30633                                                           (Var("v",
30634                                                                PTy(F4,bTy)),
30635                                                            Call
30636                                                              ("Take",
30637                                                               ATy(qTy,
30638                                                                   PTy(bTy,
30639                                                                       qTy)),
30640                                                               Var("v",
30641                                                                   PTy(F4,
30642                                                                       bTy))))),
30643                                                      Close
30644                                                        (bVar"b",
30645                                                         ITE(bVar"b",
30646                                                             MB(ITE(Bop(Or,
30647                                                                        EQ(Var("Rd",
30648                                                                               F4),
30649                                                                           LW(15,
30650                                                                              4)),
30651                                                                        EQ(Var("Rm",
30652                                                                               F4),
30653                                                                           LW(15,
30654                                                                              4))),
30655                                                                    Call
30656                                                                      ("DECODE_UNPREDICTABLE",
30657                                                                       ATy(qTy,
30658                                                                           PTy(uTy,
30659                                                                               qTy)),
30660                                                                       TP[Var("mc",
30661                                                                              CTy"MachineCode"),
30662                                                                          LS
30663                                                                           "ExtendByte16"]),
30664                                                                    MU(LU,
30665                                                                       qTy)),
30666                                                                Close
30667                                                                  (AVar
30668                                                                     uTy,
30669                                                                   MU(Call
30670                                                                        ("Media",
30671                                                                         CTy"instruction",
30672                                                                         Call
30673                                                                           ("ExtendByte16",
30674                                                                            CTy"Media",
30675                                                                            TP[EQ(Mop(Cast
30676                                                                                        F1,
30677                                                                                      LL[bVar"b'22"]),
30678                                                                                  LW(1,
30679                                                                                     1)),
30680                                                                               Var("Rd",
30681                                                                                   F4),
30682                                                                               Mop(Cast
30683                                                                                     F4,
30684                                                                                   LL[bVar"b'19",
30685                                                                                      bVar"b'18",
30686                                                                                      bVar"b'17",
30687                                                                                      bVar"b'16"]),
30688                                                                               Var("Rm",
30689                                                                                   F4),
30690                                                                               Mop(Cast
30691                                                                                     nTy,
30692                                                                                   CC[Mop(Cast
30693                                                                                            (FTy 2),
30694                                                                                          LL[bVar"b'11",
30695                                                                                             bVar"b'10"]),
30696                                                                                      LW(0,
30697                                                                                         3)])])),
30698                                                                      qTy))),
30699                                                             Call
30700                                                               ("Skip",
30701                                                                ATy(qTy,
30702                                                                    PTy(CTy"instruction",
30703                                                                        qTy)),
30704                                                                LU))))))))),
30705                                    (Bop(And,Mop(Not,bVar"b'27"),
30706                                         Bop(And,Mop(Not,bVar"b'24"),
30707                                             Bop(And,bVar"b'23",
30708                                                 Bop(And,bVar"b'21",
30709                                                     Bop(And,
30710                                                         Mop(Not,
30711                                                             bVar"b'20"),
30712                                                         Bop(And,
30713                                                             Mop(Not,
30714                                                                 bVar"b'7"),
30715                                                             Bop(And,
30716                                                                 bVar"b'6",
30717                                                                 Bop(And,
30718                                                                     bVar"b'5",
30719                                                                     bVar"b'4")))))))),
30720                                     Let(Var("Rm",F4),
30721                                         Mop(Cast F4,
30722                                             LL[bVar"b'3",bVar"b'2",
30723                                                bVar"b'1",bVar"b'0"]),
30724                                         Let(Var("Rd",F4),
30725                                             Mop(Cast F4,
30726                                                 LL[bVar"b'15",bVar"b'14",
30727                                                    bVar"b'13",bVar"b'12"]),
30728                                             MB(Call
30729                                                  ("ArchVersion",
30730                                                   ATy(qTy,PTy(nTy,qTy)),
30731                                                   LU),
30732                                                Close
30733                                                  (nVar"v",
30734                                                   MB(MB(MB(MU(Bop(Ge,
30735                                                                   nVar"v",
30736                                                                   LN 6),
30737                                                               qTy),
30738                                                            Close
30739                                                              (bVar"v",
30740                                                               MU(TP[Var("cond",
30741                                                                         F4),
30742                                                                     bVar"v"],
30743                                                                  qTy))),
30744                                                         Close
30745                                                           (Var("v",
30746                                                                PTy(F4,bTy)),
30747                                                            Call
30748                                                              ("Take",
30749                                                               ATy(qTy,
30750                                                                   PTy(bTy,
30751                                                                       qTy)),
30752                                                               Var("v",
30753                                                                   PTy(F4,
30754                                                                       bTy))))),
30755                                                      Close
30756                                                        (bVar"b",
30757                                                         ITE(bVar"b",
30758                                                             MB(ITE(Bop(Or,
30759                                                                        EQ(Var("Rd",
30760                                                                               F4),
30761                                                                           LW(15,
30762                                                                              4)),
30763                                                                        EQ(Var("Rm",
30764                                                                               F4),
30765                                                                           LW(15,
30766                                                                              4))),
30767                                                                    Call
30768                                                                      ("DECODE_UNPREDICTABLE",
30769                                                                       ATy(qTy,
30770                                                                           PTy(uTy,
30771                                                                               qTy)),
30772                                                                       TP[Var("mc",
30773                                                                              CTy"MachineCode"),
30774                                                                          LS
30775                                                                           "ExtendByte"]),
30776                                                                    MU(LU,
30777                                                                       qTy)),
30778                                                                Close
30779                                                                  (AVar
30780                                                                     uTy,
30781                                                                   MU(Call
30782                                                                        ("Media",
30783                                                                         CTy"instruction",
30784                                                                         Call
30785                                                                           ("ExtendByte",
30786                                                                            CTy"Media",
30787                                                                            TP[EQ(Mop(Cast
30788                                                                                        F1,
30789                                                                                      LL[bVar"b'22"]),
30790                                                                                  LW(1,
30791                                                                                     1)),
30792                                                                               Var("Rd",
30793                                                                                   F4),
30794                                                                               Mop(Cast
30795                                                                                     F4,
30796                                                                                   LL[bVar"b'19",
30797                                                                                      bVar"b'18",
30798                                                                                      bVar"b'17",
30799                                                                                      bVar"b'16"]),
30800                                                                               Var("Rm",
30801                                                                                   F4),
30802                                                                               Mop(Cast
30803                                                                                     nTy,
30804                                                                                   CC[Mop(Cast
30805                                                                                            (FTy 2),
30806                                                                                          LL[bVar"b'11",
30807                                                                                             bVar"b'10"]),
30808                                                                                      LW(0,
30809                                                                                         3)])])),
30810                                                                      qTy))),
30811                                                             Call
30812                                                               ("Skip",
30813                                                                ATy(qTy,
30814                                                                    PTy(CTy"instruction",
30815                                                                        qTy)),
30816                                                                LU))))))))),
30817                                    (Bop(And,Mop(Not,bVar"b'27"),
30818                                         Bop(And,Mop(Not,bVar"b'24"),
30819                                             Bop(And,bVar"b'23",
30820                                                 Bop(And,bVar"b'21",
30821                                                     Bop(And,bVar"b'20",
30822                                                         Bop(And,
30823                                                             Mop(Not,
30824                                                                 bVar"b'7"),
30825                                                             Bop(And,
30826                                                                 bVar"b'6",
30827                                                                 Bop(And,
30828                                                                     bVar"b'5",
30829                                                                     bVar"b'4")))))))),
30830                                     Let(Var("Rm",F4),
30831                                         Mop(Cast F4,
30832                                             LL[bVar"b'3",bVar"b'2",
30833                                                bVar"b'1",bVar"b'0"]),
30834                                         Let(Var("Rd",F4),
30835                                             Mop(Cast F4,
30836                                                 LL[bVar"b'15",bVar"b'14",
30837                                                    bVar"b'13",bVar"b'12"]),
30838                                             MB(Call
30839                                                  ("ArchVersion",
30840                                                   ATy(qTy,PTy(nTy,qTy)),
30841                                                   LU),
30842                                                Close
30843                                                  (nVar"v",
30844                                                   MB(MB(MB(MU(Bop(Ge,
30845                                                                   nVar"v",
30846                                                                   LN 6),
30847                                                               qTy),
30848                                                            Close
30849                                                              (bVar"v",
30850                                                               MU(TP[Var("cond",
30851                                                                         F4),
30852                                                                     bVar"v"],
30853                                                                  qTy))),
30854                                                         Close
30855                                                           (Var("v",
30856                                                                PTy(F4,bTy)),
30857                                                            Call
30858                                                              ("Take",
30859                                                               ATy(qTy,
30860                                                                   PTy(bTy,
30861                                                                       qTy)),
30862                                                               Var("v",
30863                                                                   PTy(F4,
30864                                                                       bTy))))),
30865                                                      Close
30866                                                        (bVar"b",
30867                                                         ITE(bVar"b",
30868                                                             MB(ITE(Bop(Or,
30869                                                                        EQ(Var("Rd",
30870                                                                               F4),
30871                                                                           LW(15,
30872                                                                              4)),
30873                                                                        EQ(Var("Rm",
30874                                                                               F4),
30875                                                                           LW(15,
30876                                                                              4))),
30877                                                                    Call
30878                                                                      ("DECODE_UNPREDICTABLE",
30879                                                                       ATy(qTy,
30880                                                                           PTy(uTy,
30881                                                                               qTy)),
30882                                                                       TP[Var("mc",
30883                                                                              CTy"MachineCode"),
30884                                                                          LS
30885                                                                           "ExtendHalfword"]),
30886                                                                    MU(LU,
30887                                                                       qTy)),
30888                                                                Close
30889                                                                  (AVar
30890                                                                     uTy,
30891                                                                   MU(Call
30892                                                                        ("Media",
30893                                                                         CTy"instruction",
30894                                                                         Call
30895                                                                           ("ExtendHalfword",
30896                                                                            CTy"Media",
30897                                                                            TP[EQ(Mop(Cast
30898                                                                                        F1,
30899                                                                                      LL[bVar"b'22"]),
30900                                                                                  LW(1,
30901                                                                                     1)),
30902                                                                               Var("Rd",
30903                                                                                   F4),
30904                                                                               Mop(Cast
30905                                                                                     F4,
30906                                                                                   LL[bVar"b'19",
30907                                                                                      bVar"b'18",
30908                                                                                      bVar"b'17",
30909                                                                                      bVar"b'16"]),
30910                                                                               Var("Rm",
30911                                                                                   F4),
30912                                                                               Mop(Cast
30913                                                                                     nTy,
30914                                                                                   CC[Mop(Cast
30915                                                                                            (FTy 2),
30916                                                                                          LL[bVar"b'11",
30917                                                                                             bVar"b'10"]),
30918                                                                                      LW(0,
30919                                                                                         3)])])),
30920                                                                      qTy))),
30921                                                             Call
30922                                                               ("Skip",
30923                                                                ATy(qTy,
30924                                                                    PTy(CTy"instruction",
30925                                                                        qTy)),
30926                                                                LU))))))))),
30927                                    (Bop(And,Mop(Not,bVar"b'27"),
30928                                         Bop(And,Mop(Not,bVar"b'24"),
30929                                             Bop(And,bVar"b'23",
30930                                                 Bop(And,
30931                                                     Mop(Not,bVar"b'22"),
30932                                                     Bop(And,bVar"b'21",
30933                                                         Bop(And,
30934                                                             bVar"b'20",
30935                                                             Bop(And,
30936                                                                 Mop(Not,
30937                                                                     bVar"b'7"),
30938                                                                 Bop(And,
30939                                                                     Mop(Not,
30940                                                                         bVar"b'6"),
30941                                                                     Bop(And,
30942                                                                         bVar"b'5",
30943                                                                         bVar"b'4"))))))))),
30944                                     Let(Var("Rm",F4),
30945                                         Mop(Cast F4,
30946                                             LL[bVar"b'3",bVar"b'2",
30947                                                bVar"b'1",bVar"b'0"]),
30948                                         Let(Var("Rd",F4),
30949                                             Mop(Cast F4,
30950                                                 LL[bVar"b'15",bVar"b'14",
30951                                                    bVar"b'13",bVar"b'12"]),
30952                                             MB(Call
30953                                                  ("ArchVersion",
30954                                                   ATy(qTy,PTy(nTy,qTy)),
30955                                                   LU),
30956                                                Close
30957                                                  (nVar"v",
30958                                                   MB(MB(MB(MU(Bop(Ge,
30959                                                                   nVar"v",
30960                                                                   LN 6),
30961                                                               qTy),
30962                                                            Close
30963                                                              (bVar"v",
30964                                                               MU(TP[Var("cond",
30965                                                                         F4),
30966                                                                     bVar"v"],
30967                                                                  qTy))),
30968                                                         Close
30969                                                           (Var("v",
30970                                                                PTy(F4,bTy)),
30971                                                            Call
30972                                                              ("Take",
30973                                                               ATy(qTy,
30974                                                                   PTy(bTy,
30975                                                                       qTy)),
30976                                                               Var("v",
30977                                                                   PTy(F4,
30978                                                                       bTy))))),
30979                                                      Close
30980                                                        (bVar"b",
30981                                                         ITE(bVar"b",
30982                                                             MB(ITE(Bop(Or,
30983                                                                        EQ(Var("Rd",
30984                                                                               F4),
30985                                                                           LW(15,
30986                                                                              4)),
30987                                                                        EQ(Var("Rm",
30988                                                                               F4),
30989                                                                           LW(15,
30990                                                                              4))),
30991                                                                    Call
30992                                                                      ("DECODE_UNPREDICTABLE",
30993                                                                       ATy(qTy,
30994                                                                           PTy(uTy,
30995                                                                               qTy)),
30996                                                                       TP[Var("mc",
30997                                                                              CTy"MachineCode"),
30998                                                                          LS
30999                                                                           "ByteReverse"]),
31000                                                                    MU(LU,
31001                                                                       qTy)),
31002                                                                Close
31003                                                                  (AVar
31004                                                                     uTy,
31005                                                                   MU(Call
31006                                                                        ("Media",
31007                                                                         CTy"instruction",
31008                                                                         Call
31009                                                                           ("ByteReverse",
31010                                                                            CTy"Media",
31011                                                                            TP[Var("Rd",
31012                                                                                   F4),
31013                                                                               Var("Rm",
31014                                                                                   F4)])),
31015                                                                      qTy))),
31016                                                             Call
31017                                                               ("Skip",
31018                                                                ATy(qTy,
31019                                                                    PTy(CTy"instruction",
31020                                                                        qTy)),
31021                                                                LU))))))))),
31022                                    (Bop(And,Mop(Not,bVar"b'27"),
31023                                         Bop(And,Mop(Not,bVar"b'24"),
31024                                             Bop(And,bVar"b'23",
31025                                                 Bop(And,
31026                                                     Mop(Not,bVar"b'22"),
31027                                                     Bop(And,bVar"b'21",
31028                                                         Bop(And,
31029                                                             bVar"b'20",
31030                                                             Bop(And,
31031                                                                 bVar"b'7",
31032                                                                 Bop(And,
31033                                                                     Mop(Not,
31034                                                                         bVar"b'6"),
31035                                                                     Bop(And,
31036                                                                         bVar"b'5",
31037                                                                         bVar"b'4"))))))))),
31038                                     Let(Var("Rm",F4),
31039                                         Mop(Cast F4,
31040                                             LL[bVar"b'3",bVar"b'2",
31041                                                bVar"b'1",bVar"b'0"]),
31042                                         Let(Var("Rd",F4),
31043                                             Mop(Cast F4,
31044                                                 LL[bVar"b'15",bVar"b'14",
31045                                                    bVar"b'13",bVar"b'12"]),
31046                                             MB(Call
31047                                                  ("ArchVersion",
31048                                                   ATy(qTy,PTy(nTy,qTy)),
31049                                                   LU),
31050                                                Close
31051                                                  (nVar"v",
31052                                                   MB(MB(MB(MU(Bop(Ge,
31053                                                                   nVar"v",
31054                                                                   LN 6),
31055                                                               qTy),
31056                                                            Close
31057                                                              (bVar"v",
31058                                                               MU(TP[Var("cond",
31059                                                                         F4),
31060                                                                     bVar"v"],
31061                                                                  qTy))),
31062                                                         Close
31063                                                           (Var("v",
31064                                                                PTy(F4,bTy)),
31065                                                            Call
31066                                                              ("Take",
31067                                                               ATy(qTy,
31068                                                                   PTy(bTy,
31069                                                                       qTy)),
31070                                                               Var("v",
31071                                                                   PTy(F4,
31072                                                                       bTy))))),
31073                                                      Close
31074                                                        (bVar"b",
31075                                                         ITE(bVar"b",
31076                                                             MB(ITE(Bop(Or,
31077                                                                        EQ(Var("Rd",
31078                                                                               F4),
31079                                                                           LW(15,
31080                                                                              4)),
31081                                                                        EQ(Var("Rm",
31082                                                                               F4),
31083                                                                           LW(15,
31084                                                                              4))),
31085                                                                    Call
31086                                                                      ("DECODE_UNPREDICTABLE",
31087                                                                       ATy(qTy,
31088                                                                           PTy(uTy,
31089                                                                               qTy)),
31090                                                                       TP[Var("mc",
31091                                                                              CTy"MachineCode"),
31092                                                                          LS
31093                                                                           "ByteReversePackedHalfword"]),
31094                                                                    MU(LU,
31095                                                                       qTy)),
31096                                                                Close
31097                                                                  (AVar
31098                                                                     uTy,
31099                                                                   MU(Call
31100                                                                        ("Media",
31101                                                                         CTy"instruction",
31102                                                                         Call
31103                                                                           ("ByteReversePackedHalfword",
31104                                                                            CTy"Media",
31105                                                                            TP[Var("Rd",
31106                                                                                   F4),
31107                                                                               Var("Rm",
31108                                                                                   F4)])),
31109                                                                      qTy))),
31110                                                             Call
31111                                                               ("Skip",
31112                                                                ATy(qTy,
31113                                                                    PTy(CTy"instruction",
31114                                                                        qTy)),
31115                                                                LU))))))))),
31116                                    (Bop(And,Mop(Not,bVar"b'27"),
31117                                         Bop(And,Mop(Not,bVar"b'24"),
31118                                             Bop(And,bVar"b'23",
31119                                                 Bop(And,bVar"b'22",
31120                                                     Bop(And,bVar"b'21",
31121                                                         Bop(And,
31122                                                             bVar"b'20",
31123                                                             Bop(And,
31124                                                                 bVar"b'7",
31125                                                                 Bop(And,
31126                                                                     Mop(Not,
31127                                                                         bVar"b'6"),
31128                                                                     Bop(And,
31129                                                                         bVar"b'5",
31130                                                                         bVar"b'4"))))))))),
31131                                     Let(Var("Rm",F4),
31132                                         Mop(Cast F4,
31133                                             LL[bVar"b'3",bVar"b'2",
31134                                                bVar"b'1",bVar"b'0"]),
31135                                         Let(Var("Rd",F4),
31136                                             Mop(Cast F4,
31137                                                 LL[bVar"b'15",bVar"b'14",
31138                                                    bVar"b'13",bVar"b'12"]),
31139                                             MB(Call
31140                                                  ("ArchVersion",
31141                                                   ATy(qTy,PTy(nTy,qTy)),
31142                                                   LU),
31143                                                Close
31144                                                  (nVar"v",
31145                                                   MB(MB(MB(MU(Bop(Ge,
31146                                                                   nVar"v",
31147                                                                   LN 6),
31148                                                               qTy),
31149                                                            Close
31150                                                              (bVar"v",
31151                                                               MU(TP[Var("cond",
31152                                                                         F4),
31153                                                                     bVar"v"],
31154                                                                  qTy))),
31155                                                         Close
31156                                                           (Var("v",
31157                                                                PTy(F4,bTy)),
31158                                                            Call
31159                                                              ("Take",
31160                                                               ATy(qTy,
31161                                                                   PTy(bTy,
31162                                                                       qTy)),
31163                                                               Var("v",
31164                                                                   PTy(F4,
31165                                                                       bTy))))),
31166                                                      Close
31167                                                        (bVar"b",
31168                                                         ITE(bVar"b",
31169                                                             MB(ITE(Bop(Or,
31170                                                                        EQ(Var("Rd",
31171                                                                               F4),
31172                                                                           LW(15,
31173                                                                              4)),
31174                                                                        EQ(Var("Rm",
31175                                                                               F4),
31176                                                                           LW(15,
31177                                                                              4))),
31178                                                                    Call
31179                                                                      ("DECODE_UNPREDICTABLE",
31180                                                                       ATy(qTy,
31181                                                                           PTy(uTy,
31182                                                                               qTy)),
31183                                                                       TP[Var("mc",
31184                                                                              CTy"MachineCode"),
31185                                                                          LS
31186                                                                           "ByteReverseSignedHalfword"]),
31187                                                                    MU(LU,
31188                                                                       qTy)),
31189                                                                Close
31190                                                                  (AVar
31191                                                                     uTy,
31192                                                                   MU(Call
31193                                                                        ("Media",
31194                                                                         CTy"instruction",
31195                                                                         Call
31196                                                                           ("ByteReverseSignedHalfword",
31197                                                                            CTy"Media",
31198                                                                            TP[Var("Rd",
31199                                                                                   F4),
31200                                                                               Var("Rm",
31201                                                                                   F4)])),
31202                                                                      qTy))),
31203                                                             Call
31204                                                               ("Skip",
31205                                                                ATy(qTy,
31206                                                                    PTy(CTy"instruction",
31207                                                                        qTy)),
31208                                                                LU))))))))),
31209                                    (Bop(And,Mop(Not,bVar"b'27"),
31210                                         Bop(And,Mop(Not,bVar"b'24"),
31211                                             Bop(And,bVar"b'23",
31212                                                 Bop(And,bVar"b'22",
31213                                                     Bop(And,bVar"b'21",
31214                                                         Bop(And,
31215                                                             bVar"b'20",
31216                                                             Bop(And,
31217                                                                 Mop(Not,
31218                                                                     bVar"b'7"),
31219                                                                 Bop(And,
31220                                                                     Mop(Not,
31221                                                                         bVar"b'6"),
31222                                                                     Bop(And,
31223                                                                         bVar"b'5",
31224                                                                         bVar"b'4"))))))))),
31225                                     Let(Var("Rm",F4),
31226                                         Mop(Cast F4,
31227                                             LL[bVar"b'3",bVar"b'2",
31228                                                bVar"b'1",bVar"b'0"]),
31229                                         Let(Var("Rd",F4),
31230                                             Mop(Cast F4,
31231                                                 LL[bVar"b'15",bVar"b'14",
31232                                                    bVar"b'13",bVar"b'12"]),
31233                                             MB(Call
31234                                                  ("ArchVersion",
31235                                                   ATy(qTy,PTy(nTy,qTy)),
31236                                                   LU),
31237                                                Close
31238                                                  (nVar"v",
31239                                                   MB(MB(MB(MU(Bop(Ge,
31240                                                                   nVar"v",
31241                                                                   LN 6),
31242                                                               qTy),
31243                                                            Close
31244                                                              (bVar"v",
31245                                                               MU(TP[Var("cond",
31246                                                                         F4),
31247                                                                     bVar"v"],
31248                                                                  qTy))),
31249                                                         Close
31250                                                           (Var("v",
31251                                                                PTy(F4,bTy)),
31252                                                            Call
31253                                                              ("Take",
31254                                                               ATy(qTy,
31255                                                                   PTy(bTy,
31256                                                                       qTy)),
31257                                                               Var("v",
31258                                                                   PTy(F4,
31259                                                                       bTy))))),
31260                                                      Close
31261                                                        (bVar"b",
31262                                                         ITE(bVar"b",
31263                                                             MB(ITE(Bop(Or,
31264                                                                        EQ(Var("Rd",
31265                                                                               F4),
31266                                                                           LW(15,
31267                                                                              4)),
31268                                                                        EQ(Var("Rm",
31269                                                                               F4),
31270                                                                           LW(15,
31271                                                                              4))),
31272                                                                    Call
31273                                                                      ("DECODE_UNPREDICTABLE",
31274                                                                       ATy(qTy,
31275                                                                           PTy(uTy,
31276                                                                               qTy)),
31277                                                                       TP[Var("mc",
31278                                                                              CTy"MachineCode"),
31279                                                                          LS
31280                                                                           "ReverseBits"]),
31281                                                                    MU(LU,
31282                                                                       qTy)),
31283                                                                Close
31284                                                                  (AVar
31285                                                                     uTy,
31286                                                                   MU(Call
31287                                                                        ("Media",
31288                                                                         CTy"instruction",
31289                                                                         Call
31290                                                                           ("ReverseBits",
31291                                                                            CTy"Media",
31292                                                                            TP[Var("Rd",
31293                                                                                   F4),
31294                                                                               Var("Rm",
31295                                                                                   F4)])),
31296                                                                      qTy))),
31297                                                             Call
31298                                                               ("Skip",
31299                                                                ATy(qTy,
31300                                                                    PTy(CTy"instruction",
31301                                                                        qTy)),
31302                                                                LU))))))))),
31303                                    (Bop(And,Mop(Not,bVar"b'27"),
31304                                         Bop(And,bVar"b'24",
31305                                             Bop(And,Mop(Not,bVar"b'23"),
31306                                                 Bop(And,
31307                                                     Mop(Not,bVar"b'22"),
31308                                                     Bop(And,
31309                                                         Mop(Not,
31310                                                             bVar"b'21"),
31311                                                         Bop(And,
31312                                                             Mop(Not,
31313                                                                 bVar"b'20"),
31314                                                             Bop(And,
31315                                                                 Mop(Not,
31316                                                                     bVar"b'7"),
31317                                                                 bVar"b'4"))))))),
31318                                     Let(Var("Rn",F4),
31319                                         Mop(Cast F4,
31320                                             LL[bVar"b'3",bVar"b'2",
31321                                                bVar"b'1",bVar"b'0"]),
31322                                         Let(Var("Rm",F4),
31323                                             Mop(Cast F4,
31324                                                 LL[bVar"b'11",bVar"b'10",
31325                                                    bVar"b'9",bVar"b'8"]),
31326                                             Let(Var("Rd",F4),
31327                                                 Mop(Cast F4,
31328                                                     LL[bVar"b'19",
31329                                                        bVar"b'18",
31330                                                        bVar"b'17",
31331                                                        bVar"b'16"]),
31332                                                 MB(Call
31333                                                      ("ArchVersion",
31334                                                       ATy(qTy,
31335                                                           PTy(nTy,qTy)),
31336                                                       LU),
31337                                                    Close
31338                                                      (nVar"v",
31339                                                       MB(MB(MB(MU(Bop(Ge,
31340                                                                       nVar"v",
31341                                                                       LN
31342                                                                        6),
31343                                                                   qTy),
31344                                                                Close
31345                                                                  (bVar"v",
31346                                                                   MU(TP[Var("cond",
31347                                                                             F4),
31348                                                                         bVar"v"],
31349                                                                      qTy))),
31350                                                             Close
31351                                                               (Var("v",
31352                                                                    PTy(F4,
31353                                                                        bTy)),
31354                                                                Call
31355                                                                  ("Take",
31356                                                                   ATy(qTy,
31357                                                                       PTy(bTy,
31358                                                                           qTy)),
31359                                                                   Var("v",
31360                                                                       PTy(F4,
31361                                                                           bTy))))),
31362                                                          Close
31363                                                            (bVar"b",
31364                                                             ITE(bVar"b",
31365                                                                 MB(ITE(Bop(Or,
31366                                                                            Bop(Or,
31367                                                                                EQ(Var("Rd",
31368                                                                                       F4),
31369                                                                                   LW(15,
31370                                                                                      4)),
31371                                                                                EQ(Var("Rn",
31372                                                                                       F4),
31373                                                                                   LW(15,
31374                                                                                      4))),
31375                                                                            EQ(Var("Rm",
31376                                                                                   F4),
31377                                                                               LW(15,
31378                                                                                  4))),
31379                                                                        Call
31380                                                                          ("DECODE_UNPREDICTABLE",
31381                                                                           ATy(qTy,
31382                                                                               PTy(uTy,
31383                                                                                   qTy)),
31384                                                                           TP[Var("mc",
31385                                                                                  CTy"MachineCode"),
31386                                                                              LS
31387                                                                               "SignedMultiplyDual"]),
31388                                                                        MU(LU,
31389                                                                           qTy)),
31390                                                                    Close
31391                                                                      (AVar
31392                                                                         uTy,
31393                                                                       MU(Call
31394                                                                            ("Multiply",
31395                                                                             CTy"instruction",
31396                                                                             Call
31397                                                                               ("SignedMultiplyDual",
31398                                                                                CTy"Multiply",
31399                                                                                TP[EQ(Mop(Cast
31400                                                                                            F1,
31401                                                                                          LL[bVar"b'6"]),
31402                                                                                      LW(1,
31403                                                                                         1)),
31404                                                                                   EQ(Mop(Cast
31405                                                                                            F1,
31406                                                                                          LL[bVar"b'5"]),
31407                                                                                      LW(1,
31408                                                                                         1)),
31409                                                                                   Var("Rd",
31410                                                                                       F4),
31411                                                                                   Var("Rn",
31412                                                                                       F4),
31413                                                                                   Var("Rm",
31414                                                                                       F4),
31415                                                                                   Mop(Cast
31416                                                                                         F4,
31417                                                                                       LL[bVar"b'15",
31418                                                                                          bVar"b'14",
31419                                                                                          bVar"b'13",
31420                                                                                          bVar"b'12"])])),
31421                                                                          qTy))),
31422                                                                 Call
31423                                                                   ("Skip",
31424                                                                    ATy(qTy,
31425                                                                        PTy(CTy"instruction",
31426                                                                            qTy)),
31427                                                                    LU)))))))))),
31428                                    (Bop(And,Mop(Not,bVar"b'27"),
31429                                         Bop(And,bVar"b'24",
31430                                             Bop(And,Mop(Not,bVar"b'23"),
31431                                                 Bop(And,bVar"b'22",
31432                                                     Bop(And,
31433                                                         Mop(Not,
31434                                                             bVar"b'21"),
31435                                                         Bop(And,
31436                                                             Mop(Not,
31437                                                                 bVar"b'20"),
31438                                                             Bop(And,
31439                                                                 Mop(Not,
31440                                                                     bVar"b'7"),
31441                                                                 bVar"b'4"))))))),
31442                                     Let(Var("Rn",F4),
31443                                         Mop(Cast F4,
31444                                             LL[bVar"b'3",bVar"b'2",
31445                                                bVar"b'1",bVar"b'0"]),
31446                                         Let(Var("Rm",F4),
31447                                             Mop(Cast F4,
31448                                                 LL[bVar"b'11",bVar"b'10",
31449                                                    bVar"b'9",bVar"b'8"]),
31450                                             Let(Var("RdLo",F4),
31451                                                 Mop(Cast F4,
31452                                                     LL[bVar"b'15",
31453                                                        bVar"b'14",
31454                                                        bVar"b'13",
31455                                                        bVar"b'12"]),
31456                                                 Let(Var("RdHi",F4),
31457                                                     Mop(Cast F4,
31458                                                         LL[bVar"b'19",
31459                                                            bVar"b'18",
31460                                                            bVar"b'17",
31461                                                            bVar"b'16"]),
31462                                                     MB(Call
31463                                                          ("ArchVersion",
31464                                                           ATy(qTy,
31465                                                               PTy(nTy,qTy)),
31466                                                           LU),
31467                                                        Close
31468                                                          (nVar"v",
31469                                                           MB(MB(MB(MU(Bop(Ge,
31470                                                                           nVar"v",
31471                                                                           LN
31472                                                                            6),
31473                                                                       qTy),
31474                                                                    Close
31475                                                                      (bVar"v",
31476                                                                       MU(TP[Var("cond",
31477                                                                                 F4),
31478                                                                             bVar"v"],
31479                                                                          qTy))),
31480                                                                 Close
31481                                                                   (Var("v",
31482                                                                        PTy(F4,
31483                                                                            bTy)),
31484                                                                    Call
31485                                                                      ("Take",
31486                                                                       ATy(qTy,
31487                                                                           PTy(bTy,
31488                                                                               qTy)),
31489                                                                       Var("v",
31490                                                                           PTy(F4,
31491                                                                               bTy))))),
31492                                                              Close
31493                                                                (bVar"b",
31494                                                                 ITE(bVar"b",
31495                                                                     MB(ITE(Bop(Or,
31496                                                                                Bop(Or,
31497                                                                                    Bop(Or,
31498                                                                                        EQ(Var("RdLo",
31499                                                                                               F4),
31500                                                                                           LW(15,
31501                                                                                              4)),
31502                                                                                        EQ(Var("RdHi",
31503                                                                                               F4),
31504                                                                                           LW(15,
31505                                                                                              4))),
31506                                                                                    EQ(Var("Rn",
31507                                                                                           F4),
31508                                                                                       LW(15,
31509                                                                                          4))),
31510                                                                                EQ(Var("Rm",
31511                                                                                       F4),
31512                                                                                   LW(15,
31513                                                                                      4))),
31514                                                                            Call
31515                                                                              ("DECODE_UNPREDICTABLE",
31516                                                                               ATy(qTy,
31517                                                                                   PTy(uTy,
31518                                                                                       qTy)),
31519                                                                               TP[Var("mc",
31520                                                                                      CTy"MachineCode"),
31521                                                                                  LS
31522                                                                                   "SignedMultiplyLongDual"]),
31523                                                                            MU(LU,
31524                                                                               qTy)),
31525                                                                        Close
31526                                                                          (AVar
31527                                                                             uTy,
31528                                                                           MU(Call
31529                                                                                ("Multiply",
31530                                                                                 CTy"instruction",
31531                                                                                 Call
31532                                                                                   ("SignedMultiplyLongDual",
31533                                                                                    CTy"Multiply",
31534                                                                                    TP[EQ(Mop(Cast
31535                                                                                                F1,
31536                                                                                              LL[bVar"b'6"]),
31537                                                                                          LW(1,
31538                                                                                             1)),
31539                                                                                       EQ(Mop(Cast
31540                                                                                                F1,
31541                                                                                              LL[bVar"b'5"]),
31542                                                                                          LW(1,
31543                                                                                             1)),
31544                                                                                       Var("RdHi",
31545                                                                                           F4),
31546                                                                                       Var("RdLo",
31547                                                                                           F4),
31548                                                                                       Var("Rn",
31549                                                                                           F4),
31550                                                                                       Var("Rm",
31551                                                                                           F4)])),
31552                                                                              qTy))),
31553                                                                     Call
31554                                                                       ("Skip",
31555                                                                        ATy(qTy,
31556                                                                            PTy(CTy"instruction",
31557                                                                                qTy)),
31558                                                                        LU))))))))))),
31559                                    (Bop(And,Mop(Not,bVar"b'27"),
31560                                         Bop(And,bVar"b'24",
31561                                             Bop(And,Mop(Not,bVar"b'23"),
31562                                                 Bop(And,bVar"b'22",
31563                                                     Bop(And,
31564                                                         Mop(Not,
31565                                                             bVar"b'21"),
31566                                                         Bop(And,
31567                                                             bVar"b'20",
31568                                                             Bop(And,
31569                                                                 Mop(Not,
31570                                                                     bVar"b'7"),
31571                                                                 Bop(And,
31572                                                                     Mop(Not,
31573                                                                         bVar"b'6"),
31574                                                                     bVar"b'4")))))))),
31575                                     Let(Var("Rn",F4),
31576                                         Mop(Cast F4,
31577                                             LL[bVar"b'3",bVar"b'2",
31578                                                bVar"b'1",bVar"b'0"]),
31579                                         Let(Var("Rm",F4),
31580                                             Mop(Cast F4,
31581                                                 LL[bVar"b'11",bVar"b'10",
31582                                                    bVar"b'9",bVar"b'8"]),
31583                                             Let(Var("Rd",F4),
31584                                                 Mop(Cast F4,
31585                                                     LL[bVar"b'19",
31586                                                        bVar"b'18",
31587                                                        bVar"b'17",
31588                                                        bVar"b'16"]),
31589                                                 MB(Call
31590                                                      ("ArchVersion",
31591                                                       ATy(qTy,
31592                                                           PTy(nTy,qTy)),
31593                                                       LU),
31594                                                    Close
31595                                                      (nVar"v",
31596                                                       MB(MB(MB(MU(Bop(Ge,
31597                                                                       nVar"v",
31598                                                                       LN
31599                                                                        6),
31600                                                                   qTy),
31601                                                                Close
31602                                                                  (bVar"v",
31603                                                                   MU(TP[Var("cond",
31604                                                                             F4),
31605                                                                         bVar"v"],
31606                                                                      qTy))),
31607                                                             Close
31608                                                               (Var("v",
31609                                                                    PTy(F4,
31610                                                                        bTy)),
31611                                                                Call
31612                                                                  ("Take",
31613                                                                   ATy(qTy,
31614                                                                       PTy(bTy,
31615                                                                           qTy)),
31616                                                                   Var("v",
31617                                                                       PTy(F4,
31618                                                                           bTy))))),
31619                                                          Close
31620                                                            (bVar"b",
31621                                                             ITE(bVar"b",
31622                                                                 MB(ITE(Bop(Or,
31623                                                                            Bop(Or,
31624                                                                                EQ(Var("Rd",
31625                                                                                       F4),
31626                                                                                   LW(15,
31627                                                                                      4)),
31628                                                                                EQ(Var("Rn",
31629                                                                                       F4),
31630                                                                                   LW(15,
31631                                                                                      4))),
31632                                                                            EQ(Var("Rm",
31633                                                                                   F4),
31634                                                                               LW(15,
31635                                                                                  4))),
31636                                                                        Call
31637                                                                          ("DECODE_UNPREDICTABLE",
31638                                                                           ATy(qTy,
31639                                                                               PTy(uTy,
31640                                                                                   qTy)),
31641                                                                           TP[Var("mc",
31642                                                                                  CTy"MachineCode"),
31643                                                                              LS
31644                                                                               "SignedMostSignificantMultiply"]),
31645                                                                        MU(LU,
31646                                                                           qTy)),
31647                                                                    Close
31648                                                                      (AVar
31649                                                                         uTy,
31650                                                                       MU(Call
31651                                                                            ("Multiply",
31652                                                                             CTy"instruction",
31653                                                                             Call
31654                                                                               ("SignedMostSignificantMultiply",
31655                                                                                CTy"Multiply",
31656                                                                                TP[EQ(Mop(Cast
31657                                                                                            F1,
31658                                                                                          LL[bVar"b'5"]),
31659                                                                                      LW(1,
31660                                                                                         1)),
31661                                                                                   Var("Rd",
31662                                                                                       F4),
31663                                                                                   Var("Rn",
31664                                                                                       F4),
31665                                                                                   Var("Rm",
31666                                                                                       F4),
31667                                                                                   Mop(Cast
31668                                                                                         F4,
31669                                                                                       LL[bVar"b'15",
31670                                                                                          bVar"b'14",
31671                                                                                          bVar"b'13",
31672                                                                                          bVar"b'12"])])),
31673                                                                          qTy))),
31674                                                                 Call
31675                                                                   ("Skip",
31676                                                                    ATy(qTy,
31677                                                                        PTy(CTy"instruction",
31678                                                                            qTy)),
31679                                                                    LU)))))))))),
31680                                    (Bop(And,Mop(Not,bVar"b'27"),
31681                                         Bop(And,bVar"b'24",
31682                                             Bop(And,Mop(Not,bVar"b'23"),
31683                                                 Bop(And,bVar"b'22",
31684                                                     Bop(And,
31685                                                         Mop(Not,
31686                                                             bVar"b'21"),
31687                                                         Bop(And,
31688                                                             bVar"b'20",
31689                                                             Bop(And,
31690                                                                 bVar"b'7",
31691                                                                 Bop(And,
31692                                                                     bVar"b'6",
31693                                                                     bVar"b'4")))))))),
31694                                     Let(Var("Rn",F4),
31695                                         Mop(Cast F4,
31696                                             LL[bVar"b'3",bVar"b'2",
31697                                                bVar"b'1",bVar"b'0"]),
31698                                         Let(Var("Rm",F4),
31699                                             Mop(Cast F4,
31700                                                 LL[bVar"b'11",bVar"b'10",
31701                                                    bVar"b'9",bVar"b'8"]),
31702                                             Let(Var("Ra",F4),
31703                                                 Mop(Cast F4,
31704                                                     LL[bVar"b'15",
31705                                                        bVar"b'14",
31706                                                        bVar"b'13",
31707                                                        bVar"b'12"]),
31708                                                 Let(Var("Rd",F4),
31709                                                     Mop(Cast F4,
31710                                                         LL[bVar"b'19",
31711                                                            bVar"b'18",
31712                                                            bVar"b'17",
31713                                                            bVar"b'16"]),
31714                                                     MB(Call
31715                                                          ("ArchVersion",
31716                                                           ATy(qTy,
31717                                                               PTy(nTy,qTy)),
31718                                                           LU),
31719                                                        Close
31720                                                          (nVar"v",
31721                                                           MB(MB(MB(MU(Bop(Ge,
31722                                                                           nVar"v",
31723                                                                           LN
31724                                                                            6),
31725                                                                       qTy),
31726                                                                    Close
31727                                                                      (bVar"v",
31728                                                                       MU(TP[Var("cond",
31729                                                                                 F4),
31730                                                                             bVar"v"],
31731                                                                          qTy))),
31732                                                                 Close
31733                                                                   (Var("v",
31734                                                                        PTy(F4,
31735                                                                            bTy)),
31736                                                                    Call
31737                                                                      ("Take",
31738                                                                       ATy(qTy,
31739                                                                           PTy(bTy,
31740                                                                               qTy)),
31741                                                                       Var("v",
31742                                                                           PTy(F4,
31743                                                                               bTy))))),
31744                                                              Close
31745                                                                (bVar"b",
31746                                                                 ITE(bVar"b",
31747                                                                     MB(ITE(Bop(Or,
31748                                                                                Bop(Or,
31749                                                                                    Bop(Or,
31750                                                                                        EQ(Var("Rd",
31751                                                                                               F4),
31752                                                                                           LW(15,
31753                                                                                              4)),
31754                                                                                        EQ(Var("Rn",
31755                                                                                               F4),
31756                                                                                           LW(15,
31757                                                                                              4))),
31758                                                                                    EQ(Var("Rm",
31759                                                                                           F4),
31760                                                                                       LW(15,
31761                                                                                          4))),
31762                                                                                EQ(Var("Ra",
31763                                                                                       F4),
31764                                                                                   LW(15,
31765                                                                                      4))),
31766                                                                            Call
31767                                                                              ("DECODE_UNPREDICTABLE",
31768                                                                               ATy(qTy,
31769                                                                                   PTy(uTy,
31770                                                                                       qTy)),
31771                                                                               TP[Var("mc",
31772                                                                                      CTy"MachineCode"),
31773                                                                                  LS
31774                                                                                   "SignedMostSignificantMultiplySubtract"]),
31775                                                                            MU(LU,
31776                                                                               qTy)),
31777                                                                        Close
31778                                                                          (AVar
31779                                                                             uTy,
31780                                                                           MU(Call
31781                                                                                ("Multiply",
31782                                                                                 CTy"instruction",
31783                                                                                 Call
31784                                                                                   ("SignedMostSignificantMultiplySubtract",
31785                                                                                    CTy"Multiply",
31786                                                                                    TP[EQ(Mop(Cast
31787                                                                                                F1,
31788                                                                                              LL[bVar"b'5"]),
31789                                                                                          LW(1,
31790                                                                                             1)),
31791                                                                                       Var("Rd",
31792                                                                                           F4),
31793                                                                                       Var("Rn",
31794                                                                                           F4),
31795                                                                                       Var("Rm",
31796                                                                                           F4),
31797                                                                                       Var("Ra",
31798                                                                                           F4)])),
31799                                                                              qTy))),
31800                                                                     Call
31801                                                                       ("Skip",
31802                                                                        ATy(qTy,
31803                                                                            PTy(CTy"instruction",
31804                                                                                qTy)),
31805                                                                        LU))))))))))),
31806                                    (Bop(And,Mop(Not,bVar"b'27"),
31807                                         Bop(And,bVar"b'24",
31808                                             Bop(And,bVar"b'23",
31809                                                 Bop(And,
31810                                                     Mop(Not,bVar"b'22"),
31811                                                     Bop(And,
31812                                                         Mop(Not,
31813                                                             bVar"b'21"),
31814                                                         Bop(And,
31815                                                             Mop(Not,
31816                                                                 bVar"b'20"),
31817                                                             Bop(And,
31818                                                                 Mop(Not,
31819                                                                     bVar"b'7"),
31820                                                                 Bop(And,
31821                                                                     Mop(Not,
31822                                                                         bVar"b'6"),
31823                                                                     Bop(And,
31824                                                                         Mop(Not,
31825                                                                             bVar"b'5"),
31826                                                                         bVar"b'4"))))))))),
31827                                     Let(Var("Rn",F4),
31828                                         Mop(Cast F4,
31829                                             LL[bVar"b'3",bVar"b'2",
31830                                                bVar"b'1",bVar"b'0"]),
31831                                         Let(Var("Rm",F4),
31832                                             Mop(Cast F4,
31833                                                 LL[bVar"b'11",bVar"b'10",
31834                                                    bVar"b'9",bVar"b'8"]),
31835                                             Let(Var("Rd",F4),
31836                                                 Mop(Cast F4,
31837                                                     LL[bVar"b'19",
31838                                                        bVar"b'18",
31839                                                        bVar"b'17",
31840                                                        bVar"b'16"]),
31841                                                 MB(Call
31842                                                      ("ArchVersion",
31843                                                       ATy(qTy,
31844                                                           PTy(nTy,qTy)),
31845                                                       LU),
31846                                                    Close
31847                                                      (nVar"v",
31848                                                       MB(MB(MB(MU(Bop(Ge,
31849                                                                       nVar"v",
31850                                                                       LN
31851                                                                        6),
31852                                                                   qTy),
31853                                                                Close
31854                                                                  (bVar"v",
31855                                                                   MU(TP[Var("cond",
31856                                                                             F4),
31857                                                                         bVar"v"],
31858                                                                      qTy))),
31859                                                             Close
31860                                                               (Var("v",
31861                                                                    PTy(F4,
31862                                                                        bTy)),
31863                                                                Call
31864                                                                  ("Take",
31865                                                                   ATy(qTy,
31866                                                                       PTy(bTy,
31867                                                                           qTy)),
31868                                                                   Var("v",
31869                                                                       PTy(F4,
31870                                                                           bTy))))),
31871                                                          Close
31872                                                            (bVar"b",
31873                                                             ITE(bVar"b",
31874                                                                 MB(ITE(Bop(Or,
31875                                                                            Bop(Or,
31876                                                                                EQ(Var("Rd",
31877                                                                                       F4),
31878                                                                                   LW(15,
31879                                                                                      4)),
31880                                                                                EQ(Var("Rn",
31881                                                                                       F4),
31882                                                                                   LW(15,
31883                                                                                      4))),
31884                                                                            EQ(Var("Rm",
31885                                                                                   F4),
31886                                                                               LW(15,
31887                                                                                  4))),
31888                                                                        Call
31889                                                                          ("DECODE_UNPREDICTABLE",
31890                                                                           ATy(qTy,
31891                                                                               PTy(uTy,
31892                                                                                   qTy)),
31893                                                                           TP[Var("mc",
31894                                                                                  CTy"MachineCode"),
31895                                                                              LS
31896                                                                               "UnsignedSumAbsoluteDifferences"]),
31897                                                                        MU(LU,
31898                                                                           qTy)),
31899                                                                    Close
31900                                                                      (AVar
31901                                                                         uTy,
31902                                                                       MU(Call
31903                                                                            ("SIMD",
31904                                                                             CTy"instruction",
31905                                                                             Call
31906                                                                               ("UnsignedSumAbsoluteDifferences",
31907                                                                                CTy"SIMD",
31908                                                                                TP[Var("Rd",
31909                                                                                       F4),
31910                                                                                   Var("Rn",
31911                                                                                       F4),
31912                                                                                   Var("Rm",
31913                                                                                       F4),
31914                                                                                   Mop(Cast
31915                                                                                         F4,
31916                                                                                       LL[bVar"b'15",
31917                                                                                          bVar"b'14",
31918                                                                                          bVar"b'13",
31919                                                                                          bVar"b'12"])])),
31920                                                                          qTy))),
31921                                                                 Call
31922                                                                   ("Skip",
31923                                                                    ATy(qTy,
31924                                                                        PTy(CTy"instruction",
31925                                                                            qTy)),
31926                                                                    LU)))))))))),
31927                                    (Bop(And,Mop(Not,bVar"b'27"),
31928                                         Bop(And,bVar"b'24",
31929                                             Bop(And,bVar"b'23",
31930                                                 Bop(And,bVar"b'21",
31931                                                     Bop(And,bVar"b'6",
31932                                                         Bop(And,
31933                                                             Mop(Not,
31934                                                                 bVar"b'5"),
31935                                                             bVar"b'4")))))),
31936                                     Let(Var("Rn",F4),
31937                                         Mop(Cast F4,
31938                                             LL[bVar"b'3",bVar"b'2",
31939                                                bVar"b'1",bVar"b'0"]),
31940                                         Let(Var("Rd",F4),
31941                                             Mop(Cast F4,
31942                                                 LL[bVar"b'15",bVar"b'14",
31943                                                    bVar"b'13",bVar"b'12"]),
31944                                             MB(Call
31945                                                  ("ArchVersion",
31946                                                   ATy(qTy,PTy(nTy,qTy)),
31947                                                   LU),
31948                                                Close
31949                                                  (nVar"v",
31950                                                   MB(MB(MB(MU(Bop(Ge,
31951                                                                   nVar"v",
31952                                                                   LN 6),
31953                                                               qTy),
31954                                                            Close
31955                                                              (bVar"v",
31956                                                               MU(TP[Var("cond",
31957                                                                         F4),
31958                                                                     bVar"v"],
31959                                                                  qTy))),
31960                                                         Close
31961                                                           (Var("v",
31962                                                                PTy(F4,bTy)),
31963                                                            Call
31964                                                              ("Take",
31965                                                               ATy(qTy,
31966                                                                   PTy(bTy,
31967                                                                       qTy)),
31968                                                               Var("v",
31969                                                                   PTy(F4,
31970                                                                       bTy))))),
31971                                                      Close
31972                                                        (bVar"b",
31973                                                         ITE(bVar"b",
31974                                                             Let(nVar"lsbit",
31975                                                                 Mop(Cast
31976                                                                       nTy,
31977                                                                     Mop(Cast
31978                                                                           (FTy 5),
31979                                                                         LL[bVar"b'11",
31980                                                                            bVar"b'10",
31981                                                                            bVar"b'9",
31982                                                                            bVar"b'8",
31983                                                                            bVar"b'7"])),
31984                                                                 Let(nVar"widthminus1",
31985                                                                     Mop(Cast
31986                                                                           nTy,
31987                                                                         Mop(Cast
31988                                                                               (FTy 5),
31989                                                                             LL[bVar"b'20",
31990                                                                                bVar"b'19",
31991                                                                                bVar"b'18",
31992                                                                                bVar"b'17",
31993                                                                                bVar"b'16"])),
31994                                                                     MB(ITE(Bop(Or,
31995                                                                                Bop(Or,
31996                                                                                    EQ(Var("Rd",
31997                                                                                           F4),
31998                                                                                       LW(15,
31999                                                                                          4)),
32000                                                                                    EQ(Var("Rn",
32001                                                                                           F4),
32002                                                                                       LW(15,
32003                                                                                          4))),
32004                                                                                Bop(Lt,
32005                                                                                    LN
32006                                                                                     31,
32007                                                                                    Bop(Add,
32008                                                                                        nVar"lsbit",
32009                                                                                        nVar"widthminus1"))),
32010                                                                            Call
32011                                                                              ("DECODE_UNPREDICTABLE",
32012                                                                               ATy(qTy,
32013                                                                                   PTy(uTy,
32014                                                                                       qTy)),
32015                                                                               TP[Var("mc",
32016                                                                                      CTy"MachineCode"),
32017                                                                                  LS
32018                                                                                   "BitFieldExtract"]),
32019                                                                            MU(LU,
32020                                                                               qTy)),
32021                                                                        Close
32022                                                                          (AVar
32023                                                                             uTy,
32024                                                                           MU(Call
32025                                                                                ("Media",
32026                                                                                 CTy"instruction",
32027                                                                                 Call
32028                                                                                   ("BitFieldExtract",
32029                                                                                    CTy"Media",
32030                                                                                    TP[EQ(Mop(Cast
32031                                                                                                F1,
32032                                                                                              LL[bVar"b'22"]),
32033                                                                                          LW(1,
32034                                                                                             1)),
32035                                                                                       Var("Rd",
32036                                                                                           F4),
32037                                                                                       Var("Rn",
32038                                                                                           F4),
32039                                                                                       nVar"lsbit",
32040                                                                                       nVar"widthminus1"])),
32041                                                                              qTy))))),
32042                                                             Call
32043                                                               ("Skip",
32044                                                                ATy(qTy,
32045                                                                    PTy(CTy"instruction",
32046                                                                        qTy)),
32047                                                                LU))))))))),
32048                                    (Bop(And,Mop(Not,bVar"b'27"),
32049                                         Bop(And,bVar"b'24",
32050                                             Bop(And,bVar"b'23",
32051                                                 Bop(And,bVar"b'22",
32052                                                     Bop(And,
32053                                                         Mop(Not,
32054                                                             bVar"b'21"),
32055                                                         Bop(And,
32056                                                             Mop(Not,
32057                                                                 bVar"b'6"),
32058                                                             Bop(And,
32059                                                                 Mop(Not,
32060                                                                     bVar"b'5"),
32061                                                                 bVar"b'4"))))))),
32062                                     Let(Var("Rd",F4),
32063                                         Mop(Cast F4,
32064                                             LL[bVar"b'15",bVar"b'14",
32065                                                bVar"b'13",bVar"b'12"]),
32066                                         MB(Call
32067                                              ("ArchVersion",
32068                                               ATy(qTy,PTy(nTy,qTy)),LU),
32069                                            Close
32070                                              (nVar"v",
32071                                               MB(MB(MB(MU(Bop(Ge,nVar"v",
32072                                                               LN 6),qTy),
32073                                                        Close
32074                                                          (bVar"v",
32075                                                           MU(TP[Var("cond",
32076                                                                     F4),
32077                                                                 bVar"v"],
32078                                                              qTy))),
32079                                                     Close
32080                                                       (Var("v",
32081                                                            PTy(F4,bTy)),
32082                                                        Call
32083                                                          ("Take",
32084                                                           ATy(qTy,
32085                                                               PTy(bTy,qTy)),
32086                                                           Var("v",
32087                                                               PTy(F4,bTy))))),
32088                                                  Close
32089                                                    (bVar"b",
32090                                                     ITE(bVar"b",
32091                                                         Let(nVar"lsbit",
32092                                                             Mop(Cast nTy,
32093                                                                 Mop(Cast
32094                                                                       (FTy 5),
32095                                                                     LL[bVar"b'11",
32096                                                                        bVar"b'10",
32097                                                                        bVar"b'9",
32098                                                                        bVar"b'8",
32099                                                                        bVar"b'7"])),
32100                                                             Let(nVar"msbit",
32101                                                                 Mop(Cast
32102                                                                       nTy,
32103                                                                     Mop(Cast
32104                                                                           (FTy 5),
32105                                                                         LL[bVar"b'20",
32106                                                                            bVar"b'19",
32107                                                                            bVar"b'18",
32108                                                                            bVar"b'17",
32109                                                                            bVar"b'16"])),
32110                                                                 MB(ITE(Bop(Or,
32111                                                                            EQ(Var("Rd",
32112                                                                                   F4),
32113                                                                               LW(15,
32114                                                                                  4)),
32115                                                                            Bop(Lt,
32116                                                                                nVar"msbit",
32117                                                                                nVar"lsbit")),
32118                                                                        Call
32119                                                                          ("DECODE_UNPREDICTABLE",
32120                                                                           ATy(qTy,
32121                                                                               PTy(uTy,
32122                                                                                   qTy)),
32123                                                                           TP[Var("mc",
32124                                                                                  CTy"MachineCode"),
32125                                                                              LS
32126                                                                               "BitFieldClearOrInsert"]),
32127                                                                        MU(LU,
32128                                                                           qTy)),
32129                                                                    Close
32130                                                                      (AVar
32131                                                                         uTy,
32132                                                                       MU(Call
32133                                                                            ("Media",
32134                                                                             CTy"instruction",
32135                                                                             Call
32136                                                                               ("BitFieldClearOrInsert",
32137                                                                                CTy"Media",
32138                                                                                TP[Var("Rd",
32139                                                                                       F4),
32140                                                                                   Mop(Cast
32141                                                                                         F4,
32142                                                                                       LL[bVar"b'3",
32143                                                                                          bVar"b'2",
32144                                                                                          bVar"b'1",
32145                                                                                          bVar"b'0"]),
32146                                                                                   nVar"lsbit",
32147                                                                                   nVar"msbit"])),
32148                                                                          qTy))))),
32149                                                         Call
32150                                                           ("Skip",
32151                                                            ATy(qTy,
32152                                                                PTy(CTy"instruction",
32153                                                                    qTy)),
32154                                                            LU)))))))),
32155                                    (Bop(And,bVar"b'27",bVar"b'24"),
32156                                     MB(Call
32157                                          ("Take",ATy(qTy,PTy(bTy,qTy)),
32158                                           TP[Var("cond",F4),LT]),
32159                                        Close
32160                                          (bVar"b",
32161                                           ITE(bVar"b",
32162                                               MU(Call
32163                                                    ("System",
32164                                                     CTy"instruction",
32165                                                     Call
32166                                                       ("SupervisorCall",
32167                                                        CTy"System",
32168                                                        Mop(SE F32,
32169                                                            Mop(Cast
32170                                                                  (FTy 24),
32171                                                                LL[bVar"b'23",
32172                                                                   bVar"b'22",
32173                                                                   bVar"b'21",
32174                                                                   bVar"b'20",
32175                                                                   bVar"b'19",
32176                                                                   bVar"b'18",
32177                                                                   bVar"b'17",
32178                                                                   bVar"b'16",
32179                                                                   bVar"b'15",
32180                                                                   bVar"b'14",
32181                                                                   bVar"b'13",
32182                                                                   bVar"b'12",
32183                                                                   bVar"b'11",
32184                                                                   bVar"b'10",
32185                                                                   bVar"b'9",
32186                                                                   bVar"b'8",
32187                                                                   bVar"b'7",
32188                                                                   bVar"b'6",
32189                                                                   bVar"b'5",
32190                                                                   bVar"b'4",
32191                                                                   bVar"b'3",
32192                                                                   bVar"b'2",
32193                                                                   bVar"b'1",
32194                                                                   bVar"b'0"])))),
32195                                                  qTy),
32196                                               Call
32197                                                 ("Skip",
32198                                                  ATy(qTy,
32199                                                      PTy(CTy"instruction",
32200                                                          qTy)),LU)))))],
32201                                   Call
32202                                     ("UndefinedARM",
32203                                      ATy(qTy,PTy(CTy"instruction",qTy)),
32204                                      Var("cond",F4)))),
32205                              (Bop(And,Mop(Not,bVar"b'27"),
32206                                   Bop(And,bVar"b'24",
32207                                       Bop(And,Mop(Not,bVar"b'23"),
32208                                           Bop(And,Mop(Not,bVar"b'21"),
32209                                               Mop(Not,bVar"b'20"))))),
32210                               Let(Var("Rd",F4),
32211                                   Mop(Cast F4,
32212                                       LL[bVar"b'15",bVar"b'14",
32213                                          bVar"b'13",bVar"b'12"]),
32214                                   MB(Call
32215                                        ("HaveThumb2",
32216                                         ATy(qTy,PTy(bTy,qTy)),LU),
32217                                      Close
32218                                        (bVar"v",
32219                                         MB(MB(MU(TP[Var("cond",F4),
32220                                                     bVar"v"],qTy),
32221                                               Close
32222                                                 (Var("v",PTy(F4,bTy)),
32223                                                  Call
32224                                                    ("Take",
32225                                                     ATy(qTy,PTy(bTy,qTy)),
32226                                                     Var("v",PTy(F4,bTy))))),
32227                                            Close
32228                                              (bVar"b",
32229                                               ITE(bVar"b",
32230                                                   MB(ITE(EQ(Var("Rd",F4),
32231                                                             LW(15,4)),
32232                                                          Call
32233                                                            ("DECODE_UNPREDICTABLE",
32234                                                             ATy(qTy,
32235                                                                 PTy(uTy,
32236                                                                     qTy)),
32237                                                             TP[Var("mc",
32238                                                                    CTy"MachineCode"),
32239                                                                LS
32240                                                                 "MoveTopHalfword"]),
32241                                                          MU(LU,qTy)),
32242                                                      Close
32243                                                        (AVar uTy,
32244                                                         MU(Call
32245                                                              ("Data",
32246                                                               CTy"instruction",
32247                                                               Call
32248                                                                 ("MoveHalfword",
32249                                                                  CTy"Data",
32250                                                                  TP[EQ(Mop(Cast
32251                                                                              F1,
32252                                                                            LL[bVar"b'22"]),
32253                                                                        LW(1,
32254                                                                           1)),
32255                                                                     Var("Rd",
32256                                                                         F4),
32257                                                                     CC[Mop(Cast
32258                                                                              F4,
32259                                                                            LL[bVar"b'19",
32260                                                                               bVar"b'18",
32261                                                                               bVar"b'17",
32262                                                                               bVar"b'16"]),
32263                                                                        Mop(Cast
32264                                                                              (FTy 12),
32265                                                                            LL[bVar"b'11",
32266                                                                               bVar"b'10",
32267                                                                               bVar"b'9",
32268                                                                               bVar"b'8",
32269                                                                               bVar"b'7",
32270                                                                               bVar"b'6",
32271                                                                               bVar"b'5",
32272                                                                               bVar"b'4",
32273                                                                               bVar"b'3",
32274                                                                               bVar"b'2",
32275                                                                               bVar"b'1",
32276                                                                               bVar"b'0"])]])),
32277                                                            qTy))),
32278                                                   Call
32279                                                     ("Skip",
32280                                                      ATy(qTy,
32281                                                          PTy(CTy"instruction",
32282                                                              qTy)),LU)))))))),
32283                              (Bop(And,Mop(Not,bVar"b'27"),
32284                                   Bop(And,bVar"b'24",
32285                                       Bop(And,Mop(Not,bVar"b'23"),
32286                                           Bop(And,Mop(Not,bVar"b'22"),
32287                                               Bop(And,bVar"b'21",
32288                                                   Bop(And,
32289                                                       Mop(Not,bVar"b'20"),
32290                                                       Bop(And,
32291                                                           Mop(Not,
32292                                                               bVar"b'19"),
32293                                                           Bop(And,
32294                                                               Mop(Not,
32295                                                                   bVar"b'18"),
32296                                                               Bop(And,
32297                                                                   Mop(Not,
32298                                                                       bVar"b'17"),
32299                                                                   Mop(Not,
32300                                                                       bVar"b'16")))))))))),
32301                               Call
32302                                 ("DecodeHint",
32303                                  ATy(qTy,PTy(CTy"instruction",qTy)),
32304                                  TP[Var("cond",F4),
32305                                     Mop(Cast F8,
32306                                         LL[bVar"b'7",bVar"b'6",bVar"b'5",
32307                                            bVar"b'4",bVar"b'3",bVar"b'2",
32308                                            bVar"b'1",bVar"b'0"])])),
32309                              (Bop(And,Mop(Not,bVar"b'27"),
32310                                   Bop(And,bVar"b'24",
32311                                       Bop(And,Mop(Not,bVar"b'23"),
32312                                           Bop(And,bVar"b'21",
32313                                               Mop(Not,bVar"b'20"))))),
32314                               Let(Var("mask",F4),
32315                                   Mop(Cast F4,
32316                                       LL[bVar"b'19",bVar"b'18",
32317                                          bVar"b'17",bVar"b'16"]),
32318                                   MB(Call
32319                                        ("Take",ATy(qTy,PTy(bTy,qTy)),
32320                                         TP[Var("cond",F4),LT]),
32321                                      Close
32322                                        (bVar"b",
32323                                         ITE(bVar"b",
32324                                             MB(ITE(EQ(Var("mask",F4),
32325                                                       LW(0,4)),
32326                                                    Call
32327                                                      ("DECODE_UNPREDICTABLE",
32328                                                       ATy(qTy,
32329                                                           PTy(uTy,qTy)),
32330                                                       TP[Var("mc",
32331                                                              CTy"MachineCode"),
32332                                                          LS
32333                                                           "MoveToSpecialFromImmediate"]),
32334                                                    MU(LU,qTy)),
32335                                                Close
32336                                                  (AVar uTy,
32337                                                   MB(Call
32338                                                        ("ARMExpandImm",
32339                                                         ATy(qTy,
32340                                                             PTy(F32,qTy)),
32341                                                         Mop(Cast(FTy 12),
32342                                                             LL[bVar"b'11",
32343                                                                bVar"b'10",
32344                                                                bVar"b'9",
32345                                                                bVar"b'8",
32346                                                                bVar"b'7",
32347                                                                bVar"b'6",
32348                                                                bVar"b'5",
32349                                                                bVar"b'4",
32350                                                                bVar"b'3",
32351                                                                bVar"b'2",
32352                                                                bVar"b'1",
32353                                                                bVar"b'0"])),
32354                                                      Close
32355                                                        (Var("imm32",F32),
32356                                                         MU(Call
32357                                                              ("System",
32358                                                               CTy"instruction",
32359                                                               Call
32360                                                                 ("MoveToSpecialFromImmediate",
32361                                                                  CTy"System",
32362                                                                  TP[EQ(Mop(Cast
32363                                                                              F1,
32364                                                                            LL[bVar"b'22"]),
32365                                                                        LW(1,
32366                                                                           1)),
32367                                                                     Var("imm32",
32368                                                                         F32),
32369                                                                     Var("mask",
32370                                                                         F4)])),
32371                                                            qTy))))),
32372                                             Call
32373                                               ("Skip",
32374                                                ATy(qTy,
32375                                                    PTy(CTy"instruction",
32376                                                        qTy)),LU)))))),
32377                              (Mop(Not,bVar"b'27"),
32378                               Let(Var("imm12",FTy 12),
32379                                   Mop(Cast(FTy 12),
32380                                       LL[bVar"b'11",bVar"b'10",bVar"b'9",
32381                                          bVar"b'8",bVar"b'7",bVar"b'6",
32382                                          bVar"b'5",bVar"b'4",bVar"b'3",
32383                                          bVar"b'2",bVar"b'1",bVar"b'0"]),
32384                                   Let(Var("Rd",F4),
32385                                       Mop(Cast F4,
32386                                           LL[bVar"b'15",bVar"b'14",
32387                                              bVar"b'13",bVar"b'12"]),
32388                                       Let(Var("Rn",F4),
32389                                           Mop(Cast F4,
32390                                               LL[bVar"b'19",bVar"b'18",
32391                                                  bVar"b'17",bVar"b'16"]),
32392                                           Let(Var("opc",F4),
32393                                               Mop(Cast F4,
32394                                                   LL[bVar"b'24",
32395                                                      bVar"b'23",
32396                                                      bVar"b'22",
32397                                                      bVar"b'21"]),
32398                                               MB(Call
32399                                                    ("Take",
32400                                                     ATy(qTy,PTy(bTy,qTy)),
32401                                                     TP[Var("cond",F4),LT]),
32402                                                  Close
32403                                                    (bVar"b",
32404                                                     ITE(bVar"b",
32405                                                         MU(Let(bVar"setflags",
32406                                                                EQ(Mop(Cast
32407                                                                         F1,
32408                                                                       LL[bVar"b'20"]),
32409                                                                   LW(1,1)),
32410                                                                Let(TP[bVar"b'3",
32411                                                                       bVar"b'2",
32412                                                                       bVar"b'1",
32413                                                                       bVar"b'0"],
32414                                                                    BL(4,
32415                                                                       Var("opc",
32416                                                                           F4)),
32417                                                                    ITE(bVar"b'3",
32418                                                                        ITB([(Bop(And,
32419                                                                                  bVar"b'2",
32420                                                                                  bVar"b'0"),
32421                                                                              Call
32422                                                                                ("Data",
32423                                                                                 CTy"instruction",
32424                                                                                 Call
32425                                                                                   ("Move",
32426                                                                                    CTy"Data",
32427                                                                                    TP[bVar"setflags",
32428                                                                                       Mop(Cast
32429                                                                                             bTy,
32430                                                                                           Mop(Cast
32431                                                                                                 F1,
32432                                                                                               LL[bVar"b'1"])),
32433                                                                                       Var("Rd",
32434                                                                                           F4),
32435                                                                                       Var("imm12",
32436                                                                                           FTy 12)]))),
32437                                                                             (Mop(Not,
32438                                                                                  bVar"b'2"),
32439                                                                              Call
32440                                                                                ("Data",
32441                                                                                 CTy"instruction",
32442                                                                                 Call
32443                                                                                   ("TestCompareImmediate",
32444                                                                                    CTy"Data",
32445                                                                                    TP[Mop(Cast
32446                                                                                             (FTy 2),
32447                                                                                           LL[bVar"b'1",
32448                                                                                              bVar"b'0"]),
32449                                                                                       Var("Rn",
32450                                                                                           F4),
32451                                                                                       Var("imm12",
32452                                                                                           FTy 12)])))],
32453                                                                            Call
32454                                                                              ("Data",
32455                                                                               CTy"instruction",
32456                                                                               Call
32457                                                                                 ("ArithLogicImmediate",
32458                                                                                  CTy"Data",
32459                                                                                  TP[Var("opc",
32460                                                                                         F4),
32461                                                                                     bVar"setflags",
32462                                                                                     Var("Rd",
32463                                                                                         F4),
32464                                                                                     Var("Rn",
32465                                                                                         F4),
32466                                                                                     Var("imm12",
32467                                                                                         FTy 12)]))),
32468                                                                        Call
32469                                                                          ("Data",
32470                                                                           CTy"instruction",
32471                                                                           Call
32472                                                                             ("ArithLogicImmediate",
32473                                                                              CTy"Data",
32474                                                                              TP[Var("opc",
32475                                                                                     F4),
32476                                                                                 bVar"setflags",
32477                                                                                 Var("Rd",
32478                                                                                     F4),
32479                                                                                 Var("Rn",
32480                                                                                     F4),
32481                                                                                 Var("imm12",
32482                                                                                     FTy 12)]))))),
32483                                                            qTy),
32484                                                         Call
32485                                                           ("Skip",
32486                                                            ATy(qTy,
32487                                                                PTy(CTy"instruction",
32488                                                                    qTy)),
32489                                                            LU))))))))),
32490                              (Bop(And,bVar"b'27",Mop(Not,bVar"b'24")),
32491                               MB(Call
32492                                    ("Take",ATy(qTy,PTy(bTy,qTy)),
32493                                     TP[Var("cond",F4),LT]),
32494                                  Close
32495                                    (bVar"b",
32496                                     ITE(bVar"b",
32497                                         MU(Call
32498                                              ("Branch",CTy"instruction",
32499                                               Call
32500                                                 ("BranchTarget",
32501                                                  CTy"Branch",
32502                                                  Mop(SE F32,
32503                                                      CC[Mop(Cast(FTy 24),
32504                                                             LL[bVar"b'23",
32505                                                                bVar"b'22",
32506                                                                bVar"b'21",
32507                                                                bVar"b'20",
32508                                                                bVar"b'19",
32509                                                                bVar"b'18",
32510                                                                bVar"b'17",
32511                                                                bVar"b'16",
32512                                                                bVar"b'15",
32513                                                                bVar"b'14",
32514                                                                bVar"b'13",
32515                                                                bVar"b'12",
32516                                                                bVar"b'11",
32517                                                                bVar"b'10",
32518                                                                bVar"b'9",
32519                                                                bVar"b'8",
32520                                                                bVar"b'7",
32521                                                                bVar"b'6",
32522                                                                bVar"b'5",
32523                                                                bVar"b'4",
32524                                                                bVar"b'3",
32525                                                                bVar"b'2",
32526                                                                bVar"b'1",
32527                                                                bVar"b'0"]),
32528                                                         LW(0,2)]))),qTy),
32529                                         Call
32530                                           ("Skip",
32531                                            ATy(qTy,
32532                                                PTy(CTy"instruction",qTy)),
32533                                            LU))))),
32534                              (Bop(And,bVar"b'27",bVar"b'24"),
32535                               MB(Call
32536                                    ("Take",ATy(qTy,PTy(bTy,qTy)),
32537                                     TP[Var("cond",F4),LT]),
32538                                  Close
32539                                    (bVar"b",
32540                                     ITE(bVar"b",
32541                                         MU(Call
32542                                              ("Branch",CTy"instruction",
32543                                               Call
32544                                                 ("BranchLinkExchangeImmediate",
32545                                                  CTy"Branch",
32546                                                  TP[LC("InstrSet_ARM",
32547                                                        CTy"InstrSet"),
32548                                                     Mop(SE F32,
32549                                                         CC[Mop(Cast
32550                                                                  (FTy 24),
32551                                                                LL[bVar"b'23",
32552                                                                   bVar"b'22",
32553                                                                   bVar"b'21",
32554                                                                   bVar"b'20",
32555                                                                   bVar"b'19",
32556                                                                   bVar"b'18",
32557                                                                   bVar"b'17",
32558                                                                   bVar"b'16",
32559                                                                   bVar"b'15",
32560                                                                   bVar"b'14",
32561                                                                   bVar"b'13",
32562                                                                   bVar"b'12",
32563                                                                   bVar"b'11",
32564                                                                   bVar"b'10",
32565                                                                   bVar"b'9",
32566                                                                   bVar"b'8",
32567                                                                   bVar"b'7",
32568                                                                   bVar"b'6",
32569                                                                   bVar"b'5",
32570                                                                   bVar"b'4",
32571                                                                   bVar"b'3",
32572                                                                   bVar"b'2",
32573                                                                   bVar"b'1",
32574                                                                   bVar"b'0"]),
32575                                                            LW(0,2)])])),
32576                                            qTy),
32577                                         Call
32578                                           ("Skip",
32579                                            ATy(qTy,
32580                                                PTy(CTy"instruction",qTy)),
32581                                            LU)))))],
32582                             Call
32583                               ("UndefinedARM",
32584                                ATy(qTy,PTy(CTy"instruction",qTy)),
32585                                Var("cond",F4)))),
32586                        (bVar"b'27",
32587                         ITE(Mop(Not,bVar"b'26"),
32588                             ITB([(Bop(And,bVar"b'22",Mop(Not,bVar"b'20")),
32589                                   Let(Var("registers",F16),
32590                                       Mop(Cast F16,
32591                                           LL[bVar"b'15",bVar"b'14",
32592                                              bVar"b'13",bVar"b'12",
32593                                              bVar"b'11",bVar"b'10",
32594                                              bVar"b'9",bVar"b'8",
32595                                              bVar"b'7",bVar"b'6",
32596                                              bVar"b'5",bVar"b'4",
32597                                              bVar"b'3",bVar"b'2",
32598                                              bVar"b'1",bVar"b'0"]),
32599                                       Let(Var("Rn",F4),
32600                                           Mop(Cast F4,
32601                                               LL[bVar"b'19",bVar"b'18",
32602                                                  bVar"b'17",bVar"b'16"]),
32603                                           Let(Var("U",F1),
32604                                               Mop(Cast F1,LL[bVar"b'23"]),
32605                                               MB(Call
32606                                                    ("Take",
32607                                                     ATy(qTy,PTy(bTy,qTy)),
32608                                                     TP[Var("cond",F4),LT]),
32609                                                  Close
32610                                                    (bVar"b",
32611                                                     ITE(bVar"b",
32612                                                         MB(Call
32613                                                              ("BitCount",
32614                                                               ATy(qTy,
32615                                                                   PTy(nTy,
32616                                                                       qTy)),
32617                                                               Var("registers",
32618                                                                   F16)),
32619                                                            Close
32620                                                              (nVar"v",
32621                                                               MB(MB(MB(MU(Bop(Lt,
32622                                                                               nVar"v",
32623                                                                               LN
32624                                                                                1),
32625                                                                           qTy),
32626                                                                        Close
32627                                                                          (bVar"v",
32628                                                                           MU(Bop(Or,
32629                                                                                  EQ(Var("Rn",
32630                                                                                         F4),
32631                                                                                     LW(15,
32632                                                                                        4)),
32633                                                                                  bVar"v"),
32634                                                                              qTy))),
32635                                                                     Close
32636                                                                       (bVar"b",
32637                                                                        ITE(bVar"b",
32638                                                                            Call
32639                                                                              ("DECODE_UNPREDICTABLE",
32640                                                                               ATy(qTy,
32641                                                                                   PTy(uTy,
32642                                                                                       qTy)),
32643                                                                               TP[Var("mc",
32644                                                                                      CTy"MachineCode"),
32645                                                                                  LS
32646                                                                                   "StoreMultipleUserRegisters"]),
32647                                                                            MU(LU,
32648                                                                               qTy)))),
32649                                                                  Close
32650                                                                    (AVar
32651                                                                       uTy,
32652                                                                     MU(Call
32653                                                                          ("Store",
32654                                                                           CTy"instruction",
32655                                                                           Call
32656                                                                             ("StoreMultipleUserRegisters",
32657                                                                              CTy"Store",
32658                                                                              TP[EQ(Var("U",
32659                                                                                        F1),
32660                                                                                    LW(1,
32661                                                                                       1)),
32662                                                                                 EQ(Mop(Cast
32663                                                                                          F1,
32664                                                                                        LL[bVar"b'24"]),
32665                                                                                    Var("U",
32666                                                                                        F1)),
32667                                                                                 Var("Rn",
32668                                                                                     F4),
32669                                                                                 Var("registers",
32670                                                                                     F16)])),
32671                                                                        qTy))))),
32672                                                         Call
32673                                                           ("Skip",
32674                                                            ATy(qTy,
32675                                                                PTy(CTy"instruction",
32676                                                                    qTy)),
32677                                                            LU)))))))),
32678                                  (Bop(And,Mop(Not,bVar"b'22"),
32679                                       Mop(Not,bVar"b'20")),
32680                                   Let(Var("registers",F16),
32681                                       Mop(Cast F16,
32682                                           LL[bVar"b'15",bVar"b'14",
32683                                              bVar"b'13",bVar"b'12",
32684                                              bVar"b'11",bVar"b'10",
32685                                              bVar"b'9",bVar"b'8",
32686                                              bVar"b'7",bVar"b'6",
32687                                              bVar"b'5",bVar"b'4",
32688                                              bVar"b'3",bVar"b'2",
32689                                              bVar"b'1",bVar"b'0"]),
32690                                       Let(Var("Rn",F4),
32691                                           Mop(Cast F4,
32692                                               LL[bVar"b'19",bVar"b'18",
32693                                                  bVar"b'17",bVar"b'16"]),
32694                                           MB(Call
32695                                                ("Take",
32696                                                 ATy(qTy,PTy(bTy,qTy)),
32697                                                 TP[Var("cond",F4),LT]),
32698                                              Close
32699                                                (bVar"b",
32700                                                 ITE(bVar"b",
32701                                                     MB(Call
32702                                                          ("BitCount",
32703                                                           ATy(qTy,
32704                                                               PTy(nTy,qTy)),
32705                                                           Var("registers",
32706                                                               F16)),
32707                                                        Close
32708                                                          (nVar"v",
32709                                                           MB(MB(MB(MU(Bop(Lt,
32710                                                                           nVar"v",
32711                                                                           LN
32712                                                                            1),
32713                                                                       qTy),
32714                                                                    Close
32715                                                                      (bVar"v",
32716                                                                       MU(Bop(Or,
32717                                                                              EQ(Var("Rn",
32718                                                                                     F4),
32719                                                                                 LW(15,
32720                                                                                    4)),
32721                                                                              bVar"v"),
32722                                                                          qTy))),
32723                                                                 Close
32724                                                                   (bVar"b",
32725                                                                    ITE(bVar"b",
32726                                                                        Call
32727                                                                          ("DECODE_UNPREDICTABLE",
32728                                                                           ATy(qTy,
32729                                                                               PTy(uTy,
32730                                                                                   qTy)),
32731                                                                           TP[Var("mc",
32732                                                                                  CTy"MachineCode"),
32733                                                                              LS
32734                                                                               "StoreMultiple"]),
32735                                                                        MU(LU,
32736                                                                           qTy)))),
32737                                                              Close
32738                                                                (AVar uTy,
32739                                                                 MU(Call
32740                                                                      ("Store",
32741                                                                       CTy"instruction",
32742                                                                       Call
32743                                                                         ("StoreMultiple",
32744                                                                          CTy"Store",
32745                                                                          TP[EQ(Mop(Cast
32746                                                                                      F1,
32747                                                                                    LL[bVar"b'23"]),
32748                                                                                LW(1,
32749                                                                                   1)),
32750                                                                             EQ(Mop(Cast
32751                                                                                      F1,
32752                                                                                    LL[bVar"b'24"]),
32753                                                                                LW(1,
32754                                                                                   1)),
32755                                                                             EQ(Mop(Cast
32756                                                                                      F1,
32757                                                                                    LL[bVar"b'21"]),
32758                                                                                LW(1,
32759                                                                                   1)),
32760                                                                             Var("Rn",
32761                                                                                 F4),
32762                                                                             Var("registers",
32763                                                                                 F16)])),
32764                                                                    qTy))))),
32765                                                     Call
32766                                                       ("Skip",
32767                                                        ATy(qTy,
32768                                                            PTy(CTy"instruction",
32769                                                                qTy)),LU))))))),
32770                                  (Bop(And,bVar"b'22",
32771                                       Bop(And,bVar"b'20",
32772                                           Mop(Not,bVar"b'15"))),
32773                                   Let(Var("registers",FTy 15),
32774                                       Mop(Cast(FTy 15),
32775                                           LL[bVar"b'14",bVar"b'13",
32776                                              bVar"b'12",bVar"b'11",
32777                                              bVar"b'10",bVar"b'9",
32778                                              bVar"b'8",bVar"b'7",
32779                                              bVar"b'6",bVar"b'5",
32780                                              bVar"b'4",bVar"b'3",
32781                                              bVar"b'2",bVar"b'1",
32782                                              bVar"b'0"]),
32783                                       Let(Var("Rn",F4),
32784                                           Mop(Cast F4,
32785                                               LL[bVar"b'19",bVar"b'18",
32786                                                  bVar"b'17",bVar"b'16"]),
32787                                           Let(Var("U",F1),
32788                                               Mop(Cast F1,LL[bVar"b'23"]),
32789                                               MB(Call
32790                                                    ("Take",
32791                                                     ATy(qTy,PTy(bTy,qTy)),
32792                                                     TP[Var("cond",F4),LT]),
32793                                                  Close
32794                                                    (bVar"b",
32795                                                     ITE(bVar"b",
32796                                                         MB(Call
32797                                                              ("BitCount",
32798                                                               ATy(qTy,
32799                                                                   PTy(nTy,
32800                                                                       qTy)),
32801                                                               Var("registers",
32802                                                                   FTy 15)),
32803                                                            Close
32804                                                              (nVar"v",
32805                                                               MB(MB(MB(MU(Bop(Lt,
32806                                                                               nVar"v",
32807                                                                               LN
32808                                                                                1),
32809                                                                           qTy),
32810                                                                        Close
32811                                                                          (bVar"v",
32812                                                                           MU(Bop(Or,
32813                                                                                  EQ(Var("Rn",
32814                                                                                         F4),
32815                                                                                     LW(15,
32816                                                                                        4)),
32817                                                                                  bVar"v"),
32818                                                                              qTy))),
32819                                                                     Close
32820                                                                       (bVar"b",
32821                                                                        ITE(bVar"b",
32822                                                                            Call
32823                                                                              ("DECODE_UNPREDICTABLE",
32824                                                                               ATy(qTy,
32825                                                                                   PTy(uTy,
32826                                                                                       qTy)),
32827                                                                               TP[Var("mc",
32828                                                                                      CTy"MachineCode"),
32829                                                                                  LS
32830                                                                                   "LoadMultipleUserRegisters"]),
32831                                                                            MU(LU,
32832                                                                               qTy)))),
32833                                                                  Close
32834                                                                    (AVar
32835                                                                       uTy,
32836                                                                     MU(Call
32837                                                                          ("Load",
32838                                                                           CTy"instruction",
32839                                                                           Call
32840                                                                             ("LoadMultipleUserRegisters",
32841                                                                              CTy"Load",
32842                                                                              TP[EQ(Var("U",
32843                                                                                        F1),
32844                                                                                    LW(1,
32845                                                                                       1)),
32846                                                                                 EQ(Mop(Cast
32847                                                                                          F1,
32848                                                                                        LL[bVar"b'24"]),
32849                                                                                    Var("U",
32850                                                                                        F1)),
32851                                                                                 Var("Rn",
32852                                                                                     F4),
32853                                                                                 Var("registers",
32854                                                                                     FTy 15)])),
32855                                                                        qTy))))),
32856                                                         Call
32857                                                           ("Skip",
32858                                                            ATy(qTy,
32859                                                                PTy(CTy"instruction",
32860                                                                    qTy)),
32861                                                            LU)))))))),
32862                                  (Bop(And,bVar"b'22",
32863                                       Bop(And,bVar"b'20",bVar"b'15")),
32864                                   Let(Var("registers",FTy 15),
32865                                       Mop(Cast(FTy 15),
32866                                           LL[bVar"b'14",bVar"b'13",
32867                                              bVar"b'12",bVar"b'11",
32868                                              bVar"b'10",bVar"b'9",
32869                                              bVar"b'8",bVar"b'7",
32870                                              bVar"b'6",bVar"b'5",
32871                                              bVar"b'4",bVar"b'3",
32872                                              bVar"b'2",bVar"b'1",
32873                                              bVar"b'0"]),
32874                                       Let(Var("Rn",F4),
32875                                           Mop(Cast F4,
32876                                               LL[bVar"b'19",bVar"b'18",
32877                                                  bVar"b'17",bVar"b'16"]),
32878                                           Let(Var("U",F1),
32879                                               Mop(Cast F1,LL[bVar"b'23"]),
32880                                               MB(Call
32881                                                    ("Take",
32882                                                     ATy(qTy,PTy(bTy,qTy)),
32883                                                     TP[Var("cond",F4),LT]),
32884                                                  Close
32885                                                    (bVar"b",
32886                                                     ITE(bVar"b",
32887                                                         Let(bVar"wback",
32888                                                             EQ(Mop(Cast
32889                                                                      F1,
32890                                                                    LL[bVar"b'21"]),
32891                                                                LW(1,1)),
32892                                                             MB(Call
32893                                                                  ("ArchVersion",
32894                                                                   ATy(qTy,
32895                                                                       PTy(nTy,
32896                                                                           qTy)),
32897                                                                   LU),
32898                                                                Close
32899                                                                  (nVar"v",
32900                                                                   MB(MB(MB(MB(MU(Bop(Ge,
32901                                                                                      nVar"v",
32902                                                                                      LN
32903                                                                                       7),
32904                                                                                  qTy),
32905                                                                               Close
32906                                                                                 (bVar"v",
32907                                                                                  MU(Bop(And,
32908                                                                                         Bop(And,
32909                                                                                             bVar"wback",
32910                                                                                             Bop(Bit,
32911                                                                                                 Var("registers",
32912                                                                                                     FTy 15),
32913                                                                                                 Mop(Cast
32914                                                                                                       nTy,
32915                                                                                                     Var("Rn",
32916                                                                                                         F4)))),
32917                                                                                         bVar"v"),
32918                                                                                     qTy))),
32919                                                                            Close
32920                                                                              (bVar"v",
32921                                                                               MU(Bop(Or,
32922                                                                                      EQ(Var("Rn",
32923                                                                                             F4),
32924                                                                                         LW(15,
32925                                                                                            4)),
32926                                                                                      bVar"v"),
32927                                                                                  qTy))),
32928                                                                         Close
32929                                                                           (bVar"b",
32930                                                                            ITE(bVar"b",
32931                                                                                Call
32932                                                                                  ("DECODE_UNPREDICTABLE",
32933                                                                                   ATy(qTy,
32934                                                                                       PTy(uTy,
32935                                                                                           qTy)),
32936                                                                                   TP[Var("mc",
32937                                                                                          CTy"MachineCode"),
32938                                                                                      LS
32939                                                                                       "LoadMultipleExceptionReturn"]),
32940                                                                                MU(LU,
32941                                                                                   qTy)))),
32942                                                                      Close
32943                                                                        (AVar
32944                                                                           uTy,
32945                                                                         MU(Call
32946                                                                              ("Load",
32947                                                                               CTy"instruction",
32948                                                                               Call
32949                                                                                 ("LoadMultipleExceptionReturn",
32950                                                                                  CTy"Load",
32951                                                                                  TP[EQ(Var("U",
32952                                                                                            F1),
32953                                                                                        LW(1,
32954                                                                                           1)),
32955                                                                                     EQ(Mop(Cast
32956                                                                                              F1,
32957                                                                                            LL[bVar"b'24"]),
32958                                                                                        Var("U",
32959                                                                                            F1)),
32960                                                                                     bVar"wback",
32961                                                                                     Var("Rn",
32962                                                                                         F4),
32963                                                                                     Var("registers",
32964                                                                                         FTy 15)])),
32965                                                                            qTy)))))),
32966                                                         Call
32967                                                           ("Skip",
32968                                                            ATy(qTy,
32969                                                                PTy(CTy"instruction",
32970                                                                    qTy)),
32971                                                            LU)))))))),
32972                                  (Bop(And,Mop(Not,bVar"b'22"),bVar"b'20"),
32973                                   Let(Var("registers",F16),
32974                                       Mop(Cast F16,
32975                                           LL[bVar"b'15",bVar"b'14",
32976                                              bVar"b'13",bVar"b'12",
32977                                              bVar"b'11",bVar"b'10",
32978                                              bVar"b'9",bVar"b'8",
32979                                              bVar"b'7",bVar"b'6",
32980                                              bVar"b'5",bVar"b'4",
32981                                              bVar"b'3",bVar"b'2",
32982                                              bVar"b'1",bVar"b'0"]),
32983                                       Let(Var("Rn",F4),
32984                                           Mop(Cast F4,
32985                                               LL[bVar"b'19",bVar"b'18",
32986                                                  bVar"b'17",bVar"b'16"]),
32987                                           MB(Call
32988                                                ("Take",
32989                                                 ATy(qTy,PTy(bTy,qTy)),
32990                                                 TP[Var("cond",F4),LT]),
32991                                              Close
32992                                                (bVar"b",
32993                                                 ITE(bVar"b",
32994                                                     Let(bVar"wback",
32995                                                         EQ(Mop(Cast F1,
32996                                                                LL[bVar"b'21"]),
32997                                                            LW(1,1)),
32998                                                         MB(Call
32999                                                              ("BitCount",
33000                                                               ATy(qTy,
33001                                                                   PTy(nTy,
33002                                                                       qTy)),
33003                                                               Var("registers",
33004                                                                   F16)),
33005                                                            Close
33006                                                              (nVar"v",
33007                                                               MB(MB(MB(MB(MU(Bop(Lt,
33008                                                                                  nVar"v",
33009                                                                                  LN
33010                                                                                   1),
33011                                                                              qTy),
33012                                                                           Close
33013                                                                             (bVar"v",
33014                                                                              MU(Bop(Or,
33015                                                                                     EQ(Var("Rn",
33016                                                                                            F4),
33017                                                                                        LW(15,
33018                                                                                           4)),
33019                                                                                     bVar"v"),
33020                                                                                 qTy))),
33021                                                                        Close
33022                                                                          (bVar"b",
33023                                                                           ITE(bVar"b",
33024                                                                               MU(LT,
33025                                                                                  qTy),
33026                                                                               MB(Call
33027                                                                                    ("ArchVersion",
33028                                                                                     ATy(qTy,
33029                                                                                         PTy(nTy,
33030                                                                                             qTy)),
33031                                                                                     LU),
33032                                                                                  Close
33033                                                                                    (nVar"v",
33034                                                                                     MB(MU(Bop(Ge,
33035                                                                                               nVar"v",
33036                                                                                               LN
33037                                                                                                7),
33038                                                                                           qTy),
33039                                                                                        Close
33040                                                                                          (bVar"v",
33041                                                                                           MU(Bop(And,
33042                                                                                                  Bop(And,
33043                                                                                                      bVar"wback",
33044                                                                                                      Bop(Bit,
33045                                                                                                          Var("registers",
33046                                                                                                              F16),
33047                                                                                                          Mop(Cast
33048                                                                                                                nTy,
33049                                                                                                              Var("Rn",
33050                                                                                                                  F4)))),
33051                                                                                                  bVar"v"),
33052                                                                                              qTy)))))))),
33053                                                                     Close
33054                                                                       (bVar"b",
33055                                                                        ITE(bVar"b",
33056                                                                            Call
33057                                                                              ("DECODE_UNPREDICTABLE",
33058                                                                               ATy(qTy,
33059                                                                                   PTy(uTy,
33060                                                                                       qTy)),
33061                                                                               TP[Var("mc",
33062                                                                                      CTy"MachineCode"),
33063                                                                                  LS
33064                                                                                   "LoadMultiple"]),
33065                                                                            MU(LU,
33066                                                                               qTy)))),
33067                                                                  Close
33068                                                                    (AVar
33069                                                                       uTy,
33070                                                                     MU(Call
33071                                                                          ("Load",
33072                                                                           CTy"instruction",
33073                                                                           Call
33074                                                                             ("LoadMultiple",
33075                                                                              CTy"Load",
33076                                                                              TP[EQ(Mop(Cast
33077                                                                                          F1,
33078                                                                                        LL[bVar"b'23"]),
33079                                                                                    LW(1,
33080                                                                                       1)),
33081                                                                                 EQ(Mop(Cast
33082                                                                                          F1,
33083                                                                                        LL[bVar"b'24"]),
33084                                                                                    LW(1,
33085                                                                                       1)),
33086                                                                                 bVar"wback",
33087                                                                                 Var("Rn",
33088                                                                                     F4),
33089                                                                                 Var("registers",
33090                                                                                     F16)])),
33091                                                                        qTy)))))),
33092                                                     Call
33093                                                       ("Skip",
33094                                                        ATy(qTy,
33095                                                            PTy(CTy"instruction",
33096                                                                qTy)),LU)))))))],
33097                                 Call
33098                                   ("UndefinedARM",
33099                                    ATy(qTy,PTy(CTy"instruction",qTy)),
33100                                    Var("cond",F4))),
33101                             Call
33102                               ("UndefinedARM",
33103                                ATy(qTy,PTy(CTy"instruction",qTy)),
33104                                Var("cond",F4)))),
33105                        (bVar"b'26",
33106                         ITB([(Bop(And,Mop(Not,bVar"b'24"),
33107                                   Bop(And,bVar"b'21",Mop(Not,bVar"b'20"))),
33108                               Let(Var("Rt",F4),
33109                                   Mop(Cast F4,
33110                                       LL[bVar"b'15",bVar"b'14",
33111                                          bVar"b'13",bVar"b'12"]),
33112                                   Let(Var("Rn",F4),
33113                                       Mop(Cast F4,
33114                                           LL[bVar"b'19",bVar"b'18",
33115                                              bVar"b'17",bVar"b'16"]),
33116                                       Let(Var("B",F1),
33117                                           Mop(Cast F1,LL[bVar"b'22"]),
33118                                           MB(Call
33119                                                ("Take",
33120                                                 ATy(qTy,PTy(bTy,qTy)),
33121                                                 TP[Var("cond",F4),LT]),
33122                                              Close
33123                                                (bVar"b",
33124                                                 ITE(bVar"b",
33125                                                     MB(ITE(Bop(Or,
33126                                                                Bop(Or,
33127                                                                    Bop(And,
33128                                                                        EQ(Var("B",
33129                                                                               F1),
33130                                                                           LW(1,
33131                                                                              1)),
33132                                                                        EQ(Var("Rt",
33133                                                                               F4),
33134                                                                           LW(15,
33135                                                                              4))),
33136                                                                    EQ(Var("Rn",
33137                                                                           F4),
33138                                                                       LW(15,
33139                                                                          4))),
33140                                                                EQ(Var("Rn",
33141                                                                       F4),
33142                                                                   Var("Rt",
33143                                                                       F4))),
33144                                                            Call
33145                                                              ("DECODE_UNPREDICTABLE",
33146                                                               ATy(qTy,
33147                                                                   PTy(uTy,
33148                                                                       qTy)),
33149                                                               TP[Var("mc",
33150                                                                      CTy"MachineCode"),
33151                                                                  LS
33152                                                                   "StoreUnprivileged (immediate)"]),
33153                                                            MU(LU,qTy)),
33154                                                        Close
33155                                                          (AVar uTy,
33156                                                           MU(Let(bVar"add",
33157                                                                  EQ(Mop(Cast
33158                                                                           F1,
33159                                                                         LL[bVar"b'23"]),
33160                                                                     LW(1,
33161                                                                        1)),
33162                                                                  Let(bVar"postindex",
33163                                                                      LT,
33164                                                                      Let(Var("m",
33165                                                                              CTy"offset1"),
33166                                                                          Call
33167                                                                            ("immediate_form1",
33168                                                                             CTy"offset1",
33169                                                                             Mop(Cast
33170                                                                                   F32,
33171                                                                                 Mop(Cast
33172                                                                                       (FTy 12),
33173                                                                                     LL[bVar"b'11",
33174                                                                                        bVar"b'10",
33175                                                                                        bVar"b'9",
33176                                                                                        bVar"b'8",
33177                                                                                        bVar"b'7",
33178                                                                                        bVar"b'6",
33179                                                                                        bVar"b'5",
33180                                                                                        bVar"b'4",
33181                                                                                        bVar"b'3",
33182                                                                                        bVar"b'2",
33183                                                                                        bVar"b'1",
33184                                                                                        bVar"b'0"]))),
33185                                                                          ITE(EQ(Var("B",
33186                                                                                     F1),
33187                                                                                 LW(1,
33188                                                                                    1)),
33189                                                                              Call
33190                                                                                ("Store",
33191                                                                                 CTy"instruction",
33192                                                                                 Call
33193                                                                                   ("StoreByteUnprivileged",
33194                                                                                    CTy"Store",
33195                                                                                    TP[bVar"add",
33196                                                                                       bVar"postindex",
33197                                                                                       Var("Rt",
33198                                                                                           F4),
33199                                                                                       Var("Rn",
33200                                                                                           F4),
33201                                                                                       Var("m",
33202                                                                                           CTy"offset1")])),
33203                                                                              Call
33204                                                                                ("Store",
33205                                                                                 CTy"instruction",
33206                                                                                 Call
33207                                                                                   ("StoreUnprivileged",
33208                                                                                    CTy"Store",
33209                                                                                    TP[bVar"add",
33210                                                                                       bVar"postindex",
33211                                                                                       Var("Rt",
33212                                                                                           F4),
33213                                                                                       Var("Rn",
33214                                                                                           F4),
33215                                                                                       Var("m",
33216                                                                                           CTy"offset1")])))))),
33217                                                              qTy))),
33218                                                     Call
33219                                                       ("Skip",
33220                                                        ATy(qTy,
33221                                                            PTy(CTy"instruction",
33222                                                                qTy)),LU)))))))),
33223                              (Mop(Not,bVar"b'20"),
33224                               Let(Var("Rt",F4),
33225                                   Mop(Cast F4,
33226                                       LL[bVar"b'15",bVar"b'14",
33227                                          bVar"b'13",bVar"b'12"]),
33228                                   Let(Var("Rn",F4),
33229                                       Mop(Cast F4,
33230                                           LL[bVar"b'19",bVar"b'18",
33231                                              bVar"b'17",bVar"b'16"]),
33232                                       Let(Var("B",F1),
33233                                           Mop(Cast F1,LL[bVar"b'22"]),
33234                                           Let(Var("P",F1),
33235                                               Mop(Cast F1,LL[bVar"b'24"]),
33236                                               MB(Call
33237                                                    ("Take",
33238                                                     ATy(qTy,PTy(bTy,qTy)),
33239                                                     TP[Var("cond",F4),LT]),
33240                                                  Close
33241                                                    (bVar"b",
33242                                                     ITE(bVar"b",
33243                                                         Let(bVar"wback",
33244                                                             Bop(Or,
33245                                                                 EQ(Var("P",
33246                                                                        F1),
33247                                                                    LW(0,1)),
33248                                                                 EQ(Mop(Cast
33249                                                                          F1,
33250                                                                        LL[bVar"b'21"]),
33251                                                                    LW(1,1))),
33252                                                             MB(ITE(Bop(Or,
33253                                                                        Bop(And,
33254                                                                            EQ(Var("B",
33255                                                                                   F1),
33256                                                                               LW(1,
33257                                                                                  1)),
33258                                                                            EQ(Var("Rt",
33259                                                                                   F4),
33260                                                                               LW(15,
33261                                                                                  4))),
33262                                                                        Bop(And,
33263                                                                            bVar"wback",
33264                                                                            Bop(Or,
33265                                                                                EQ(Var("Rn",
33266                                                                                       F4),
33267                                                                                   LW(15,
33268                                                                                      4)),
33269                                                                                EQ(Var("Rn",
33270                                                                                       F4),
33271                                                                                   Var("Rt",
33272                                                                                       F4))))),
33273                                                                    Call
33274                                                                      ("DECODE_UNPREDICTABLE",
33275                                                                       ATy(qTy,
33276                                                                           PTy(uTy,
33277                                                                               qTy)),
33278                                                                       TP[Var("mc",
33279                                                                              CTy"MachineCode"),
33280                                                                          LS
33281                                                                           "Store (immediate)"]),
33282                                                                    MU(LU,
33283                                                                       qTy)),
33284                                                                Close
33285                                                                  (AVar
33286                                                                     uTy,
33287                                                                   MU(Let(bVar"add",
33288                                                                          EQ(Mop(Cast
33289                                                                                   F1,
33290                                                                                 LL[bVar"b'23"]),
33291                                                                             LW(1,
33292                                                                                1)),
33293                                                                          Let(bVar"index",
33294                                                                              EQ(Var("P",
33295                                                                                     F1),
33296                                                                                 LW(1,
33297                                                                                    1)),
33298                                                                              Let(Var("m",
33299                                                                                      CTy"offset1"),
33300                                                                                  Call
33301                                                                                    ("immediate_form1",
33302                                                                                     CTy"offset1",
33303                                                                                     Mop(Cast
33304                                                                                           F32,
33305                                                                                         Mop(Cast
33306                                                                                               (FTy 12),
33307                                                                                             LL[bVar"b'11",
33308                                                                                                bVar"b'10",
33309                                                                                                bVar"b'9",
33310                                                                                                bVar"b'8",
33311                                                                                                bVar"b'7",
33312                                                                                                bVar"b'6",
33313                                                                                                bVar"b'5",
33314                                                                                                bVar"b'4",
33315                                                                                                bVar"b'3",
33316                                                                                                bVar"b'2",
33317                                                                                                bVar"b'1",
33318                                                                                                bVar"b'0"]))),
33319                                                                                  ITE(EQ(Var("B",
33320                                                                                             F1),
33321                                                                                         LW(1,
33322                                                                                            1)),
33323                                                                                      Call
33324                                                                                        ("Store",
33325                                                                                         CTy"instruction",
33326                                                                                         Call
33327                                                                                           ("StoreByte",
33328                                                                                            CTy"Store",
33329                                                                                            TP[bVar"add",
33330                                                                                               bVar"index",
33331                                                                                               bVar"wback",
33332                                                                                               Var("Rt",
33333                                                                                                   F4),
33334                                                                                               Var("Rn",
33335                                                                                                   F4),
33336                                                                                               Var("m",
33337                                                                                                   CTy"offset1")])),
33338                                                                                      Call
33339                                                                                        ("Store",
33340                                                                                         CTy"instruction",
33341                                                                                         Call
33342                                                                                           ("StoreWord",
33343                                                                                            CTy"Store",
33344                                                                                            TP[bVar"add",
33345                                                                                               bVar"index",
33346                                                                                               bVar"wback",
33347                                                                                               Var("Rt",
33348                                                                                                   F4),
33349                                                                                               Var("Rn",
33350                                                                                                   F4),
33351                                                                                               Var("m",
33352                                                                                                   CTy"offset1")])))))),
33353                                                                      qTy)))),
33354                                                         Call
33355                                                           ("Skip",
33356                                                            ATy(qTy,
33357                                                                PTy(CTy"instruction",
33358                                                                    qTy)),
33359                                                            LU))))))))),
33360                              (Bop(And,Mop(Not,bVar"b'24"),
33361                                   Bop(And,bVar"b'21",bVar"b'20")),
33362                               Let(Var("Rt",F4),
33363                                   Mop(Cast F4,
33364                                       LL[bVar"b'15",bVar"b'14",
33365                                          bVar"b'13",bVar"b'12"]),
33366                                   Let(Var("Rn",F4),
33367                                       Mop(Cast F4,
33368                                           LL[bVar"b'19",bVar"b'18",
33369                                              bVar"b'17",bVar"b'16"]),
33370                                       MB(Call
33371                                            ("Take",ATy(qTy,PTy(bTy,qTy)),
33372                                             TP[Var("cond",F4),LT]),
33373                                          Close
33374                                            (bVar"b",
33375                                             ITE(bVar"b",
33376                                                 MB(ITE(Bop(Or,
33377                                                            Bop(Or,
33378                                                                EQ(Var("Rt",
33379                                                                       F4),
33380                                                                   LW(15,4)),
33381                                                                EQ(Var("Rn",
33382                                                                       F4),
33383                                                                   LW(15,4))),
33384                                                            EQ(Var("Rn",F4),
33385                                                               Var("Rt",F4))),
33386                                                        Call
33387                                                          ("DECODE_UNPREDICTABLE",
33388                                                           ATy(qTy,
33389                                                               PTy(uTy,qTy)),
33390                                                           TP[Var("mc",
33391                                                                  CTy"MachineCode"),
33392                                                              LS
33393                                                               "LoadUnprivileged (immediate)"]),
33394                                                        MU(LU,qTy)),
33395                                                    Close
33396                                                      (AVar uTy,
33397                                                       MU(Let(bVar"add",
33398                                                              EQ(Mop(Cast
33399                                                                       F1,
33400                                                                     LL[bVar"b'23"]),
33401                                                                 LW(1,1)),
33402                                                              Let(bVar"postindex",
33403                                                                  LT,
33404                                                                  Let(Var("m",
33405                                                                          CTy"offset1"),
33406                                                                      Call
33407                                                                        ("immediate_form1",
33408                                                                         CTy"offset1",
33409                                                                         Mop(Cast
33410                                                                               F32,
33411                                                                             Mop(Cast
33412                                                                                   (FTy 12),
33413                                                                                 LL[bVar"b'11",
33414                                                                                    bVar"b'10",
33415                                                                                    bVar"b'9",
33416                                                                                    bVar"b'8",
33417                                                                                    bVar"b'7",
33418                                                                                    bVar"b'6",
33419                                                                                    bVar"b'5",
33420                                                                                    bVar"b'4",
33421                                                                                    bVar"b'3",
33422                                                                                    bVar"b'2",
33423                                                                                    bVar"b'1",
33424                                                                                    bVar"b'0"]))),
33425                                                                      ITE(EQ(Mop(Cast
33426                                                                                   F1,
33427                                                                                 LL[bVar"b'22"]),
33428                                                                             LW(1,
33429                                                                                1)),
33430                                                                          Call
33431                                                                            ("Load",
33432                                                                             CTy"instruction",
33433                                                                             Call
33434                                                                               ("LoadByteUnprivileged",
33435                                                                                CTy"Load",
33436                                                                                TP[bVar"add",
33437                                                                                   bVar"postindex",
33438                                                                                   Var("Rt",
33439                                                                                       F4),
33440                                                                                   Var("Rn",
33441                                                                                       F4),
33442                                                                                   Var("m",
33443                                                                                       CTy"offset1")])),
33444                                                                          Call
33445                                                                            ("Load",
33446                                                                             CTy"instruction",
33447                                                                             Call
33448                                                                               ("LoadUnprivileged",
33449                                                                                CTy"Load",
33450                                                                                TP[bVar"add",
33451                                                                                   bVar"postindex",
33452                                                                                   Var("Rt",
33453                                                                                       F4),
33454                                                                                   Var("Rn",
33455                                                                                       F4),
33456                                                                                   Var("m",
33457                                                                                       CTy"offset1")])))))),
33458                                                          qTy))),
33459                                                 Call
33460                                                   ("Skip",
33461                                                    ATy(qTy,
33462                                                        PTy(CTy"instruction",
33463                                                            qTy)),LU))))))),
33464                              (Bop(And,bVar"b'20",
33465                                   Bop(And,bVar"b'19",
33466                                       Bop(And,bVar"b'18",
33467                                           Bop(And,bVar"b'17",bVar"b'16")))),
33468                               Let(Var("Rt",F4),
33469                                   Mop(Cast F4,
33470                                       LL[bVar"b'15",bVar"b'14",
33471                                          bVar"b'13",bVar"b'12"]),
33472                                   Let(Var("B",F1),
33473                                       Mop(Cast F1,LL[bVar"b'22"]),
33474                                       MB(Call
33475                                            ("Take",ATy(qTy,PTy(bTy,qTy)),
33476                                             TP[Var("cond",F4),LT]),
33477                                          Close
33478                                            (bVar"b",
33479                                             ITE(bVar"b",
33480                                                 MB(ITE(Bop(And,
33481                                                            EQ(Var("B",F1),
33482                                                               LW(1,1)),
33483                                                            EQ(Var("Rt",F4),
33484                                                               LW(15,4))),
33485                                                        Call
33486                                                          ("DECODE_UNPREDICTABLE",
33487                                                           ATy(qTy,
33488                                                               PTy(uTy,qTy)),
33489                                                           TP[Var("mc",
33490                                                                  CTy"MachineCode"),
33491                                                              LS
33492                                                               "LoadByte (literal)"]),
33493                                                        MU(LU,qTy)),
33494                                                    Close
33495                                                      (AVar uTy,
33496                                                       MU(Let(bVar"add",
33497                                                              EQ(Mop(Cast
33498                                                                       F1,
33499                                                                     LL[bVar"b'23"]),
33500                                                                 LW(1,1)),
33501                                                              Let(Var("imm32",
33502                                                                      F32),
33503                                                                  Mop(Cast
33504                                                                        F32,
33505                                                                      Mop(Cast
33506                                                                            (FTy 12),
33507                                                                          LL[bVar"b'11",
33508                                                                             bVar"b'10",
33509                                                                             bVar"b'9",
33510                                                                             bVar"b'8",
33511                                                                             bVar"b'7",
33512                                                                             bVar"b'6",
33513                                                                             bVar"b'5",
33514                                                                             bVar"b'4",
33515                                                                             bVar"b'3",
33516                                                                             bVar"b'2",
33517                                                                             bVar"b'1",
33518                                                                             bVar"b'0"])),
33519                                                                  ITE(EQ(Var("B",
33520                                                                             F1),
33521                                                                         LW(1,
33522                                                                            1)),
33523                                                                      Call
33524                                                                        ("Load",
33525                                                                         CTy"instruction",
33526                                                                         Call
33527                                                                           ("LoadByteLiteral",
33528                                                                            CTy"Load",
33529                                                                            TP[LT,
33530                                                                               bVar"add",
33531                                                                               Var("Rt",
33532                                                                                   F4),
33533                                                                               Var("imm32",
33534                                                                                   F32)])),
33535                                                                      Call
33536                                                                        ("Load",
33537                                                                         CTy"instruction",
33538                                                                         Call
33539                                                                           ("LoadLiteral",
33540                                                                            CTy"Load",
33541                                                                            TP[bVar"add",
33542                                                                               Var("Rt",
33543                                                                                   F4),
33544                                                                               Var("imm32",
33545                                                                                   F32)]))))),
33546                                                          qTy))),
33547                                                 Call
33548                                                   ("Skip",
33549                                                    ATy(qTy,
33550                                                        PTy(CTy"instruction",
33551                                                            qTy)),LU))))))),
33552                              (bVar"b'20",
33553                               Let(Var("Rt",F4),
33554                                   Mop(Cast F4,
33555                                       LL[bVar"b'15",bVar"b'14",
33556                                          bVar"b'13",bVar"b'12"]),
33557                                   Let(Var("Rn",F4),
33558                                       Mop(Cast F4,
33559                                           LL[bVar"b'19",bVar"b'18",
33560                                              bVar"b'17",bVar"b'16"]),
33561                                       Let(Var("B",F1),
33562                                           Mop(Cast F1,LL[bVar"b'22"]),
33563                                           Let(Var("P",F1),
33564                                               Mop(Cast F1,LL[bVar"b'24"]),
33565                                               MB(Call
33566                                                    ("Take",
33567                                                     ATy(qTy,PTy(bTy,qTy)),
33568                                                     TP[Var("cond",F4),LT]),
33569                                                  Close
33570                                                    (bVar"b",
33571                                                     ITE(bVar"b",
33572                                                         Let(bVar"wback",
33573                                                             Bop(Or,
33574                                                                 EQ(Var("P",
33575                                                                        F1),
33576                                                                    LW(0,1)),
33577                                                                 EQ(Mop(Cast
33578                                                                          F1,
33579                                                                        LL[bVar"b'21"]),
33580                                                                    LW(1,1))),
33581                                                             MB(ITE(Bop(Or,
33582                                                                        Bop(And,
33583                                                                            EQ(Var("B",
33584                                                                                   F1),
33585                                                                               LW(1,
33586                                                                                  1)),
33587                                                                            EQ(Var("Rt",
33588                                                                                   F4),
33589                                                                               LW(15,
33590                                                                                  4))),
33591                                                                        Bop(And,
33592                                                                            bVar"wback",
33593                                                                            EQ(Var("Rn",
33594                                                                                   F4),
33595                                                                               Var("Rt",
33596                                                                                   F4)))),
33597                                                                    Call
33598                                                                      ("DECODE_UNPREDICTABLE",
33599                                                                       ATy(qTy,
33600                                                                           PTy(uTy,
33601                                                                               qTy)),
33602                                                                       TP[Var("mc",
33603                                                                              CTy"MachineCode"),
33604                                                                          LS
33605                                                                           "LoadWord/Byte (immediate)"]),
33606                                                                    MU(LU,
33607                                                                       qTy)),
33608                                                                Close
33609                                                                  (AVar
33610                                                                     uTy,
33611                                                                   MU(Let(bVar"add",
33612                                                                          EQ(Mop(Cast
33613                                                                                   F1,
33614                                                                                 LL[bVar"b'23"]),
33615                                                                             LW(1,
33616                                                                                1)),
33617                                                                          Let(bVar"index",
33618                                                                              EQ(Var("P",
33619                                                                                     F1),
33620                                                                                 LW(1,
33621                                                                                    1)),
33622                                                                              Let(Var("m",
33623                                                                                      CTy"offset1"),
33624                                                                                  Call
33625                                                                                    ("immediate_form1",
33626                                                                                     CTy"offset1",
33627                                                                                     Mop(Cast
33628                                                                                           F32,
33629                                                                                         Mop(Cast
33630                                                                                               (FTy 12),
33631                                                                                             LL[bVar"b'11",
33632                                                                                                bVar"b'10",
33633                                                                                                bVar"b'9",
33634                                                                                                bVar"b'8",
33635                                                                                                bVar"b'7",
33636                                                                                                bVar"b'6",
33637                                                                                                bVar"b'5",
33638                                                                                                bVar"b'4",
33639                                                                                                bVar"b'3",
33640                                                                                                bVar"b'2",
33641                                                                                                bVar"b'1",
33642                                                                                                bVar"b'0"]))),
33643                                                                                  ITE(EQ(Var("B",
33644                                                                                             F1),
33645                                                                                         LW(1,
33646                                                                                            1)),
33647                                                                                      Call
33648                                                                                        ("Load",
33649                                                                                         CTy"instruction",
33650                                                                                         Call
33651                                                                                           ("LoadByte",
33652                                                                                            CTy"Load",
33653                                                                                            TP[LT,
33654                                                                                               bVar"add",
33655                                                                                               bVar"index",
33656                                                                                               bVar"wback",
33657                                                                                               Var("Rt",
33658                                                                                                   F4),
33659                                                                                               Var("Rn",
33660                                                                                                   F4),
33661                                                                                               Var("m",
33662                                                                                                   CTy"offset1")])),
33663                                                                                      Call
33664                                                                                        ("Load",
33665                                                                                         CTy"instruction",
33666                                                                                         Call
33667                                                                                           ("LoadWord",
33668                                                                                            CTy"Load",
33669                                                                                            TP[bVar"add",
33670                                                                                               bVar"index",
33671                                                                                               bVar"wback",
33672                                                                                               Var("Rt",
33673                                                                                                   F4),
33674                                                                                               Var("Rn",
33675                                                                                                   F4),
33676                                                                                               Var("m",
33677                                                                                                   CTy"offset1")])))))),
33678                                                                      qTy)))),
33679                                                         Call
33680                                                           ("Skip",
33681                                                            ATy(qTy,
33682                                                                PTy(CTy"instruction",
33683                                                                    qTy)),
33684                                                            LU)))))))))],
33685                             Call
33686                               ("UndefinedARM",
33687                                ATy(qTy,PTy(CTy"instruction",qTy)),
33688                                Var("cond",F4)))),
33689                        (Bop(And,bVar"b'24",
33690                             Bop(And,Mop(Not,bVar"b'23"),
33691                                 Bop(And,Mop(Not,bVar"b'21"),
33692                                     Bop(And,Mop(Not,bVar"b'20"),
33693                                         Bop(And,bVar"b'9",
33694                                             Bop(And,Mop(Not,bVar"b'7"),
33695                                                 Bop(And,
33696                                                     Mop(Not,bVar"b'6"),
33697                                                     Bop(And,
33698                                                         Mop(Not,bVar"b'5"),
33699                                                         Mop(Not,bVar"b'4"))))))))),
33700                         Let(Var("Rd",F4),
33701                             Mop(Cast F4,
33702                                 LL[bVar"b'15",bVar"b'14",bVar"b'13",
33703                                    bVar"b'12"]),
33704                             MB(Call
33705                                  ("HaveVirtExt",ATy(qTy,PTy(bTy,qTy)),LU),
33706                                Close
33707                                  (bVar"v",
33708                                   MB(MB(MU(TP[Var("cond",F4),bVar"v"],qTy),
33709                                         Close
33710                                           (Var("v",PTy(F4,bTy)),
33711                                            Call
33712                                              ("Take",
33713                                               ATy(qTy,PTy(bTy,qTy)),
33714                                               Var("v",PTy(F4,bTy))))),
33715                                      Close
33716                                        (bVar"b",
33717                                         ITE(bVar"b",
33718                                             MB(ITE(EQ(Var("Rd",F4),
33719                                                       LW(15,4)),
33720                                                    Call
33721                                                      ("DECODE_UNPREDICTABLE",
33722                                                       ATy(qTy,
33723                                                           PTy(uTy,qTy)),
33724                                                       TP[Var("mc",
33725                                                              CTy"MachineCode"),
33726                                                          LS
33727                                                           "MoveToRegisterFromBankedOrSpecial"]),
33728                                                    MU(LU,qTy)),
33729                                                Close
33730                                                  (AVar uTy,
33731                                                   MU(Call
33732                                                        ("System",
33733                                                         CTy"instruction",
33734                                                         Call
33735                                                           ("MoveToRegisterFromBankedOrSpecial",
33736                                                            CTy"System",
33737                                                            TP[EQ(Mop(Cast
33738                                                                        F1,
33739                                                                      LL[bVar"b'22"]),
33740                                                                  LW(1,1)),
33741                                                               CC[Mop(Cast
33742                                                                        F1,
33743                                                                      LL[bVar"b'8"]),
33744                                                                  Mop(Cast
33745                                                                        F4,
33746                                                                      LL[bVar"b'19",
33747                                                                         bVar"b'18",
33748                                                                         bVar"b'17",
33749                                                                         bVar"b'16"])],
33750                                                               Var("Rd",F4)])),
33751                                                      qTy))),
33752                                             Call
33753                                               ("Skip",
33754                                                ATy(qTy,
33755                                                    PTy(CTy"instruction",
33756                                                        qTy)),LU)))))))),
33757                        (Bop(And,bVar"b'24",
33758                             Bop(And,Mop(Not,bVar"b'23"),
33759                                 Bop(And,Mop(Not,bVar"b'21"),
33760                                     Bop(And,Mop(Not,bVar"b'20"),
33761                                         Bop(And,Mop(Not,bVar"b'9"),
33762                                             Bop(And,Mop(Not,bVar"b'7"),
33763                                                 Bop(And,
33764                                                     Mop(Not,bVar"b'6"),
33765                                                     Bop(And,
33766                                                         Mop(Not,bVar"b'5"),
33767                                                         Mop(Not,bVar"b'4"))))))))),
33768                         Let(Var("Rd",F4),
33769                             Mop(Cast F4,
33770                                 LL[bVar"b'15",bVar"b'14",bVar"b'13",
33771                                    bVar"b'12"]),
33772                             MB(Call
33773                                  ("Take",ATy(qTy,PTy(bTy,qTy)),
33774                                   TP[Var("cond",F4),LT]),
33775                                Close
33776                                  (bVar"b",
33777                                   ITE(bVar"b",
33778                                       MB(ITE(EQ(Var("Rd",F4),LW(15,4)),
33779                                              Call
33780                                                ("DECODE_UNPREDICTABLE",
33781                                                 ATy(qTy,PTy(uTy,qTy)),
33782                                                 TP[Var("mc",
33783                                                        CTy"MachineCode"),
33784                                                    LS
33785                                                     "MoveToRegisterFromSpecial"]),
33786                                              MU(LU,qTy)),
33787                                          Close
33788                                            (AVar uTy,
33789                                             MU(Call
33790                                                  ("System",
33791                                                   CTy"instruction",
33792                                                   Call
33793                                                     ("MoveToRegisterFromSpecial",
33794                                                      CTy"System",
33795                                                      TP[EQ(Mop(Cast F1,
33796                                                                LL[bVar"b'22"]),
33797                                                            LW(1,1)),
33798                                                         Var("Rd",F4)])),
33799                                                qTy))),
33800                                       Call
33801                                         ("Skip",
33802                                          ATy(qTy,
33803                                              PTy(CTy"instruction",qTy)),
33804                                          LU)))))),
33805                        (Bop(And,bVar"b'24",
33806                             Bop(And,Mop(Not,bVar"b'23"),
33807                                 Bop(And,bVar"b'21",
33808                                     Bop(And,Mop(Not,bVar"b'20"),
33809                                         Bop(And,bVar"b'9",
33810                                             Bop(And,Mop(Not,bVar"b'7"),
33811                                                 Bop(And,
33812                                                     Mop(Not,bVar"b'6"),
33813                                                     Bop(And,
33814                                                         Mop(Not,bVar"b'5"),
33815                                                         Mop(Not,bVar"b'4"))))))))),
33816                         Let(Var("Rn",F4),
33817                             Mop(Cast F4,
33818                                 LL[bVar"b'3",bVar"b'2",bVar"b'1",
33819                                    bVar"b'0"]),
33820                             MB(Call
33821                                  ("HaveVirtExt",ATy(qTy,PTy(bTy,qTy)),LU),
33822                                Close
33823                                  (bVar"v",
33824                                   MB(MB(MU(TP[Var("cond",F4),bVar"v"],qTy),
33825                                         Close
33826                                           (Var("v",PTy(F4,bTy)),
33827                                            Call
33828                                              ("Take",
33829                                               ATy(qTy,PTy(bTy,qTy)),
33830                                               Var("v",PTy(F4,bTy))))),
33831                                      Close
33832                                        (bVar"b",
33833                                         ITE(bVar"b",
33834                                             MB(ITE(Bop(In,Var("Rn",F4),
33835                                                        SL[LW(13,4),
33836                                                           LW(15,4)]),
33837                                                    Call
33838                                                      ("DECODE_UNPREDICTABLE",
33839                                                       ATy(qTy,
33840                                                           PTy(uTy,qTy)),
33841                                                       TP[Var("mc",
33842                                                              CTy"MachineCode"),
33843                                                          LS
33844                                                           "MoveToBankedOrSpecialRegister"]),
33845                                                    MU(LU,qTy)),
33846                                                Close
33847                                                  (AVar uTy,
33848                                                   MU(Call
33849                                                        ("System",
33850                                                         CTy"instruction",
33851                                                         Call
33852                                                           ("MoveToBankedOrSpecialRegister",
33853                                                            CTy"System",
33854                                                            TP[EQ(Mop(Cast
33855                                                                        F1,
33856                                                                      LL[bVar"b'22"]),
33857                                                                  LW(1,1)),
33858                                                               CC[Mop(Cast
33859                                                                        F1,
33860                                                                      LL[bVar"b'8"]),
33861                                                                  Mop(Cast
33862                                                                        F4,
33863                                                                      LL[bVar"b'19",
33864                                                                         bVar"b'18",
33865                                                                         bVar"b'17",
33866                                                                         bVar"b'16"])],
33867                                                               Var("Rn",F4)])),
33868                                                      qTy))),
33869                                             Call
33870                                               ("Skip",
33871                                                ATy(qTy,
33872                                                    PTy(CTy"instruction",
33873                                                        qTy)),LU)))))))),
33874                        (Bop(And,bVar"b'24",
33875                             Bop(And,Mop(Not,bVar"b'23"),
33876                                 Bop(And,bVar"b'21",
33877                                     Bop(And,Mop(Not,bVar"b'20"),
33878                                         Bop(And,Mop(Not,bVar"b'9"),
33879                                             Bop(And,Mop(Not,bVar"b'7"),
33880                                                 Bop(And,
33881                                                     Mop(Not,bVar"b'6"),
33882                                                     Bop(And,
33883                                                         Mop(Not,bVar"b'5"),
33884                                                         Mop(Not,bVar"b'4"))))))))),
33885                         Let(Var("Rn",F4),
33886                             Mop(Cast F4,
33887                                 LL[bVar"b'3",bVar"b'2",bVar"b'1",
33888                                    bVar"b'0"]),
33889                             Let(Var("mask",F4),
33890                                 Mop(Cast F4,
33891                                     LL[bVar"b'19",bVar"b'18",bVar"b'17",
33892                                        bVar"b'16"]),
33893                                 MB(Call
33894                                      ("Take",ATy(qTy,PTy(bTy,qTy)),
33895                                       TP[Var("cond",F4),LT]),
33896                                    Close
33897                                      (bVar"b",
33898                                       ITE(bVar"b",
33899                                           MB(ITE(Bop(Or,
33900                                                      EQ(Var("Rn",F4),
33901                                                         LW(15,4)),
33902                                                      EQ(Var("mask",F4),
33903                                                         LW(0,4))),
33904                                                  Call
33905                                                    ("DECODE_UNPREDICTABLE",
33906                                                     ATy(qTy,PTy(uTy,qTy)),
33907                                                     TP[Var("mc",
33908                                                            CTy"MachineCode"),
33909                                                        LS
33910                                                         "MoveToSpecialFromRegister"]),
33911                                                  MU(LU,qTy)),
33912                                              Close
33913                                                (AVar uTy,
33914                                                 MU(Call
33915                                                      ("System",
33916                                                       CTy"instruction",
33917                                                       Call
33918                                                         ("MoveToSpecialFromRegister",
33919                                                          CTy"System",
33920                                                          TP[EQ(Mop(Cast
33921                                                                      F1,
33922                                                                    LL[bVar"b'22"]),
33923                                                                LW(1,1)),
33924                                                             Var("Rn",F4),
33925                                                             Var("mask",F4)])),
33926                                                    qTy))),
33927                                           Call
33928                                             ("Skip",
33929                                              ATy(qTy,
33930                                                  PTy(CTy"instruction",qTy)),
33931                                              LU))))))),
33932                        (Bop(And,bVar"b'24",
33933                             Bop(And,Mop(Not,bVar"b'23"),
33934                                 Bop(And,Mop(Not,bVar"b'22"),
33935                                     Bop(And,bVar"b'21",
33936                                         Bop(And,Mop(Not,bVar"b'20"),
33937                                             Bop(And,Mop(Not,bVar"b'7"),
33938                                                 Bop(And,
33939                                                     Mop(Not,bVar"b'6"),
33940                                                     Bop(And,
33941                                                         Mop(Not,bVar"b'5"),
33942                                                         bVar"b'4")))))))),
33943                         MB(MR(Close
33944                                 (qVar"s",
33945                                  Dest
33946                                    ("Architecture",CTy"Architecture",
33947                                     qVar"s"))),
33948                            Close
33949                              (Var("v",CTy"Architecture"),
33950                               MB(MB(MB(MB(MU(EQ(Var("v",CTy"Architecture"),
33951                                                 LC("ARMv4",
33952                                                    CTy"Architecture")),
33953                                              qTy),
33954                                           Close
33955                                             (bVar"v",
33956                                              MU(Mop(Not,bVar"v"),qTy))),
33957                                        Close
33958                                          (bVar"v",
33959                                           MU(TP[Var("cond",F4),bVar"v"],
33960                                              qTy))),
33961                                     Close
33962                                       (Var("v",PTy(F4,bTy)),
33963                                        Call
33964                                          ("Take",ATy(qTy,PTy(bTy,qTy)),
33965                                           Var("v",PTy(F4,bTy))))),
33966                                  Close
33967                                    (bVar"b",
33968                                     ITE(bVar"b",
33969                                         MU(Call
33970                                              ("Branch",CTy"instruction",
33971                                               Call
33972                                                 ("BranchExchange",
33973                                                  CTy"Branch",
33974                                                  Mop(Cast F4,
33975                                                      LL[bVar"b'3",
33976                                                         bVar"b'2",
33977                                                         bVar"b'1",
33978                                                         bVar"b'0"]))),qTy),
33979                                         Call
33980                                           ("Skip",
33981                                            ATy(qTy,
33982                                                PTy(CTy"instruction",qTy)),
33983                                            LU))))))),
33984                        (Bop(And,bVar"b'24",
33985                             Bop(And,Mop(Not,bVar"b'23"),
33986                                 Bop(And,bVar"b'22",
33987                                     Bop(And,bVar"b'21",
33988                                         Bop(And,Mop(Not,bVar"b'20"),
33989                                             Bop(And,Mop(Not,bVar"b'7"),
33990                                                 Bop(And,
33991                                                     Mop(Not,bVar"b'6"),
33992                                                     Bop(And,
33993                                                         Mop(Not,bVar"b'5"),
33994                                                         bVar"b'4")))))))),
33995                         Let(Var("Rm",F4),
33996                             Mop(Cast F4,
33997                                 LL[bVar"b'3",bVar"b'2",bVar"b'1",
33998                                    bVar"b'0"]),
33999                             Let(Var("Rd",F4),
34000                                 Mop(Cast F4,
34001                                     LL[bVar"b'15",bVar"b'14",bVar"b'13",
34002                                        bVar"b'12"]),
34003                                 MB(Call
34004                                      ("ArchVersion",
34005                                       ATy(qTy,PTy(nTy,qTy)),LU),
34006                                    Close
34007                                      (nVar"v",
34008                                       MB(MB(MB(MU(Bop(Ge,nVar"v",LN 5),
34009                                                   qTy),
34010                                                Close
34011                                                  (bVar"v",
34012                                                   MU(TP[Var("cond",F4),
34013                                                         bVar"v"],qTy))),
34014                                             Close
34015                                               (Var("v",PTy(F4,bTy)),
34016                                                Call
34017                                                  ("Take",
34018                                                   ATy(qTy,PTy(bTy,qTy)),
34019                                                   Var("v",PTy(F4,bTy))))),
34020                                          Close
34021                                            (bVar"b",
34022                                             ITE(bVar"b",
34023                                                 MB(ITE(Bop(Or,
34024                                                            EQ(Var("Rd",F4),
34025                                                               LW(15,4)),
34026                                                            EQ(Var("Rm",F4),
34027                                                               LW(15,4))),
34028                                                        Call
34029                                                          ("DECODE_UNPREDICTABLE",
34030                                                           ATy(qTy,
34031                                                               PTy(uTy,qTy)),
34032                                                           TP[Var("mc",
34033                                                                  CTy"MachineCode"),
34034                                                              LS
34035                                                               "CountLeadingZeroes"]),
34036                                                        MU(LU,qTy)),
34037                                                    Close
34038                                                      (AVar uTy,
34039                                                       MU(Call
34040                                                            ("Data",
34041                                                             CTy"instruction",
34042                                                             Call
34043                                                               ("CountLeadingZeroes",
34044                                                                CTy"Data",
34045                                                                TP[Var("Rd",
34046                                                                       F4),
34047                                                                   Var("Rm",
34048                                                                       F4)])),
34049                                                          qTy))),
34050                                                 Call
34051                                                   ("Skip",
34052                                                    ATy(qTy,
34053                                                        PTy(CTy"instruction",
34054                                                            qTy)),LU))))))))),
34055                        (Bop(And,bVar"b'24",
34056                             Bop(And,Mop(Not,bVar"b'23"),
34057                                 Bop(And,Mop(Not,bVar"b'22"),
34058                                     Bop(And,bVar"b'21",
34059                                         Bop(And,Mop(Not,bVar"b'20"),
34060                                             Bop(And,Mop(Not,bVar"b'7"),
34061                                                 Bop(And,
34062                                                     Mop(Not,bVar"b'6"),
34063                                                     Bop(And,bVar"b'5",
34064                                                         bVar"b'4")))))))),
34065                         Let(Var("Rm",F4),
34066                             Mop(Cast F4,
34067                                 LL[bVar"b'3",bVar"b'2",bVar"b'1",
34068                                    bVar"b'0"]),
34069                             MB(Call
34070                                  ("ArchVersion",ATy(qTy,PTy(nTy,qTy)),LU),
34071                                Close
34072                                  (nVar"v",
34073                                   MB(MB(MB(MU(Bop(Ge,nVar"v",LN 5),qTy),
34074                                            Close
34075                                              (bVar"v",
34076                                               MU(TP[Var("cond",F4),
34077                                                     bVar"v"],qTy))),
34078                                         Close
34079                                           (Var("v",PTy(F4,bTy)),
34080                                            Call
34081                                              ("Take",
34082                                               ATy(qTy,PTy(bTy,qTy)),
34083                                               Var("v",PTy(F4,bTy))))),
34084                                      Close
34085                                        (bVar"b",
34086                                         ITE(bVar"b",
34087                                             MB(ITE(EQ(Var("Rm",F4),
34088                                                       LW(15,4)),
34089                                                    Call
34090                                                      ("DECODE_UNPREDICTABLE",
34091                                                       ATy(qTy,
34092                                                           PTy(uTy,qTy)),
34093                                                       TP[Var("mc",
34094                                                              CTy"MachineCode"),
34095                                                          LS
34096                                                           "BranchLinkExchangeRegister"]),
34097                                                    MU(LU,qTy)),
34098                                                Close
34099                                                  (AVar uTy,
34100                                                   MU(Call
34101                                                        ("Branch",
34102                                                         CTy"instruction",
34103                                                         Call
34104                                                           ("BranchLinkExchangeRegister",
34105                                                            CTy"Branch",
34106                                                            Var("Rm",F4))),
34107                                                      qTy))),
34108                                             Call
34109                                               ("Skip",
34110                                                ATy(qTy,
34111                                                    PTy(CTy"instruction",
34112                                                        qTy)),LU)))))))),
34113                        (Bop(And,bVar"b'24",
34114                             Bop(And,Mop(Not,bVar"b'23"),
34115                                 Bop(And,Mop(Not,bVar"b'20"),
34116                                     Bop(And,Mop(Not,bVar"b'7"),
34117                                         Bop(And,bVar"b'6",
34118                                             Bop(And,Mop(Not,bVar"b'5"),
34119                                                 bVar"b'4")))))),
34120                         Let(Var("Rm",F4),
34121                             Mop(Cast F4,
34122                                 LL[bVar"b'3",bVar"b'2",bVar"b'1",
34123                                    bVar"b'0"]),
34124                             Let(Var("Rd",F4),
34125                                 Mop(Cast F4,
34126                                     LL[bVar"b'15",bVar"b'14",bVar"b'13",
34127                                        bVar"b'12"]),
34128                                 Let(Var("Rn",F4),
34129                                     Mop(Cast F4,
34130                                         LL[bVar"b'19",bVar"b'18",
34131                                            bVar"b'17",bVar"b'16"]),
34132                                     MB(Call
34133                                          ("HaveDSPSupport",
34134                                           ATy(qTy,PTy(bTy,qTy)),LU),
34135                                        Close
34136                                          (bVar"v",
34137                                           MB(MB(MU(TP[Var("cond",F4),
34138                                                       bVar"v"],qTy),
34139                                                 Close
34140                                                   (Var("v",PTy(F4,bTy)),
34141                                                    Call
34142                                                      ("Take",
34143                                                       ATy(qTy,
34144                                                           PTy(bTy,qTy)),
34145                                                       Var("v",PTy(F4,bTy))))),
34146                                              Close
34147                                                (bVar"b",
34148                                                 ITE(bVar"b",
34149                                                     MB(ITE(Bop(Or,
34150                                                                Bop(Or,
34151                                                                    EQ(Var("Rd",
34152                                                                           F4),
34153                                                                       LW(15,
34154                                                                          4)),
34155                                                                    EQ(Var("Rn",
34156                                                                           F4),
34157                                                                       LW(15,
34158                                                                          4))),
34159                                                                EQ(Var("Rm",
34160                                                                       F4),
34161                                                                   LW(15,4))),
34162                                                            Call
34163                                                              ("DECODE_UNPREDICTABLE",
34164                                                               ATy(qTy,
34165                                                                   PTy(uTy,
34166                                                                       qTy)),
34167                                                               TP[Var("mc",
34168                                                                      CTy"MachineCode"),
34169                                                                  LS
34170                                                                   "SaturatingAddSubtract"]),
34171                                                            MU(LU,qTy)),
34172                                                        Close
34173                                                          (AVar uTy,
34174                                                           MU(Call
34175                                                                ("Media",
34176                                                                 CTy"instruction",
34177                                                                 Call
34178                                                                   ("SaturatingAddSubtract",
34179                                                                    CTy"Media",
34180                                                                    TP[Mop(Cast
34181                                                                             (FTy 2),
34182                                                                           LL[bVar"b'22",
34183                                                                              bVar"b'21"]),
34184                                                                       Var("Rd",
34185                                                                           F4),
34186                                                                       Var("Rm",
34187                                                                           F4),
34188                                                                       Var("Rn",
34189                                                                           F4)])),
34190                                                              qTy))),
34191                                                     Call
34192                                                       ("Skip",
34193                                                        ATy(qTy,
34194                                                            PTy(CTy"instruction",
34195                                                                qTy)),LU)))))))))),
34196                        (Bop(And,bVar"b'24",
34197                             Bop(And,Mop(Not,bVar"b'23"),
34198                                 Bop(And,Mop(Not,bVar"b'22"),
34199                                     Bop(And,bVar"b'21",
34200                                         Bop(And,Mop(Not,bVar"b'20"),
34201                                             Bop(And,Mop(Not,bVar"b'7"),
34202                                                 Bop(And,bVar"b'6",
34203                                                     Bop(And,bVar"b'5",
34204                                                         bVar"b'4")))))))),
34205                         MB(Call("ArchVersion",ATy(qTy,PTy(nTy,qTy)),LU),
34206                            Close
34207                              (nVar"v",
34208                               MB(MU(Bop(Ge,nVar"v",LN 5),qTy),
34209                                  Close
34210                                    (bVar"b",
34211                                     ITE(bVar"b",
34212                                         MB(ITE(Mop(Not,
34213                                                    EQ(Var("cond",F4),
34214                                                       LW(14,4))),
34215                                                Call
34216                                                  ("DECODE_UNPREDICTABLE",
34217                                                   ATy(qTy,PTy(uTy,qTy)),
34218                                                   TP[Var("mc",
34219                                                          CTy"MachineCode"),
34220                                                      LS"Breakpoint"]),
34221                                                MU(LU,qTy)),
34222                                            Close
34223                                              (AVar uTy,
34224                                               MB(MW(Close
34225                                                       (qVar"s",
34226                                                        Rupd
34227                                                          ("CurrentCondition",
34228                                                           TP[qVar"s",
34229                                                              Var("cond",
34230                                                                  F4)]))),
34231                                                  Close
34232                                                    (AVar uTy,
34233                                                     MU(Call
34234                                                          ("Hint",
34235                                                           CTy"instruction",
34236                                                           Call
34237                                                             ("Breakpoint",
34238                                                              CTy"Hint",
34239                                                              Mop(Cast F32,
34240                                                                  CC[Mop(Cast
34241                                                                           (FTy 12),
34242                                                                         LL[bVar"b'19",
34243                                                                            bVar"b'18",
34244                                                                            bVar"b'17",
34245                                                                            bVar"b'16",
34246                                                                            bVar"b'15",
34247                                                                            bVar"b'14",
34248                                                                            bVar"b'13",
34249                                                                            bVar"b'12",
34250                                                                            bVar"b'11",
34251                                                                            bVar"b'10",
34252                                                                            bVar"b'9",
34253                                                                            bVar"b'8"]),
34254                                                                     Mop(Cast
34255                                                                           F4,
34256                                                                         LL[bVar"b'3",
34257                                                                            bVar"b'2",
34258                                                                            bVar"b'1",
34259                                                                            bVar"b'0"])]))),
34260                                                        qTy))))),
34261                                         MB(Call
34262                                              ("Take",
34263                                               ATy(qTy,PTy(bTy,qTy)),
34264                                               TP[Var("cond",F4),LF]),
34265                                            Close
34266                                              (bVar"b",
34267                                               MU(ITE(bVar"b",
34268                                                      Call
34269                                                        ("Undefined",
34270                                                         CTy"instruction",
34271                                                         LW(0,32)),
34272                                                      Const
34273                                                        ("NoOperation",
34274                                                         CTy"instruction")),
34275                                                  qTy))))))))),
34276                        (Bop(And,bVar"b'24",
34277                             Bop(And,Mop(Not,bVar"b'23"),
34278                                 Bop(And,bVar"b'22",
34279                                     Bop(And,Mop(Not,bVar"b'21"),
34280                                         Bop(And,Mop(Not,bVar"b'20"),
34281                                             Bop(And,Mop(Not,bVar"b'7"),
34282                                                 Bop(And,bVar"b'6",
34283                                                     Bop(And,bVar"b'5",
34284                                                         bVar"b'4")))))))),
34285                         MB(Call("HaveVirtExt",ATy(qTy,PTy(bTy,qTy)),LU),
34286                            Close
34287                              (bVar"v",
34288                               MB(MB(MU(TP[Var("cond",F4),bVar"v"],qTy),
34289                                     Close
34290                                       (Var("v",PTy(F4,bTy)),
34291                                        Call
34292                                          ("Take",ATy(qTy,PTy(bTy,qTy)),
34293                                           Var("v",PTy(F4,bTy))))),
34294                                  Close
34295                                    (bVar"b",
34296                                     ITE(bVar"b",
34297                                         MB(ITE(Mop(Not,
34298                                                    EQ(Var("cond",F4),
34299                                                       LW(14,4))),
34300                                                Call
34301                                                  ("DECODE_UNPREDICTABLE",
34302                                                   ATy(qTy,PTy(uTy,qTy)),
34303                                                   TP[Var("mc",
34304                                                          CTy"MachineCode"),
34305                                                      LS"HypervisorCall"]),
34306                                                MU(LU,qTy)),
34307                                            Close
34308                                              (AVar uTy,
34309                                               MU(Call
34310                                                    ("System",
34311                                                     CTy"instruction",
34312                                                     Call
34313                                                       ("HypervisorCall",
34314                                                        CTy"System",
34315                                                        CC[Mop(Cast
34316                                                                 (FTy 12),
34317                                                               LL[bVar"b'19",
34318                                                                  bVar"b'18",
34319                                                                  bVar"b'17",
34320                                                                  bVar"b'16",
34321                                                                  bVar"b'15",
34322                                                                  bVar"b'14",
34323                                                                  bVar"b'13",
34324                                                                  bVar"b'12",
34325                                                                  bVar"b'11",
34326                                                                  bVar"b'10",
34327                                                                  bVar"b'9",
34328                                                                  bVar"b'8"]),
34329                                                           Mop(Cast F4,
34330                                                               LL[bVar"b'3",
34331                                                                  bVar"b'2",
34332                                                                  bVar"b'1",
34333                                                                  bVar"b'0"])])),
34334                                                  qTy))),
34335                                         Call
34336                                           ("Skip",
34337                                            ATy(qTy,
34338                                                PTy(CTy"instruction",qTy)),
34339                                            LU))))))),
34340                        (Bop(And,bVar"b'24",
34341                             Bop(And,Mop(Not,bVar"b'23"),
34342                                 Bop(And,bVar"b'22",
34343                                     Bop(And,bVar"b'21",
34344                                         Bop(And,Mop(Not,bVar"b'20"),
34345                                             Bop(And,Mop(Not,bVar"b'7"),
34346                                                 Bop(And,bVar"b'6",
34347                                                     Bop(And,bVar"b'5",
34348                                                         bVar"b'4")))))))),
34349                         MB(Call
34350                              ("HaveSecurityExt",ATy(qTy,PTy(bTy,qTy)),LU),
34351                            Close
34352                              (bVar"v",
34353                               MB(MB(MU(TP[Var("cond",F4),bVar"v"],qTy),
34354                                     Close
34355                                       (Var("v",PTy(F4,bTy)),
34356                                        Call
34357                                          ("Take",ATy(qTy,PTy(bTy,qTy)),
34358                                           Var("v",PTy(F4,bTy))))),
34359                                  Close
34360                                    (bVar"b",
34361                                     ITE(bVar"b",
34362                                         MU(Call
34363                                              ("System",CTy"instruction",
34364                                               Call
34365                                                 ("SecureMonitorCall",
34366                                                  CTy"System",
34367                                                  Mop(Cast F4,
34368                                                      LL[bVar"b'3",
34369                                                         bVar"b'2",
34370                                                         bVar"b'1",
34371                                                         bVar"b'0"]))),qTy),
34372                                         Call
34373                                           ("Skip",
34374                                            ATy(qTy,
34375                                                PTy(CTy"instruction",qTy)),
34376                                            LU))))))),
34377                        (Bop(And,bVar"b'24",
34378                             Bop(And,Mop(Not,bVar"b'23"),
34379                                 Bop(And,Mop(Not,bVar"b'22"),
34380                                     Bop(And,Mop(Not,bVar"b'21"),
34381                                         Bop(And,Mop(Not,bVar"b'20"),
34382                                             Bop(And,bVar"b'7",
34383                                                 Mop(Not,bVar"b'4"))))))),
34384                         Let(Var("Rn",F4),
34385                             Mop(Cast F4,
34386                                 LL[bVar"b'3",bVar"b'2",bVar"b'1",
34387                                    bVar"b'0"]),
34388                             Let(Var("Rm",F4),
34389                                 Mop(Cast F4,
34390                                     LL[bVar"b'11",bVar"b'10",bVar"b'9",
34391                                        bVar"b'8"]),
34392                                 Let(Var("Ra",F4),
34393                                     Mop(Cast F4,
34394                                         LL[bVar"b'15",bVar"b'14",
34395                                            bVar"b'13",bVar"b'12"]),
34396                                     Let(Var("Rd",F4),
34397                                         Mop(Cast F4,
34398                                             LL[bVar"b'19",bVar"b'18",
34399                                                bVar"b'17",bVar"b'16"]),
34400                                         MB(Call
34401                                              ("HaveDSPSupport",
34402                                               ATy(qTy,PTy(bTy,qTy)),LU),
34403                                            Close
34404                                              (bVar"v",
34405                                               MB(MB(MU(TP[Var("cond",F4),
34406                                                           bVar"v"],qTy),
34407                                                     Close
34408                                                       (Var("v",
34409                                                            PTy(F4,bTy)),
34410                                                        Call
34411                                                          ("Take",
34412                                                           ATy(qTy,
34413                                                               PTy(bTy,qTy)),
34414                                                           Var("v",
34415                                                               PTy(F4,bTy))))),
34416                                                  Close
34417                                                    (bVar"b",
34418                                                     ITE(bVar"b",
34419                                                         MB(ITE(Bop(Or,
34420                                                                    Bop(Or,
34421                                                                        Bop(Or,
34422                                                                            EQ(Var("Rd",
34423                                                                                   F4),
34424                                                                               LW(15,
34425                                                                                  4)),
34426                                                                            EQ(Var("Rn",
34427                                                                                   F4),
34428                                                                               LW(15,
34429                                                                                  4))),
34430                                                                        EQ(Var("Rm",
34431                                                                               F4),
34432                                                                           LW(15,
34433                                                                              4))),
34434                                                                    EQ(Var("Ra",
34435                                                                           F4),
34436                                                                       LW(15,
34437                                                                          4))),
34438                                                                Call
34439                                                                  ("DECODE_UNPREDICTABLE",
34440                                                                   ATy(qTy,
34441                                                                       PTy(uTy,
34442                                                                           qTy)),
34443                                                                   TP[Var("mc",
34444                                                                          CTy"MachineCode"),
34445                                                                      LS
34446                                                                       "Signed16Multiply32Accumulate"]),
34447                                                                MU(LU,qTy)),
34448                                                            Close
34449                                                              (AVar uTy,
34450                                                               MU(Call
34451                                                                    ("Multiply",
34452                                                                     CTy"instruction",
34453                                                                     Call
34454                                                                       ("Signed16Multiply32Accumulate",
34455                                                                        CTy"Multiply",
34456                                                                        TP[EQ(Mop(Cast
34457                                                                                    F1,
34458                                                                                  LL[bVar"b'6"]),
34459                                                                              LW(1,
34460                                                                                 1)),
34461                                                                           EQ(Mop(Cast
34462                                                                                    F1,
34463                                                                                  LL[bVar"b'5"]),
34464                                                                              LW(1,
34465                                                                                 1)),
34466                                                                           Var("Rd",
34467                                                                               F4),
34468                                                                           Var("Rn",
34469                                                                               F4),
34470                                                                           Var("Rm",
34471                                                                               F4),
34472                                                                           Var("Ra",
34473                                                                               F4)])),
34474                                                                  qTy))),
34475                                                         Call
34476                                                           ("Skip",
34477                                                            ATy(qTy,
34478                                                                PTy(CTy"instruction",
34479                                                                    qTy)),
34480                                                            LU))))))))))),
34481                        (Bop(And,bVar"b'24",
34482                             Bop(And,Mop(Not,bVar"b'23"),
34483                                 Bop(And,Mop(Not,bVar"b'22"),
34484                                     Bop(And,bVar"b'21",
34485                                         Bop(And,Mop(Not,bVar"b'20"),
34486                                             Bop(And,bVar"b'7",
34487                                                 Bop(And,
34488                                                     Mop(Not,bVar"b'5"),
34489                                                     Mop(Not,bVar"b'4")))))))),
34490                         Let(Var("Rn",F4),
34491                             Mop(Cast F4,
34492                                 LL[bVar"b'3",bVar"b'2",bVar"b'1",
34493                                    bVar"b'0"]),
34494                             Let(Var("Rm",F4),
34495                                 Mop(Cast F4,
34496                                     LL[bVar"b'11",bVar"b'10",bVar"b'9",
34497                                        bVar"b'8"]),
34498                                 Let(Var("Ra",F4),
34499                                     Mop(Cast F4,
34500                                         LL[bVar"b'15",bVar"b'14",
34501                                            bVar"b'13",bVar"b'12"]),
34502                                     Let(Var("Rd",F4),
34503                                         Mop(Cast F4,
34504                                             LL[bVar"b'19",bVar"b'18",
34505                                                bVar"b'17",bVar"b'16"]),
34506                                         MB(Call
34507                                              ("HaveDSPSupport",
34508                                               ATy(qTy,PTy(bTy,qTy)),LU),
34509                                            Close
34510                                              (bVar"v",
34511                                               MB(MB(MU(TP[Var("cond",F4),
34512                                                           bVar"v"],qTy),
34513                                                     Close
34514                                                       (Var("v",
34515                                                            PTy(F4,bTy)),
34516                                                        Call
34517                                                          ("Take",
34518                                                           ATy(qTy,
34519                                                               PTy(bTy,qTy)),
34520                                                           Var("v",
34521                                                               PTy(F4,bTy))))),
34522                                                  Close
34523                                                    (bVar"b",
34524                                                     ITE(bVar"b",
34525                                                         MB(ITE(Bop(Or,
34526                                                                    Bop(Or,
34527                                                                        Bop(Or,
34528                                                                            EQ(Var("Rd",
34529                                                                                   F4),
34530                                                                               LW(15,
34531                                                                                  4)),
34532                                                                            EQ(Var("Rn",
34533                                                                                   F4),
34534                                                                               LW(15,
34535                                                                                  4))),
34536                                                                        EQ(Var("Rm",
34537                                                                               F4),
34538                                                                           LW(15,
34539                                                                              4))),
34540                                                                    EQ(Var("Ra",
34541                                                                           F4),
34542                                                                       LW(15,
34543                                                                          4))),
34544                                                                Call
34545                                                                  ("DECODE_UNPREDICTABLE",
34546                                                                   ATy(qTy,
34547                                                                       PTy(uTy,
34548                                                                           qTy)),
34549                                                                   TP[Var("mc",
34550                                                                          CTy"MachineCode"),
34551                                                                      LS
34552                                                                       "Signed16x32Multiply32Accumulate"]),
34553                                                                MU(LU,qTy)),
34554                                                            Close
34555                                                              (AVar uTy,
34556                                                               MU(Call
34557                                                                    ("Multiply",
34558                                                                     CTy"instruction",
34559                                                                     Call
34560                                                                       ("Signed16x32Multiply32Accumulate",
34561                                                                        CTy"Multiply",
34562                                                                        TP[EQ(Mop(Cast
34563                                                                                    F1,
34564                                                                                  LL[bVar"b'6"]),
34565                                                                              LW(1,
34566                                                                                 1)),
34567                                                                           Var("Rd",
34568                                                                               F4),
34569                                                                           Var("Rn",
34570                                                                               F4),
34571                                                                           Var("Rm",
34572                                                                               F4),
34573                                                                           Var("Ra",
34574                                                                               F4)])),
34575                                                                  qTy))),
34576                                                         Call
34577                                                           ("Skip",
34578                                                            ATy(qTy,
34579                                                                PTy(CTy"instruction",
34580                                                                    qTy)),
34581                                                            LU))))))))))),
34582                        (Bop(And,bVar"b'24",
34583                             Bop(And,Mop(Not,bVar"b'23"),
34584                                 Bop(And,Mop(Not,bVar"b'22"),
34585                                     Bop(And,bVar"b'21",
34586                                         Bop(And,Mop(Not,bVar"b'20"),
34587                                             Bop(And,bVar"b'7",
34588                                                 Bop(And,bVar"b'5",
34589                                                     Mop(Not,bVar"b'4")))))))),
34590                         Let(Var("Rn",F4),
34591                             Mop(Cast F4,
34592                                 LL[bVar"b'3",bVar"b'2",bVar"b'1",
34593                                    bVar"b'0"]),
34594                             Let(Var("Rm",F4),
34595                                 Mop(Cast F4,
34596                                     LL[bVar"b'11",bVar"b'10",bVar"b'9",
34597                                        bVar"b'8"]),
34598                                 Let(Var("Rd",F4),
34599                                     Mop(Cast F4,
34600                                         LL[bVar"b'19",bVar"b'18",
34601                                            bVar"b'17",bVar"b'16"]),
34602                                     MB(Call
34603                                          ("HaveDSPSupport",
34604                                           ATy(qTy,PTy(bTy,qTy)),LU),
34605                                        Close
34606                                          (bVar"v",
34607                                           MB(MB(MU(TP[Var("cond",F4),
34608                                                       bVar"v"],qTy),
34609                                                 Close
34610                                                   (Var("v",PTy(F4,bTy)),
34611                                                    Call
34612                                                      ("Take",
34613                                                       ATy(qTy,
34614                                                           PTy(bTy,qTy)),
34615                                                       Var("v",PTy(F4,bTy))))),
34616                                              Close
34617                                                (bVar"b",
34618                                                 ITE(bVar"b",
34619                                                     MB(ITE(Bop(Or,
34620                                                                Bop(Or,
34621                                                                    EQ(Var("Rd",
34622                                                                           F4),
34623                                                                       LW(15,
34624                                                                          4)),
34625                                                                    EQ(Var("Rn",
34626                                                                           F4),
34627                                                                       LW(15,
34628                                                                          4))),
34629                                                                EQ(Var("Rm",
34630                                                                       F4),
34631                                                                   LW(15,4))),
34632                                                            Call
34633                                                              ("DECODE_UNPREDICTABLE",
34634                                                               ATy(qTy,
34635                                                                   PTy(uTy,
34636                                                                       qTy)),
34637                                                               TP[Var("mc",
34638                                                                      CTy"MachineCode"),
34639                                                                  LS
34640                                                                   "Signed16x32Multiply32Result"]),
34641                                                            MU(LU,qTy)),
34642                                                        Close
34643                                                          (AVar uTy,
34644                                                           MU(Call
34645                                                                ("Multiply",
34646                                                                 CTy"instruction",
34647                                                                 Call
34648                                                                   ("Signed16x32Multiply32Result",
34649                                                                    CTy"Multiply",
34650                                                                    TP[EQ(Mop(Cast
34651                                                                                F1,
34652                                                                              LL[bVar"b'6"]),
34653                                                                          LW(1,
34654                                                                             1)),
34655                                                                       Var("Rd",
34656                                                                           F4),
34657                                                                       Var("Rn",
34658                                                                           F4),
34659                                                                       Var("Rm",
34660                                                                           F4)])),
34661                                                              qTy))),
34662                                                     Call
34663                                                       ("Skip",
34664                                                        ATy(qTy,
34665                                                            PTy(CTy"instruction",
34666                                                                qTy)),LU)))))))))),
34667                        (Bop(And,bVar"b'24",
34668                             Bop(And,Mop(Not,bVar"b'23"),
34669                                 Bop(And,bVar"b'22",
34670                                     Bop(And,Mop(Not,bVar"b'21"),
34671                                         Bop(And,Mop(Not,bVar"b'20"),
34672                                             Bop(And,bVar"b'7",
34673                                                 Mop(Not,bVar"b'4"))))))),
34674                         Let(Var("Rn",F4),
34675                             Mop(Cast F4,
34676                                 LL[bVar"b'3",bVar"b'2",bVar"b'1",
34677                                    bVar"b'0"]),
34678                             Let(Var("Rm",F4),
34679                                 Mop(Cast F4,
34680                                     LL[bVar"b'11",bVar"b'10",bVar"b'9",
34681                                        bVar"b'8"]),
34682                                 Let(Var("RdLo",F4),
34683                                     Mop(Cast F4,
34684                                         LL[bVar"b'15",bVar"b'14",
34685                                            bVar"b'13",bVar"b'12"]),
34686                                     Let(Var("RdHi",F4),
34687                                         Mop(Cast F4,
34688                                             LL[bVar"b'19",bVar"b'18",
34689                                                bVar"b'17",bVar"b'16"]),
34690                                         MB(Call
34691                                              ("HaveDSPSupport",
34692                                               ATy(qTy,PTy(bTy,qTy)),LU),
34693                                            Close
34694                                              (bVar"v",
34695                                               MB(MB(MU(TP[Var("cond",F4),
34696                                                           bVar"v"],qTy),
34697                                                     Close
34698                                                       (Var("v",
34699                                                            PTy(F4,bTy)),
34700                                                        Call
34701                                                          ("Take",
34702                                                           ATy(qTy,
34703                                                               PTy(bTy,qTy)),
34704                                                           Var("v",
34705                                                               PTy(F4,bTy))))),
34706                                                  Close
34707                                                    (bVar"b",
34708                                                     ITE(bVar"b",
34709                                                         MB(ITE(Bop(Or,
34710                                                                    Bop(Or,
34711                                                                        Bop(Or,
34712                                                                            EQ(Var("RdLo",
34713                                                                                   F4),
34714                                                                               LW(15,
34715                                                                                  4)),
34716                                                                            EQ(Var("RdHi",
34717                                                                                   F4),
34718                                                                               LW(15,
34719                                                                                  4))),
34720                                                                        EQ(Var("Rn",
34721                                                                               F4),
34722                                                                           LW(15,
34723                                                                              4))),
34724                                                                    EQ(Var("Rm",
34725                                                                           F4),
34726                                                                       LW(15,
34727                                                                          4))),
34728                                                                Call
34729                                                                  ("DECODE_UNPREDICTABLE",
34730                                                                   ATy(qTy,
34731                                                                       PTy(uTy,
34732                                                                           qTy)),
34733                                                                   TP[Var("mc",
34734                                                                          CTy"MachineCode"),
34735                                                                      LS
34736                                                                       "Signed16Multiply64Accumulate"]),
34737                                                                MU(LU,qTy)),
34738                                                            Close
34739                                                              (AVar uTy,
34740                                                               MU(Call
34741                                                                    ("Multiply",
34742                                                                     CTy"instruction",
34743                                                                     Call
34744                                                                       ("Signed16Multiply64Accumulate",
34745                                                                        CTy"Multiply",
34746                                                                        TP[EQ(Mop(Cast
34747                                                                                    F1,
34748                                                                                  LL[bVar"b'6"]),
34749                                                                              LW(1,
34750                                                                                 1)),
34751                                                                           EQ(Mop(Cast
34752                                                                                    F1,
34753                                                                                  LL[bVar"b'5"]),
34754                                                                              LW(1,
34755                                                                                 1)),
34756                                                                           Var("RdHi",
34757                                                                               F4),
34758                                                                           Var("RdLo",
34759                                                                               F4),
34760                                                                           Var("Rn",
34761                                                                               F4),
34762                                                                           Var("Rm",
34763                                                                               F4)])),
34764                                                                  qTy))),
34765                                                         Call
34766                                                           ("Skip",
34767                                                            ATy(qTy,
34768                                                                PTy(CTy"instruction",
34769                                                                    qTy)),
34770                                                            LU))))))))))),
34771                        (Bop(And,bVar"b'24",
34772                             Bop(And,Mop(Not,bVar"b'23"),
34773                                 Bop(And,bVar"b'22",
34774                                     Bop(And,bVar"b'21",
34775                                         Bop(And,Mop(Not,bVar"b'20"),
34776                                             Bop(And,bVar"b'7",
34777                                                 Mop(Not,bVar"b'4"))))))),
34778                         Let(Var("Rn",F4),
34779                             Mop(Cast F4,
34780                                 LL[bVar"b'3",bVar"b'2",bVar"b'1",
34781                                    bVar"b'0"]),
34782                             Let(Var("Rm",F4),
34783                                 Mop(Cast F4,
34784                                     LL[bVar"b'11",bVar"b'10",bVar"b'9",
34785                                        bVar"b'8"]),
34786                                 Let(Var("Rd",F4),
34787                                     Mop(Cast F4,
34788                                         LL[bVar"b'19",bVar"b'18",
34789                                            bVar"b'17",bVar"b'16"]),
34790                                     MB(Call
34791                                          ("HaveDSPSupport",
34792                                           ATy(qTy,PTy(bTy,qTy)),LU),
34793                                        Close
34794                                          (bVar"v",
34795                                           MB(MB(MU(TP[Var("cond",F4),
34796                                                       bVar"v"],qTy),
34797                                                 Close
34798                                                   (Var("v",PTy(F4,bTy)),
34799                                                    Call
34800                                                      ("Take",
34801                                                       ATy(qTy,
34802                                                           PTy(bTy,qTy)),
34803                                                       Var("v",PTy(F4,bTy))))),
34804                                              Close
34805                                                (bVar"b",
34806                                                 ITE(bVar"b",
34807                                                     MB(ITE(Bop(Or,
34808                                                                Bop(Or,
34809                                                                    EQ(Var("Rd",
34810                                                                           F4),
34811                                                                       LW(15,
34812                                                                          4)),
34813                                                                    EQ(Var("Rn",
34814                                                                           F4),
34815                                                                       LW(15,
34816                                                                          4))),
34817                                                                EQ(Var("Rm",
34818                                                                       F4),
34819                                                                   LW(15,4))),
34820                                                            Call
34821                                                              ("DECODE_UNPREDICTABLE",
34822                                                               ATy(qTy,
34823                                                                   PTy(uTy,
34824                                                                       qTy)),
34825                                                               TP[Var("mc",
34826                                                                      CTy"MachineCode"),
34827                                                                  LS
34828                                                                   "Signed16Multiply32Result"]),
34829                                                            MU(LU,qTy)),
34830                                                        Close
34831                                                          (AVar uTy,
34832                                                           MU(Call
34833                                                                ("Multiply",
34834                                                                 CTy"instruction",
34835                                                                 Call
34836                                                                   ("Signed16Multiply32Result",
34837                                                                    CTy"Multiply",
34838                                                                    TP[EQ(Mop(Cast
34839                                                                                F1,
34840                                                                              LL[bVar"b'6"]),
34841                                                                          LW(1,
34842                                                                             1)),
34843                                                                       EQ(Mop(Cast
34844                                                                                F1,
34845                                                                              LL[bVar"b'5"]),
34846                                                                          LW(1,
34847                                                                             1)),
34848                                                                       Var("Rd",
34849                                                                           F4),
34850                                                                       Var("Rn",
34851                                                                           F4),
34852                                                                       Var("Rm",
34853                                                                           F4)])),
34854                                                              qTy))),
34855                                                     Call
34856                                                       ("Skip",
34857                                                        ATy(qTy,
34858                                                            PTy(CTy"instruction",
34859                                                                qTy)),LU)))))))))),
34860                        (Bop(And,bVar"b'24",
34861                             Bop(And,Mop(Not,bVar"b'23"),
34862                                 Bop(And,bVar"b'22",
34863                                     Bop(And,bVar"b'21",
34864                                         Bop(And,Mop(Not,bVar"b'20"),
34865                                             Bop(And,Mop(Not,bVar"b'19"),
34866                                                 Bop(And,
34867                                                     Mop(Not,bVar"b'18"),
34868                                                     Bop(And,
34869                                                         Mop(Not,
34870                                                             bVar"b'17"),
34871                                                         Bop(And,
34872                                                             Mop(Not,
34873                                                                 bVar"b'16"),
34874                                                             Bop(And,
34875                                                                 Mop(Not,
34876                                                                     bVar"b'15"),
34877                                                                 Bop(And,
34878                                                                     Mop(Not,
34879                                                                         bVar"b'14"),
34880                                                                     Bop(And,
34881                                                                         Mop(Not,
34882                                                                             bVar"b'13"),
34883                                                                         Bop(And,
34884                                                                             Mop(Not,
34885                                                                                 bVar"b'12"),
34886                                                                             Bop(And,
34887                                                                                 Mop(Not,
34888                                                                                     bVar"b'11"),
34889                                                                                 Bop(And,
34890                                                                                     Mop(Not,
34891                                                                                         bVar"b'10"),
34892                                                                                     Bop(And,
34893                                                                                         Mop(Not,
34894                                                                                             bVar"b'9"),
34895                                                                                         Bop(And,
34896                                                                                             Mop(Not,
34897                                                                                                 bVar"b'8"),
34898                                                                                             Bop(And,
34899                                                                                                 Mop(Not,
34900                                                                                                     bVar"b'7"),
34901                                                                                                 Bop(And,
34902                                                                                                     bVar"b'6",
34903                                                                                                     Bop(And,
34904                                                                                                         bVar"b'5",
34905                                                                                                         Bop(And,
34906                                                                                                             Mop(Not,
34907                                                                                                                 bVar"b'4"),
34908                                                                                                             Bop(And,
34909                                                                                                                 bVar"b'3",
34910                                                                                                                 Bop(And,
34911                                                                                                                     bVar"b'2",
34912                                                                                                                     Bop(And,
34913                                                                                                                         bVar"b'1",
34914                                                                                                                         Mop(Not,
34915                                                                                                                             bVar"b'0"))))))))))))))))))))))))),
34916                         MB(Call("HaveVirtExt",ATy(qTy,PTy(bTy,qTy)),LU),
34917                            Close
34918                              (bVar"v",
34919                               MB(MB(MU(TP[Var("cond",F4),bVar"v"],qTy),
34920                                     Close
34921                                       (Var("v",PTy(F4,bTy)),
34922                                        Call
34923                                          ("Take",ATy(qTy,PTy(bTy,qTy)),
34924                                           Var("v",PTy(F4,bTy))))),
34925                                  Close
34926                                    (bVar"b",
34927                                     ITE(bVar"b",
34928                                         MU(Call
34929                                              ("System",CTy"instruction",
34930                                               Const
34931                                                 ("ExceptionReturn",
34932                                                  CTy"System")),qTy),
34933                                         Call
34934                                           ("Skip",
34935                                            ATy(qTy,
34936                                                PTy(CTy"instruction",qTy)),
34937                                            LU))))))),
34938                        (Bop(And,bVar"b'24",
34939                             Bop(And,Mop(Not,bVar"b'23"),
34940                                 Bop(And,Mop(Not,bVar"b'20"),
34941                                     Mop(Not,bVar"b'7")))),
34942                         MU(Call("Undefined",CTy"instruction",LW(0,32)),
34943                            qTy)),
34944                        (Mop(Not,bVar"b'4"),
34945                         Let(Var("Rm",F4),
34946                             Mop(Cast F4,
34947                                 LL[bVar"b'3",bVar"b'2",bVar"b'1",
34948                                    bVar"b'0"]),
34949                             Let(Var("Rd",F4),
34950                                 Mop(Cast F4,
34951                                     LL[bVar"b'15",bVar"b'14",bVar"b'13",
34952                                        bVar"b'12"]),
34953                                 Let(Var("Rn",F4),
34954                                     Mop(Cast F4,
34955                                         LL[bVar"b'19",bVar"b'18",
34956                                            bVar"b'17",bVar"b'16"]),
34957                                     Let(Var("opc",F4),
34958                                         Mop(Cast F4,
34959                                             LL[bVar"b'24",bVar"b'23",
34960                                                bVar"b'22",bVar"b'21"]),
34961                                         MB(Call
34962                                              ("Take",
34963                                               ATy(qTy,PTy(bTy,qTy)),
34964                                               TP[Var("cond",F4),LT]),
34965                                            Close
34966                                              (bVar"b",
34967                                               ITE(bVar"b",
34968                                                   MU(Let(bVar"setflags",
34969                                                          EQ(Mop(Cast F1,
34970                                                                 LL[bVar"b'20"]),
34971                                                             LW(1,1)),
34972                                                          Let(TP[Var("shift_t",
34973                                                                     CTy"SRType"),
34974                                                                 nVar"shift_n"],
34975                                                              Call
34976                                                                ("DecodeImmShift",
34977                                                                 PTy(CTy"SRType",
34978                                                                     nTy),
34979                                                                 TP[Mop(Cast
34980                                                                          (FTy 2),
34981                                                                        LL[bVar"b'6",
34982                                                                           bVar"b'5"]),
34983                                                                    Mop(Cast
34984                                                                          (FTy 5),
34985                                                                        LL[bVar"b'11",
34986                                                                           bVar"b'10",
34987                                                                           bVar"b'9",
34988                                                                           bVar"b'8",
34989                                                                           bVar"b'7"])]),
34990                                                              ITB([(EQ(EX(Var("opc",
34991                                                                              F4),
34992                                                                          LN
34993                                                                           3,
34994                                                                          LN
34995                                                                           2,
34996                                                                          FTy 2),
34997                                                                       LW(2,
34998                                                                          2)),
34999                                                                    Call
35000                                                                      ("Data",
35001                                                                       CTy"instruction",
35002                                                                       Call
35003                                                                         ("TestCompareRegister",
35004                                                                          CTy"Data",
35005                                                                          TP[EX(Var("opc",
35006                                                                                    F4),
35007                                                                                LN
35008                                                                                 1,
35009                                                                                LN
35010                                                                                 0,
35011                                                                                FTy 2),
35012                                                                             Var("Rn",
35013                                                                                 F4),
35014                                                                             Var("Rm",
35015                                                                                 F4),
35016                                                                             Var("shift_t",
35017                                                                                 CTy"SRType"),
35018                                                                             nVar"shift_n"]))),
35019                                                                   (Bop(In,
35020                                                                        Var("opc",
35021                                                                            F4),
35022                                                                        SL[LW(13,
35023                                                                              4),
35024                                                                           LW(15,
35025                                                                              4)]),
35026                                                                    Call
35027                                                                      ("Data",
35028                                                                       CTy"instruction",
35029                                                                       Call
35030                                                                         ("ShiftImmediate",
35031                                                                          CTy"Data",
35032                                                                          TP[Bop(Bit,
35033                                                                                 Var("opc",
35034                                                                                     F4),
35035                                                                                 LN
35036                                                                                  1),
35037                                                                             bVar"setflags",
35038                                                                             Var("Rd",
35039                                                                                 F4),
35040                                                                             Var("Rm",
35041                                                                                 F4),
35042                                                                             Var("shift_t",
35043                                                                                 CTy"SRType"),
35044                                                                             nVar"shift_n"])))],
35045                                                                  Call
35046                                                                    ("Data",
35047                                                                     CTy"instruction",
35048                                                                     Call
35049                                                                       ("Register",
35050                                                                        CTy"Data",
35051                                                                        TP[Var("opc",
35052                                                                               F4),
35053                                                                           bVar"setflags",
35054                                                                           Var("Rd",
35055                                                                               F4),
35056                                                                           Var("Rn",
35057                                                                               F4),
35058                                                                           Var("Rm",
35059                                                                               F4),
35060                                                                           Var("shift_t",
35061                                                                               CTy"SRType"),
35062                                                                           nVar"shift_n"]))))),
35063                                                      qTy),
35064                                                   Call
35065                                                     ("Skip",
35066                                                      ATy(qTy,
35067                                                          PTy(CTy"instruction",
35068                                                              qTy)),LU))))))))),
35069                        (Bop(And,Mop(Not,bVar"b'7"),bVar"b'4"),
35070                         Let(Var("Rm",F4),
35071                             Mop(Cast F4,
35072                                 LL[bVar"b'3",bVar"b'2",bVar"b'1",
35073                                    bVar"b'0"]),
35074                             Let(Var("Rs",F4),
35075                                 Mop(Cast F4,
35076                                     LL[bVar"b'11",bVar"b'10",bVar"b'9",
35077                                        bVar"b'8"]),
35078                                 Let(Var("Rd",F4),
35079                                     Mop(Cast F4,
35080                                         LL[bVar"b'15",bVar"b'14",
35081                                            bVar"b'13",bVar"b'12"]),
35082                                     Let(Var("Rn",F4),
35083                                         Mop(Cast F4,
35084                                             LL[bVar"b'19",bVar"b'18",
35085                                                bVar"b'17",bVar"b'16"]),
35086                                         Let(Var("opc",F4),
35087                                             Mop(Cast F4,
35088                                                 LL[bVar"b'24",bVar"b'23",
35089                                                    bVar"b'22",bVar"b'21"]),
35090                                             MB(Call
35091                                                  ("Take",
35092                                                   ATy(qTy,PTy(bTy,qTy)),
35093                                                   TP[Var("cond",F4),LT]),
35094                                                Close
35095                                                  (bVar"b",
35096                                                   ITE(bVar"b",
35097                                                       MB(ITE(Bop(Or,
35098                                                                  Bop(Or,
35099                                                                      Bop(Or,
35100                                                                          Bop(And,
35101                                                                              EQ(Var("Rd",
35102                                                                                     F4),
35103                                                                                 LW(15,
35104                                                                                    4)),
35105                                                                              Mop(Not,
35106                                                                                  EQ(EX(Var("opc",
35107                                                                                            F4),
35108                                                                                        LN
35109                                                                                         3,
35110                                                                                        LN
35111                                                                                         2,
35112                                                                                        FTy 2),
35113                                                                                     LW(2,
35114                                                                                        2)))),
35115                                                                          EQ(Var("Rn",
35116                                                                                 F4),
35117                                                                             LW(15,
35118                                                                                4))),
35119                                                                      EQ(Var("Rm",
35120                                                                             F4),
35121                                                                         LW(15,
35122                                                                            4))),
35123                                                                  EQ(Var("Rs",
35124                                                                         F4),
35125                                                                     LW(15,
35126                                                                        4))),
35127                                                              Call
35128                                                                ("DECODE_UNPREDICTABLE",
35129                                                                 ATy(qTy,
35130                                                                     PTy(uTy,
35131                                                                         qTy)),
35132                                                                 TP[Var("mc",
35133                                                                        CTy"MachineCode"),
35134                                                                    LS
35135                                                                     "RegisterShiftedRegister"]),
35136                                                              MU(LU,qTy)),
35137                                                          Close
35138                                                            (AVar uTy,
35139                                                             MU(Let(bVar"setflags",
35140                                                                    EQ(Mop(Cast
35141                                                                             F1,
35142                                                                           LL[bVar"b'20"]),
35143                                                                       LW(1,
35144                                                                          1)),
35145                                                                    Let(Var("shift_t",
35146                                                                            CTy"SRType"),
35147                                                                        Call
35148                                                                          ("DecodeRegShift",
35149                                                                           CTy"SRType",
35150                                                                           Mop(Cast
35151                                                                                 (FTy 2),
35152                                                                               LL[bVar"b'6",
35153                                                                                  bVar"b'5"])),
35154                                                                        ITE(Bop(Or,
35155                                                                                EQ(Var("opc",
35156                                                                                       F4),
35157                                                                                   LW(13,
35158                                                                                      4)),
35159                                                                                EQ(Var("opc",
35160                                                                                       F4),
35161                                                                                   LW(15,
35162                                                                                      4))),
35163                                                                            Call
35164                                                                              ("Data",
35165                                                                               CTy"instruction",
35166                                                                               Call
35167                                                                                 ("ShiftRegister",
35168                                                                                  CTy"Data",
35169                                                                                  TP[Bop(Bit,
35170                                                                                         Var("opc",
35171                                                                                             F4),
35172                                                                                         LN
35173                                                                                          1),
35174                                                                                     bVar"setflags",
35175                                                                                     Var("Rd",
35176                                                                                         F4),
35177                                                                                     Var("Rm",
35178                                                                                         F4),
35179                                                                                     Var("shift_t",
35180                                                                                         CTy"SRType"),
35181                                                                                     Var("Rs",
35182                                                                                         F4)])),
35183                                                                            Call
35184                                                                              ("Data",
35185                                                                               CTy"instruction",
35186                                                                               Call
35187                                                                                 ("RegisterShiftedRegister",
35188                                                                                  CTy"Data",
35189                                                                                  TP[Var("opc",
35190                                                                                         F4),
35191                                                                                     bVar"setflags",
35192                                                                                     Var("Rd",
35193                                                                                         F4),
35194                                                                                     Var("Rn",
35195                                                                                         F4),
35196                                                                                     Var("Rm",
35197                                                                                         F4),
35198                                                                                     Var("shift_t",
35199                                                                                         CTy"SRType"),
35200                                                                                     Var("Rs",
35201                                                                                         F4)]))))),
35202                                                                qTy))),
35203                                                       Call
35204                                                         ("Skip",
35205                                                          ATy(qTy,
35206                                                              PTy(CTy"instruction",
35207                                                                  qTy)),LU)))))))))),
35208                        (Bop(And,Mop(Not,bVar"b'24"),
35209                             Bop(And,Mop(Not,bVar"b'23"),
35210                                 Bop(And,Mop(Not,bVar"b'22"),
35211                                     Bop(And,bVar"b'7",
35212                                         Bop(And,Mop(Not,bVar"b'6"),
35213                                             Bop(And,Mop(Not,bVar"b'5"),
35214                                                 bVar"b'4")))))),
35215                         Let(Var("Rn",F4),
35216                             Mop(Cast F4,
35217                                 LL[bVar"b'3",bVar"b'2",bVar"b'1",
35218                                    bVar"b'0"]),
35219                             Let(Var("Rm",F4),
35220                                 Mop(Cast F4,
35221                                     LL[bVar"b'11",bVar"b'10",bVar"b'9",
35222                                        bVar"b'8"]),
35223                                 Let(Var("Ra",F4),
35224                                     Mop(Cast F4,
35225                                         LL[bVar"b'15",bVar"b'14",
35226                                            bVar"b'13",bVar"b'12"]),
35227                                     Let(Var("Rd",F4),
35228                                         Mop(Cast F4,
35229                                             LL[bVar"b'19",bVar"b'18",
35230                                                bVar"b'17",bVar"b'16"]),
35231                                         Let(Var("A",F1),
35232                                             Mop(Cast F1,LL[bVar"b'21"]),
35233                                             MB(Call
35234                                                  ("Take",
35235                                                   ATy(qTy,PTy(bTy,qTy)),
35236                                                   TP[Var("cond",F4),LT]),
35237                                                Close
35238                                                  (bVar"b",
35239                                                   ITE(bVar"b",
35240                                                       MB(Call
35241                                                            ("ArchVersion",
35242                                                             ATy(qTy,
35243                                                                 PTy(nTy,
35244                                                                     qTy)),
35245                                                             LU),
35246                                                          Close
35247                                                            (nVar"v",
35248                                                             MB(MB(MB(MB(MU(Bop(Lt,
35249                                                                                nVar"v",
35250                                                                                LN
35251                                                                                 6),
35252                                                                            qTy),
35253                                                                         Close
35254                                                                           (bVar"b",
35255                                                                            MU(Bop(And,
35256                                                                                   bVar"b",
35257                                                                                   EQ(Var("Rd",
35258                                                                                          F4),
35259                                                                                      Var("Rn",
35260                                                                                          F4))),
35261                                                                               qTy))),
35262                                                                      Close
35263                                                                        (bVar"v",
35264                                                                         MU(Bop(Or,
35265                                                                                Bop(Or,
35266                                                                                    Bop(Or,
35267                                                                                        Bop(Or,
35268                                                                                            EQ(Var("Rd",
35269                                                                                                   F4),
35270                                                                                               LW(15,
35271                                                                                                  4)),
35272                                                                                            EQ(Var("Rn",
35273                                                                                                   F4),
35274                                                                                               LW(15,
35275                                                                                                  4))),
35276                                                                                        EQ(Var("Rm",
35277                                                                                               F4),
35278                                                                                           LW(15,
35279                                                                                              4))),
35280                                                                                    Bop(And,
35281                                                                                        EQ(Var("A",
35282                                                                                               F1),
35283                                                                                           LW(1,
35284                                                                                              1)),
35285                                                                                        EQ(Var("Ra",
35286                                                                                               F4),
35287                                                                                           LW(15,
35288                                                                                              4)))),
35289                                                                                bVar"v"),
35290                                                                            qTy))),
35291                                                                   Close
35292                                                                     (bVar"b",
35293                                                                      ITE(bVar"b",
35294                                                                          Call
35295                                                                            ("DECODE_UNPREDICTABLE",
35296                                                                             ATy(qTy,
35297                                                                                 PTy(uTy,
35298                                                                                     qTy)),
35299                                                                             TP[Var("mc",
35300                                                                                    CTy"MachineCode"),
35301                                                                                LS
35302                                                                                 "Multiply"]),
35303                                                                          MU(LU,
35304                                                                             qTy)))),
35305                                                                Close
35306                                                                  (AVar
35307                                                                     uTy,
35308                                                                   MU(Let(bVar"setflags",
35309                                                                          EQ(Mop(Cast
35310                                                                                   F1,
35311                                                                                 LL[bVar"b'20"]),
35312                                                                             LW(1,
35313                                                                                1)),
35314                                                                          ITE(EQ(Var("A",
35315                                                                                     F1),
35316                                                                                 LW(1,
35317                                                                                    1)),
35318                                                                              Call
35319                                                                                ("Multiply",
35320                                                                                 CTy"instruction",
35321                                                                                 Call
35322                                                                                   ("MultiplyAccumulate",
35323                                                                                    CTy"Multiply",
35324                                                                                    TP[bVar"setflags",
35325                                                                                       Var("Rd",
35326                                                                                           F4),
35327                                                                                       Var("Rn",
35328                                                                                           F4),
35329                                                                                       Var("Rm",
35330                                                                                           F4),
35331                                                                                       Var("Ra",
35332                                                                                           F4)])),
35333                                                                              Call
35334                                                                                ("Multiply",
35335                                                                                 CTy"instruction",
35336                                                                                 Call
35337                                                                                   ("Multiply32",
35338                                                                                    CTy"Multiply",
35339                                                                                    TP[bVar"setflags",
35340                                                                                       Var("Rd",
35341                                                                                           F4),
35342                                                                                       Var("Rn",
35343                                                                                           F4),
35344                                                                                       Var("Rm",
35345                                                                                           F4)])))),
35346                                                                      qTy))))),
35347                                                       Call
35348                                                         ("Skip",
35349                                                          ATy(qTy,
35350                                                              PTy(CTy"instruction",
35351                                                                  qTy)),LU)))))))))),
35352                        (Bop(And,Mop(Not,bVar"b'24"),
35353                             Bop(And,Mop(Not,bVar"b'23"),
35354                                 Bop(And,bVar"b'22",
35355                                     Bop(And,Mop(Not,bVar"b'21"),
35356                                         Bop(And,Mop(Not,bVar"b'20"),
35357                                             Bop(And,bVar"b'7",
35358                                                 Bop(And,
35359                                                     Mop(Not,bVar"b'6"),
35360                                                     Bop(And,
35361                                                         Mop(Not,bVar"b'5"),
35362                                                         bVar"b'4")))))))),
35363                         Let(Var("Rn",F4),
35364                             Mop(Cast F4,
35365                                 LL[bVar"b'3",bVar"b'2",bVar"b'1",
35366                                    bVar"b'0"]),
35367                             Let(Var("Rm",F4),
35368                                 Mop(Cast F4,
35369                                     LL[bVar"b'11",bVar"b'10",bVar"b'9",
35370                                        bVar"b'8"]),
35371                                 Let(Var("RdLo",F4),
35372                                     Mop(Cast F4,
35373                                         LL[bVar"b'15",bVar"b'14",
35374                                            bVar"b'13",bVar"b'12"]),
35375                                     Let(Var("RdHi",F4),
35376                                         Mop(Cast F4,
35377                                             LL[bVar"b'19",bVar"b'18",
35378                                                bVar"b'17",bVar"b'16"]),
35379                                         MB(Call
35380                                              ("ArchVersion",
35381                                               ATy(qTy,PTy(nTy,qTy)),LU),
35382                                            Close
35383                                              (nVar"v",
35384                                               MB(MB(MB(MU(Bop(Ge,nVar"v",
35385                                                               LN 6),qTy),
35386                                                        Close
35387                                                          (bVar"v",
35388                                                           MU(TP[Var("cond",
35389                                                                     F4),
35390                                                                 bVar"v"],
35391                                                              qTy))),
35392                                                     Close
35393                                                       (Var("v",
35394                                                            PTy(F4,bTy)),
35395                                                        Call
35396                                                          ("Take",
35397                                                           ATy(qTy,
35398                                                               PTy(bTy,qTy)),
35399                                                           Var("v",
35400                                                               PTy(F4,bTy))))),
35401                                                  Close
35402                                                    (bVar"b",
35403                                                     ITE(bVar"b",
35404                                                         MB(ITE(Bop(Or,
35405                                                                    Bop(Or,
35406                                                                        Bop(Or,
35407                                                                            Bop(Or,
35408                                                                                EQ(Var("RdHi",
35409                                                                                       F4),
35410                                                                                   LW(15,
35411                                                                                      4)),
35412                                                                                EQ(Var("RdLo",
35413                                                                                       F4),
35414                                                                                   LW(15,
35415                                                                                      4))),
35416                                                                            EQ(Var("Rn",
35417                                                                                   F4),
35418                                                                               LW(15,
35419                                                                                  4))),
35420                                                                        EQ(Var("Rm",
35421                                                                               F4),
35422                                                                           LW(15,
35423                                                                              4))),
35424                                                                    EQ(Var("RdHi",
35425                                                                           F4),
35426                                                                       Var("RdLo",
35427                                                                           F4))),
35428                                                                Call
35429                                                                  ("DECODE_UNPREDICTABLE",
35430                                                                   ATy(qTy,
35431                                                                       PTy(uTy,
35432                                                                           qTy)),
35433                                                                   TP[Var("mc",
35434                                                                          CTy"MachineCode"),
35435                                                                      LS
35436                                                                       "MultiplyAccumulateAccumulate"]),
35437                                                                MU(LU,qTy)),
35438                                                            Close
35439                                                              (AVar uTy,
35440                                                               MU(Call
35441                                                                    ("Multiply",
35442                                                                     CTy"instruction",
35443                                                                     Call
35444                                                                       ("MultiplyAccumulateAccumulate",
35445                                                                        CTy"Multiply",
35446                                                                        TP[Var("RdHi",
35447                                                                               F4),
35448                                                                           Var("RdLo",
35449                                                                               F4),
35450                                                                           Var("Rn",
35451                                                                               F4),
35452                                                                           Var("Rm",
35453                                                                               F4)])),
35454                                                                  qTy))),
35455                                                         Call
35456                                                           ("Skip",
35457                                                            ATy(qTy,
35458                                                                PTy(CTy"instruction",
35459                                                                    qTy)),
35460                                                            LU))))))))))),
35461                        (Bop(And,Mop(Not,bVar"b'24"),
35462                             Bop(And,Mop(Not,bVar"b'23"),
35463                                 Bop(And,bVar"b'22",
35464                                     Bop(And,bVar"b'21",
35465                                         Bop(And,Mop(Not,bVar"b'20"),
35466                                             Bop(And,bVar"b'7",
35467                                                 Bop(And,
35468                                                     Mop(Not,bVar"b'6"),
35469                                                     Bop(And,
35470                                                         Mop(Not,bVar"b'5"),
35471                                                         bVar"b'4")))))))),
35472                         Let(Var("Rn",F4),
35473                             Mop(Cast F4,
35474                                 LL[bVar"b'3",bVar"b'2",bVar"b'1",
35475                                    bVar"b'0"]),
35476                             Let(Var("Rm",F4),
35477                                 Mop(Cast F4,
35478                                     LL[bVar"b'11",bVar"b'10",bVar"b'9",
35479                                        bVar"b'8"]),
35480                                 Let(Var("Ra",F4),
35481                                     Mop(Cast F4,
35482                                         LL[bVar"b'15",bVar"b'14",
35483                                            bVar"b'13",bVar"b'12"]),
35484                                     Let(Var("Rd",F4),
35485                                         Mop(Cast F4,
35486                                             LL[bVar"b'19",bVar"b'18",
35487                                                bVar"b'17",bVar"b'16"]),
35488                                         MB(Call
35489                                              ("HaveThumb2",
35490                                               ATy(qTy,PTy(bTy,qTy)),LU),
35491                                            Close
35492                                              (bVar"v",
35493                                               MB(MB(MU(TP[Var("cond",F4),
35494                                                           bVar"v"],qTy),
35495                                                     Close
35496                                                       (Var("v",
35497                                                            PTy(F4,bTy)),
35498                                                        Call
35499                                                          ("Take",
35500                                                           ATy(qTy,
35501                                                               PTy(bTy,qTy)),
35502                                                           Var("v",
35503                                                               PTy(F4,bTy))))),
35504                                                  Close
35505                                                    (bVar"b",
35506                                                     ITE(bVar"b",
35507                                                         MB(ITE(Bop(Or,
35508                                                                    Bop(Or,
35509                                                                        Bop(Or,
35510                                                                            EQ(Var("Rd",
35511                                                                                   F4),
35512                                                                               LW(15,
35513                                                                                  4)),
35514                                                                            EQ(Var("Rn",
35515                                                                                   F4),
35516                                                                               LW(15,
35517                                                                                  4))),
35518                                                                        EQ(Var("Rm",
35519                                                                               F4),
35520                                                                           LW(15,
35521                                                                              4))),
35522                                                                    EQ(Var("Ra",
35523                                                                           F4),
35524                                                                       LW(15,
35525                                                                          4))),
35526                                                                Call
35527                                                                  ("DECODE_UNPREDICTABLE",
35528                                                                   ATy(qTy,
35529                                                                       PTy(uTy,
35530                                                                           qTy)),
35531                                                                   TP[Var("mc",
35532                                                                          CTy"MachineCode"),
35533                                                                      LS
35534                                                                       "MultiplySubtract"]),
35535                                                                MU(LU,qTy)),
35536                                                            Close
35537                                                              (AVar uTy,
35538                                                               MU(Call
35539                                                                    ("Multiply",
35540                                                                     CTy"instruction",
35541                                                                     Call
35542                                                                       ("MultiplySubtract",
35543                                                                        CTy"Multiply",
35544                                                                        TP[Var("Rd",
35545                                                                               F4),
35546                                                                           Var("Rn",
35547                                                                               F4),
35548                                                                           Var("Rm",
35549                                                                               F4),
35550                                                                           Var("Ra",
35551                                                                               F4)])),
35552                                                                  qTy))),
35553                                                         Call
35554                                                           ("Skip",
35555                                                            ATy(qTy,
35556                                                                PTy(CTy"instruction",
35557                                                                    qTy)),
35558                                                            LU))))))))))),
35559                        (Bop(And,Mop(Not,bVar"b'24"),
35560                             Bop(And,bVar"b'23",
35561                                 Bop(And,bVar"b'7",
35562                                     Bop(And,Mop(Not,bVar"b'6"),
35563                                         Bop(And,Mop(Not,bVar"b'5"),
35564                                             bVar"b'4"))))),
35565                         Let(Var("Rn",F4),
35566                             Mop(Cast F4,
35567                                 LL[bVar"b'3",bVar"b'2",bVar"b'1",
35568                                    bVar"b'0"]),
35569                             Let(Var("Rm",F4),
35570                                 Mop(Cast F4,
35571                                     LL[bVar"b'11",bVar"b'10",bVar"b'9",
35572                                        bVar"b'8"]),
35573                                 Let(Var("RdLo",F4),
35574                                     Mop(Cast F4,
35575                                         LL[bVar"b'15",bVar"b'14",
35576                                            bVar"b'13",bVar"b'12"]),
35577                                     Let(Var("RdHi",F4),
35578                                         Mop(Cast F4,
35579                                             LL[bVar"b'19",bVar"b'18",
35580                                                bVar"b'17",bVar"b'16"]),
35581                                         MB(Call
35582                                              ("Take",
35583                                               ATy(qTy,PTy(bTy,qTy)),
35584                                               TP[Var("cond",F4),LT]),
35585                                            Close
35586                                              (bVar"b",
35587                                               ITE(bVar"b",
35588                                                   MB(Call
35589                                                        ("ArchVersion",
35590                                                         ATy(qTy,
35591                                                             PTy(nTy,qTy)),
35592                                                         LU),
35593                                                      Close
35594                                                        (nVar"v",
35595                                                         MB(MB(MB(MB(MU(Bop(Lt,
35596                                                                            nVar"v",
35597                                                                            LN
35598                                                                             6),
35599                                                                        qTy),
35600                                                                     Close
35601                                                                       (bVar"b",
35602                                                                        MU(Bop(And,
35603                                                                               bVar"b",
35604                                                                               Bop(Or,
35605                                                                                   EQ(Var("RdHi",
35606                                                                                          F4),
35607                                                                                      Var("Rn",
35608                                                                                          F4)),
35609                                                                                   EQ(Var("RdLo",
35610                                                                                          F4),
35611                                                                                      Var("Rn",
35612                                                                                          F4)))),
35613                                                                           qTy))),
35614                                                                  Close
35615                                                                    (bVar"v",
35616                                                                     MU(Bop(Or,
35617                                                                            Bop(Or,
35618                                                                                Bop(Or,
35619                                                                                    Bop(Or,
35620                                                                                        Bop(Or,
35621                                                                                            EQ(Var("RdLo",
35622                                                                                                   F4),
35623                                                                                               LW(15,
35624                                                                                                  4)),
35625                                                                                            EQ(Var("RdHi",
35626                                                                                                   F4),
35627                                                                                               LW(15,
35628                                                                                                  4))),
35629                                                                                        EQ(Var("Rn",
35630                                                                                               F4),
35631                                                                                           LW(15,
35632                                                                                              4))),
35633                                                                                    EQ(Var("Rm",
35634                                                                                           F4),
35635                                                                                       LW(15,
35636                                                                                          4))),
35637                                                                                EQ(Var("RdHi",
35638                                                                                       F4),
35639                                                                                   Var("RdLo",
35640                                                                                       F4))),
35641                                                                            bVar"v"),
35642                                                                        qTy))),
35643                                                               Close
35644                                                                 (bVar"b",
35645                                                                  ITE(bVar"b",
35646                                                                      Call
35647                                                                        ("DECODE_UNPREDICTABLE",
35648                                                                         ATy(qTy,
35649                                                                             PTy(uTy,
35650                                                                                 qTy)),
35651                                                                         TP[Var("mc",
35652                                                                                CTy"MachineCode"),
35653                                                                            LS
35654                                                                             "MultiplyLong"]),
35655                                                                      MU(LU,
35656                                                                         qTy)))),
35657                                                            Close
35658                                                              (AVar uTy,
35659                                                               MU(Call
35660                                                                    ("Multiply",
35661                                                                     CTy"instruction",
35662                                                                     Call
35663                                                                       ("MultiplyLong",
35664                                                                        CTy"Multiply",
35665                                                                        TP[EQ(Mop(Cast
35666                                                                                    F1,
35667                                                                                  LL[bVar"b'21"]),
35668                                                                              LW(1,
35669                                                                                 1)),
35670                                                                           EQ(Mop(Cast
35671                                                                                    F1,
35672                                                                                  LL[bVar"b'22"]),
35673                                                                              LW(1,
35674                                                                                 1)),
35675                                                                           EQ(Mop(Cast
35676                                                                                    F1,
35677                                                                                  LL[bVar"b'20"]),
35678                                                                              LW(1,
35679                                                                                 1)),
35680                                                                           Var("RdHi",
35681                                                                               F4),
35682                                                                           Var("RdLo",
35683                                                                               F4),
35684                                                                           Var("Rn",
35685                                                                               F4),
35686                                                                           Var("Rm",
35687                                                                               F4)])),
35688                                                                  qTy))))),
35689                                                   Call
35690                                                     ("Skip",
35691                                                      ATy(qTy,
35692                                                          PTy(CTy"instruction",
35693                                                              qTy)),LU))))))))),
35694                        (Bop(And,bVar"b'24",
35695                             Bop(And,Mop(Not,bVar"b'23"),
35696                                 Bop(And,Mop(Not,bVar"b'21"),
35697                                     Bop(And,Mop(Not,bVar"b'20"),
35698                                         Bop(And,bVar"b'7",
35699                                             Bop(And,Mop(Not,bVar"b'6"),
35700                                                 Bop(And,
35701                                                     Mop(Not,bVar"b'5"),
35702                                                     bVar"b'4"))))))),
35703                         Let(Var("Rt2",F4),
35704                             Mop(Cast F4,
35705                                 LL[bVar"b'3",bVar"b'2",bVar"b'1",
35706                                    bVar"b'0"]),
35707                             Let(Var("Rt",F4),
35708                                 Mop(Cast F4,
35709                                     LL[bVar"b'15",bVar"b'14",bVar"b'13",
35710                                        bVar"b'12"]),
35711                                 Let(Var("Rn",F4),
35712                                     Mop(Cast F4,
35713                                         LL[bVar"b'19",bVar"b'18",
35714                                            bVar"b'17",bVar"b'16"]),
35715                                     MB(Call
35716                                          ("Take",ATy(qTy,PTy(bTy,qTy)),
35717                                           TP[Var("cond",F4),LT]),
35718                                        Close
35719                                          (bVar"b",
35720                                           ITE(bVar"b",
35721                                               MB(ITE(Bop(Or,
35722                                                          Bop(Or,
35723                                                              Bop(Or,
35724                                                                  Bop(Or,
35725                                                                      EQ(Var("Rt",
35726                                                                             F4),
35727                                                                         LW(15,
35728                                                                            4)),
35729                                                                      EQ(Var("Rt2",
35730                                                                             F4),
35731                                                                         LW(15,
35732                                                                            4))),
35733                                                                  EQ(Var("Rn",
35734                                                                         F4),
35735                                                                     LW(15,
35736                                                                        4))),
35737                                                              EQ(Var("Rn",
35738                                                                     F4),
35739                                                                 Var("Rt",
35740                                                                     F4))),
35741                                                          EQ(Var("Rn",F4),
35742                                                             Var("Rt2",F4))),
35743                                                      Call
35744                                                        ("DECODE_UNPREDICTABLE",
35745                                                         ATy(qTy,
35746                                                             PTy(uTy,qTy)),
35747                                                         TP[Var("mc",
35748                                                                CTy"MachineCode"),
35749                                                            LS"Swap"]),
35750                                                      MU(LU,qTy)),
35751                                                  Close
35752                                                    (AVar uTy,
35753                                                     MU(Call
35754                                                          ("Swap",
35755                                                           CTy"instruction",
35756                                                           TP[EQ(Mop(Cast
35757                                                                       F1,
35758                                                                     LL[bVar"b'22"]),
35759                                                                 LW(1,1)),
35760                                                              Var("Rt",F4),
35761                                                              Var("Rt2",F4),
35762                                                              Var("Rn",F4)]),
35763                                                        qTy))),
35764                                               Call
35765                                                 ("Skip",
35766                                                  ATy(qTy,
35767                                                      PTy(CTy"instruction",
35768                                                          qTy)),LU)))))))),
35769                        (Bop(And,bVar"b'24",
35770                             Bop(And,bVar"b'23",
35771                                 Bop(And,Mop(Not,bVar"b'22"),
35772                                     Bop(And,Mop(Not,bVar"b'21"),
35773                                         Bop(And,Mop(Not,bVar"b'20"),
35774                                             Bop(And,bVar"b'7",
35775                                                 Bop(And,
35776                                                     Mop(Not,bVar"b'6"),
35777                                                     Bop(And,
35778                                                         Mop(Not,bVar"b'5"),
35779                                                         bVar"b'4")))))))),
35780                         Let(Var("Rt",F4),
35781                             Mop(Cast F4,
35782                                 LL[bVar"b'3",bVar"b'2",bVar"b'1",
35783                                    bVar"b'0"]),
35784                             Let(Var("Rd",F4),
35785                                 Mop(Cast F4,
35786                                     LL[bVar"b'15",bVar"b'14",bVar"b'13",
35787                                        bVar"b'12"]),
35788                                 Let(Var("Rn",F4),
35789                                     Mop(Cast F4,
35790                                         LL[bVar"b'19",bVar"b'18",
35791                                            bVar"b'17",bVar"b'16"]),
35792                                     MB(Call
35793                                          ("ArchVersion",
35794                                           ATy(qTy,PTy(nTy,qTy)),LU),
35795                                        Close
35796                                          (nVar"v",
35797                                           MB(MB(MB(MU(Bop(Ge,nVar"v",LN 6),
35798                                                       qTy),
35799                                                    Close
35800                                                      (bVar"v",
35801                                                       MU(TP[Var("cond",F4),
35802                                                             bVar"v"],qTy))),
35803                                                 Close
35804                                                   (Var("v",PTy(F4,bTy)),
35805                                                    Call
35806                                                      ("Take",
35807                                                       ATy(qTy,
35808                                                           PTy(bTy,qTy)),
35809                                                       Var("v",PTy(F4,bTy))))),
35810                                              Close
35811                                                (bVar"b",
35812                                                 ITE(bVar"b",
35813                                                     MB(ITE(Bop(Or,
35814                                                                Bop(Or,
35815                                                                    Bop(Or,
35816                                                                        Bop(Or,
35817                                                                            EQ(Var("Rd",
35818                                                                                   F4),
35819                                                                               LW(15,
35820                                                                                  4)),
35821                                                                            EQ(Var("Rt",
35822                                                                                   F4),
35823                                                                               LW(15,
35824                                                                                  4))),
35825                                                                        EQ(Var("Rn",
35826                                                                               F4),
35827                                                                           LW(15,
35828                                                                              4))),
35829                                                                    EQ(Var("Rd",
35830                                                                           F4),
35831                                                                       Var("Rn",
35832                                                                           F4))),
35833                                                                EQ(Var("Rd",
35834                                                                       F4),
35835                                                                   Var("Rt",
35836                                                                       F4))),
35837                                                            Call
35838                                                              ("DECODE_UNPREDICTABLE",
35839                                                               ATy(qTy,
35840                                                                   PTy(uTy,
35841                                                                       qTy)),
35842                                                               TP[Var("mc",
35843                                                                      CTy"MachineCode"),
35844                                                                  LS
35845                                                                   "StoreExclusive"]),
35846                                                            MU(LU,qTy)),
35847                                                        Close
35848                                                          (AVar uTy,
35849                                                           MU(Call
35850                                                                ("Store",
35851                                                                 CTy"instruction",
35852                                                                 Call
35853                                                                   ("StoreExclusive",
35854                                                                    CTy"Store",
35855                                                                    TP[Var("Rd",
35856                                                                           F4),
35857                                                                       Var("Rt",
35858                                                                           F4),
35859                                                                       Var("Rn",
35860                                                                           F4),
35861                                                                       LW(0,
35862                                                                          32)])),
35863                                                              qTy))),
35864                                                     Call
35865                                                       ("Skip",
35866                                                        ATy(qTy,
35867                                                            PTy(CTy"instruction",
35868                                                                qTy)),LU)))))))))),
35869                        (Bop(And,bVar"b'24",
35870                             Bop(And,bVar"b'23",
35871                                 Bop(And,Mop(Not,bVar"b'22"),
35872                                     Bop(And,Mop(Not,bVar"b'21"),
35873                                         Bop(And,bVar"b'20",
35874                                             Bop(And,bVar"b'7",
35875                                                 Bop(And,
35876                                                     Mop(Not,bVar"b'6"),
35877                                                     Bop(And,
35878                                                         Mop(Not,bVar"b'5"),
35879                                                         bVar"b'4")))))))),
35880                         Let(Var("Rt",F4),
35881                             Mop(Cast F4,
35882                                 LL[bVar"b'15",bVar"b'14",bVar"b'13",
35883                                    bVar"b'12"]),
35884                             Let(Var("Rn",F4),
35885                                 Mop(Cast F4,
35886                                     LL[bVar"b'19",bVar"b'18",bVar"b'17",
35887                                        bVar"b'16"]),
35888                                 MB(Call
35889                                      ("ArchVersion",
35890                                       ATy(qTy,PTy(nTy,qTy)),LU),
35891                                    Close
35892                                      (nVar"v",
35893                                       MB(MB(MB(MU(Bop(Ge,nVar"v",LN 6),
35894                                                   qTy),
35895                                                Close
35896                                                  (bVar"v",
35897                                                   MU(TP[Var("cond",F4),
35898                                                         bVar"v"],qTy))),
35899                                             Close
35900                                               (Var("v",PTy(F4,bTy)),
35901                                                Call
35902                                                  ("Take",
35903                                                   ATy(qTy,PTy(bTy,qTy)),
35904                                                   Var("v",PTy(F4,bTy))))),
35905                                          Close
35906                                            (bVar"b",
35907                                             ITE(bVar"b",
35908                                                 MB(ITE(Bop(Or,
35909                                                            EQ(Var("Rt",F4),
35910                                                               LW(15,4)),
35911                                                            EQ(Var("Rn",F4),
35912                                                               LW(15,4))),
35913                                                        Call
35914                                                          ("DECODE_UNPREDICTABLE",
35915                                                           ATy(qTy,
35916                                                               PTy(uTy,qTy)),
35917                                                           TP[Var("mc",
35918                                                                  CTy"MachineCode"),
35919                                                              LS
35920                                                               "LoadExclusive"]),
35921                                                        MU(LU,qTy)),
35922                                                    Close
35923                                                      (AVar uTy,
35924                                                       MU(Call
35925                                                            ("Load",
35926                                                             CTy"instruction",
35927                                                             Call
35928                                                               ("LoadExclusive",
35929                                                                CTy"Load",
35930                                                                TP[Var("Rt",
35931                                                                       F4),
35932                                                                   Var("Rn",
35933                                                                       F4),
35934                                                                   LW(0,32)])),
35935                                                          qTy))),
35936                                                 Call
35937                                                   ("Skip",
35938                                                    ATy(qTy,
35939                                                        PTy(CTy"instruction",
35940                                                            qTy)),LU))))))))),
35941                        (Bop(And,bVar"b'24",
35942                             Bop(And,bVar"b'23",
35943                                 Bop(And,Mop(Not,bVar"b'22"),
35944                                     Bop(And,bVar"b'21",
35945                                         Bop(And,Mop(Not,bVar"b'20"),
35946                                             Bop(And,bVar"b'7",
35947                                                 Bop(And,
35948                                                     Mop(Not,bVar"b'6"),
35949                                                     Bop(And,
35950                                                         Mop(Not,bVar"b'5"),
35951                                                         bVar"b'4")))))))),
35952                         Let(Var("Rt",F4),
35953                             Mop(Cast F4,
35954                                 LL[bVar"b'3",bVar"b'2",bVar"b'1",
35955                                    bVar"b'0"]),
35956                             Let(Var("Rd",F4),
35957                                 Mop(Cast F4,
35958                                     LL[bVar"b'15",bVar"b'14",bVar"b'13",
35959                                        bVar"b'12"]),
35960                                 Let(Var("Rn",F4),
35961                                     Mop(Cast F4,
35962                                         LL[bVar"b'19",bVar"b'18",
35963                                            bVar"b'17",bVar"b'16"]),
35964                                     MB(MR(Close
35965                                             (qVar"s",
35966                                              Dest
35967                                                ("Architecture",
35968                                                 CTy"Architecture",qVar"s"))),
35969                                        Close
35970                                          (Var("v",CTy"Architecture"),
35971                                           MB(MB(MB(MU(Bop(In,
35972                                                           Var("v",
35973                                                               CTy"Architecture"),
35974                                                           SL[LC("ARMv6K",
35975                                                                 CTy"Architecture"),
35976                                                              LC("ARMv7_A",
35977                                                                 CTy"Architecture"),
35978                                                              LC("ARMv7_R",
35979                                                                 CTy"Architecture")]),
35980                                                       qTy),
35981                                                    Close
35982                                                      (bVar"v",
35983                                                       MU(TP[Var("cond",F4),
35984                                                             bVar"v"],qTy))),
35985                                                 Close
35986                                                   (Var("v",PTy(F4,bTy)),
35987                                                    Call
35988                                                      ("Take",
35989                                                       ATy(qTy,
35990                                                           PTy(bTy,qTy)),
35991                                                       Var("v",PTy(F4,bTy))))),
35992                                              Close
35993                                                (bVar"b",
35994                                                 ITE(bVar"b",
35995                                                     Let(Var("Rt2",F4),
35996                                                         Bop(Add,
35997                                                             Var("Rt",F4),
35998                                                             LW(1,4)),
35999                                                         MB(ITE(Bop(Or,
36000                                                                    Bop(Or,
36001                                                                        Bop(Or,
36002                                                                            Bop(Or,
36003                                                                                Bop(Or,
36004                                                                                    Bop(Or,
36005                                                                                        EQ(Var("Rd",
36006                                                                                               F4),
36007                                                                                           LW(15,
36008                                                                                              4)),
36009                                                                                        Bop(Bit,
36010                                                                                            Var("Rt",
36011                                                                                                F4),
36012                                                                                            LN
36013                                                                                             0)),
36014                                                                                    EQ(Var("Rt",
36015                                                                                           F4),
36016                                                                                       LW(14,
36017                                                                                          4))),
36018                                                                                EQ(Var("Rn",
36019                                                                                       F4),
36020                                                                                   LW(15,
36021                                                                                      4))),
36022                                                                            EQ(Var("Rd",
36023                                                                                   F4),
36024                                                                               Var("Rn",
36025                                                                                   F4))),
36026                                                                        EQ(Var("Rd",
36027                                                                               F4),
36028                                                                           Var("Rt",
36029                                                                               F4))),
36030                                                                    EQ(Var("Rd",
36031                                                                           F4),
36032                                                                       Var("Rt2",
36033                                                                           F4))),
36034                                                                Call
36035                                                                  ("DECODE_UNPREDICTABLE",
36036                                                                   ATy(qTy,
36037                                                                       PTy(uTy,
36038                                                                           qTy)),
36039                                                                   TP[Var("mc",
36040                                                                          CTy"MachineCode"),
36041                                                                      LS
36042                                                                       "StoreExclusiveDoubleword"]),
36043                                                                MU(LU,qTy)),
36044                                                            Close
36045                                                              (AVar uTy,
36046                                                               MU(Call
36047                                                                    ("Store",
36048                                                                     CTy"instruction",
36049                                                                     Call
36050                                                                       ("StoreExclusiveDoubleword",
36051                                                                        CTy"Store",
36052                                                                        TP[Var("Rd",
36053                                                                               F4),
36054                                                                           Var("Rt",
36055                                                                               F4),
36056                                                                           Var("Rt2",
36057                                                                               F4),
36058                                                                           Var("Rn",
36059                                                                               F4)])),
36060                                                                  qTy)))),
36061                                                     Call
36062                                                       ("Skip",
36063                                                        ATy(qTy,
36064                                                            PTy(CTy"instruction",
36065                                                                qTy)),LU)))))))))),
36066                        (Bop(And,bVar"b'24",
36067                             Bop(And,bVar"b'23",
36068                                 Bop(And,Mop(Not,bVar"b'22"),
36069                                     Bop(And,bVar"b'21",
36070                                         Bop(And,bVar"b'20",
36071                                             Bop(And,bVar"b'7",
36072                                                 Bop(And,
36073                                                     Mop(Not,bVar"b'6"),
36074                                                     Bop(And,
36075                                                         Mop(Not,bVar"b'5"),
36076                                                         bVar"b'4")))))))),
36077                         Let(Var("Rt",F4),
36078                             Mop(Cast F4,
36079                                 LL[bVar"b'15",bVar"b'14",bVar"b'13",
36080                                    bVar"b'12"]),
36081                             Let(Var("Rn",F4),
36082                                 Mop(Cast F4,
36083                                     LL[bVar"b'19",bVar"b'18",bVar"b'17",
36084                                        bVar"b'16"]),
36085                                 MB(MR(Close
36086                                         (qVar"s",
36087                                          Dest
36088                                            ("Architecture",
36089                                             CTy"Architecture",qVar"s"))),
36090                                    Close
36091                                      (Var("v",CTy"Architecture"),
36092                                       MB(MB(MB(MU(Bop(In,
36093                                                       Var("v",
36094                                                           CTy"Architecture"),
36095                                                       SL[LC("ARMv6K",
36096                                                             CTy"Architecture"),
36097                                                          LC("ARMv7_A",
36098                                                             CTy"Architecture"),
36099                                                          LC("ARMv7_R",
36100                                                             CTy"Architecture")]),
36101                                                   qTy),
36102                                                Close
36103                                                  (bVar"v",
36104                                                   MU(TP[Var("cond",F4),
36105                                                         bVar"v"],qTy))),
36106                                             Close
36107                                               (Var("v",PTy(F4,bTy)),
36108                                                Call
36109                                                  ("Take",
36110                                                   ATy(qTy,PTy(bTy,qTy)),
36111                                                   Var("v",PTy(F4,bTy))))),
36112                                          Close
36113                                            (bVar"b",
36114                                             ITE(bVar"b",
36115                                                 MB(ITE(Bop(Or,
36116                                                            Bop(Or,
36117                                                                Bop(Bit,
36118                                                                    Var("Rt",
36119                                                                        F4),
36120                                                                    LN 0),
36121                                                                EQ(Var("Rt",
36122                                                                       F4),
36123                                                                   LW(14,4))),
36124                                                            EQ(Var("Rn",F4),
36125                                                               LW(15,4))),
36126                                                        Call
36127                                                          ("DECODE_UNPREDICTABLE",
36128                                                           ATy(qTy,
36129                                                               PTy(uTy,qTy)),
36130                                                           TP[Var("mc",
36131                                                                  CTy"MachineCode"),
36132                                                              LS
36133                                                               "LoadExclusiveDoubleword"]),
36134                                                        MU(LU,qTy)),
36135                                                    Close
36136                                                      (AVar uTy,
36137                                                       MU(Call
36138                                                            ("Load",
36139                                                             CTy"instruction",
36140                                                             Call
36141                                                               ("LoadExclusiveDoubleword",
36142                                                                CTy"Load",
36143                                                                TP[Var("Rt",
36144                                                                       F4),
36145                                                                   Bop(Add,
36146                                                                       Var("Rt",
36147                                                                           F4),
36148                                                                       LW(1,
36149                                                                          4)),
36150                                                                   Var("Rn",
36151                                                                       F4)])),
36152                                                          qTy))),
36153                                                 Call
36154                                                   ("Skip",
36155                                                    ATy(qTy,
36156                                                        PTy(CTy"instruction",
36157                                                            qTy)),LU))))))))),
36158                        (Bop(And,bVar"b'24",
36159                             Bop(And,bVar"b'23",
36160                                 Bop(And,bVar"b'22",
36161                                     Bop(And,Mop(Not,bVar"b'21"),
36162                                         Bop(And,Mop(Not,bVar"b'20"),
36163                                             Bop(And,bVar"b'7",
36164                                                 Bop(And,
36165                                                     Mop(Not,bVar"b'6"),
36166                                                     Bop(And,
36167                                                         Mop(Not,bVar"b'5"),
36168                                                         bVar"b'4")))))))),
36169                         Let(Var("Rt",F4),
36170                             Mop(Cast F4,
36171                                 LL[bVar"b'3",bVar"b'2",bVar"b'1",
36172                                    bVar"b'0"]),
36173                             Let(Var("Rd",F4),
36174                                 Mop(Cast F4,
36175                                     LL[bVar"b'15",bVar"b'14",bVar"b'13",
36176                                        bVar"b'12"]),
36177                                 Let(Var("Rn",F4),
36178                                     Mop(Cast F4,
36179                                         LL[bVar"b'19",bVar"b'18",
36180                                            bVar"b'17",bVar"b'16"]),
36181                                     MB(MR(Close
36182                                             (qVar"s",
36183                                              Dest
36184                                                ("Architecture",
36185                                                 CTy"Architecture",qVar"s"))),
36186                                        Close
36187                                          (Var("v",CTy"Architecture"),
36188                                           MB(MB(MB(MU(Bop(In,
36189                                                           Var("v",
36190                                                               CTy"Architecture"),
36191                                                           SL[LC("ARMv6K",
36192                                                                 CTy"Architecture"),
36193                                                              LC("ARMv7_A",
36194                                                                 CTy"Architecture"),
36195                                                              LC("ARMv7_R",
36196                                                                 CTy"Architecture")]),
36197                                                       qTy),
36198                                                    Close
36199                                                      (bVar"v",
36200                                                       MU(TP[Var("cond",F4),
36201                                                             bVar"v"],qTy))),
36202                                                 Close
36203                                                   (Var("v",PTy(F4,bTy)),
36204                                                    Call
36205                                                      ("Take",
36206                                                       ATy(qTy,
36207                                                           PTy(bTy,qTy)),
36208                                                       Var("v",PTy(F4,bTy))))),
36209                                              Close
36210                                                (bVar"b",
36211                                                 ITE(bVar"b",
36212                                                     MB(ITE(Bop(Or,
36213                                                                Bop(Or,
36214                                                                    Bop(Or,
36215                                                                        Bop(Or,
36216                                                                            EQ(Var("Rd",
36217                                                                                   F4),
36218                                                                               LW(15,
36219                                                                                  4)),
36220                                                                            EQ(Var("Rt",
36221                                                                                   F4),
36222                                                                               LW(15,
36223                                                                                  4))),
36224                                                                        EQ(Var("Rn",
36225                                                                               F4),
36226                                                                           LW(15,
36227                                                                              4))),
36228                                                                    EQ(Var("Rd",
36229                                                                           F4),
36230                                                                       Var("Rn",
36231                                                                           F4))),
36232                                                                EQ(Var("Rd",
36233                                                                       F4),
36234                                                                   Var("Rt",
36235                                                                       F4))),
36236                                                            Call
36237                                                              ("DECODE_UNPREDICTABLE",
36238                                                               ATy(qTy,
36239                                                                   PTy(uTy,
36240                                                                       qTy)),
36241                                                               TP[Var("mc",
36242                                                                      CTy"MachineCode"),
36243                                                                  LS
36244                                                                   "StoreExclusiveByte"]),
36245                                                            MU(LU,qTy)),
36246                                                        Close
36247                                                          (AVar uTy,
36248                                                           MU(Call
36249                                                                ("Store",
36250                                                                 CTy"instruction",
36251                                                                 Call
36252                                                                   ("StoreExclusiveByte",
36253                                                                    CTy"Store",
36254                                                                    TP[Var("Rd",
36255                                                                           F4),
36256                                                                       Var("Rt",
36257                                                                           F4),
36258                                                                       Var("Rn",
36259                                                                           F4)])),
36260                                                              qTy))),
36261                                                     Call
36262                                                       ("Skip",
36263                                                        ATy(qTy,
36264                                                            PTy(CTy"instruction",
36265                                                                qTy)),LU)))))))))),
36266                        (Bop(And,bVar"b'24",
36267                             Bop(And,bVar"b'23",
36268                                 Bop(And,bVar"b'22",
36269                                     Bop(And,Mop(Not,bVar"b'21"),
36270                                         Bop(And,bVar"b'20",
36271                                             Bop(And,bVar"b'7",
36272                                                 Bop(And,
36273                                                     Mop(Not,bVar"b'6"),
36274                                                     Bop(And,
36275                                                         Mop(Not,bVar"b'5"),
36276                                                         bVar"b'4")))))))),
36277                         Let(Var("Rt",F4),
36278                             Mop(Cast F4,
36279                                 LL[bVar"b'15",bVar"b'14",bVar"b'13",
36280                                    bVar"b'12"]),
36281                             Let(Var("Rn",F4),
36282                                 Mop(Cast F4,
36283                                     LL[bVar"b'19",bVar"b'18",bVar"b'17",
36284                                        bVar"b'16"]),
36285                                 MB(MR(Close
36286                                         (qVar"s",
36287                                          Dest
36288                                            ("Architecture",
36289                                             CTy"Architecture",qVar"s"))),
36290                                    Close
36291                                      (Var("v",CTy"Architecture"),
36292                                       MB(MB(MB(MU(Bop(In,
36293                                                       Var("v",
36294                                                           CTy"Architecture"),
36295                                                       SL[LC("ARMv6K",
36296                                                             CTy"Architecture"),
36297                                                          LC("ARMv7_A",
36298                                                             CTy"Architecture"),
36299                                                          LC("ARMv7_R",
36300                                                             CTy"Architecture")]),
36301                                                   qTy),
36302                                                Close
36303                                                  (bVar"v",
36304                                                   MU(TP[Var("cond",F4),
36305                                                         bVar"v"],qTy))),
36306                                             Close
36307                                               (Var("v",PTy(F4,bTy)),
36308                                                Call
36309                                                  ("Take",
36310                                                   ATy(qTy,PTy(bTy,qTy)),
36311                                                   Var("v",PTy(F4,bTy))))),
36312                                          Close
36313                                            (bVar"b",
36314                                             ITE(bVar"b",
36315                                                 MB(ITE(Bop(Or,
36316                                                            EQ(Var("Rt",F4),
36317                                                               LW(15,4)),
36318                                                            EQ(Var("Rn",F4),
36319                                                               LW(15,4))),
36320                                                        Call
36321                                                          ("DECODE_UNPREDICTABLE",
36322                                                           ATy(qTy,
36323                                                               PTy(uTy,qTy)),
36324                                                           TP[Var("mc",
36325                                                                  CTy"MachineCode"),
36326                                                              LS
36327                                                               "LoadExclusiveByte"]),
36328                                                        MU(LU,qTy)),
36329                                                    Close
36330                                                      (AVar uTy,
36331                                                       MU(Call
36332                                                            ("Load",
36333                                                             CTy"instruction",
36334                                                             Call
36335                                                               ("LoadExclusiveByte",
36336                                                                CTy"Load",
36337                                                                TP[Var("Rt",
36338                                                                       F4),
36339                                                                   Var("Rn",
36340                                                                       F4)])),
36341                                                          qTy))),
36342                                                 Call
36343                                                   ("Skip",
36344                                                    ATy(qTy,
36345                                                        PTy(CTy"instruction",
36346                                                            qTy)),LU))))))))),
36347                        (Bop(And,bVar"b'24",
36348                             Bop(And,bVar"b'23",
36349                                 Bop(And,bVar"b'22",
36350                                     Bop(And,bVar"b'21",
36351                                         Bop(And,Mop(Not,bVar"b'20"),
36352                                             Bop(And,bVar"b'7",
36353                                                 Bop(And,
36354                                                     Mop(Not,bVar"b'6"),
36355                                                     Bop(And,
36356                                                         Mop(Not,bVar"b'5"),
36357                                                         bVar"b'4")))))))),
36358                         Let(Var("Rt",F4),
36359                             Mop(Cast F4,
36360                                 LL[bVar"b'3",bVar"b'2",bVar"b'1",
36361                                    bVar"b'0"]),
36362                             Let(Var("Rd",F4),
36363                                 Mop(Cast F4,
36364                                     LL[bVar"b'15",bVar"b'14",bVar"b'13",
36365                                        bVar"b'12"]),
36366                                 Let(Var("Rn",F4),
36367                                     Mop(Cast F4,
36368                                         LL[bVar"b'19",bVar"b'18",
36369                                            bVar"b'17",bVar"b'16"]),
36370                                     MB(MR(Close
36371                                             (qVar"s",
36372                                              Dest
36373                                                ("Architecture",
36374                                                 CTy"Architecture",qVar"s"))),
36375                                        Close
36376                                          (Var("v",CTy"Architecture"),
36377                                           MB(MB(MB(MU(Bop(In,
36378                                                           Var("v",
36379                                                               CTy"Architecture"),
36380                                                           SL[LC("ARMv6K",
36381                                                                 CTy"Architecture"),
36382                                                              LC("ARMv7_A",
36383                                                                 CTy"Architecture"),
36384                                                              LC("ARMv7_R",
36385                                                                 CTy"Architecture")]),
36386                                                       qTy),
36387                                                    Close
36388                                                      (bVar"v",
36389                                                       MU(TP[Var("cond",F4),
36390                                                             bVar"v"],qTy))),
36391                                                 Close
36392                                                   (Var("v",PTy(F4,bTy)),
36393                                                    Call
36394                                                      ("Take",
36395                                                       ATy(qTy,
36396                                                           PTy(bTy,qTy)),
36397                                                       Var("v",PTy(F4,bTy))))),
36398                                              Close
36399                                                (bVar"b",
36400                                                 ITE(bVar"b",
36401                                                     MB(ITE(Bop(Or,
36402                                                                Bop(Or,
36403                                                                    Bop(Or,
36404                                                                        Bop(Or,
36405                                                                            EQ(Var("Rd",
36406                                                                                   F4),
36407                                                                               LW(15,
36408                                                                                  4)),
36409                                                                            EQ(Var("Rt",
36410                                                                                   F4),
36411                                                                               LW(15,
36412                                                                                  4))),
36413                                                                        EQ(Var("Rn",
36414                                                                               F4),
36415                                                                           LW(15,
36416                                                                              4))),
36417                                                                    EQ(Var("Rd",
36418                                                                           F4),
36419                                                                       Var("Rn",
36420                                                                           F4))),
36421                                                                EQ(Var("Rd",
36422                                                                       F4),
36423                                                                   Var("Rt",
36424                                                                       F4))),
36425                                                            Call
36426                                                              ("DECODE_UNPREDICTABLE",
36427                                                               ATy(qTy,
36428                                                                   PTy(uTy,
36429                                                                       qTy)),
36430                                                               TP[Var("mc",
36431                                                                      CTy"MachineCode"),
36432                                                                  LS
36433                                                                   "StoreExclusiveHalf"]),
36434                                                            MU(LU,qTy)),
36435                                                        Close
36436                                                          (AVar uTy,
36437                                                           MU(Call
36438                                                                ("Store",
36439                                                                 CTy"instruction",
36440                                                                 Call
36441                                                                   ("StoreExclusiveHalf",
36442                                                                    CTy"Store",
36443                                                                    TP[Var("Rd",
36444                                                                           F4),
36445                                                                       Var("Rt",
36446                                                                           F4),
36447                                                                       Var("Rn",
36448                                                                           F4)])),
36449                                                              qTy))),
36450                                                     Call
36451                                                       ("Skip",
36452                                                        ATy(qTy,
36453                                                            PTy(CTy"instruction",
36454                                                                qTy)),LU)))))))))),
36455                        (Bop(And,bVar"b'24",
36456                             Bop(And,bVar"b'23",
36457                                 Bop(And,bVar"b'22",
36458                                     Bop(And,bVar"b'21",
36459                                         Bop(And,bVar"b'20",
36460                                             Bop(And,bVar"b'7",
36461                                                 Bop(And,
36462                                                     Mop(Not,bVar"b'6"),
36463                                                     Bop(And,
36464                                                         Mop(Not,bVar"b'5"),
36465                                                         bVar"b'4")))))))),
36466                         Let(Var("Rt",F4),
36467                             Mop(Cast F4,
36468                                 LL[bVar"b'15",bVar"b'14",bVar"b'13",
36469                                    bVar"b'12"]),
36470                             Let(Var("Rn",F4),
36471                                 Mop(Cast F4,
36472                                     LL[bVar"b'19",bVar"b'18",bVar"b'17",
36473                                        bVar"b'16"]),
36474                                 MB(MR(Close
36475                                         (qVar"s",
36476                                          Dest
36477                                            ("Architecture",
36478                                             CTy"Architecture",qVar"s"))),
36479                                    Close
36480                                      (Var("v",CTy"Architecture"),
36481                                       MB(MB(MB(MU(Bop(In,
36482                                                       Var("v",
36483                                                           CTy"Architecture"),
36484                                                       SL[LC("ARMv6K",
36485                                                             CTy"Architecture"),
36486                                                          LC("ARMv7_A",
36487                                                             CTy"Architecture"),
36488                                                          LC("ARMv7_R",
36489                                                             CTy"Architecture")]),
36490                                                   qTy),
36491                                                Close
36492                                                  (bVar"v",
36493                                                   MU(TP[Var("cond",F4),
36494                                                         bVar"v"],qTy))),
36495                                             Close
36496                                               (Var("v",PTy(F4,bTy)),
36497                                                Call
36498                                                  ("Take",
36499                                                   ATy(qTy,PTy(bTy,qTy)),
36500                                                   Var("v",PTy(F4,bTy))))),
36501                                          Close
36502                                            (bVar"b",
36503                                             ITE(bVar"b",
36504                                                 MB(ITE(Bop(Or,
36505                                                            EQ(Var("Rt",F4),
36506                                                               LW(15,4)),
36507                                                            EQ(Var("Rn",F4),
36508                                                               LW(15,4))),
36509                                                        Call
36510                                                          ("DECODE_UNPREDICTABLE",
36511                                                           ATy(qTy,
36512                                                               PTy(uTy,qTy)),
36513                                                           TP[Var("mc",
36514                                                                  CTy"MachineCode"),
36515                                                              LS
36516                                                               "LoadExclusiveHalf"]),
36517                                                        MU(LU,qTy)),
36518                                                    Close
36519                                                      (AVar uTy,
36520                                                       MU(Call
36521                                                            ("Load",
36522                                                             CTy"instruction",
36523                                                             Call
36524                                                               ("LoadExclusiveHalf",
36525                                                                CTy"Load",
36526                                                                TP[Var("Rt",
36527                                                                       F4),
36528                                                                   Var("Rn",
36529                                                                       F4)])),
36530                                                          qTy))),
36531                                                 Call
36532                                                   ("Skip",
36533                                                    ATy(qTy,
36534                                                        PTy(CTy"instruction",
36535                                                            qTy)),LU))))))))),
36536                        (Bop(And,Mop(Not,bVar"b'24"),
36537                             Bop(And,Mop(Not,bVar"b'22"),
36538                                 Bop(And,bVar"b'21",
36539                                     Bop(And,Mop(Not,bVar"b'20"),
36540                                         Bop(And,bVar"b'7",
36541                                             Bop(And,Mop(Not,bVar"b'6"),
36542                                                 Bop(And,bVar"b'5",
36543                                                     bVar"b'4"))))))),
36544                         Let(Var("Rm",F4),
36545                             Mop(Cast F4,
36546                                 LL[bVar"b'3",bVar"b'2",bVar"b'1",
36547                                    bVar"b'0"]),
36548                             Let(Var("Rt",F4),
36549                                 Mop(Cast F4,
36550                                     LL[bVar"b'15",bVar"b'14",bVar"b'13",
36551                                        bVar"b'12"]),
36552                                 Let(Var("Rn",F4),
36553                                     Mop(Cast F4,
36554                                         LL[bVar"b'19",bVar"b'18",
36555                                            bVar"b'17",bVar"b'16"]),
36556                                     MB(Call
36557                                          ("HaveThumb2",
36558                                           ATy(qTy,PTy(bTy,qTy)),LU),
36559                                        Close
36560                                          (bVar"v",
36561                                           MB(MB(MU(TP[Var("cond",F4),
36562                                                       bVar"v"],qTy),
36563                                                 Close
36564                                                   (Var("v",PTy(F4,bTy)),
36565                                                    Call
36566                                                      ("Take",
36567                                                       ATy(qTy,
36568                                                           PTy(bTy,qTy)),
36569                                                       Var("v",PTy(F4,bTy))))),
36570                                              Close
36571                                                (bVar"b",
36572                                                 ITE(bVar"b",
36573                                                     MB(ITE(Bop(Or,
36574                                                                Bop(Or,
36575                                                                    Bop(Or,
36576                                                                        EQ(Var("Rt",
36577                                                                               F4),
36578                                                                           LW(15,
36579                                                                              4)),
36580                                                                        EQ(Var("Rn",
36581                                                                               F4),
36582                                                                           LW(15,
36583                                                                              4))),
36584                                                                    EQ(Var("Rn",
36585                                                                           F4),
36586                                                                       Var("Rt",
36587                                                                           F4))),
36588                                                                EQ(Var("Rm",
36589                                                                       F4),
36590                                                                   LW(15,4))),
36591                                                            Call
36592                                                              ("DECODE_UNPREDICTABLE",
36593                                                               ATy(qTy,
36594                                                                   PTy(uTy,
36595                                                                       qTy)),
36596                                                               TP[Var("mc",
36597                                                                      CTy"MachineCode"),
36598                                                                  LS
36599                                                                   "StoreHalfUnprivileged"]),
36600                                                            MU(LU,qTy)),
36601                                                        Close
36602                                                          (AVar uTy,
36603                                                           MU(Call
36604                                                                ("Store",
36605                                                                 CTy"instruction",
36606                                                                 Call
36607                                                                   ("StoreHalfUnprivileged",
36608                                                                    CTy"Store",
36609                                                                    TP[EQ(Mop(Cast
36610                                                                                F1,
36611                                                                              LL[bVar"b'23"]),
36612                                                                          LW(1,
36613                                                                             1)),
36614                                                                       LT,
36615                                                                       Var("Rt",
36616                                                                           F4),
36617                                                                       Var("Rn",
36618                                                                           F4),
36619                                                                       Call
36620                                                                         ("register_form2",
36621                                                                          CTy"offset2",
36622                                                                          Var("Rm",
36623                                                                              F4))])),
36624                                                              qTy))),
36625                                                     Call
36626                                                       ("Skip",
36627                                                        ATy(qTy,
36628                                                            PTy(CTy"instruction",
36629                                                                qTy)),LU)))))))))),
36630                        (Bop(And,Mop(Not,bVar"b'22"),
36631                             Bop(And,Mop(Not,bVar"b'20"),
36632                                 Bop(And,bVar"b'7",
36633                                     Bop(And,Mop(Not,bVar"b'6"),
36634                                         Bop(And,bVar"b'5",bVar"b'4"))))),
36635                         Let(Var("Rm",F4),
36636                             Mop(Cast F4,
36637                                 LL[bVar"b'3",bVar"b'2",bVar"b'1",
36638                                    bVar"b'0"]),
36639                             Let(Var("Rt",F4),
36640                                 Mop(Cast F4,
36641                                     LL[bVar"b'15",bVar"b'14",bVar"b'13",
36642                                        bVar"b'12"]),
36643                                 Let(Var("Rn",F4),
36644                                     Mop(Cast F4,
36645                                         LL[bVar"b'19",bVar"b'18",
36646                                            bVar"b'17",bVar"b'16"]),
36647                                     Let(Var("P",F1),
36648                                         Mop(Cast F1,LL[bVar"b'24"]),
36649                                         MB(Call
36650                                              ("Take",
36651                                               ATy(qTy,PTy(bTy,qTy)),
36652                                               TP[Var("cond",F4),LT]),
36653                                            Close
36654                                              (bVar"b",
36655                                               ITE(bVar"b",
36656                                                   Let(bVar"wback",
36657                                                       Bop(Or,
36658                                                           EQ(Var("P",F1),
36659                                                              LW(0,1)),
36660                                                           EQ(Mop(Cast F1,
36661                                                                  LL[bVar"b'21"]),
36662                                                              LW(1,1))),
36663                                                       MB(Call
36664                                                            ("ArchVersion",
36665                                                             ATy(qTy,
36666                                                                 PTy(nTy,
36667                                                                     qTy)),
36668                                                             LU),
36669                                                          Close
36670                                                            (nVar"v",
36671                                                             MB(MB(MB(MB(MB(MU(Bop(Lt,
36672                                                                                   nVar"v",
36673                                                                                   LN
36674                                                                                    6),
36675                                                                               qTy),
36676                                                                            Close
36677                                                                              (bVar"b",
36678                                                                               MU(Bop(And,
36679                                                                                      bVar"b",
36680                                                                                      bVar"wback"),
36681                                                                                  qTy))),
36682                                                                         Close
36683                                                                           (bVar"b",
36684                                                                            MU(Bop(And,
36685                                                                                   bVar"b",
36686                                                                                   EQ(Var("Rm",
36687                                                                                          F4),
36688                                                                                      Var("Rn",
36689                                                                                          F4))),
36690                                                                               qTy))),
36691                                                                      Close
36692                                                                        (bVar"v",
36693                                                                         MU(Bop(Or,
36694                                                                                Bop(Or,
36695                                                                                    Bop(Or,
36696                                                                                        EQ(Var("Rt",
36697                                                                                               F4),
36698                                                                                           LW(15,
36699                                                                                              4)),
36700                                                                                        EQ(Var("Rm",
36701                                                                                               F4),
36702                                                                                           LW(15,
36703                                                                                              4))),
36704                                                                                    Bop(And,
36705                                                                                        bVar"wback",
36706                                                                                        Bop(Or,
36707                                                                                            EQ(Var("Rn",
36708                                                                                                   F4),
36709                                                                                               LW(15,
36710                                                                                                  4)),
36711                                                                                            EQ(Var("Rn",
36712                                                                                                   F4),
36713                                                                                               Var("Rt",
36714                                                                                                   F4))))),
36715                                                                                bVar"v"),
36716                                                                            qTy))),
36717                                                                   Close
36718                                                                     (bVar"b",
36719                                                                      ITE(bVar"b",
36720                                                                          Call
36721                                                                            ("DECODE_UNPREDICTABLE",
36722                                                                             ATy(qTy,
36723                                                                                 PTy(uTy,
36724                                                                                     qTy)),
36725                                                                             TP[Var("mc",
36726                                                                                    CTy"MachineCode"),
36727                                                                                LS
36728                                                                                 "StoreHalf"]),
36729                                                                          MU(LU,
36730                                                                             qTy)))),
36731                                                                Close
36732                                                                  (AVar
36733                                                                     uTy,
36734                                                                   MU(Call
36735                                                                        ("Store",
36736                                                                         CTy"instruction",
36737                                                                         Call
36738                                                                           ("StoreHalf",
36739                                                                            CTy"Store",
36740                                                                            TP[EQ(Mop(Cast
36741                                                                                        F1,
36742                                                                                      LL[bVar"b'23"]),
36743                                                                                  LW(1,
36744                                                                                     1)),
36745                                                                               EQ(Var("P",
36746                                                                                      F1),
36747                                                                                  LW(1,
36748                                                                                     1)),
36749                                                                               bVar"wback",
36750                                                                               Var("Rt",
36751                                                                                   F4),
36752                                                                               Var("Rn",
36753                                                                                   F4),
36754                                                                               Call
36755                                                                                 ("register_form1",
36756                                                                                  CTy"offset1",
36757                                                                                  TP[Var("Rm",
36758                                                                                         F4),
36759                                                                                     LC("SRType_LSL",
36760                                                                                        CTy"SRType"),
36761                                                                                     LN
36762                                                                                      0])])),
36763                                                                      qTy)))))),
36764                                                   Call
36765                                                     ("Skip",
36766                                                      ATy(qTy,
36767                                                          PTy(CTy"instruction",
36768                                                              qTy)),LU))))))))),
36769                        (Bop(And,Mop(Not,bVar"b'24"),
36770                             Bop(And,Mop(Not,bVar"b'22"),
36771                                 Bop(And,bVar"b'21",
36772                                     Bop(And,bVar"b'20",
36773                                         Bop(And,bVar"b'7",bVar"b'4"))))),
36774                         Let(Var("Rm",F4),
36775                             Mop(Cast F4,
36776                                 LL[bVar"b'3",bVar"b'2",bVar"b'1",
36777                                    bVar"b'0"]),
36778                             Let(Var("H",F1),Mop(Cast F1,LL[bVar"b'5"]),
36779                                 Let(Var("S",F1),
36780                                     Mop(Cast F1,LL[bVar"b'6"]),
36781                                     Let(Var("Rt",F4),
36782                                         Mop(Cast F4,
36783                                             LL[bVar"b'15",bVar"b'14",
36784                                                bVar"b'13",bVar"b'12"]),
36785                                         Let(Var("Rn",F4),
36786                                             Mop(Cast F4,
36787                                                 LL[bVar"b'19",bVar"b'18",
36788                                                    bVar"b'17",bVar"b'16"]),
36789                                             MB(Call
36790                                                  ("HaveThumb2",
36791                                                   ATy(qTy,PTy(bTy,qTy)),
36792                                                   LU),
36793                                                Close
36794                                                  (bVar"v",
36795                                                   MB(MB(MB(MU(Bop(And,
36796                                                                   Bop(Or,
36797                                                                       Mop(Not,
36798                                                                           EQ(Var("H",
36799                                                                                  F1),
36800                                                                              LW(0,
36801                                                                                 1))),
36802                                                                       EQ(Var("S",
36803                                                                              F1),
36804                                                                          LW(1,
36805                                                                             1))),
36806                                                                   bVar"v"),
36807                                                               qTy),
36808                                                            Close
36809                                                              (bVar"v",
36810                                                               MU(TP[Var("cond",
36811                                                                         F4),
36812                                                                     bVar"v"],
36813                                                                  qTy))),
36814                                                         Close
36815                                                           (Var("v",
36816                                                                PTy(F4,bTy)),
36817                                                            Call
36818                                                              ("Take",
36819                                                               ATy(qTy,
36820                                                                   PTy(bTy,
36821                                                                       qTy)),
36822                                                               Var("v",
36823                                                                   PTy(F4,
36824                                                                       bTy))))),
36825                                                      Close
36826                                                        (bVar"b",
36827                                                         ITE(bVar"b",
36828                                                             MB(ITE(Bop(Or,
36829                                                                        Bop(Or,
36830                                                                            Bop(Or,
36831                                                                                EQ(Var("Rt",
36832                                                                                       F4),
36833                                                                                   LW(15,
36834                                                                                      4)),
36835                                                                                EQ(Var("Rn",
36836                                                                                       F4),
36837                                                                                   LW(15,
36838                                                                                      4))),
36839                                                                            EQ(Var("Rn",
36840                                                                                   F4),
36841                                                                               Var("Rt",
36842                                                                                   F4))),
36843                                                                        EQ(Var("Rm",
36844                                                                               F4),
36845                                                                           LW(15,
36846                                                                              4))),
36847                                                                    Call
36848                                                                      ("DECODE_UNPREDICTABLE",
36849                                                                       ATy(qTy,
36850                                                                           PTy(uTy,
36851                                                                               qTy)),
36852                                                                       TP[Var("mc",
36853                                                                              CTy"MachineCode"),
36854                                                                          LS
36855                                                                           "LoadHalf/Byte (unprivileged)"]),
36856                                                                    MU(LU,
36857                                                                       qTy)),
36858                                                                Close
36859                                                                  (AVar
36860                                                                     uTy,
36861                                                                   MU(Let(bVar"add",
36862                                                                          EQ(Mop(Cast
36863                                                                                   F1,
36864                                                                                 LL[bVar"b'23"]),
36865                                                                             LW(1,
36866                                                                                1)),
36867                                                                          Let(bVar"postindex",
36868                                                                              LT,
36869                                                                              Let(Var("m",
36870                                                                                      CTy"offset2"),
36871                                                                                  Call
36872                                                                                    ("register_form2",
36873                                                                                     CTy"offset2",
36874                                                                                     Var("Rm",
36875                                                                                         F4)),
36876                                                                                  ITE(EQ(Var("H",
36877                                                                                             F1),
36878                                                                                         LW(1,
36879                                                                                            1)),
36880                                                                                      Call
36881                                                                                        ("Load",
36882                                                                                         CTy"instruction",
36883                                                                                         Call
36884                                                                                           ("LoadHalfUnprivileged",
36885                                                                                            CTy"Load",
36886                                                                                            TP[EQ(Var("S",
36887                                                                                                      F1),
36888                                                                                                  LW(0,
36889                                                                                                     1)),
36890                                                                                               bVar"add",
36891                                                                                               bVar"postindex",
36892                                                                                               Var("Rt",
36893                                                                                                   F4),
36894                                                                                               Var("Rn",
36895                                                                                                   F4),
36896                                                                                               Var("m",
36897                                                                                                   CTy"offset2")])),
36898                                                                                      Call
36899                                                                                        ("Load",
36900                                                                                         CTy"instruction",
36901                                                                                         Call
36902                                                                                           ("LoadSignedByteUnprivileged",
36903                                                                                            CTy"Load",
36904                                                                                            TP[bVar"add",
36905                                                                                               bVar"postindex",
36906                                                                                               Var("Rt",
36907                                                                                                   F4),
36908                                                                                               Var("Rn",
36909                                                                                                   F4),
36910                                                                                               Var("m",
36911                                                                                                   CTy"offset2")])))))),
36912                                                                      qTy))),
36913                                                             Call
36914                                                               ("Skip",
36915                                                                ATy(qTy,
36916                                                                    PTy(CTy"instruction",
36917                                                                        qTy)),
36918                                                                LU)))))))))))),
36919                        (Bop(And,Mop(Not,bVar"b'22"),
36920                             Bop(And,bVar"b'20",
36921                                 Bop(And,bVar"b'7",bVar"b'4"))),
36922                         Let(Var("Rm",F4),
36923                             Mop(Cast F4,
36924                                 LL[bVar"b'3",bVar"b'2",bVar"b'1",
36925                                    bVar"b'0"]),
36926                             Let(Var("H",F1),Mop(Cast F1,LL[bVar"b'5"]),
36927                                 Let(Var("S",F1),
36928                                     Mop(Cast F1,LL[bVar"b'6"]),
36929                                     Let(Var("Rt",F4),
36930                                         Mop(Cast F4,
36931                                             LL[bVar"b'15",bVar"b'14",
36932                                                bVar"b'13",bVar"b'12"]),
36933                                         Let(Var("Rn",F4),
36934                                             Mop(Cast F4,
36935                                                 LL[bVar"b'19",bVar"b'18",
36936                                                    bVar"b'17",bVar"b'16"]),
36937                                             Let(Var("P",F1),
36938                                                 Mop(Cast F1,
36939                                                     LL[bVar"b'24"]),
36940                                                 MB(Call
36941                                                      ("Take",
36942                                                       ATy(qTy,
36943                                                           PTy(bTy,qTy)),
36944                                                       TP[Var("cond",F4),
36945                                                          Bop(Or,
36946                                                              Mop(Not,
36947                                                                  EQ(Var("H",
36948                                                                         F1),
36949                                                                     LW(0,
36950                                                                        1))),
36951                                                              EQ(Var("S",
36952                                                                     F1),
36953                                                                 LW(1,1)))]),
36954                                                    Close
36955                                                      (bVar"b",
36956                                                       ITE(bVar"b",
36957                                                           Let(bVar"wback",
36958                                                               Bop(Or,
36959                                                                   EQ(Var("P",
36960                                                                          F1),
36961                                                                      LW(0,
36962                                                                         1)),
36963                                                                   EQ(Mop(Cast
36964                                                                            F1,
36965                                                                          LL[bVar"b'21"]),
36966                                                                      LW(1,
36967                                                                         1))),
36968                                                               MB(Call
36969                                                                    ("ArchVersion",
36970                                                                     ATy(qTy,
36971                                                                         PTy(nTy,
36972                                                                             qTy)),
36973                                                                     LU),
36974                                                                  Close
36975                                                                    (nVar"v",
36976                                                                     MB(MB(MB(MB(MB(MU(Bop(Lt,
36977                                                                                           nVar"v",
36978                                                                                           LN
36979                                                                                            6),
36980                                                                                       qTy),
36981                                                                                    Close
36982                                                                                      (bVar"b",
36983                                                                                       MU(Bop(And,
36984                                                                                              bVar"b",
36985                                                                                              bVar"wback"),
36986                                                                                          qTy))),
36987                                                                                 Close
36988                                                                                   (bVar"b",
36989                                                                                    MU(Bop(And,
36990                                                                                           bVar"b",
36991                                                                                           EQ(Var("Rm",
36992                                                                                                  F4),
36993                                                                                              Var("Rn",
36994                                                                                                  F4))),
36995                                                                                       qTy))),
36996                                                                              Close
36997                                                                                (bVar"v",
36998                                                                                 MU(Bop(Or,
36999                                                                                        Bop(Or,
37000                                                                                            EQ(Var("Rt",
37001                                                                                                   F4),
37002                                                                                               LW(15,
37003                                                                                                  4)),
37004                                                                                            EQ(Var("Rm",
37005                                                                                                   F4),
37006                                                                                               LW(15,
37007                                                                                                  4))),
37008                                                                                        bVar"v"),
37009                                                                                    qTy))),
37010                                                                           Close
37011                                                                             (bVar"b",
37012                                                                              ITE(bVar"b",
37013                                                                                  Call
37014                                                                                    ("DECODE_UNPREDICTABLE",
37015                                                                                     ATy(qTy,
37016                                                                                         PTy(uTy,
37017                                                                                             qTy)),
37018                                                                                     TP[Var("mc",
37019                                                                                            CTy"MachineCode"),
37020                                                                                        LS
37021                                                                                         "LoadHalf/Byte"]),
37022                                                                                  MU(LU,
37023                                                                                     qTy)))),
37024                                                                        Close
37025                                                                          (AVar
37026                                                                             uTy,
37027                                                                           MU(Let(bVar"index",
37028                                                                                  EQ(Var("P",
37029                                                                                         F1),
37030                                                                                     LW(1,
37031                                                                                        1)),
37032                                                                                  Let(bVar"add",
37033                                                                                      EQ(Mop(Cast
37034                                                                                               F1,
37035                                                                                             LL[bVar"b'23"]),
37036                                                                                         LW(1,
37037                                                                                            1)),
37038                                                                                      Let(bVar"unsigned",
37039                                                                                          EQ(Var("S",
37040                                                                                                 F1),
37041                                                                                             LW(0,
37042                                                                                                1)),
37043                                                                                          Let(Var("m",
37044                                                                                                  CTy"offset1"),
37045                                                                                              Call
37046                                                                                                ("register_form1",
37047                                                                                                 CTy"offset1",
37048                                                                                                 TP[Var("Rm",
37049                                                                                                        F4),
37050                                                                                                    LC("SRType_LSL",
37051                                                                                                       CTy"SRType"),
37052                                                                                                    LN
37053                                                                                                     0]),
37054                                                                                              ITE(EQ(Var("H",
37055                                                                                                         F1),
37056                                                                                                     LW(1,
37057                                                                                                        1)),
37058                                                                                                  Call
37059                                                                                                    ("Load",
37060                                                                                                     CTy"instruction",
37061                                                                                                     Call
37062                                                                                                       ("LoadHalf",
37063                                                                                                        CTy"Load",
37064                                                                                                        TP[bVar"unsigned",
37065                                                                                                           bVar"add",
37066                                                                                                           bVar"index",
37067                                                                                                           bVar"wback",
37068                                                                                                           Var("Rt",
37069                                                                                                               F4),
37070                                                                                                           Var("Rn",
37071                                                                                                               F4),
37072                                                                                                           Var("m",
37073                                                                                                               CTy"offset1")])),
37074                                                                                                  Call
37075                                                                                                    ("Load",
37076                                                                                                     CTy"instruction",
37077                                                                                                     Call
37078                                                                                                       ("LoadByte",
37079                                                                                                        CTy"Load",
37080                                                                                                        TP[bVar"unsigned",
37081                                                                                                           bVar"add",
37082                                                                                                           bVar"index",
37083                                                                                                           bVar"wback",
37084                                                                                                           Var("Rt",
37085                                                                                                               F4),
37086                                                                                                           Var("Rn",
37087                                                                                                               F4),
37088                                                                                                           Var("m",
37089                                                                                                               CTy"offset1")]))))))),
37090                                                                              qTy)))))),
37091                                                           Call
37092                                                             ("Skip",
37093                                                              ATy(qTy,
37094                                                                  PTy(CTy"instruction",
37095                                                                      qTy)),
37096                                                              LU))))))))))),
37097                        (Bop(And,Mop(Not,bVar"b'22"),
37098                             Bop(And,Mop(Not,bVar"b'20"),
37099                                 Bop(And,bVar"b'7",
37100                                     Bop(And,bVar"b'6",bVar"b'4")))),
37101                         Let(Var("Rm",F4),
37102                             Mop(Cast F4,
37103                                 LL[bVar"b'3",bVar"b'2",bVar"b'1",
37104                                    bVar"b'0"]),
37105                             Let(Var("Rt",F4),
37106                                 Mop(Cast F4,
37107                                     LL[bVar"b'15",bVar"b'14",bVar"b'13",
37108                                        bVar"b'12"]),
37109                                 Let(Var("Rn",F4),
37110                                     Mop(Cast F4,
37111                                         LL[bVar"b'19",bVar"b'18",
37112                                            bVar"b'17",bVar"b'16"]),
37113                                     Let(Var("W",F1),
37114                                         Mop(Cast F1,LL[bVar"b'21"]),
37115                                         Let(Var("P",F1),
37116                                             Mop(Cast F1,LL[bVar"b'24"]),
37117                                             MB(Call
37118                                                  ("HaveDSPSupport",
37119                                                   ATy(qTy,PTy(bTy,qTy)),
37120                                                   LU),
37121                                                Close
37122                                                  (bVar"v",
37123                                                   MB(MB(MU(TP[Var("cond",
37124                                                                   F4),
37125                                                               bVar"v"],
37126                                                            qTy),
37127                                                         Close
37128                                                           (Var("v",
37129                                                                PTy(F4,bTy)),
37130                                                            Call
37131                                                              ("Take",
37132                                                               ATy(qTy,
37133                                                                   PTy(bTy,
37134                                                                       qTy)),
37135                                                               Var("v",
37136                                                                   PTy(F4,
37137                                                                       bTy))))),
37138                                                      Close
37139                                                        (bVar"b",
37140                                                         ITE(bVar"b",
37141                                                             Let(Var("Rt2",
37142                                                                     F4),
37143                                                                 Bop(Add,
37144                                                                     Var("Rt",
37145                                                                         F4),
37146                                                                     LW(1,
37147                                                                        4)),
37148                                                                 Let(bVar"wback",
37149                                                                     Bop(Or,
37150                                                                         EQ(Var("P",
37151                                                                                F1),
37152                                                                            LW(0,
37153                                                                               1)),
37154                                                                         EQ(Var("W",
37155                                                                                F1),
37156                                                                            LW(1,
37157                                                                               1))),
37158                                                                     MB(Call
37159                                                                          ("ArchVersion",
37160                                                                           ATy(qTy,
37161                                                                               PTy(nTy,
37162                                                                                   qTy)),
37163                                                                           LU),
37164                                                                        Close
37165                                                                          (nVar"v",
37166                                                                           MB(MB(MB(MB(MB(MU(Bop(Lt,
37167                                                                                                 nVar"v",
37168                                                                                                 LN
37169                                                                                                  6),
37170                                                                                             qTy),
37171                                                                                          Close
37172                                                                                            (bVar"b",
37173                                                                                             MU(Bop(And,
37174                                                                                                    bVar"b",
37175                                                                                                    bVar"wback"),
37176                                                                                                qTy))),
37177                                                                                       Close
37178                                                                                         (bVar"b",
37179                                                                                          MU(Bop(And,
37180                                                                                                 bVar"b",
37181                                                                                                 EQ(Var("Rm",
37182                                                                                                        F4),
37183                                                                                                    Var("Rn",
37184                                                                                                        F4))),
37185                                                                                             qTy))),
37186                                                                                    Close
37187                                                                                      (bVar"v",
37188                                                                                       MU(Bop(Or,
37189                                                                                              Bop(Or,
37190                                                                                                  Bop(Or,
37191                                                                                                      Bop(Or,
37192                                                                                                          Bop(Or,
37193                                                                                                              Bop(Or,
37194                                                                                                                  Bop(Or,
37195                                                                                                                      Bop(Bit,
37196                                                                                                                          Var("Rt",
37197                                                                                                                              F4),
37198                                                                                                                          LN
37199                                                                                                                           0),
37200                                                                                                                      Bop(And,
37201                                                                                                                          EQ(Var("P",
37202                                                                                                                                 F1),
37203                                                                                                                             LW(0,
37204                                                                                                                                1)),
37205                                                                                                                          EQ(Var("W",
37206                                                                                                                                 F1),
37207                                                                                                                             LW(1,
37208                                                                                                                                1)))),
37209                                                                                                                  EQ(Var("Rt2",
37210                                                                                                                         F4),
37211                                                                                                                     LW(15,
37212                                                                                                                        4))),
37213                                                                                                              EQ(Var("Rm",
37214                                                                                                                     F4),
37215                                                                                                                 LW(15,
37216                                                                                                                    4))),
37217                                                                                                          EQ(Var("Rm",
37218                                                                                                                 F4),
37219                                                                                                             Var("Rt",
37220                                                                                                                 F4))),
37221                                                                                                      EQ(Var("Rm",
37222                                                                                                             F4),
37223                                                                                                         Var("Rt2",
37224                                                                                                             F4))),
37225                                                                                                  Bop(And,
37226                                                                                                      bVar"wback",
37227                                                                                                      Bop(Or,
37228                                                                                                          Bop(Or,
37229                                                                                                              EQ(Var("Rn",
37230                                                                                                                     F4),
37231                                                                                                                 LW(15,
37232                                                                                                                    4)),
37233                                                                                                              EQ(Var("Rn",
37234                                                                                                                     F4),
37235                                                                                                                 Var("Rt",
37236                                                                                                                     F4))),
37237                                                                                                          EQ(Var("Rn",
37238                                                                                                                 F4),
37239                                                                                                             Var("Rt2",
37240                                                                                                                 F4))))),
37241                                                                                              bVar"v"),
37242                                                                                          qTy))),
37243                                                                                 Close
37244                                                                                   (bVar"b",
37245                                                                                    ITE(bVar"b",
37246                                                                                        Call
37247                                                                                          ("DECODE_UNPREDICTABLE",
37248                                                                                           ATy(qTy,
37249                                                                                               PTy(uTy,
37250                                                                                                   qTy)),
37251                                                                                           TP[Var("mc",
37252                                                                                                  CTy"MachineCode"),
37253                                                                                              LS
37254                                                                                               "Load/StoreDual (register)"]),
37255                                                                                        MU(LU,
37256                                                                                           qTy)))),
37257                                                                              Close
37258                                                                                (AVar
37259                                                                                   uTy,
37260                                                                                 MU(Let(bVar"index",
37261                                                                                        EQ(Var("P",
37262                                                                                               F1),
37263                                                                                           LW(1,
37264                                                                                              1)),
37265                                                                                        Let(bVar"add",
37266                                                                                            EQ(Mop(Cast
37267                                                                                                     F1,
37268                                                                                                   LL[bVar"b'23"]),
37269                                                                                               LW(1,
37270                                                                                                  1)),
37271                                                                                            Let(Var("m",
37272                                                                                                    CTy"offset2"),
37273                                                                                                Call
37274                                                                                                  ("register_form2",
37275                                                                                                   CTy"offset2",
37276                                                                                                   Var("Rm",
37277                                                                                                       F4)),
37278                                                                                                ITE(EQ(Mop(Cast
37279                                                                                                             F1,
37280                                                                                                           LL[bVar"b'5"]),
37281                                                                                                       LW(1,
37282                                                                                                          1)),
37283                                                                                                    Call
37284                                                                                                      ("Store",
37285                                                                                                       CTy"instruction",
37286                                                                                                       Call
37287                                                                                                         ("StoreDual",
37288                                                                                                          CTy"Store",
37289                                                                                                          TP[bVar"add",
37290                                                                                                             bVar"index",
37291                                                                                                             bVar"wback",
37292                                                                                                             Var("Rt",
37293                                                                                                                 F4),
37294                                                                                                             Var("Rt2",
37295                                                                                                                 F4),
37296                                                                                                             Var("Rn",
37297                                                                                                                 F4),
37298                                                                                                             Var("m",
37299                                                                                                                 CTy"offset2")])),
37300                                                                                                    Call
37301                                                                                                      ("Load",
37302                                                                                                       CTy"instruction",
37303                                                                                                       Call
37304                                                                                                         ("LoadDual",
37305                                                                                                          CTy"Load",
37306                                                                                                          TP[bVar"add",
37307                                                                                                             bVar"index",
37308                                                                                                             bVar"wback",
37309                                                                                                             Var("Rt",
37310                                                                                                                 F4),
37311                                                                                                             Var("Rt2",
37312                                                                                                                 F4),
37313                                                                                                             Var("Rn",
37314                                                                                                                 F4),
37315                                                                                                             Var("m",
37316                                                                                                                 CTy"offset2")])))))),
37317                                                                                    qTy))))))),
37318                                                             Call
37319                                                               ("Skip",
37320                                                                ATy(qTy,
37321                                                                    PTy(CTy"instruction",
37322                                                                        qTy)),
37323                                                                LU)))))))))))),
37324                        (Bop(And,bVar"b'22",
37325                             Bop(And,Mop(Not,bVar"b'20"),
37326                                 Bop(And,bVar"b'19",
37327                                     Bop(And,bVar"b'18",
37328                                         Bop(And,bVar"b'17",
37329                                             Bop(And,bVar"b'16",
37330                                                 Bop(And,bVar"b'7",
37331                                                     Bop(And,bVar"b'6",
37332                                                         Bop(And,
37333                                                             Mop(Not,
37334                                                                 bVar"b'5"),
37335                                                             bVar"b'4"))))))))),
37336                         Let(Var("Rt",F4),
37337                             Mop(Cast F4,
37338                                 LL[bVar"b'15",bVar"b'14",bVar"b'13",
37339                                    bVar"b'12"]),
37340                             MB(Call
37341                                  ("HaveDSPSupport",ATy(qTy,PTy(bTy,qTy)),
37342                                   LU),
37343                                Close
37344                                  (bVar"v",
37345                                   MB(MB(MU(TP[Var("cond",F4),bVar"v"],qTy),
37346                                         Close
37347                                           (Var("v",PTy(F4,bTy)),
37348                                            Call
37349                                              ("Take",
37350                                               ATy(qTy,PTy(bTy,qTy)),
37351                                               Var("v",PTy(F4,bTy))))),
37352                                      Close
37353                                        (bVar"b",
37354                                         ITE(bVar"b",
37355                                             Let(Var("Rt2",F4),
37356                                                 Bop(Add,Var("Rt",F4),
37357                                                     LW(1,4)),
37358                                                 MB(ITE(Bop(Or,
37359                                                            Bop(Bit,
37360                                                                Var("Rt",
37361                                                                    F4),
37362                                                                LN 0),
37363                                                            EQ(Var("Rt2",
37364                                                                   F4),
37365                                                               LW(15,4))),
37366                                                        Call
37367                                                          ("DECODE_UNPREDICTABLE",
37368                                                           ATy(qTy,
37369                                                               PTy(uTy,qTy)),
37370                                                           TP[Var("mc",
37371                                                                  CTy"MachineCode"),
37372                                                              LS
37373                                                               "LoadDual (literal)"]),
37374                                                        MU(LU,qTy)),
37375                                                    Close
37376                                                      (AVar uTy,
37377                                                       MU(Call
37378                                                            ("Load",
37379                                                             CTy"instruction",
37380                                                             Call
37381                                                               ("LoadDualLiteral",
37382                                                                CTy"Load",
37383                                                                TP[EQ(Mop(Cast
37384                                                                            F1,
37385                                                                          LL[bVar"b'23"]),
37386                                                                      LW(1,
37387                                                                         1)),
37388                                                                   Var("Rt",
37389                                                                       F4),
37390                                                                   Var("Rt2",
37391                                                                       F4),
37392                                                                   Mop(Cast
37393                                                                         F32,
37394                                                                       CC[Mop(Cast
37395                                                                                F4,
37396                                                                              LL[bVar"b'11",
37397                                                                                 bVar"b'10",
37398                                                                                 bVar"b'9",
37399                                                                                 bVar"b'8"]),
37400                                                                          Mop(Cast
37401                                                                                F4,
37402                                                                              LL[bVar"b'3",
37403                                                                                 bVar"b'2",
37404                                                                                 bVar"b'1",
37405                                                                                 bVar"b'0"])])])),
37406                                                          qTy)))),
37407                                             Call
37408                                               ("Skip",
37409                                                ATy(qTy,
37410                                                    PTy(CTy"instruction",
37411                                                        qTy)),LU)))))))),
37412                        (Bop(And,bVar"b'22",
37413                             Bop(And,Mop(Not,bVar"b'20"),
37414                                 Bop(And,bVar"b'7",
37415                                     Bop(And,bVar"b'6",bVar"b'4")))),
37416                         Let(Var("S",F1),Mop(Cast F1,LL[bVar"b'5"]),
37417                             Let(Var("Rt",F4),
37418                                 Mop(Cast F4,
37419                                     LL[bVar"b'15",bVar"b'14",bVar"b'13",
37420                                        bVar"b'12"]),
37421                                 Let(Var("Rn",F4),
37422                                     Mop(Cast F4,
37423                                         LL[bVar"b'19",bVar"b'18",
37424                                            bVar"b'17",bVar"b'16"]),
37425                                     Let(Var("W",F1),
37426                                         Mop(Cast F1,LL[bVar"b'21"]),
37427                                         Let(Var("P",F1),
37428                                             Mop(Cast F1,LL[bVar"b'24"]),
37429                                             MB(Call
37430                                                  ("HaveDSPSupport",
37431                                                   ATy(qTy,PTy(bTy,qTy)),
37432                                                   LU),
37433                                                Close
37434                                                  (bVar"v",
37435                                                   MB(MB(MU(TP[Var("cond",
37436                                                                   F4),
37437                                                               bVar"v"],
37438                                                            qTy),
37439                                                         Close
37440                                                           (Var("v",
37441                                                                PTy(F4,bTy)),
37442                                                            Call
37443                                                              ("Take",
37444                                                               ATy(qTy,
37445                                                                   PTy(bTy,
37446                                                                       qTy)),
37447                                                               Var("v",
37448                                                                   PTy(F4,
37449                                                                       bTy))))),
37450                                                      Close
37451                                                        (bVar"b",
37452                                                         ITE(bVar"b",
37453                                                             Let(Var("Rt2",
37454                                                                     F4),
37455                                                                 Bop(Add,
37456                                                                     Var("Rt",
37457                                                                         F4),
37458                                                                     LW(1,
37459                                                                        4)),
37460                                                                 Let(bVar"wback",
37461                                                                     Bop(Or,
37462                                                                         EQ(Var("P",
37463                                                                                F1),
37464                                                                            LW(0,
37465                                                                               1)),
37466                                                                         EQ(Var("W",
37467                                                                                F1),
37468                                                                            LW(1,
37469                                                                               1))),
37470                                                                     MB(ITE(Bop(Or,
37471                                                                                Bop(Or,
37472                                                                                    Bop(Or,
37473                                                                                        Bop(Bit,
37474                                                                                            Var("Rt",
37475                                                                                                F4),
37476                                                                                            LN
37477                                                                                             0),
37478                                                                                        Bop(And,
37479                                                                                            EQ(Var("P",
37480                                                                                                   F1),
37481                                                                                               LW(0,
37482                                                                                                  1)),
37483                                                                                            EQ(Var("W",
37484                                                                                                   F1),
37485                                                                                               LW(1,
37486                                                                                                  1)))),
37487                                                                                    Bop(And,
37488                                                                                        bVar"wback",
37489                                                                                        Bop(Or,
37490                                                                                            Bop(Or,
37491                                                                                                Bop(And,
37492                                                                                                    EQ(Var("S",
37493                                                                                                           F1),
37494                                                                                                       LW(1,
37495                                                                                                          1)),
37496                                                                                                    EQ(Var("Rn",
37497                                                                                                           F4),
37498                                                                                                       LW(15,
37499                                                                                                          4))),
37500                                                                                                EQ(Var("Rn",
37501                                                                                                       F4),
37502                                                                                                   Var("Rt",
37503                                                                                                       F4))),
37504                                                                                            EQ(Var("Rn",
37505                                                                                                   F4),
37506                                                                                               Var("Rt2",
37507                                                                                                   F4))))),
37508                                                                                EQ(Var("Rt2",
37509                                                                                       F4),
37510                                                                                   LW(15,
37511                                                                                      4))),
37512                                                                            Call
37513                                                                              ("DECODE_UNPREDICTABLE",
37514                                                                               ATy(qTy,
37515                                                                                   PTy(uTy,
37516                                                                                       qTy)),
37517                                                                               TP[Var("mc",
37518                                                                                      CTy"MachineCode"),
37519                                                                                  LS
37520                                                                                   "Load/StoreDual (immediate)"]),
37521                                                                            MU(LU,
37522                                                                               qTy)),
37523                                                                        Close
37524                                                                          (AVar
37525                                                                             uTy,
37526                                                                           MU(Let(bVar"index",
37527                                                                                  EQ(Var("P",
37528                                                                                         F1),
37529                                                                                     LW(1,
37530                                                                                        1)),
37531                                                                                  Let(bVar"add",
37532                                                                                      EQ(Mop(Cast
37533                                                                                               F1,
37534                                                                                             LL[bVar"b'23"]),
37535                                                                                         LW(1,
37536                                                                                            1)),
37537                                                                                      Let(Var("m",
37538                                                                                              CTy"offset2"),
37539                                                                                          Call
37540                                                                                            ("immediate_form2",
37541                                                                                             CTy"offset2",
37542                                                                                             Mop(Cast
37543                                                                                                   F32,
37544                                                                                                 CC[Mop(Cast
37545                                                                                                          F4,
37546                                                                                                        LL[bVar"b'11",
37547                                                                                                           bVar"b'10",
37548                                                                                                           bVar"b'9",
37549                                                                                                           bVar"b'8"]),
37550                                                                                                    Mop(Cast
37551                                                                                                          F4,
37552                                                                                                        LL[bVar"b'3",
37553                                                                                                           bVar"b'2",
37554                                                                                                           bVar"b'1",
37555                                                                                                           bVar"b'0"])])),
37556                                                                                          ITE(EQ(Var("S",
37557                                                                                                     F1),
37558                                                                                                 LW(1,
37559                                                                                                    1)),
37560                                                                                              Call
37561                                                                                                ("Store",
37562                                                                                                 CTy"instruction",
37563                                                                                                 Call
37564                                                                                                   ("StoreDual",
37565                                                                                                    CTy"Store",
37566                                                                                                    TP[bVar"add",
37567                                                                                                       bVar"index",
37568                                                                                                       bVar"wback",
37569                                                                                                       Var("Rt",
37570                                                                                                           F4),
37571                                                                                                       Var("Rt2",
37572                                                                                                           F4),
37573                                                                                                       Var("Rn",
37574                                                                                                           F4),
37575                                                                                                       Var("m",
37576                                                                                                           CTy"offset2")])),
37577                                                                                              Call
37578                                                                                                ("Load",
37579                                                                                                 CTy"instruction",
37580                                                                                                 Call
37581                                                                                                   ("LoadDual",
37582                                                                                                    CTy"Load",
37583                                                                                                    TP[bVar"add",
37584                                                                                                       bVar"index",
37585                                                                                                       bVar"wback",
37586                                                                                                       Var("Rt",
37587                                                                                                           F4),
37588                                                                                                       Var("Rt2",
37589                                                                                                           F4),
37590                                                                                                       Var("Rn",
37591                                                                                                           F4),
37592                                                                                                       Var("m",
37593                                                                                                           CTy"offset2")])))))),
37594                                                                              qTy))))),
37595                                                             Call
37596                                                               ("Skip",
37597                                                                ATy(qTy,
37598                                                                    PTy(CTy"instruction",
37599                                                                        qTy)),
37600                                                                LU)))))))))))),
37601                        (Bop(And,Mop(Not,bVar"b'24"),
37602                             Bop(And,bVar"b'22",
37603                                 Bop(And,bVar"b'21",
37604                                     Bop(And,bVar"b'20",
37605                                         Bop(And,bVar"b'7",bVar"b'4"))))),
37606                         Let(Var("H",F1),Mop(Cast F1,LL[bVar"b'5"]),
37607                             Let(Var("S",F1),Mop(Cast F1,LL[bVar"b'6"]),
37608                                 Let(Var("Rt",F4),
37609                                     Mop(Cast F4,
37610                                         LL[bVar"b'15",bVar"b'14",
37611                                            bVar"b'13",bVar"b'12"]),
37612                                     Let(Var("Rn",F4),
37613                                         Mop(Cast F4,
37614                                             LL[bVar"b'19",bVar"b'18",
37615                                                bVar"b'17",bVar"b'16"]),
37616                                         MB(Call
37617                                              ("HaveThumb2",
37618                                               ATy(qTy,PTy(bTy,qTy)),LU),
37619                                            Close
37620                                              (bVar"v",
37621                                               MB(MB(MB(MU(Bop(And,
37622                                                               Bop(Or,
37623                                                                   Mop(Not,
37624                                                                       EQ(Var("H",
37625                                                                              F1),
37626                                                                          LW(0,
37627                                                                             1))),
37628                                                                   EQ(Var("S",
37629                                                                          F1),
37630                                                                      LW(1,
37631                                                                         1))),
37632                                                               bVar"v"),
37633                                                           qTy),
37634                                                        Close
37635                                                          (bVar"v",
37636                                                           MU(TP[Var("cond",
37637                                                                     F4),
37638                                                                 bVar"v"],
37639                                                              qTy))),
37640                                                     Close
37641                                                       (Var("v",
37642                                                            PTy(F4,bTy)),
37643                                                        Call
37644                                                          ("Take",
37645                                                           ATy(qTy,
37646                                                               PTy(bTy,qTy)),
37647                                                           Var("v",
37648                                                               PTy(F4,bTy))))),
37649                                                  Close
37650                                                    (bVar"b",
37651                                                     ITE(bVar"b",
37652                                                         MB(ITE(Bop(Or,
37653                                                                    Bop(Or,
37654                                                                        EQ(Var("Rt",
37655                                                                               F4),
37656                                                                           LW(15,
37657                                                                              4)),
37658                                                                        EQ(Var("Rn",
37659                                                                               F4),
37660                                                                           LW(15,
37661                                                                              4))),
37662                                                                    EQ(Var("Rn",
37663                                                                           F4),
37664                                                                       Var("Rt",
37665                                                                           F4))),
37666                                                                Call
37667                                                                  ("DECODE_UNPREDICTABLE",
37668                                                                   ATy(qTy,
37669                                                                       PTy(uTy,
37670                                                                           qTy)),
37671                                                                   TP[Var("mc",
37672                                                                          CTy"MachineCode"),
37673                                                                      LS
37674                                                                       "LoadHalf/Byte (unprivileged)"]),
37675                                                                MU(LU,qTy)),
37676                                                            Close
37677                                                              (AVar uTy,
37678                                                               MU(Let(bVar"postindex",
37679                                                                      LT,
37680                                                                      Let(bVar"add",
37681                                                                          EQ(Mop(Cast
37682                                                                                   F1,
37683                                                                                 LL[bVar"b'23"]),
37684                                                                             LW(1,
37685                                                                                1)),
37686                                                                          Let(Var("m",
37687                                                                                  CTy"offset2"),
37688                                                                              Call
37689                                                                                ("immediate_form2",
37690                                                                                 CTy"offset2",
37691                                                                                 Mop(Cast
37692                                                                                       F32,
37693                                                                                     CC[Mop(Cast
37694                                                                                              F4,
37695                                                                                            LL[bVar"b'11",
37696                                                                                               bVar"b'10",
37697                                                                                               bVar"b'9",
37698                                                                                               bVar"b'8"]),
37699                                                                                        Mop(Cast
37700                                                                                              F4,
37701                                                                                            LL[bVar"b'3",
37702                                                                                               bVar"b'2",
37703                                                                                               bVar"b'1",
37704                                                                                               bVar"b'0"])])),
37705                                                                              ITE(EQ(Var("H",
37706                                                                                         F1),
37707                                                                                     LW(1,
37708                                                                                        1)),
37709                                                                                  Call
37710                                                                                    ("Load",
37711                                                                                     CTy"instruction",
37712                                                                                     Call
37713                                                                                       ("LoadHalfUnprivileged",
37714                                                                                        CTy"Load",
37715                                                                                        TP[EQ(Var("S",
37716                                                                                                  F1),
37717                                                                                              LW(0,
37718                                                                                                 1)),
37719                                                                                           bVar"add",
37720                                                                                           bVar"postindex",
37721                                                                                           Var("Rt",
37722                                                                                               F4),
37723                                                                                           Var("Rn",
37724                                                                                               F4),
37725                                                                                           Var("m",
37726                                                                                               CTy"offset2")])),
37727                                                                                  Call
37728                                                                                    ("Load",
37729                                                                                     CTy"instruction",
37730                                                                                     Call
37731                                                                                       ("LoadSignedByteUnprivileged",
37732                                                                                        CTy"Load",
37733                                                                                        TP[bVar"add",
37734                                                                                           bVar"postindex",
37735                                                                                           Var("Rt",
37736                                                                                               F4),
37737                                                                                           Var("Rn",
37738                                                                                               F4),
37739                                                                                           Var("m",
37740                                                                                               CTy"offset2")])))))),
37741                                                                  qTy))),
37742                                                         Call
37743                                                           ("Skip",
37744                                                            ATy(qTy,
37745                                                                PTy(CTy"instruction",
37746                                                                    qTy)),
37747                                                            LU))))))))))),
37748                        (Bop(And,bVar"b'22",
37749                             Bop(And,bVar"b'20",
37750                                 Bop(And,bVar"b'19",
37751                                     Bop(And,bVar"b'18",
37752                                         Bop(And,bVar"b'17",
37753                                             Bop(And,bVar"b'16",
37754                                                 Bop(And,bVar"b'7",
37755                                                     bVar"b'4"))))))),
37756                         Let(Var("H",F1),Mop(Cast F1,LL[bVar"b'5"]),
37757                             Let(Var("S",F1),Mop(Cast F1,LL[bVar"b'6"]),
37758                                 Let(Var("Rt",F4),
37759                                     Mop(Cast F4,
37760                                         LL[bVar"b'15",bVar"b'14",
37761                                            bVar"b'13",bVar"b'12"]),
37762                                     MB(Call
37763                                          ("Take",ATy(qTy,PTy(bTy,qTy)),
37764                                           TP[Var("cond",F4),
37765                                              Bop(Or,
37766                                                  Mop(Not,
37767                                                      EQ(Var("H",F1),
37768                                                         LW(0,1))),
37769                                                  EQ(Var("S",F1),LW(1,1)))]),
37770                                        Close
37771                                          (bVar"b",
37772                                           ITE(bVar"b",
37773                                               MB(ITE(EQ(Var("Rt",F4),
37774                                                         LW(15,4)),
37775                                                      Call
37776                                                        ("DECODE_UNPREDICTABLE",
37777                                                         ATy(qTy,
37778                                                             PTy(uTy,qTy)),
37779                                                         TP[Var("mc",
37780                                                                CTy"MachineCode"),
37781                                                            LS
37782                                                             "LoadHalf/Byte (literal)"]),
37783                                                      MU(LU,qTy)),
37784                                                  Close
37785                                                    (AVar uTy,
37786                                                     MU(Let(bVar"add",
37787                                                            EQ(Mop(Cast F1,
37788                                                                   LL[bVar"b'23"]),
37789                                                               LW(1,1)),
37790                                                            Let(bVar"unsigned",
37791                                                                EQ(Var("S",
37792                                                                       F1),
37793                                                                   LW(0,1)),
37794                                                                Let(Var("imm32",
37795                                                                        F32),
37796                                                                    Mop(Cast
37797                                                                          F32,
37798                                                                        CC[Mop(Cast
37799                                                                                 F4,
37800                                                                               LL[bVar"b'11",
37801                                                                                  bVar"b'10",
37802                                                                                  bVar"b'9",
37803                                                                                  bVar"b'8"]),
37804                                                                           Mop(Cast
37805                                                                                 F4,
37806                                                                               LL[bVar"b'3",
37807                                                                                  bVar"b'2",
37808                                                                                  bVar"b'1",
37809                                                                                  bVar"b'0"])]),
37810                                                                    ITE(EQ(Var("H",
37811                                                                               F1),
37812                                                                           LW(1,
37813                                                                              1)),
37814                                                                        Call
37815                                                                          ("Load",
37816                                                                           CTy"instruction",
37817                                                                           Call
37818                                                                             ("LoadHalfLiteral",
37819                                                                              CTy"Load",
37820                                                                              TP[bVar"unsigned",
37821                                                                                 bVar"add",
37822                                                                                 Var("Rt",
37823                                                                                     F4),
37824                                                                                 Var("imm32",
37825                                                                                     F32)])),
37826                                                                        Call
37827                                                                          ("Load",
37828                                                                           CTy"instruction",
37829                                                                           Call
37830                                                                             ("LoadByteLiteral",
37831                                                                              CTy"Load",
37832                                                                              TP[bVar"unsigned",
37833                                                                                 bVar"add",
37834                                                                                 Var("Rt",
37835                                                                                     F4),
37836                                                                                 Var("imm32",
37837                                                                                     F32)])))))),
37838                                                        qTy))),
37839                                               Call
37840                                                 ("Skip",
37841                                                  ATy(qTy,
37842                                                      PTy(CTy"instruction",
37843                                                          qTy)),LU)))))))),
37844                        (Bop(And,bVar"b'22",
37845                             Bop(And,bVar"b'20",
37846                                 Bop(And,bVar"b'7",bVar"b'4"))),
37847                         Let(Var("H",F1),Mop(Cast F1,LL[bVar"b'5"]),
37848                             Let(Var("S",F1),Mop(Cast F1,LL[bVar"b'6"]),
37849                                 Let(Var("Rt",F4),
37850                                     Mop(Cast F4,
37851                                         LL[bVar"b'15",bVar"b'14",
37852                                            bVar"b'13",bVar"b'12"]),
37853                                     Let(Var("Rn",F4),
37854                                         Mop(Cast F4,
37855                                             LL[bVar"b'19",bVar"b'18",
37856                                                bVar"b'17",bVar"b'16"]),
37857                                         Let(Var("P",F1),
37858                                             Mop(Cast F1,LL[bVar"b'24"]),
37859                                             MB(Call
37860                                                  ("Take",
37861                                                   ATy(qTy,PTy(bTy,qTy)),
37862                                                   TP[Var("cond",F4),
37863                                                      Bop(Or,
37864                                                          Mop(Not,
37865                                                              EQ(Var("H",
37866                                                                     F1),
37867                                                                 LW(0,1))),
37868                                                          EQ(Var("S",F1),
37869                                                             LW(1,1)))]),
37870                                                Close
37871                                                  (bVar"b",
37872                                                   ITE(bVar"b",
37873                                                       Let(bVar"wback",
37874                                                           Bop(Or,
37875                                                               EQ(Var("P",
37876                                                                      F1),
37877                                                                  LW(0,1)),
37878                                                               EQ(Mop(Cast
37879                                                                        F1,
37880                                                                      LL[bVar"b'21"]),
37881                                                                  LW(1,1))),
37882                                                           MB(ITE(Bop(Or,
37883                                                                      EQ(Var("Rt",
37884                                                                             F4),
37885                                                                         LW(15,
37886                                                                            4)),
37887                                                                      Bop(And,
37888                                                                          bVar"wback",
37889                                                                          EQ(Var("Rn",
37890                                                                                 F4),
37891                                                                             Var("Rt",
37892                                                                                 F4)))),
37893                                                                  Call
37894                                                                    ("DECODE_UNPREDICTABLE",
37895                                                                     ATy(qTy,
37896                                                                         PTy(uTy,
37897                                                                             qTy)),
37898                                                                     TP[Var("mc",
37899                                                                            CTy"MachineCode"),
37900                                                                        LS
37901                                                                         "LoadHalf/Byte (immediate)"]),
37902                                                                  MU(LU,
37903                                                                     qTy)),
37904                                                              Close
37905                                                                (AVar uTy,
37906                                                                 MU(Let(bVar"index",
37907                                                                        EQ(Var("P",
37908                                                                               F1),
37909                                                                           LW(1,
37910                                                                              1)),
37911                                                                        Let(bVar"add",
37912                                                                            EQ(Mop(Cast
37913                                                                                     F1,
37914                                                                                   LL[bVar"b'23"]),
37915                                                                               LW(1,
37916                                                                                  1)),
37917                                                                            Let(bVar"unsigned",
37918                                                                                EQ(Var("S",
37919                                                                                       F1),
37920                                                                                   LW(0,
37921                                                                                      1)),
37922                                                                                Let(Var("m",
37923                                                                                        CTy"offset1"),
37924                                                                                    Call
37925                                                                                      ("immediate_form1",
37926                                                                                       CTy"offset1",
37927                                                                                       Mop(Cast
37928                                                                                             F32,
37929                                                                                           CC[Mop(Cast
37930                                                                                                    F4,
37931                                                                                                  LL[bVar"b'11",
37932                                                                                                     bVar"b'10",
37933                                                                                                     bVar"b'9",
37934                                                                                                     bVar"b'8"]),
37935                                                                                              Mop(Cast
37936                                                                                                    F4,
37937                                                                                                  LL[bVar"b'3",
37938                                                                                                     bVar"b'2",
37939                                                                                                     bVar"b'1",
37940                                                                                                     bVar"b'0"])])),
37941                                                                                    ITE(EQ(Var("H",
37942                                                                                               F1),
37943                                                                                           LW(1,
37944                                                                                              1)),
37945                                                                                        Call
37946                                                                                          ("Load",
37947                                                                                           CTy"instruction",
37948                                                                                           Call
37949                                                                                             ("LoadHalf",
37950                                                                                              CTy"Load",
37951                                                                                              TP[bVar"unsigned",
37952                                                                                                 bVar"add",
37953                                                                                                 bVar"index",
37954                                                                                                 bVar"wback",
37955                                                                                                 Var("Rt",
37956                                                                                                     F4),
37957                                                                                                 Var("Rn",
37958                                                                                                     F4),
37959                                                                                                 Var("m",
37960                                                                                                     CTy"offset1")])),
37961                                                                                        Call
37962                                                                                          ("Load",
37963                                                                                           CTy"instruction",
37964                                                                                           Call
37965                                                                                             ("LoadByte",
37966                                                                                              CTy"Load",
37967                                                                                              TP[bVar"unsigned",
37968                                                                                                 bVar"add",
37969                                                                                                 bVar"index",
37970                                                                                                 bVar"wback",
37971                                                                                                 Var("Rt",
37972                                                                                                     F4),
37973                                                                                                 Var("Rn",
37974                                                                                                     F4),
37975                                                                                                 Var("m",
37976                                                                                                     CTy"offset1")]))))))),
37977                                                                    qTy)))),
37978                                                       Call
37979                                                         ("Skip",
37980                                                          ATy(qTy,
37981                                                              PTy(CTy"instruction",
37982                                                                  qTy)),LU)))))))))),
37983                        (Bop(And,Mop(Not,bVar"b'24"),
37984                             Bop(And,bVar"b'22",
37985                                 Bop(And,bVar"b'21",
37986                                     Bop(And,Mop(Not,bVar"b'20"),
37987                                         Bop(And,bVar"b'7",
37988                                             Bop(And,Mop(Not,bVar"b'6"),
37989                                                 Bop(And,bVar"b'5",
37990                                                     bVar"b'4"))))))),
37991                         Let(Var("Rt",F4),
37992                             Mop(Cast F4,
37993                                 LL[bVar"b'15",bVar"b'14",bVar"b'13",
37994                                    bVar"b'12"]),
37995                             Let(Var("Rn",F4),
37996                                 Mop(Cast F4,
37997                                     LL[bVar"b'19",bVar"b'18",bVar"b'17",
37998                                        bVar"b'16"]),
37999                                 MB(Call
38000                                      ("HaveThumb2",ATy(qTy,PTy(bTy,qTy)),
38001                                       LU),
38002                                    Close
38003                                      (bVar"v",
38004                                       MB(MB(MU(TP[Var("cond",F4),bVar"v"],
38005                                                qTy),
38006                                             Close
38007                                               (Var("v",PTy(F4,bTy)),
38008                                                Call
38009                                                  ("Take",
38010                                                   ATy(qTy,PTy(bTy,qTy)),
38011                                                   Var("v",PTy(F4,bTy))))),
38012                                          Close
38013                                            (bVar"b",
38014                                             ITE(bVar"b",
38015                                                 MB(ITE(Bop(Or,
38016                                                            Bop(Or,
38017                                                                EQ(Var("Rt",
38018                                                                       F4),
38019                                                                   LW(15,4)),
38020                                                                EQ(Var("Rn",
38021                                                                       F4),
38022                                                                   LW(15,4))),
38023                                                            EQ(Var("Rn",F4),
38024                                                               Var("Rt",F4))),
38025                                                        Call
38026                                                          ("DECODE_UNPREDICTABLE",
38027                                                           ATy(qTy,
38028                                                               PTy(uTy,qTy)),
38029                                                           TP[Var("mc",
38030                                                                  CTy"MachineCode"),
38031                                                              LS
38032                                                               "StoreHalf (immediate)"]),
38033                                                        MU(LU,qTy)),
38034                                                    Close
38035                                                      (AVar uTy,
38036                                                       MU(Call
38037                                                            ("Store",
38038                                                             CTy"instruction",
38039                                                             Call
38040                                                               ("StoreHalfUnprivileged",
38041                                                                CTy"Store",
38042                                                                TP[EQ(Mop(Cast
38043                                                                            F1,
38044                                                                          LL[bVar"b'23"]),
38045                                                                      LW(1,
38046                                                                         1)),
38047                                                                   LT,
38048                                                                   Var("Rt",
38049                                                                       F4),
38050                                                                   Var("Rn",
38051                                                                       F4),
38052                                                                   Call
38053                                                                     ("immediate_form2",
38054                                                                      CTy"offset2",
38055                                                                      Mop(Cast
38056                                                                            F32,
38057                                                                          CC[Mop(Cast
38058                                                                                   F4,
38059                                                                                 LL[bVar"b'11",
38060                                                                                    bVar"b'10",
38061                                                                                    bVar"b'9",
38062                                                                                    bVar"b'8"]),
38063                                                                             Mop(Cast
38064                                                                                   F4,
38065                                                                                 LL[bVar"b'3",
38066                                                                                    bVar"b'2",
38067                                                                                    bVar"b'1",
38068                                                                                    bVar"b'0"])]))])),
38069                                                          qTy))),
38070                                                 Call
38071                                                   ("Skip",
38072                                                    ATy(qTy,
38073                                                        PTy(CTy"instruction",
38074                                                            qTy)),LU))))))))),
38075                        (Bop(And,bVar"b'22",
38076                             Bop(And,Mop(Not,bVar"b'20"),
38077                                 Bop(And,bVar"b'7",
38078                                     Bop(And,Mop(Not,bVar"b'6"),
38079                                         Bop(And,bVar"b'5",bVar"b'4"))))),
38080                         Let(Var("Rt",F4),
38081                             Mop(Cast F4,
38082                                 LL[bVar"b'15",bVar"b'14",bVar"b'13",
38083                                    bVar"b'12"]),
38084                             Let(Var("Rn",F4),
38085                                 Mop(Cast F4,
38086                                     LL[bVar"b'19",bVar"b'18",bVar"b'17",
38087                                        bVar"b'16"]),
38088                                 Let(Var("P",F1),
38089                                     Mop(Cast F1,LL[bVar"b'24"]),
38090                                     MB(Call
38091                                          ("Take",ATy(qTy,PTy(bTy,qTy)),
38092                                           TP[Var("cond",F4),LT]),
38093                                        Close
38094                                          (bVar"b",
38095                                           ITE(bVar"b",
38096                                               Let(bVar"wback",
38097                                                   Bop(Or,
38098                                                       EQ(Var("P",F1),
38099                                                          LW(0,1)),
38100                                                       EQ(Mop(Cast F1,
38101                                                              LL[bVar"b'21"]),
38102                                                          LW(1,1))),
38103                                                   MB(ITE(Bop(Or,
38104                                                              EQ(Var("Rt",
38105                                                                     F4),
38106                                                                 LW(15,4)),
38107                                                              Bop(And,
38108                                                                  bVar"wback",
38109                                                                  Bop(Or,
38110                                                                      EQ(Var("Rn",
38111                                                                             F4),
38112                                                                         LW(15,
38113                                                                            4)),
38114                                                                      EQ(Var("Rn",
38115                                                                             F4),
38116                                                                         Var("Rt",
38117                                                                             F4))))),
38118                                                          Call
38119                                                            ("DECODE_UNPREDICTABLE",
38120                                                             ATy(qTy,
38121                                                                 PTy(uTy,
38122                                                                     qTy)),
38123                                                             TP[Var("mc",
38124                                                                    CTy"MachineCode"),
38125                                                                LS
38126                                                                 "StoreHalf (immediate)"]),
38127                                                          MU(LU,qTy)),
38128                                                      Close
38129                                                        (AVar uTy,
38130                                                         MU(Call
38131                                                              ("Store",
38132                                                               CTy"instruction",
38133                                                               Call
38134                                                                 ("StoreHalf",
38135                                                                  CTy"Store",
38136                                                                  TP[EQ(Mop(Cast
38137                                                                              F1,
38138                                                                            LL[bVar"b'23"]),
38139                                                                        LW(1,
38140                                                                           1)),
38141                                                                     EQ(Var("P",
38142                                                                            F1),
38143                                                                        LW(1,
38144                                                                           1)),
38145                                                                     bVar"wback",
38146                                                                     Var("Rt",
38147                                                                         F4),
38148                                                                     Var("Rn",
38149                                                                         F4),
38150                                                                     Call
38151                                                                       ("immediate_form1",
38152                                                                        CTy"offset1",
38153                                                                        Mop(Cast
38154                                                                              F32,
38155                                                                            CC[Mop(Cast
38156                                                                                     F4,
38157                                                                                   LL[bVar"b'11",
38158                                                                                      bVar"b'10",
38159                                                                                      bVar"b'9",
38160                                                                                      bVar"b'8"]),
38161                                                                               Mop(Cast
38162                                                                                     F4,
38163                                                                                   LL[bVar"b'3",
38164                                                                                      bVar"b'2",
38165                                                                                      bVar"b'1",
38166                                                                                      bVar"b'0"])]))])),
38167                                                            qTy)))),
38168                                               Call
38169                                                 ("Skip",
38170                                                  ATy(qTy,
38171                                                      PTy(CTy"instruction",
38172                                                          qTy)),LU))))))))],
38173                       Call
38174                         ("UndefinedARM",
38175                          ATy(qTy,PTy(CTy"instruction",qTy)),
38176                          Var("cond",F4))))))))
38177;
38178val DecodeThumb_def = Def
38179  ("DecodeThumb",Var("h",F16),
38180   Let(Var("mc",CTy"MachineCode"),
38181       Call("Thumb",CTy"MachineCode",Var("h",F16)),
38182       Let(TP[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12",bVar"b'11",
38183              bVar"b'10",bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
38184              bVar"b'5",bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",bVar"b'0"],
38185           BL(16,Var("h",F16)),
38186           ITB([(bVar"b'13",
38187                 ITB([(bVar"b'15",
38188                       ITB([(Bop(And,Mop(Not,bVar"b'14"),
38189                                 Mop(Not,bVar"b'12")),
38190                             MB(Call
38191                                  ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),
38192                                   LU),
38193                                Close
38194                                  (Var("v",F4),
38195                                   MB(MB(MU(TP[Var("v",F4),LT],qTy),
38196                                         Close
38197                                           (Var("v",PTy(F4,bTy)),
38198                                            Call
38199                                              ("Take",
38200                                               ATy(qTy,PTy(bTy,qTy)),
38201                                               Var("v",PTy(F4,bTy))))),
38202                                      Close
38203                                        (bVar"b",
38204                                         ITE(bVar"b",
38205                                             MU(Call
38206                                                  ("Data",
38207                                                   CTy"instruction",
38208                                                   Call
38209                                                     ("ArithLogicImmediate",
38210                                                      CTy"Data",
38211                                                      TP[LW(4,4),LF,
38212                                                         Mop(Cast F4,
38213                                                             Mop(Cast
38214                                                                   (FTy 3),
38215                                                                 LL[bVar"b'10",
38216                                                                    bVar"b'9",
38217                                                                    bVar"b'8"])),
38218                                                         ITE(EQ(Mop(Cast
38219                                                                      F1,
38220                                                                    LL[bVar"b'11"]),
38221                                                                LW(1,1)),
38222                                                             LW(13,4),
38223                                                             LW(15,4)),
38224                                                         CC[LW(15,4),
38225                                                            Mop(Cast F8,
38226                                                                LL[bVar"b'7",
38227                                                                   bVar"b'6",
38228                                                                   bVar"b'5",
38229                                                                   bVar"b'4",
38230                                                                   bVar"b'3",
38231                                                                   bVar"b'2",
38232                                                                   bVar"b'1",
38233                                                                   bVar"b'0"])]])),
38234                                                qTy),
38235                                             Call
38236                                               ("Skip",
38237                                                ATy(qTy,
38238                                                    PTy(CTy"instruction",
38239                                                        qTy)),LU))))))),
38240                            (Bop(And,Mop(Not,bVar"b'14"),
38241                                 Bop(And,bVar"b'12",
38242                                     Bop(And,Mop(Not,bVar"b'11"),
38243                                         Bop(And,Mop(Not,bVar"b'10"),
38244                                             Bop(And,Mop(Not,bVar"b'9"),
38245                                                 Mop(Not,bVar"b'8")))))),
38246                             MB(Call
38247                                  ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),
38248                                   LU),
38249                                Close
38250                                  (Var("v",F4),
38251                                   MB(MB(MU(TP[Var("v",F4),LT],qTy),
38252                                         Close
38253                                           (Var("v",PTy(F4,bTy)),
38254                                            Call
38255                                              ("Take",
38256                                               ATy(qTy,PTy(bTy,qTy)),
38257                                               Var("v",PTy(F4,bTy))))),
38258                                      Close
38259                                        (bVar"b",
38260                                         ITE(bVar"b",
38261                                             MU(Call
38262                                                  ("Data",
38263                                                   CTy"instruction",
38264                                                   Call
38265                                                     ("ArithLogicImmediate",
38266                                                      CTy"Data",
38267                                                      TP[ITE(EQ(Mop(Cast
38268                                                                      F1,
38269                                                                    LL[bVar"b'7"]),
38270                                                                LW(1,1)),
38271                                                             LW(2,4),
38272                                                             LW(4,4)),LF,
38273                                                         LW(13,4),
38274                                                         LW(13,4),
38275                                                         CC[LW(30,5),
38276                                                            Mop(Cast
38277                                                                  (FTy 7),
38278                                                                LL[bVar"b'6",
38279                                                                   bVar"b'5",
38280                                                                   bVar"b'4",
38281                                                                   bVar"b'3",
38282                                                                   bVar"b'2",
38283                                                                   bVar"b'1",
38284                                                                   bVar"b'0"])]])),
38285                                                qTy),
38286                                             Call
38287                                               ("Skip",
38288                                                ATy(qTy,
38289                                                    PTy(CTy"instruction",
38290                                                        qTy)),LU))))))),
38291                            (Bop(And,Mop(Not,bVar"b'14"),
38292                                 Bop(And,bVar"b'12",
38293                                     Bop(And,Mop(Not,bVar"b'10"),bVar"b'8"))),
38294                             MB(Call
38295                                  ("HaveThumb2",ATy(qTy,PTy(bTy,qTy)),LU),
38296                                Close
38297                                  (bVar"v",
38298                                   MB(MB(MU(TP[LW(14,4),bVar"v"],qTy),
38299                                         Close
38300                                           (Var("v",PTy(F4,bTy)),
38301                                            Call
38302                                              ("Take",
38303                                               ATy(qTy,PTy(bTy,qTy)),
38304                                               Var("v",PTy(F4,bTy))))),
38305                                      Close
38306                                        (bVar"b",
38307                                         ITE(bVar"b",
38308                                             MB(Call
38309                                                  ("InITBlock",
38310                                                   ATy(qTy,PTy(bTy,qTy)),
38311                                                   LU),
38312                                                Close
38313                                                  (bVar"v",
38314                                                   MB(ITE(bVar"v",
38315                                                          Call
38316                                                            ("DECODE_UNPREDICTABLE",
38317                                                             ATy(qTy,
38318                                                                 PTy(uTy,
38319                                                                     qTy)),
38320                                                             TP[Var("mc",
38321                                                                    CTy"MachineCode"),
38322                                                                LS
38323                                                                 "CompareBranch"]),
38324                                                          MU(LU,qTy)),
38325                                                      Close
38326                                                        (AVar uTy,
38327                                                         MU(Call
38328                                                              ("Branch",
38329                                                               CTy"instruction",
38330                                                               Call
38331                                                                 ("CompareBranch",
38332                                                                  CTy"Branch",
38333                                                                  TP[EQ(Mop(Cast
38334                                                                              F1,
38335                                                                            LL[bVar"b'11"]),
38336                                                                        LW(1,
38337                                                                           1)),
38338                                                                     Mop(Cast
38339                                                                           F4,
38340                                                                         Mop(Cast
38341                                                                               (FTy 3),
38342                                                                             LL[bVar"b'2",
38343                                                                                bVar"b'1",
38344                                                                                bVar"b'0"])),
38345                                                                     Mop(Cast
38346                                                                           F32,
38347                                                                         CC[Mop(Cast
38348                                                                                  F1,
38349                                                                                LL[bVar"b'9"]),
38350                                                                            Mop(Cast
38351                                                                                  (FTy 5),
38352                                                                                LL[bVar"b'7",
38353                                                                                   bVar"b'6",
38354                                                                                   bVar"b'5",
38355                                                                                   bVar"b'4",
38356                                                                                   bVar"b'3"]),
38357                                                                            LW(0,
38358                                                                               1)])])),
38359                                                            qTy))))),
38360                                             Call
38361                                               ("Skip",
38362                                                ATy(qTy,
38363                                                    PTy(CTy"instruction",
38364                                                        qTy)),LU))))))),
38365                            (Bop(And,Mop(Not,bVar"b'14"),
38366                                 Bop(And,bVar"b'12",
38367                                     Bop(And,Mop(Not,bVar"b'11"),
38368                                         Bop(And,Mop(Not,bVar"b'10"),
38369                                             Bop(And,bVar"b'9",
38370                                                 Bop(And,
38371                                                     Mop(Not,bVar"b'8"),
38372                                                     Mop(Not,bVar"b'6"))))))),
38373                             MB(Call
38374                                  ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),
38375                                   LU),
38376                                Close
38377                                  (Var("v",F4),
38378                                   MB(MB(MB(Call
38379                                              ("ArchVersion",
38380                                               ATy(qTy,PTy(nTy,qTy)),LU),
38381                                            Close
38382                                              (nVar"v0",
38383                                               MB(MU(Bop(Ge,nVar"v0",LN 6),
38384                                                     qTy),
38385                                                  Close
38386                                                    (bVar"v0",
38387                                                     MU(TP[Var("v",F4),
38388                                                           bVar"v0"],qTy))))),
38389                                         Close
38390                                           (Var("v",PTy(F4,bTy)),
38391                                            Call
38392                                              ("Take",
38393                                               ATy(qTy,PTy(bTy,qTy)),
38394                                               Var("v",PTy(F4,bTy))))),
38395                                      Close
38396                                        (bVar"b",
38397                                         ITE(bVar"b",
38398                                             MU(Call
38399                                                  ("Media",
38400                                                   CTy"instruction",
38401                                                   Call
38402                                                     ("ExtendHalfword",
38403                                                      CTy"Media",
38404                                                      TP[EQ(Mop(Cast F1,
38405                                                                LL[bVar"b'7"]),
38406                                                            LW(1,1)),
38407                                                         Mop(Cast F4,
38408                                                             Mop(Cast
38409                                                                   (FTy 3),
38410                                                                 LL[bVar"b'2",
38411                                                                    bVar"b'1",
38412                                                                    bVar"b'0"])),
38413                                                         LW(15,4),
38414                                                         Mop(Cast F4,
38415                                                             Mop(Cast
38416                                                                   (FTy 3),
38417                                                                 LL[bVar"b'5",
38418                                                                    bVar"b'4",
38419                                                                    bVar"b'3"])),
38420                                                         LN 0])),qTy),
38421                                             Call
38422                                               ("Skip",
38423                                                ATy(qTy,
38424                                                    PTy(CTy"instruction",
38425                                                        qTy)),LU))))))),
38426                            (Bop(And,Mop(Not,bVar"b'14"),
38427                                 Bop(And,bVar"b'12",
38428                                     Bop(And,Mop(Not,bVar"b'11"),
38429                                         Bop(And,Mop(Not,bVar"b'10"),
38430                                             Bop(And,bVar"b'9",
38431                                                 Bop(And,
38432                                                     Mop(Not,bVar"b'8"),
38433                                                     bVar"b'6")))))),
38434                             MB(Call
38435                                  ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),
38436                                   LU),
38437                                Close
38438                                  (Var("v",F4),
38439                                   MB(MB(MB(Call
38440                                              ("ArchVersion",
38441                                               ATy(qTy,PTy(nTy,qTy)),LU),
38442                                            Close
38443                                              (nVar"v0",
38444                                               MB(MU(Bop(Ge,nVar"v0",LN 6),
38445                                                     qTy),
38446                                                  Close
38447                                                    (bVar"v0",
38448                                                     MU(TP[Var("v",F4),
38449                                                           bVar"v0"],qTy))))),
38450                                         Close
38451                                           (Var("v",PTy(F4,bTy)),
38452                                            Call
38453                                              ("Take",
38454                                               ATy(qTy,PTy(bTy,qTy)),
38455                                               Var("v",PTy(F4,bTy))))),
38456                                      Close
38457                                        (bVar"b",
38458                                         ITE(bVar"b",
38459                                             MU(Call
38460                                                  ("Media",
38461                                                   CTy"instruction",
38462                                                   Call
38463                                                     ("ExtendByte",
38464                                                      CTy"Media",
38465                                                      TP[EQ(Mop(Cast F1,
38466                                                                LL[bVar"b'7"]),
38467                                                            LW(1,1)),
38468                                                         Mop(Cast F4,
38469                                                             Mop(Cast
38470                                                                   (FTy 3),
38471                                                                 LL[bVar"b'2",
38472                                                                    bVar"b'1",
38473                                                                    bVar"b'0"])),
38474                                                         LW(15,4),
38475                                                         Mop(Cast F4,
38476                                                             Mop(Cast
38477                                                                   (FTy 3),
38478                                                                 LL[bVar"b'5",
38479                                                                    bVar"b'4",
38480                                                                    bVar"b'3"])),
38481                                                         LN 0])),qTy),
38482                                             Call
38483                                               ("Skip",
38484                                                ATy(qTy,
38485                                                    PTy(CTy"instruction",
38486                                                        qTy)),LU))))))),
38487                            (Bop(And,Mop(Not,bVar"b'14"),
38488                                 Bop(And,bVar"b'12",
38489                                     Bop(And,Mop(Not,bVar"b'11"),
38490                                         Bop(And,bVar"b'10",
38491                                             Mop(Not,bVar"b'9"))))),
38492                             MB(Call
38493                                  ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),
38494                                   LU),
38495                                Close
38496                                  (Var("v",F4),
38497                                   MB(MB(MU(TP[Var("v",F4),LT],qTy),
38498                                         Close
38499                                           (Var("v",PTy(F4,bTy)),
38500                                            Call
38501                                              ("Take",
38502                                               ATy(qTy,PTy(bTy,qTy)),
38503                                               Var("v",PTy(F4,bTy))))),
38504                                      Close
38505                                        (bVar"b",
38506                                         ITE(bVar"b",
38507                                             Let(Var("registers",F16),
38508                                                 CC[LW(0,1),
38509                                                    Mop(Cast F1,
38510                                                        LL[bVar"b'8"]),
38511                                                    LW(0,6),
38512                                                    Mop(Cast F8,
38513                                                        LL[bVar"b'7",
38514                                                           bVar"b'6",
38515                                                           bVar"b'5",
38516                                                           bVar"b'4",
38517                                                           bVar"b'3",
38518                                                           bVar"b'2",
38519                                                           bVar"b'1",
38520                                                           bVar"b'0"])],
38521                                                 MB(Call
38522                                                      ("BitCount",
38523                                                       ATy(qTy,
38524                                                           PTy(nTy,qTy)),
38525                                                       Var("registers",F16)),
38526                                                    Close
38527                                                      (nVar"v",
38528                                                       MB(MB(MU(Bop(Lt,
38529                                                                    nVar"v",
38530                                                                    LN 1),
38531                                                                qTy),
38532                                                             Close
38533                                                               (bVar"b",
38534                                                                ITE(bVar"b",
38535                                                                    Call
38536                                                                      ("DECODE_UNPREDICTABLE",
38537                                                                       ATy(qTy,
38538                                                                           PTy(uTy,
38539                                                                               qTy)),
38540                                                                       TP[Var("mc",
38541                                                                              CTy"MachineCode"),
38542                                                                          LS
38543                                                                           "StoreMultiple"]),
38544                                                                    MU(LU,
38545                                                                       qTy)))),
38546                                                          Close
38547                                                            (AVar uTy,
38548                                                             MU(Call
38549                                                                  ("Store",
38550                                                                   CTy"instruction",
38551                                                                   Call
38552                                                                     ("StoreMultiple",
38553                                                                      CTy"Store",
38554                                                                      TP[LF,
38555                                                                         LT,
38556                                                                         LT,
38557                                                                         LW(13,
38558                                                                            4),
38559                                                                         Var("registers",
38560                                                                             F16)])),
38561                                                                qTy)))))),
38562                                             Call
38563                                               ("Skip",
38564                                                ATy(qTy,
38565                                                    PTy(CTy"instruction",
38566                                                        qTy)),LU))))))),
38567                            (Bop(And,Mop(Not,bVar"b'14"),
38568                                 Bop(And,bVar"b'12",
38569                                     Bop(And,Mop(Not,bVar"b'11"),
38570                                         Bop(And,bVar"b'10",
38571                                             Bop(And,bVar"b'9",
38572                                                 Bop(And,
38573                                                     Mop(Not,bVar"b'8"),
38574                                                     Bop(And,
38575                                                         Mop(Not,bVar"b'7"),
38576                                                         Bop(And,
38577                                                             bVar"b'6",
38578                                                             Mop(Not,
38579                                                                 bVar"b'5"))))))))),
38580                             MB(Call
38581                                  ("ArchVersion",ATy(qTy,PTy(nTy,qTy)),LU),
38582                                Close
38583                                  (nVar"v",
38584                                   MB(MB(MB(MU(Bop(Ge,nVar"v",LN 6),qTy),
38585                                            Close
38586                                              (bVar"v",
38587                                               MU(TP[LW(14,4),bVar"v"],qTy))),
38588                                         Close
38589                                           (Var("v",PTy(F4,bTy)),
38590                                            Call
38591                                              ("Take",
38592                                               ATy(qTy,PTy(bTy,qTy)),
38593                                               Var("v",PTy(F4,bTy))))),
38594                                      Close
38595                                        (bVar"b",
38596                                         ITE(bVar"b",
38597                                             MB(Call
38598                                                  ("InITBlock",
38599                                                   ATy(qTy,PTy(bTy,qTy)),
38600                                                   LU),
38601                                                Close
38602                                                  (bVar"v",
38603                                                   MB(ITE(bVar"v",
38604                                                          Call
38605                                                            ("DECODE_UNPREDICTABLE",
38606                                                             ATy(qTy,
38607                                                                 PTy(uTy,
38608                                                                     qTy)),
38609                                                             TP[Var("mc",
38610                                                                    CTy"MachineCode"),
38611                                                                LS"Setend"]),
38612                                                          MU(LU,qTy)),
38613                                                      Close
38614                                                        (AVar uTy,
38615                                                         MU(Call
38616                                                              ("System",
38617                                                               CTy"instruction",
38618                                                               Call
38619                                                                 ("Setend",
38620                                                                  CTy"System",
38621                                                                  EQ(Mop(Cast
38622                                                                           F1,
38623                                                                         LL[bVar"b'3"]),
38624                                                                     LW(1,
38625                                                                        1)))),
38626                                                            qTy))))),
38627                                             Call
38628                                               ("Skip",
38629                                                ATy(qTy,
38630                                                    PTy(CTy"instruction",
38631                                                        qTy)),LU))))))),
38632                            (Bop(And,Mop(Not,bVar"b'14"),
38633                                 Bop(And,bVar"b'12",
38634                                     Bop(And,Mop(Not,bVar"b'11"),
38635                                         Bop(And,bVar"b'10",
38636                                             Bop(And,bVar"b'9",
38637                                                 Bop(And,
38638                                                     Mop(Not,bVar"b'8"),
38639                                                     Bop(And,
38640                                                         Mop(Not,bVar"b'7"),
38641                                                         Bop(And,
38642                                                             bVar"b'6",
38643                                                             bVar"b'5")))))))),
38644                             Let(Var("F",F1),Mop(Cast F1,LL[bVar"b'0"]),
38645                                 Let(Var("I",F1),
38646                                     Mop(Cast F1,LL[bVar"b'1"]),
38647                                     Let(Var("A",F1),
38648                                         Mop(Cast F1,LL[bVar"b'2"]),
38649                                         MB(Call
38650                                              ("ArchVersion",
38651                                               ATy(qTy,PTy(nTy,qTy)),LU),
38652                                            Close
38653                                              (nVar"v",
38654                                               MB(MB(MB(MU(Bop(Ge,nVar"v",
38655                                                               LN 6),qTy),
38656                                                        Close
38657                                                          (bVar"v",
38658                                                           MU(TP[LW(14,4),
38659                                                                 bVar"v"],
38660                                                              qTy))),
38661                                                     Close
38662                                                       (Var("v",
38663                                                            PTy(F4,bTy)),
38664                                                        Call
38665                                                          ("Take",
38666                                                           ATy(qTy,
38667                                                               PTy(bTy,qTy)),
38668                                                           Var("v",
38669                                                               PTy(F4,bTy))))),
38670                                                  Close
38671                                                    (bVar"b",
38672                                                     ITE(bVar"b",
38673                                                         MB(Call
38674                                                              ("InITBlock",
38675                                                               ATy(qTy,
38676                                                                   PTy(bTy,
38677                                                                       qTy)),
38678                                                               LU),
38679                                                            Close
38680                                                              (bVar"v",
38681                                                               MB(MB(MU(Bop(Or,
38682                                                                            EQ(CC[Var("A",
38683                                                                                      F1),
38684                                                                                  Var("I",
38685                                                                                      F1),
38686                                                                                  Var("F",
38687                                                                                      F1)],
38688                                                                               LW(0,
38689                                                                                  3)),
38690                                                                            bVar"v"),
38691                                                                        qTy),
38692                                                                     Close
38693                                                                       (bVar"b",
38694                                                                        ITE(bVar"b",
38695                                                                            Call
38696                                                                              ("DECODE_UNPREDICTABLE",
38697                                                                               ATy(qTy,
38698                                                                                   PTy(uTy,
38699                                                                                       qTy)),
38700                                                                               TP[Var("mc",
38701                                                                                      CTy"MachineCode"),
38702                                                                                  LS
38703                                                                                   "ChangeProcessorStateT1"]),
38704                                                                            MU(LU,
38705                                                                               qTy)))),
38706                                                                  Close
38707                                                                    (AVar
38708                                                                       uTy,
38709                                                                     MU(Call
38710                                                                          ("System",
38711                                                                           CTy"instruction",
38712                                                                           Call
38713                                                                             ("ChangeProcessorStateT1",
38714                                                                              CTy"System",
38715                                                                              TP[EQ(Mop(Cast
38716                                                                                          F1,
38717                                                                                        LL[bVar"b'4"]),
38718                                                                                    LW(0,
38719                                                                                       1)),
38720                                                                                 EQ(Var("A",
38721                                                                                        F1),
38722                                                                                    LW(1,
38723                                                                                       1)),
38724                                                                                 EQ(Var("I",
38725                                                                                        F1),
38726                                                                                    LW(1,
38727                                                                                       1)),
38728                                                                                 EQ(Var("F",
38729                                                                                        F1),
38730                                                                                    LW(1,
38731                                                                                       1))])),
38732                                                                        qTy))))),
38733                                                         Call
38734                                                           ("Skip",
38735                                                            ATy(qTy,
38736                                                                PTy(CTy"instruction",
38737                                                                    qTy)),
38738                                                            LU)))))))))),
38739                            (Bop(And,Mop(Not,bVar"b'14"),
38740                                 Bop(And,bVar"b'12",
38741                                     Bop(And,bVar"b'11",
38742                                         Bop(And,Mop(Not,bVar"b'10"),
38743                                             Bop(And,bVar"b'9",
38744                                                 Mop(Not,bVar"b'8")))))),
38745                             Let(Var("Rd",FTy 3),
38746                                 Mop(Cast(FTy 3),
38747                                     LL[bVar"b'2",bVar"b'1",bVar"b'0"]),
38748                                 Let(Var("Rm",FTy 3),
38749                                     Mop(Cast(FTy 3),
38750                                         LL[bVar"b'5",bVar"b'4",bVar"b'3"]),
38751                                     MB(Call
38752                                          ("ThumbCondition",
38753                                           ATy(qTy,PTy(F4,qTy)),LU),
38754                                        Close
38755                                          (Var("v",F4),
38756                                           MB(MB(MB(Call
38757                                                      ("ArchVersion",
38758                                                       ATy(qTy,
38759                                                           PTy(nTy,qTy)),
38760                                                       LU),
38761                                                    Close
38762                                                      (nVar"v0",
38763                                                       MB(MU(Bop(Ge,
38764                                                                 nVar"v0",
38765                                                                 LN 6),qTy),
38766                                                          Close
38767                                                            (bVar"v0",
38768                                                             MU(TP[Var("v",
38769                                                                       F4),
38770                                                                   bVar"v0"],
38771                                                                qTy))))),
38772                                                 Close
38773                                                   (Var("v",PTy(F4,bTy)),
38774                                                    Call
38775                                                      ("Take",
38776                                                       ATy(qTy,
38777                                                           PTy(bTy,qTy)),
38778                                                       Var("v",PTy(F4,bTy))))),
38779                                              Close
38780                                                (bVar"b",
38781                                                 ITE(bVar"b",
38782                                                     MU(CS(Mop(Cast(FTy 2),
38783                                                               LL[bVar"b'7",
38784                                                                  bVar"b'6"]),
38785                                                           [(LW(0,2),
38786                                                             Call
38787                                                               ("Media",
38788                                                                CTy"instruction",
38789                                                                Call
38790                                                                  ("ByteReverse",
38791                                                                   CTy"Media",
38792                                                                   TP[Mop(Cast
38793                                                                            F4,
38794                                                                          Var("Rd",
38795                                                                              FTy 3)),
38796                                                                      Mop(Cast
38797                                                                            F4,
38798                                                                          Var("Rm",
38799                                                                              FTy 3))]))),
38800                                                            (LW(1,2),
38801                                                             Call
38802                                                               ("Media",
38803                                                                CTy"instruction",
38804                                                                Call
38805                                                                  ("ByteReversePackedHalfword",
38806                                                                   CTy"Media",
38807                                                                   TP[Mop(Cast
38808                                                                            F4,
38809                                                                          Var("Rd",
38810                                                                              FTy 3)),
38811                                                                      Mop(Cast
38812                                                                            F4,
38813                                                                          Var("Rm",
38814                                                                              FTy 3))]))),
38815                                                            (LW(3,2),
38816                                                             Call
38817                                                               ("Media",
38818                                                                CTy"instruction",
38819                                                                Call
38820                                                                  ("ByteReverseSignedHalfword",
38821                                                                   CTy"Media",
38822                                                                   TP[Mop(Cast
38823                                                                            F4,
38824                                                                          Var("Rd",
38825                                                                              FTy 3)),
38826                                                                      Mop(Cast
38827                                                                            F4,
38828                                                                          Var("Rm",
38829                                                                              FTy 3))]))),
38830                                                            (AVar(FTy 2),
38831                                                             Call
38832                                                               ("Undefined",
38833                                                                CTy"instruction",
38834                                                                LW(0,32)))]),
38835                                                        qTy),
38836                                                     Call
38837                                                       ("Skip",
38838                                                        ATy(qTy,
38839                                                            PTy(CTy"instruction",
38840                                                                qTy)),LU))))))))),
38841                            (Bop(And,Mop(Not,bVar"b'14"),
38842                                 Bop(And,bVar"b'12",
38843                                     Bop(And,bVar"b'11",
38844                                         Bop(And,bVar"b'10",
38845                                             Mop(Not,bVar"b'9"))))),
38846                             MB(Call
38847                                  ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),
38848                                   LU),
38849                                Close
38850                                  (Var("v",F4),
38851                                   MB(MB(MU(TP[Var("v",F4),LT],qTy),
38852                                         Close
38853                                           (Var("v",PTy(F4,bTy)),
38854                                            Call
38855                                              ("Take",
38856                                               ATy(qTy,PTy(bTy,qTy)),
38857                                               Var("v",PTy(F4,bTy))))),
38858                                      Close
38859                                        (bVar"b",
38860                                         ITE(bVar"b",
38861                                             Let(Var("registers",F16),
38862                                                 CC[Mop(Cast F1,
38863                                                        LL[bVar"b'8"]),
38864                                                    LW(0,7),
38865                                                    Mop(Cast F8,
38866                                                        LL[bVar"b'7",
38867                                                           bVar"b'6",
38868                                                           bVar"b'5",
38869                                                           bVar"b'4",
38870                                                           bVar"b'3",
38871                                                           bVar"b'2",
38872                                                           bVar"b'1",
38873                                                           bVar"b'0"])],
38874                                                 MB(Call
38875                                                      ("BitCount",
38876                                                       ATy(qTy,
38877                                                           PTy(nTy,qTy)),
38878                                                       Var("registers",F16)),
38879                                                    Close
38880                                                      (nVar"v",
38881                                                       MB(MB(MB(MU(Bop(Lt,
38882                                                                       nVar"v",
38883                                                                       LN
38884                                                                        1),
38885                                                                   qTy),
38886                                                                Close
38887                                                                  (bVar"b",
38888                                                                   ITE(bVar"b",
38889                                                                       MU(LT,
38890                                                                          qTy),
38891                                                                       MB(Call
38892                                                                            ("InITBlock",
38893                                                                             ATy(qTy,
38894                                                                                 PTy(bTy,
38895                                                                                     qTy)),
38896                                                                             LU),
38897                                                                          Close
38898                                                                            (bVar"v",
38899                                                                             MB(MU(Bop(And,
38900                                                                                       Bop(Bit,
38901                                                                                           Var("registers",
38902                                                                                               F16),
38903                                                                                           LN
38904                                                                                            15),
38905                                                                                       bVar"v"),
38906                                                                                   qTy),
38907                                                                                Close
38908                                                                                  (bVar"b",
38909                                                                                   ITE(bVar"b",
38910                                                                                       MB(Call
38911                                                                                            ("LastInITBlock",
38912                                                                                             ATy(qTy,
38913                                                                                                 PTy(bTy,
38914                                                                                                     qTy)),
38915                                                                                             LU),
38916                                                                                          Close
38917                                                                                            (bVar"v",
38918                                                                                             MU(Mop(Not,
38919                                                                                                    bVar"v"),
38920                                                                                                qTy))),
38921                                                                                       MU(LF,
38922                                                                                          qTy))))))))),
38923                                                             Close
38924                                                               (bVar"b",
38925                                                                ITE(bVar"b",
38926                                                                    Call
38927                                                                      ("DECODE_UNPREDICTABLE",
38928                                                                       ATy(qTy,
38929                                                                           PTy(uTy,
38930                                                                               qTy)),
38931                                                                       TP[Var("mc",
38932                                                                              CTy"MachineCode"),
38933                                                                          LS
38934                                                                           "LoadMultiple"]),
38935                                                                    MU(LU,
38936                                                                       qTy)))),
38937                                                          Close
38938                                                            (AVar uTy,
38939                                                             MU(Call
38940                                                                  ("Load",
38941                                                                   CTy"instruction",
38942                                                                   Call
38943                                                                     ("LoadMultiple",
38944                                                                      CTy"Load",
38945                                                                      TP[LT,
38946                                                                         LF,
38947                                                                         LT,
38948                                                                         LW(13,
38949                                                                            4),
38950                                                                         Var("registers",
38951                                                                             F16)])),
38952                                                                qTy)))))),
38953                                             Call
38954                                               ("Skip",
38955                                                ATy(qTy,
38956                                                    PTy(CTy"instruction",
38957                                                        qTy)),LU))))))),
38958                            (Bop(And,Mop(Not,bVar"b'14"),
38959                                 Bop(And,bVar"b'12",
38960                                     Bop(And,bVar"b'11",
38961                                         Bop(And,bVar"b'10",
38962                                             Bop(And,bVar"b'9",
38963                                                 Mop(Not,bVar"b'8")))))),
38964                             MB(Call
38965                                  ("ArchVersion",ATy(qTy,PTy(nTy,qTy)),LU),
38966                                Close
38967                                  (nVar"v",
38968                                   MB(MB(MB(MU(Bop(Ge,nVar"v",LN 5),qTy),
38969                                            Close
38970                                              (bVar"v",
38971                                               MU(TP[LW(14,4),bVar"v"],qTy))),
38972                                         Close
38973                                           (Var("v",PTy(F4,bTy)),
38974                                            Call
38975                                              ("Take",
38976                                               ATy(qTy,PTy(bTy,qTy)),
38977                                               Var("v",PTy(F4,bTy))))),
38978                                      Close
38979                                        (bVar"b",
38980                                         ITE(bVar"b",
38981                                             MU(Call
38982                                                  ("Hint",
38983                                                   CTy"instruction",
38984                                                   Call
38985                                                     ("Breakpoint",
38986                                                      CTy"Hint",
38987                                                      Mop(Cast F32,
38988                                                          Mop(Cast F8,
38989                                                              LL[bVar"b'7",
38990                                                                 bVar"b'6",
38991                                                                 bVar"b'5",
38992                                                                 bVar"b'4",
38993                                                                 bVar"b'3",
38994                                                                 bVar"b'2",
38995                                                                 bVar"b'1",
38996                                                                 bVar"b'0"])))),
38997                                                qTy),
38998                                             Call
38999                                               ("Skip",
39000                                                ATy(qTy,
39001                                                    PTy(CTy"instruction",
39002                                                        qTy)),LU))))))),
39003                            (Bop(And,Mop(Not,bVar"b'14"),
39004                                 Bop(And,bVar"b'12",
39005                                     Bop(And,bVar"b'11",
39006                                         Bop(And,bVar"b'10",
39007                                             Bop(And,bVar"b'9",
39008                                                 Bop(And,bVar"b'8",
39009                                                     Bop(And,
39010                                                         Mop(Not,bVar"b'3"),
39011                                                         Bop(And,
39012                                                             Mop(Not,
39013                                                                 bVar"b'2"),
39014                                                             Bop(And,
39015                                                                 Mop(Not,
39016                                                                     bVar"b'1"),
39017                                                                 Mop(Not,
39018                                                                     bVar"b'0")))))))))),
39019                             MB(Call
39020                                  ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),
39021                                   LU),
39022                                Close
39023                                  (Var("v",F4),
39024                                   MB(MU(TP[Var("v",F4),
39025                                            Mop(Cast F8,
39026                                                Mop(Cast F4,
39027                                                    LL[bVar"b'7",
39028                                                       bVar"b'6",
39029                                                       bVar"b'5",bVar"b'4"]))],
39030                                         qTy),
39031                                      Close
39032                                        (Var("v",PTy(F4,F8)),
39033                                         Call
39034                                           ("DecodeHint",
39035                                            ATy(qTy,
39036                                                PTy(CTy"instruction",qTy)),
39037                                            Var("v",PTy(F4,F8)))))))),
39038                            (Bop(And,Mop(Not,bVar"b'14"),
39039                                 Bop(And,bVar"b'12",
39040                                     Bop(And,bVar"b'11",
39041                                         Bop(And,bVar"b'10",
39042                                             Bop(And,bVar"b'9",bVar"b'8"))))),
39043                             Let(Var("mask",F4),
39044                                 Mop(Cast F4,
39045                                     LL[bVar"b'3",bVar"b'2",bVar"b'1",
39046                                        bVar"b'0"]),
39047                                 Let(Var("firstcond",F4),
39048                                     Mop(Cast F4,
39049                                         LL[bVar"b'7",bVar"b'6",bVar"b'5",
39050                                            bVar"b'4"]),
39051                                     MB(Call
39052                                          ("HaveThumb2",
39053                                           ATy(qTy,PTy(bTy,qTy)),LU),
39054                                        Close
39055                                          (bVar"v",
39056                                           MB(MB(MU(TP[LW(14,4),bVar"v"],
39057                                                    qTy),
39058                                                 Close
39059                                                   (Var("v",PTy(F4,bTy)),
39060                                                    Call
39061                                                      ("Take",
39062                                                       ATy(qTy,
39063                                                           PTy(bTy,qTy)),
39064                                                       Var("v",PTy(F4,bTy))))),
39065                                              Close
39066                                                (bVar"b",
39067                                                 ITE(bVar"b",
39068                                                     MB(Call
39069                                                          ("BitCount",
39070                                                           ATy(qTy,
39071                                                               PTy(nTy,qTy)),
39072                                                           Var("mask",F4)),
39073                                                        Close
39074                                                          (nVar"v",
39075                                                           MB(MB(MB(MB(MB(MB(MU(EQ(nVar"v",
39076                                                                                   LN
39077                                                                                    1),
39078                                                                                qTy),
39079                                                                             Close
39080                                                                               (bVar"v",
39081                                                                                MU(Mop(Not,
39082                                                                                       bVar"v"),
39083                                                                                   qTy))),
39084                                                                          Close
39085                                                                            (bVar"v",
39086                                                                             MU(Bop(And,
39087                                                                                    EQ(Var("firstcond",
39088                                                                                           F4),
39089                                                                                       LW(14,
39090                                                                                          4)),
39091                                                                                    bVar"v"),
39092                                                                                qTy))),
39093                                                                       Close
39094                                                                         (bVar"v",
39095                                                                          MU(Bop(Or,
39096                                                                                 EQ(Var("firstcond",
39097                                                                                        F4),
39098                                                                                    LW(15,
39099                                                                                       4)),
39100                                                                                 bVar"v"),
39101                                                                             qTy))),
39102                                                                    Close
39103                                                                      (bVar"b",
39104                                                                       ITE(bVar"b",
39105                                                                           MU(LT,
39106                                                                              qTy),
39107                                                                           Call
39108                                                                             ("InITBlock",
39109                                                                              ATy(qTy,
39110                                                                                  PTy(bTy,
39111                                                                                      qTy)),
39112                                                                              LU)))),
39113                                                                 Close
39114                                                                   (bVar"b",
39115                                                                    ITE(bVar"b",
39116                                                                        Call
39117                                                                          ("DECODE_UNPREDICTABLE",
39118                                                                           ATy(qTy,
39119                                                                               PTy(uTy,
39120                                                                                   qTy)),
39121                                                                           TP[Var("mc",
39122                                                                                  CTy"MachineCode"),
39123                                                                              LS
39124                                                                               "IfThen"]),
39125                                                                        MU(LU,
39126                                                                           qTy)))),
39127                                                              Close
39128                                                                (AVar uTy,
39129                                                                 MU(Call
39130                                                                      ("IfThen",
39131                                                                       CTy"instruction",
39132                                                                       TP[Var("firstcond",
39133                                                                              F4),
39134                                                                          Var("mask",
39135                                                                              F4)]),
39136                                                                    qTy))))),
39137                                                     Call
39138                                                       ("Skip",
39139                                                        ATy(qTy,
39140                                                            PTy(CTy"instruction",
39141                                                                qTy)),LU))))))))),
39142                            (Bop(And,bVar"b'14",
39143                                 Bop(And,Mop(Not,bVar"b'12"),
39144                                     Mop(Not,bVar"b'11"))),
39145                             MB(Call
39146                                  ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),
39147                                   LU),
39148                                Close
39149                                  (Var("v",F4),
39150                                   MB(MB(MU(TP[Var("v",F4),LT],qTy),
39151                                         Close
39152                                           (Var("v",PTy(F4,bTy)),
39153                                            Call
39154                                              ("Take",
39155                                               ATy(qTy,PTy(bTy,qTy)),
39156                                               Var("v",PTy(F4,bTy))))),
39157                                      Close
39158                                        (bVar"b",
39159                                         ITE(bVar"b",
39160                                             MB(Call
39161                                                  ("InITBlock",
39162                                                   ATy(qTy,PTy(bTy,qTy)),
39163                                                   LU),
39164                                                Close
39165                                                  (bVar"v",
39166                                                   MB(MB(ITE(bVar"v",
39167                                                             MB(Call
39168                                                                  ("LastInITBlock",
39169                                                                   ATy(qTy,
39170                                                                       PTy(bTy,
39171                                                                           qTy)),
39172                                                                   LU),
39173                                                                Close
39174                                                                  (bVar"v",
39175                                                                   MU(Mop(Not,
39176                                                                          bVar"v"),
39177                                                                      qTy))),
39178                                                             MU(LF,qTy)),
39179                                                         Close
39180                                                           (bVar"b",
39181                                                            ITE(bVar"b",
39182                                                                Call
39183                                                                  ("DECODE_UNPREDICTABLE",
39184                                                                   ATy(qTy,
39185                                                                       PTy(uTy,
39186                                                                           qTy)),
39187                                                                   TP[Var("mc",
39188                                                                          CTy"MachineCode"),
39189                                                                      LS
39190                                                                       "BranchTarget"]),
39191                                                                MU(LU,qTy)))),
39192                                                      Close
39193                                                        (AVar uTy,
39194                                                         MU(Call
39195                                                              ("Branch",
39196                                                               CTy"instruction",
39197                                                               Call
39198                                                                 ("BranchTarget",
39199                                                                  CTy"Branch",
39200                                                                  Mop(SE F32,
39201                                                                      CC[Mop(Cast
39202                                                                               (FTy 11),
39203                                                                             LL[bVar"b'10",
39204                                                                                bVar"b'9",
39205                                                                                bVar"b'8",
39206                                                                                bVar"b'7",
39207                                                                                bVar"b'6",
39208                                                                                bVar"b'5",
39209                                                                                bVar"b'4",
39210                                                                                bVar"b'3",
39211                                                                                bVar"b'2",
39212                                                                                bVar"b'1",
39213                                                                                bVar"b'0"]),
39214                                                                         LW(0,
39215                                                                            1)]))),
39216                                                            qTy))))),
39217                                             Call
39218                                               ("Skip",
39219                                                ATy(qTy,
39220                                                    PTy(CTy"instruction",
39221                                                        qTy)),LU)))))))],
39222                           Call
39223                             ("UndefinedThumb",
39224                              ATy(qTy,PTy(CTy"instruction",qTy)),LU))),
39225                      (Bop(And,Mop(Not,bVar"b'14"),
39226                           Bop(And,Mop(Not,bVar"b'12"),Mop(Not,bVar"b'11"))),
39227                       MB(Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
39228                          Close
39229                            (Var("v",F4),
39230                             MB(MB(MU(TP[Var("v",F4),LT],qTy),
39231                                   Close
39232                                     (Var("v",PTy(F4,bTy)),
39233                                      Call
39234                                        ("Take",ATy(qTy,PTy(bTy,qTy)),
39235                                         Var("v",PTy(F4,bTy))))),
39236                                Close
39237                                  (bVar"b",
39238                                   ITE(bVar"b",
39239                                       MB(Call
39240                                            ("InITBlock",
39241                                             ATy(qTy,PTy(bTy,qTy)),LU),
39242                                          Close
39243                                            (bVar"v",
39244                                             MB(MU(Mop(Not,bVar"v"),qTy),
39245                                                Close
39246                                                  (bVar"setflags",
39247                                                   MU(Call
39248                                                        ("Data",
39249                                                         CTy"instruction",
39250                                                         Call
39251                                                           ("Move",
39252                                                            CTy"Data",
39253                                                            TP[bVar"setflags",
39254                                                               LF,
39255                                                               Mop(Cast F4,
39256                                                                   Mop(Cast
39257                                                                         (FTy 3),
39258                                                                       LL[bVar"b'10",
39259                                                                          bVar"b'9",
39260                                                                          bVar"b'8"])),
39261                                                               Mop(Cast
39262                                                                     (FTy 12),
39263                                                                   Mop(Cast
39264                                                                         F8,
39265                                                                       LL[bVar"b'7",
39266                                                                          bVar"b'6",
39267                                                                          bVar"b'5",
39268                                                                          bVar"b'4",
39269                                                                          bVar"b'3",
39270                                                                          bVar"b'2",
39271                                                                          bVar"b'1",
39272                                                                          bVar"b'0"]))])),
39273                                                      qTy))))),
39274                                       Call
39275                                         ("Skip",
39276                                          ATy(qTy,
39277                                              PTy(CTy"instruction",qTy)),
39278                                          LU))))))),
39279                      (Bop(And,Mop(Not,bVar"b'14"),
39280                           Bop(And,Mop(Not,bVar"b'12"),bVar"b'11")),
39281                       MB(Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
39282                          Close
39283                            (Var("v",F4),
39284                             MB(MB(MU(TP[Var("v",F4),LT],qTy),
39285                                   Close
39286                                     (Var("v",PTy(F4,bTy)),
39287                                      Call
39288                                        ("Take",ATy(qTy,PTy(bTy,qTy)),
39289                                         Var("v",PTy(F4,bTy))))),
39290                                Close
39291                                  (bVar"b",
39292                                   ITE(bVar"b",
39293                                       MU(Call
39294                                            ("Data",CTy"instruction",
39295                                             Call
39296                                               ("TestCompareImmediate",
39297                                                CTy"Data",
39298                                                TP[LW(2,2),
39299                                                   Mop(Cast F4,
39300                                                       Mop(Cast(FTy 3),
39301                                                           LL[bVar"b'10",
39302                                                              bVar"b'9",
39303                                                              bVar"b'8"])),
39304                                                   Mop(Cast(FTy 12),
39305                                                       Mop(Cast F8,
39306                                                           LL[bVar"b'7",
39307                                                              bVar"b'6",
39308                                                              bVar"b'5",
39309                                                              bVar"b'4",
39310                                                              bVar"b'3",
39311                                                              bVar"b'2",
39312                                                              bVar"b'1",
39313                                                              bVar"b'0"]))])),
39314                                          qTy),
39315                                       Call
39316                                         ("Skip",
39317                                          ATy(qTy,
39318                                              PTy(CTy"instruction",qTy)),
39319                                          LU))))))),
39320                      (Bop(And,Mop(Not,bVar"b'14"),bVar"b'12"),
39321                       MB(Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
39322                          Close
39323                            (Var("v",F4),
39324                             MB(MB(MU(TP[Var("v",F4),LT],qTy),
39325                                   Close
39326                                     (Var("v",PTy(F4,bTy)),
39327                                      Call
39328                                        ("Take",ATy(qTy,PTy(bTy,qTy)),
39329                                         Var("v",PTy(F4,bTy))))),
39330                                Close
39331                                  (bVar"b",
39332                                   ITE(bVar"b",
39333                                       Let(Var("d",F4),
39334                                           Mop(Cast F4,
39335                                               Mop(Cast(FTy 3),
39336                                                   LL[bVar"b'10",
39337                                                      bVar"b'9",bVar"b'8"])),
39338                                           MB(Call
39339                                                ("InITBlock",
39340                                                 ATy(qTy,PTy(bTy,qTy)),LU),
39341                                              Close
39342                                                (bVar"v",
39343                                                 MB(MU(Mop(Not,bVar"v"),
39344                                                       qTy),
39345                                                    Close
39346                                                      (bVar"setflags",
39347                                                       MU(Call
39348                                                            ("Data",
39349                                                             CTy"instruction",
39350                                                             Call
39351                                                               ("ArithLogicImmediate",
39352                                                                CTy"Data",
39353                                                                TP[ITE(EQ(Mop(Cast
39354                                                                                F1,
39355                                                                              LL[bVar"b'11"]),
39356                                                                          LW(1,
39357                                                                             1)),
39358                                                                       LW(2,
39359                                                                          4),
39360                                                                       LW(4,
39361                                                                          4)),
39362                                                                   bVar"setflags",
39363                                                                   Var("d",
39364                                                                       F4),
39365                                                                   Var("d",
39366                                                                       F4),
39367                                                                   Mop(Cast
39368                                                                         (FTy 12),
39369                                                                       Mop(Cast
39370                                                                             F8,
39371                                                                           LL[bVar"b'7",
39372                                                                              bVar"b'6",
39373                                                                              bVar"b'5",
39374                                                                              bVar"b'4",
39375                                                                              bVar"b'3",
39376                                                                              bVar"b'2",
39377                                                                              bVar"b'1",
39378                                                                              bVar"b'0"]))])),
39379                                                          qTy)))))),
39380                                       Call
39381                                         ("Skip",
39382                                          ATy(qTy,
39383                                              PTy(CTy"instruction",qTy)),
39384                                          LU))))))),
39385                      (Bop(And,bVar"b'14",Mop(Not,bVar"b'12")),
39386                       Let(Var("Rt",FTy 3),
39387                           Mop(Cast(FTy 3),
39388                               LL[bVar"b'2",bVar"b'1",bVar"b'0"]),
39389                           Let(Var("Rn",FTy 3),
39390                               Mop(Cast(FTy 3),
39391                                   LL[bVar"b'5",bVar"b'4",bVar"b'3"]),
39392                               MB(Call
39393                                    ("ThumbCondition",
39394                                     ATy(qTy,PTy(F4,qTy)),LU),
39395                                  Close
39396                                    (Var("v",F4),
39397                                     MB(MB(MU(TP[Var("v",F4),LT],qTy),
39398                                           Close
39399                                             (Var("v",PTy(F4,bTy)),
39400                                              Call
39401                                                ("Take",
39402                                                 ATy(qTy,PTy(bTy,qTy)),
39403                                                 Var("v",PTy(F4,bTy))))),
39404                                        Close
39405                                          (bVar"b",
39406                                           ITE(bVar"b",
39407                                               MU(Let(bVar"index",LT,
39408                                                      Let(bVar"add",LT,
39409                                                          Let(bVar"wback",
39410                                                              LF,
39411                                                              Let(Var("m",
39412                                                                      CTy"offset1"),
39413                                                                  Call
39414                                                                    ("immediate_form1",
39415                                                                     CTy"offset1",
39416                                                                     Mop(Cast
39417                                                                           F32,
39418                                                                         CC[Mop(Cast
39419                                                                                  (FTy 5),
39420                                                                                LL[bVar"b'10",
39421                                                                                   bVar"b'9",
39422                                                                                   bVar"b'8",
39423                                                                                   bVar"b'7",
39424                                                                                   bVar"b'6"]),
39425                                                                            LW(0,
39426                                                                               2)])),
39427                                                                  ITE(EQ(Mop(Cast
39428                                                                               F1,
39429                                                                             LL[bVar"b'11"]),
39430                                                                         LW(1,
39431                                                                            1)),
39432                                                                      Call
39433                                                                        ("Load",
39434                                                                         CTy"instruction",
39435                                                                         Call
39436                                                                           ("LoadWord",
39437                                                                            CTy"Load",
39438                                                                            TP[bVar"add",
39439                                                                               bVar"index",
39440                                                                               bVar"wback",
39441                                                                               Mop(Cast
39442                                                                                     F4,
39443                                                                                   Var("Rt",
39444                                                                                       FTy 3)),
39445                                                                               Mop(Cast
39446                                                                                     F4,
39447                                                                                   Var("Rn",
39448                                                                                       FTy 3)),
39449                                                                               Var("m",
39450                                                                                   CTy"offset1")])),
39451                                                                      Call
39452                                                                        ("Store",
39453                                                                         CTy"instruction",
39454                                                                         Call
39455                                                                           ("StoreWord",
39456                                                                            CTy"Store",
39457                                                                            TP[bVar"add",
39458                                                                               bVar"index",
39459                                                                               bVar"wback",
39460                                                                               Mop(Cast
39461                                                                                     F4,
39462                                                                                   Var("Rt",
39463                                                                                       FTy 3)),
39464                                                                               Mop(Cast
39465                                                                                     F4,
39466                                                                                   Var("Rn",
39467                                                                                       FTy 3)),
39468                                                                               Var("m",
39469                                                                                   CTy"offset1")]))))))),
39470                                                  qTy),
39471                                               Call
39472                                                 ("Skip",
39473                                                  ATy(qTy,
39474                                                      PTy(CTy"instruction",
39475                                                          qTy)),LU))))))))),
39476                      (Bop(And,bVar"b'14",bVar"b'12"),
39477                       Let(Var("Rt",FTy 3),
39478                           Mop(Cast(FTy 3),
39479                               LL[bVar"b'2",bVar"b'1",bVar"b'0"]),
39480                           Let(Var("Rn",FTy 3),
39481                               Mop(Cast(FTy 3),
39482                                   LL[bVar"b'5",bVar"b'4",bVar"b'3"]),
39483                               MB(Call
39484                                    ("ThumbCondition",
39485                                     ATy(qTy,PTy(F4,qTy)),LU),
39486                                  Close
39487                                    (Var("v",F4),
39488                                     MB(MB(MU(TP[Var("v",F4),LT],qTy),
39489                                           Close
39490                                             (Var("v",PTy(F4,bTy)),
39491                                              Call
39492                                                ("Take",
39493                                                 ATy(qTy,PTy(bTy,qTy)),
39494                                                 Var("v",PTy(F4,bTy))))),
39495                                        Close
39496                                          (bVar"b",
39497                                           ITE(bVar"b",
39498                                               MU(Let(bVar"index",LT,
39499                                                      Let(bVar"add",LT,
39500                                                          Let(bVar"wback",
39501                                                              LF,
39502                                                              Let(Var("m",
39503                                                                      CTy"offset1"),
39504                                                                  Call
39505                                                                    ("immediate_form1",
39506                                                                     CTy"offset1",
39507                                                                     Mop(Cast
39508                                                                           F32,
39509                                                                         Mop(Cast
39510                                                                               (FTy 5),
39511                                                                             LL[bVar"b'10",
39512                                                                                bVar"b'9",
39513                                                                                bVar"b'8",
39514                                                                                bVar"b'7",
39515                                                                                bVar"b'6"]))),
39516                                                                  ITE(EQ(Mop(Cast
39517                                                                               F1,
39518                                                                             LL[bVar"b'11"]),
39519                                                                         LW(1,
39520                                                                            1)),
39521                                                                      Call
39522                                                                        ("Load",
39523                                                                         CTy"instruction",
39524                                                                         Call
39525                                                                           ("LoadByte",
39526                                                                            CTy"Load",
39527                                                                            TP[LT,
39528                                                                               bVar"add",
39529                                                                               bVar"index",
39530                                                                               bVar"wback",
39531                                                                               Mop(Cast
39532                                                                                     F4,
39533                                                                                   Var("Rt",
39534                                                                                       FTy 3)),
39535                                                                               Mop(Cast
39536                                                                                     F4,
39537                                                                                   Var("Rn",
39538                                                                                       FTy 3)),
39539                                                                               Var("m",
39540                                                                                   CTy"offset1")])),
39541                                                                      Call
39542                                                                        ("Store",
39543                                                                         CTy"instruction",
39544                                                                         Call
39545                                                                           ("StoreByte",
39546                                                                            CTy"Store",
39547                                                                            TP[bVar"add",
39548                                                                               bVar"index",
39549                                                                               bVar"wback",
39550                                                                               Mop(Cast
39551                                                                                     F4,
39552                                                                                   Var("Rt",
39553                                                                                       FTy 3)),
39554                                                                               Mop(Cast
39555                                                                                     F4,
39556                                                                                   Var("Rn",
39557                                                                                       FTy 3)),
39558                                                                               Var("m",
39559                                                                                   CTy"offset1")]))))))),
39560                                                  qTy),
39561                                               Call
39562                                                 ("Skip",
39563                                                  ATy(qTy,
39564                                                      PTy(CTy"instruction",
39565                                                          qTy)),LU)))))))))],
39566                     Call
39567                       ("UndefinedThumb",
39568                        ATy(qTy,PTy(CTy"instruction",qTy)),LU))),
39569                (bVar"b'15",
39570                 ITB([(Bop(And,Mop(Not,bVar"b'14"),Mop(Not,bVar"b'12")),
39571                       Let(Var("Rt",FTy 3),
39572                           Mop(Cast(FTy 3),
39573                               LL[bVar"b'2",bVar"b'1",bVar"b'0"]),
39574                           Let(Var("Rn",FTy 3),
39575                               Mop(Cast(FTy 3),
39576                                   LL[bVar"b'5",bVar"b'4",bVar"b'3"]),
39577                               MB(Call
39578                                    ("ThumbCondition",
39579                                     ATy(qTy,PTy(F4,qTy)),LU),
39580                                  Close
39581                                    (Var("v",F4),
39582                                     MB(MB(MU(TP[Var("v",F4),LT],qTy),
39583                                           Close
39584                                             (Var("v",PTy(F4,bTy)),
39585                                              Call
39586                                                ("Take",
39587                                                 ATy(qTy,PTy(bTy,qTy)),
39588                                                 Var("v",PTy(F4,bTy))))),
39589                                        Close
39590                                          (bVar"b",
39591                                           ITE(bVar"b",
39592                                               MU(Let(bVar"index",LT,
39593                                                      Let(bVar"add",LT,
39594                                                          Let(bVar"wback",
39595                                                              LF,
39596                                                              Let(Var("m",
39597                                                                      CTy"offset1"),
39598                                                                  Call
39599                                                                    ("immediate_form1",
39600                                                                     CTy"offset1",
39601                                                                     Mop(Cast
39602                                                                           F32,
39603                                                                         CC[Mop(Cast
39604                                                                                  (FTy 5),
39605                                                                                LL[bVar"b'10",
39606                                                                                   bVar"b'9",
39607                                                                                   bVar"b'8",
39608                                                                                   bVar"b'7",
39609                                                                                   bVar"b'6"]),
39610                                                                            LW(0,
39611                                                                               1)])),
39612                                                                  ITE(EQ(Mop(Cast
39613                                                                               F1,
39614                                                                             LL[bVar"b'11"]),
39615                                                                         LW(1,
39616                                                                            1)),
39617                                                                      Call
39618                                                                        ("Load",
39619                                                                         CTy"instruction",
39620                                                                         Call
39621                                                                           ("LoadHalf",
39622                                                                            CTy"Load",
39623                                                                            TP[LT,
39624                                                                               bVar"add",
39625                                                                               bVar"index",
39626                                                                               bVar"wback",
39627                                                                               Mop(Cast
39628                                                                                     F4,
39629                                                                                   Var("Rt",
39630                                                                                       FTy 3)),
39631                                                                               Mop(Cast
39632                                                                                     F4,
39633                                                                                   Var("Rn",
39634                                                                                       FTy 3)),
39635                                                                               Var("m",
39636                                                                                   CTy"offset1")])),
39637                                                                      Call
39638                                                                        ("Store",
39639                                                                         CTy"instruction",
39640                                                                         Call
39641                                                                           ("StoreHalf",
39642                                                                            CTy"Store",
39643                                                                            TP[bVar"add",
39644                                                                               bVar"index",
39645                                                                               bVar"wback",
39646                                                                               Mop(Cast
39647                                                                                     F4,
39648                                                                                   Var("Rt",
39649                                                                                       FTy 3)),
39650                                                                               Mop(Cast
39651                                                                                     F4,
39652                                                                                   Var("Rn",
39653                                                                                       FTy 3)),
39654                                                                               Var("m",
39655                                                                                   CTy"offset1")]))))))),
39656                                                  qTy),
39657                                               Call
39658                                                 ("Skip",
39659                                                  ATy(qTy,
39660                                                      PTy(CTy"instruction",
39661                                                          qTy)),LU))))))))),
39662                      (Bop(And,Mop(Not,bVar"b'14"),bVar"b'12"),
39663                       Let(Var("Rt",FTy 3),
39664                           Mop(Cast(FTy 3),
39665                               LL[bVar"b'10",bVar"b'9",bVar"b'8"]),
39666                           MB(Call
39667                                ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
39668                              Close
39669                                (Var("v",F4),
39670                                 MB(MB(MU(TP[Var("v",F4),LT],qTy),
39671                                       Close
39672                                         (Var("v",PTy(F4,bTy)),
39673                                          Call
39674                                            ("Take",ATy(qTy,PTy(bTy,qTy)),
39675                                             Var("v",PTy(F4,bTy))))),
39676                                    Close
39677                                      (bVar"b",
39678                                       ITE(bVar"b",
39679                                           MU(Let(bVar"index",LT,
39680                                                  Let(bVar"add",LT,
39681                                                      Let(bVar"wback",LF,
39682                                                          Let(Var("m",
39683                                                                  CTy"offset1"),
39684                                                              Call
39685                                                                ("immediate_form1",
39686                                                                 CTy"offset1",
39687                                                                 Mop(Cast
39688                                                                       F32,
39689                                                                     CC[Mop(Cast
39690                                                                              F8,
39691                                                                            LL[bVar"b'7",
39692                                                                               bVar"b'6",
39693                                                                               bVar"b'5",
39694                                                                               bVar"b'4",
39695                                                                               bVar"b'3",
39696                                                                               bVar"b'2",
39697                                                                               bVar"b'1",
39698                                                                               bVar"b'0"]),
39699                                                                        LW(0,
39700                                                                           2)])),
39701                                                              ITE(EQ(Mop(Cast
39702                                                                           F1,
39703                                                                         LL[bVar"b'11"]),
39704                                                                     LW(1,
39705                                                                        1)),
39706                                                                  Call
39707                                                                    ("Load",
39708                                                                     CTy"instruction",
39709                                                                     Call
39710                                                                       ("LoadWord",
39711                                                                        CTy"Load",
39712                                                                        TP[bVar"add",
39713                                                                           bVar"index",
39714                                                                           bVar"wback",
39715                                                                           Mop(Cast
39716                                                                                 F4,
39717                                                                               Var("Rt",
39718                                                                                   FTy 3)),
39719                                                                           LW(13,
39720                                                                              4),
39721                                                                           Var("m",
39722                                                                               CTy"offset1")])),
39723                                                                  Call
39724                                                                    ("Store",
39725                                                                     CTy"instruction",
39726                                                                     Call
39727                                                                       ("StoreWord",
39728                                                                        CTy"Store",
39729                                                                        TP[bVar"add",
39730                                                                           bVar"index",
39731                                                                           bVar"wback",
39732                                                                           Mop(Cast
39733                                                                                 F4,
39734                                                                               Var("Rt",
39735                                                                                   FTy 3)),
39736                                                                           LW(13,
39737                                                                              4),
39738                                                                           Var("m",
39739                                                                               CTy"offset1")]))))))),
39740                                              qTy),
39741                                           Call
39742                                             ("Skip",
39743                                              ATy(qTy,
39744                                                  PTy(CTy"instruction",qTy)),
39745                                              LU)))))))),
39746                      (Bop(And,bVar"b'14",
39747                           Bop(And,Mop(Not,bVar"b'12"),Mop(Not,bVar"b'11"))),
39748                       MB(Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
39749                          Close
39750                            (Var("v",F4),
39751                             MB(MB(MU(TP[Var("v",F4),LT],qTy),
39752                                   Close
39753                                     (Var("v",PTy(F4,bTy)),
39754                                      Call
39755                                        ("Take",ATy(qTy,PTy(bTy,qTy)),
39756                                         Var("v",PTy(F4,bTy))))),
39757                                Close
39758                                  (bVar"b",
39759                                   ITE(bVar"b",
39760                                       Let(Var("registers",F16),
39761                                           Mop(Cast F16,
39762                                               Mop(Cast F8,
39763                                                   LL[bVar"b'7",bVar"b'6",
39764                                                      bVar"b'5",bVar"b'4",
39765                                                      bVar"b'3",bVar"b'2",
39766                                                      bVar"b'1",bVar"b'0"])),
39767                                           MB(Call
39768                                                ("BitCount",
39769                                                 ATy(qTy,PTy(nTy,qTy)),
39770                                                 Var("registers",F16)),
39771                                              Close
39772                                                (nVar"v",
39773                                                 MB(MB(MU(Bop(Lt,nVar"v",
39774                                                              LN 1),qTy),
39775                                                       Close
39776                                                         (bVar"b",
39777                                                          ITE(bVar"b",
39778                                                              Call
39779                                                                ("DECODE_UNPREDICTABLE",
39780                                                                 ATy(qTy,
39781                                                                     PTy(uTy,
39782                                                                         qTy)),
39783                                                                 TP[Var("mc",
39784                                                                        CTy"MachineCode"),
39785                                                                    LS
39786                                                                     "StoreMultiple"]),
39787                                                              MU(LU,qTy)))),
39788                                                    Close
39789                                                      (AVar uTy,
39790                                                       MU(Call
39791                                                            ("Store",
39792                                                             CTy"instruction",
39793                                                             Call
39794                                                               ("StoreMultiple",
39795                                                                CTy"Store",
39796                                                                TP[LT,LF,
39797                                                                   LT,
39798                                                                   Mop(Cast
39799                                                                         F4,
39800                                                                       Mop(Cast
39801                                                                             (FTy 3),
39802                                                                           LL[bVar"b'10",
39803                                                                              bVar"b'9",
39804                                                                              bVar"b'8"])),
39805                                                                   Var("registers",
39806                                                                       F16)])),
39807                                                          qTy)))))),
39808                                       Call
39809                                         ("Skip",
39810                                          ATy(qTy,
39811                                              PTy(CTy"instruction",qTy)),
39812                                          LU))))))),
39813                      (Bop(And,bVar"b'14",
39814                           Bop(And,Mop(Not,bVar"b'12"),bVar"b'11")),
39815                       Let(Var("Rn",FTy 3),
39816                           Mop(Cast(FTy 3),
39817                               LL[bVar"b'10",bVar"b'9",bVar"b'8"]),
39818                           MB(Call
39819                                ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
39820                              Close
39821                                (Var("v",F4),
39822                                 MB(MB(MU(TP[Var("v",F4),LT],qTy),
39823                                       Close
39824                                         (Var("v",PTy(F4,bTy)),
39825                                          Call
39826                                            ("Take",ATy(qTy,PTy(bTy,qTy)),
39827                                             Var("v",PTy(F4,bTy))))),
39828                                    Close
39829                                      (bVar"b",
39830                                       ITE(bVar"b",
39831                                           Let(Var("registers",F16),
39832                                               Mop(Cast F16,
39833                                                   Mop(Cast F8,
39834                                                       LL[bVar"b'7",
39835                                                          bVar"b'6",
39836                                                          bVar"b'5",
39837                                                          bVar"b'4",
39838                                                          bVar"b'3",
39839                                                          bVar"b'2",
39840                                                          bVar"b'1",
39841                                                          bVar"b'0"])),
39842                                               MB(Call
39843                                                    ("BitCount",
39844                                                     ATy(qTy,PTy(nTy,qTy)),
39845                                                     Var("registers",F16)),
39846                                                  Close
39847                                                    (nVar"v",
39848                                                     MB(MB(MU(Bop(Lt,
39849                                                                  nVar"v",
39850                                                                  LN 1),
39851                                                              qTy),
39852                                                           Close
39853                                                             (bVar"b",
39854                                                              ITE(bVar"b",
39855                                                                  Call
39856                                                                    ("DECODE_UNPREDICTABLE",
39857                                                                     ATy(qTy,
39858                                                                         PTy(uTy,
39859                                                                             qTy)),
39860                                                                     TP[Var("mc",
39861                                                                            CTy"MachineCode"),
39862                                                                        LS
39863                                                                         "LoadMultiple"]),
39864                                                                  MU(LU,
39865                                                                     qTy)))),
39866                                                        Close
39867                                                          (AVar uTy,
39868                                                           MU(Call
39869                                                                ("Load",
39870                                                                 CTy"instruction",
39871                                                                 Call
39872                                                                   ("LoadMultiple",
39873                                                                    CTy"Load",
39874                                                                    TP[LT,
39875                                                                       LF,
39876                                                                       Mop(Not,
39877                                                                           Bop(Bit,
39878                                                                               Var("registers",
39879                                                                                   F16),
39880                                                                               Mop(Cast
39881                                                                                     nTy,
39882                                                                                   Var("Rn",
39883                                                                                       FTy 3)))),
39884                                                                       Mop(Cast
39885                                                                             F4,
39886                                                                           Var("Rn",
39887                                                                               FTy 3)),
39888                                                                       Var("registers",
39889                                                                           F16)])),
39890                                                              qTy)))))),
39891                                           Call
39892                                             ("Skip",
39893                                              ATy(qTy,
39894                                                  PTy(CTy"instruction",qTy)),
39895                                              LU)))))))),
39896                      (Bop(And,bVar"b'14",
39897                           Bop(And,bVar"b'12",
39898                               Bop(And,bVar"b'11",
39899                                   Bop(And,bVar"b'10",
39900                                       Bop(And,bVar"b'9",
39901                                           Mop(Not,bVar"b'8")))))),
39902                       MB(Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
39903                          Close
39904                            (Var("v",F4),
39905                             MB(MB(MU(TP[Var("v",F4),LT],qTy),
39906                                   Close
39907                                     (Var("v",PTy(F4,bTy)),
39908                                      Call
39909                                        ("Take",ATy(qTy,PTy(bTy,qTy)),
39910                                         Var("v",PTy(F4,bTy))))),
39911                                Close
39912                                  (bVar"b",
39913                                   ITE(bVar"b",
39914                                       MU(Call
39915                                            ("Undefined",CTy"instruction",
39916                                             Mop(Cast F32,
39917                                                 Mop(Cast F8,
39918                                                     LL[bVar"b'7",
39919                                                        bVar"b'6",
39920                                                        bVar"b'5",
39921                                                        bVar"b'4",
39922                                                        bVar"b'3",
39923                                                        bVar"b'2",
39924                                                        bVar"b'1",
39925                                                        bVar"b'0"]))),qTy),
39926                                       Call
39927                                         ("Skip",
39928                                          ATy(qTy,
39929                                              PTy(CTy"instruction",qTy)),
39930                                          LU))))))),
39931                      (Bop(And,bVar"b'14",
39932                           Bop(And,bVar"b'12",
39933                               Bop(And,bVar"b'11",
39934                                   Bop(And,bVar"b'10",
39935                                       Bop(And,bVar"b'9",bVar"b'8"))))),
39936                       MB(Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
39937                          Close
39938                            (Var("v",F4),
39939                             MB(MB(MU(TP[Var("v",F4),LT],qTy),
39940                                   Close
39941                                     (Var("v",PTy(F4,bTy)),
39942                                      Call
39943                                        ("Take",ATy(qTy,PTy(bTy,qTy)),
39944                                         Var("v",PTy(F4,bTy))))),
39945                                Close
39946                                  (bVar"b",
39947                                   ITE(bVar"b",
39948                                       MU(Call
39949                                            ("System",CTy"instruction",
39950                                             Call
39951                                               ("SupervisorCall",
39952                                                CTy"System",
39953                                                Mop(Cast F32,
39954                                                    Mop(Cast F8,
39955                                                        LL[bVar"b'7",
39956                                                           bVar"b'6",
39957                                                           bVar"b'5",
39958                                                           bVar"b'4",
39959                                                           bVar"b'3",
39960                                                           bVar"b'2",
39961                                                           bVar"b'1",
39962                                                           bVar"b'0"])))),
39963                                          qTy),
39964                                       Call
39965                                         ("Skip",
39966                                          ATy(qTy,
39967                                              PTy(CTy"instruction",qTy)),
39968                                          LU))))))),
39969                      (Bop(And,bVar"b'14",bVar"b'12"),
39970                       MB(Call
39971                            ("Take",ATy(qTy,PTy(bTy,qTy)),
39972                             TP[Mop(Cast F4,
39973                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
39974                                       bVar"b'8"]),LT]),
39975                          Close
39976                            (bVar"b",
39977                             ITE(bVar"b",
39978                                 MB(Call
39979                                      ("InITBlock",ATy(qTy,PTy(bTy,qTy)),
39980                                       LU),
39981                                    Close
39982                                      (bVar"v",
39983                                       MB(ITE(bVar"v",
39984                                              Call
39985                                                ("DECODE_UNPREDICTABLE",
39986                                                 ATy(qTy,PTy(uTy,qTy)),
39987                                                 TP[Var("mc",
39988                                                        CTy"MachineCode"),
39989                                                    LS"BranchTarget"]),
39990                                              MU(LU,qTy)),
39991                                          Close
39992                                            (AVar uTy,
39993                                             MU(Call
39994                                                  ("Branch",
39995                                                   CTy"instruction",
39996                                                   Call
39997                                                     ("BranchTarget",
39998                                                      CTy"Branch",
39999                                                      Mop(SE F32,
40000                                                          CC[Mop(Cast F8,
40001                                                                 LL[bVar"b'7",
40002                                                                    bVar"b'6",
40003                                                                    bVar"b'5",
40004                                                                    bVar"b'4",
40005                                                                    bVar"b'3",
40006                                                                    bVar"b'2",
40007                                                                    bVar"b'1",
40008                                                                    bVar"b'0"]),
40009                                                             LW(0,1)]))),
40010                                                qTy))))),
40011                                 Call
40012                                   ("Skip",
40013                                    ATy(qTy,PTy(CTy"instruction",qTy)),LU)))))],
40014                     Call
40015                       ("UndefinedThumb",
40016                        ATy(qTy,PTy(CTy"instruction",qTy)),LU))),
40017                (Bop(And,Mop(Not,bVar"b'14"),
40018                     Bop(And,bVar"b'12",
40019                         Bop(And,bVar"b'11",Mop(Not,bVar"b'10")))),
40020                 MB(Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
40021                    Close
40022                      (Var("v",F4),
40023                       MB(MB(MU(TP[Var("v",F4),LT],qTy),
40024                             Close
40025                               (Var("v",PTy(F4,bTy)),
40026                                Call
40027                                  ("Take",ATy(qTy,PTy(bTy,qTy)),
40028                                   Var("v",PTy(F4,bTy))))),
40029                          Close
40030                            (bVar"b",
40031                             ITE(bVar"b",
40032                                 MB(Call
40033                                      ("InITBlock",ATy(qTy,PTy(bTy,qTy)),
40034                                       LU),
40035                                    Close
40036                                      (bVar"v",
40037                                       MB(MU(Mop(Not,bVar"v"),qTy),
40038                                          Close
40039                                            (bVar"setflags",
40040                                             MU(Call
40041                                                  ("Data",
40042                                                   CTy"instruction",
40043                                                   Call
40044                                                     ("Register",
40045                                                      CTy"Data",
40046                                                      TP[ITE(EQ(Mop(Cast
40047                                                                      F1,
40048                                                                    LL[bVar"b'9"]),
40049                                                                LW(1,1)),
40050                                                             LW(2,4),
40051                                                             LW(4,4)),
40052                                                         bVar"setflags",
40053                                                         Mop(Cast F4,
40054                                                             Mop(Cast
40055                                                                   (FTy 3),
40056                                                                 LL[bVar"b'2",
40057                                                                    bVar"b'1",
40058                                                                    bVar"b'0"])),
40059                                                         Mop(Cast F4,
40060                                                             Mop(Cast
40061                                                                   (FTy 3),
40062                                                                 LL[bVar"b'5",
40063                                                                    bVar"b'4",
40064                                                                    bVar"b'3"])),
40065                                                         Mop(Cast F4,
40066                                                             Mop(Cast
40067                                                                   (FTy 3),
40068                                                                 LL[bVar"b'8",
40069                                                                    bVar"b'7",
40070                                                                    bVar"b'6"])),
40071                                                         LC("SRType_LSL",
40072                                                            CTy"SRType"),
40073                                                         LN 0])),qTy))))),
40074                                 Call
40075                                   ("Skip",
40076                                    ATy(qTy,PTy(CTy"instruction",qTy)),LU))))))),
40077                (Bop(And,Mop(Not,bVar"b'14"),
40078                     Bop(And,bVar"b'12",Bop(And,bVar"b'11",bVar"b'10"))),
40079                 MB(Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
40080                    Close
40081                      (Var("v",F4),
40082                       MB(MB(MU(TP[Var("v",F4),LT],qTy),
40083                             Close
40084                               (Var("v",PTy(F4,bTy)),
40085                                Call
40086                                  ("Take",ATy(qTy,PTy(bTy,qTy)),
40087                                   Var("v",PTy(F4,bTy))))),
40088                          Close
40089                            (bVar"b",
40090                             ITE(bVar"b",
40091                                 MB(Call
40092                                      ("InITBlock",ATy(qTy,PTy(bTy,qTy)),
40093                                       LU),
40094                                    Close
40095                                      (bVar"v",
40096                                       MB(MU(Mop(Not,bVar"v"),qTy),
40097                                          Close
40098                                            (bVar"setflags",
40099                                             MU(Call
40100                                                  ("Data",
40101                                                   CTy"instruction",
40102                                                   Call
40103                                                     ("ArithLogicImmediate",
40104                                                      CTy"Data",
40105                                                      TP[ITE(EQ(Mop(Cast
40106                                                                      F1,
40107                                                                    LL[bVar"b'9"]),
40108                                                                LW(1,1)),
40109                                                             LW(2,4),
40110                                                             LW(4,4)),
40111                                                         bVar"setflags",
40112                                                         Mop(Cast F4,
40113                                                             Mop(Cast
40114                                                                   (FTy 3),
40115                                                                 LL[bVar"b'2",
40116                                                                    bVar"b'1",
40117                                                                    bVar"b'0"])),
40118                                                         Mop(Cast F4,
40119                                                             Mop(Cast
40120                                                                   (FTy 3),
40121                                                                 LL[bVar"b'5",
40122                                                                    bVar"b'4",
40123                                                                    bVar"b'3"])),
40124                                                         Mop(Cast(FTy 12),
40125                                                             Mop(Cast
40126                                                                   (FTy 3),
40127                                                                 LL[bVar"b'8",
40128                                                                    bVar"b'7",
40129                                                                    bVar"b'6"]))])),
40130                                                qTy))))),
40131                                 Call
40132                                   ("Skip",
40133                                    ATy(qTy,PTy(CTy"instruction",qTy)),LU))))))),
40134                (Mop(Not,bVar"b'14"),
40135                 MB(Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
40136                    Close
40137                      (Var("v",F4),
40138                       MB(MB(MU(TP[Var("v",F4),LT],qTy),
40139                             Close
40140                               (Var("v",PTy(F4,bTy)),
40141                                Call
40142                                  ("Take",ATy(qTy,PTy(bTy,qTy)),
40143                                   Var("v",PTy(F4,bTy))))),
40144                          Close
40145                            (bVar"b",
40146                             ITE(bVar"b",
40147                                 MB(Call
40148                                      ("InITBlock",ATy(qTy,PTy(bTy,qTy)),
40149                                       LU),
40150                                    Close
40151                                      (bVar"v",
40152                                       MB(MU(Mop(Not,bVar"v"),qTy),
40153                                          Close
40154                                            (bVar"setflags",
40155                                             MU(Let(TP[Var("shift_t",
40156                                                           CTy"SRType"),
40157                                                       nVar"shift_n"],
40158                                                    Call
40159                                                      ("DecodeImmShift",
40160                                                       PTy(CTy"SRType",nTy),
40161                                                       TP[Mop(Cast(FTy 2),
40162                                                              LL[bVar"b'12",
40163                                                                 bVar"b'11"]),
40164                                                          Mop(Cast(FTy 5),
40165                                                              LL[bVar"b'10",
40166                                                                 bVar"b'9",
40167                                                                 bVar"b'8",
40168                                                                 bVar"b'7",
40169                                                                 bVar"b'6"])]),
40170                                                    Call
40171                                                      ("Data",
40172                                                       CTy"instruction",
40173                                                       Call
40174                                                         ("ShiftImmediate",
40175                                                          CTy"Data",
40176                                                          TP[LF,
40177                                                             bVar"setflags",
40178                                                             Mop(Cast F4,
40179                                                                 Mop(Cast
40180                                                                       (FTy 3),
40181                                                                     LL[bVar"b'2",
40182                                                                        bVar"b'1",
40183                                                                        bVar"b'0"])),
40184                                                             Mop(Cast F4,
40185                                                                 Mop(Cast
40186                                                                       (FTy 3),
40187                                                                     LL[bVar"b'5",
40188                                                                        bVar"b'4",
40189                                                                        bVar"b'3"])),
40190                                                             Var("shift_t",
40191                                                                 CTy"SRType"),
40192                                                             nVar"shift_n"]))),
40193                                                qTy))))),
40194                                 Call
40195                                   ("Skip",
40196                                    ATy(qTy,PTy(CTy"instruction",qTy)),LU))))))),
40197                (Bop(And,bVar"b'14",
40198                     Bop(And,Mop(Not,bVar"b'12"),
40199                         Bop(And,Mop(Not,bVar"b'11"),Mop(Not,bVar"b'10")))),
40200                 Let(Var("Ry",FTy 3),
40201                     Mop(Cast(FTy 3),LL[bVar"b'2",bVar"b'1",bVar"b'0"]),
40202                     Let(Var("Rx",FTy 3),
40203                         Mop(Cast(FTy 3),LL[bVar"b'5",bVar"b'4",bVar"b'3"]),
40204                         Let(Var("opc",F4),
40205                             Mop(Cast F4,
40206                                 LL[bVar"b'9",bVar"b'8",bVar"b'7",
40207                                    bVar"b'6"]),
40208                             MB(Call
40209                                  ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),
40210                                   LU),
40211                                Close
40212                                  (Var("v",F4),
40213                                   MB(MB(MU(TP[Var("v",F4),LT],qTy),
40214                                         Close
40215                                           (Var("v",PTy(F4,bTy)),
40216                                            Call
40217                                              ("Take",
40218                                               ATy(qTy,PTy(bTy,qTy)),
40219                                               Var("v",PTy(F4,bTy))))),
40220                                      Close
40221                                        (bVar"b",
40222                                         ITE(bVar"b",
40223                                             CS(Var("opc",F4),
40224                                                [(LW(0,4),
40225                                                  Let(Var("d",F4),
40226                                                      Mop(Cast F4,
40227                                                          Var("Ry",FTy 3)),
40228                                                      MB(Call
40229                                                           ("InITBlock",
40230                                                            ATy(qTy,
40231                                                                PTy(bTy,
40232                                                                    qTy)),
40233                                                            LU),
40234                                                         Close
40235                                                           (bVar"v",
40236                                                            MB(MU(Mop(Not,
40237                                                                      bVar"v"),
40238                                                                  qTy),
40239                                                               Close
40240                                                                 (bVar"setflags",
40241                                                                  MU(Call
40242                                                                       ("Data",
40243                                                                        CTy"instruction",
40244                                                                        Call
40245                                                                          ("Register",
40246                                                                           CTy"Data",
40247                                                                           TP[Var("opc",
40248                                                                                  F4),
40249                                                                              bVar"setflags",
40250                                                                              Var("d",
40251                                                                                  F4),
40252                                                                              Var("d",
40253                                                                                  F4),
40254                                                                              Mop(Cast
40255                                                                                    F4,
40256                                                                                  Var("Rx",
40257                                                                                      FTy 3)),
40258                                                                              LC("SRType_LSL",
40259                                                                                 CTy"SRType"),
40260                                                                              LN
40261                                                                               0])),
40262                                                                     qTy))))))),
40263                                                 (LW(1,4),
40264                                                  Let(Var("d",F4),
40265                                                      Mop(Cast F4,
40266                                                          Var("Ry",FTy 3)),
40267                                                      MB(Call
40268                                                           ("InITBlock",
40269                                                            ATy(qTy,
40270                                                                PTy(bTy,
40271                                                                    qTy)),
40272                                                            LU),
40273                                                         Close
40274                                                           (bVar"v",
40275                                                            MB(MU(Mop(Not,
40276                                                                      bVar"v"),
40277                                                                  qTy),
40278                                                               Close
40279                                                                 (bVar"setflags",
40280                                                                  MU(Call
40281                                                                       ("Data",
40282                                                                        CTy"instruction",
40283                                                                        Call
40284                                                                          ("Register",
40285                                                                           CTy"Data",
40286                                                                           TP[Var("opc",
40287                                                                                  F4),
40288                                                                              bVar"setflags",
40289                                                                              Var("d",
40290                                                                                  F4),
40291                                                                              Var("d",
40292                                                                                  F4),
40293                                                                              Mop(Cast
40294                                                                                    F4,
40295                                                                                  Var("Rx",
40296                                                                                      FTy 3)),
40297                                                                              LC("SRType_LSL",
40298                                                                                 CTy"SRType"),
40299                                                                              LN
40300                                                                               0])),
40301                                                                     qTy))))))),
40302                                                 (LW(5,4),
40303                                                  Let(Var("d",F4),
40304                                                      Mop(Cast F4,
40305                                                          Var("Ry",FTy 3)),
40306                                                      MB(Call
40307                                                           ("InITBlock",
40308                                                            ATy(qTy,
40309                                                                PTy(bTy,
40310                                                                    qTy)),
40311                                                            LU),
40312                                                         Close
40313                                                           (bVar"v",
40314                                                            MB(MU(Mop(Not,
40315                                                                      bVar"v"),
40316                                                                  qTy),
40317                                                               Close
40318                                                                 (bVar"setflags",
40319                                                                  MU(Call
40320                                                                       ("Data",
40321                                                                        CTy"instruction",
40322                                                                        Call
40323                                                                          ("Register",
40324                                                                           CTy"Data",
40325                                                                           TP[Var("opc",
40326                                                                                  F4),
40327                                                                              bVar"setflags",
40328                                                                              Var("d",
40329                                                                                  F4),
40330                                                                              Var("d",
40331                                                                                  F4),
40332                                                                              Mop(Cast
40333                                                                                    F4,
40334                                                                                  Var("Rx",
40335                                                                                      FTy 3)),
40336                                                                              LC("SRType_LSL",
40337                                                                                 CTy"SRType"),
40338                                                                              LN
40339                                                                               0])),
40340                                                                     qTy))))))),
40341                                                 (LW(6,4),
40342                                                  Let(Var("d",F4),
40343                                                      Mop(Cast F4,
40344                                                          Var("Ry",FTy 3)),
40345                                                      MB(Call
40346                                                           ("InITBlock",
40347                                                            ATy(qTy,
40348                                                                PTy(bTy,
40349                                                                    qTy)),
40350                                                            LU),
40351                                                         Close
40352                                                           (bVar"v",
40353                                                            MB(MU(Mop(Not,
40354                                                                      bVar"v"),
40355                                                                  qTy),
40356                                                               Close
40357                                                                 (bVar"setflags",
40358                                                                  MU(Call
40359                                                                       ("Data",
40360                                                                        CTy"instruction",
40361                                                                        Call
40362                                                                          ("Register",
40363                                                                           CTy"Data",
40364                                                                           TP[Var("opc",
40365                                                                                  F4),
40366                                                                              bVar"setflags",
40367                                                                              Var("d",
40368                                                                                  F4),
40369                                                                              Var("d",
40370                                                                                  F4),
40371                                                                              Mop(Cast
40372                                                                                    F4,
40373                                                                                  Var("Rx",
40374                                                                                      FTy 3)),
40375                                                                              LC("SRType_LSL",
40376                                                                                 CTy"SRType"),
40377                                                                              LN
40378                                                                               0])),
40379                                                                     qTy))))))),
40380                                                 (LW(12,4),
40381                                                  Let(Var("d",F4),
40382                                                      Mop(Cast F4,
40383                                                          Var("Ry",FTy 3)),
40384                                                      MB(Call
40385                                                           ("InITBlock",
40386                                                            ATy(qTy,
40387                                                                PTy(bTy,
40388                                                                    qTy)),
40389                                                            LU),
40390                                                         Close
40391                                                           (bVar"v",
40392                                                            MB(MU(Mop(Not,
40393                                                                      bVar"v"),
40394                                                                  qTy),
40395                                                               Close
40396                                                                 (bVar"setflags",
40397                                                                  MU(Call
40398                                                                       ("Data",
40399                                                                        CTy"instruction",
40400                                                                        Call
40401                                                                          ("Register",
40402                                                                           CTy"Data",
40403                                                                           TP[Var("opc",
40404                                                                                  F4),
40405                                                                              bVar"setflags",
40406                                                                              Var("d",
40407                                                                                  F4),
40408                                                                              Var("d",
40409                                                                                  F4),
40410                                                                              Mop(Cast
40411                                                                                    F4,
40412                                                                                  Var("Rx",
40413                                                                                      FTy 3)),
40414                                                                              LC("SRType_LSL",
40415                                                                                 CTy"SRType"),
40416                                                                              LN
40417                                                                               0])),
40418                                                                     qTy))))))),
40419                                                 (LW(14,4),
40420                                                  Let(Var("d",F4),
40421                                                      Mop(Cast F4,
40422                                                          Var("Ry",FTy 3)),
40423                                                      MB(Call
40424                                                           ("InITBlock",
40425                                                            ATy(qTy,
40426                                                                PTy(bTy,
40427                                                                    qTy)),
40428                                                            LU),
40429                                                         Close
40430                                                           (bVar"v",
40431                                                            MB(MU(Mop(Not,
40432                                                                      bVar"v"),
40433                                                                  qTy),
40434                                                               Close
40435                                                                 (bVar"setflags",
40436                                                                  MU(Call
40437                                                                       ("Data",
40438                                                                        CTy"instruction",
40439                                                                        Call
40440                                                                          ("Register",
40441                                                                           CTy"Data",
40442                                                                           TP[Var("opc",
40443                                                                                  F4),
40444                                                                              bVar"setflags",
40445                                                                              Var("d",
40446                                                                                  F4),
40447                                                                              Var("d",
40448                                                                                  F4),
40449                                                                              Mop(Cast
40450                                                                                    F4,
40451                                                                                  Var("Rx",
40452                                                                                      FTy 3)),
40453                                                                              LC("SRType_LSL",
40454                                                                                 CTy"SRType"),
40455                                                                              LN
40456                                                                               0])),
40457                                                                     qTy))))))),
40458                                                 (LW(2,4),
40459                                                  Let(Var("d",F4),
40460                                                      Mop(Cast F4,
40461                                                          Var("Ry",FTy 3)),
40462                                                      MB(Call
40463                                                           ("InITBlock",
40464                                                            ATy(qTy,
40465                                                                PTy(bTy,
40466                                                                    qTy)),
40467                                                            LU),
40468                                                         Close
40469                                                           (bVar"v",
40470                                                            MB(MU(Mop(Not,
40471                                                                      bVar"v"),
40472                                                                  qTy),
40473                                                               Close
40474                                                                 (bVar"setflags",
40475                                                                  MU(Call
40476                                                                       ("Data",
40477                                                                        CTy"instruction",
40478                                                                        Call
40479                                                                          ("ShiftRegister",
40480                                                                           CTy"Data",
40481                                                                           TP[LF,
40482                                                                              bVar"setflags",
40483                                                                              Var("d",
40484                                                                                  F4),
40485                                                                              Var("d",
40486                                                                                  F4),
40487                                                                              Call
40488                                                                                ("DecodeRegShift",
40489                                                                                 CTy"SRType",
40490                                                                                 Mop(Cast
40491                                                                                       (FTy 2),
40492                                                                                     Bop(Sub,
40493                                                                                         Var("opc",
40494                                                                                             F4),
40495                                                                                         LW(2,
40496                                                                                            4)))),
40497                                                                              Mop(Cast
40498                                                                                    F4,
40499                                                                                  Var("Rx",
40500                                                                                      FTy 3))])),
40501                                                                     qTy))))))),
40502                                                 (LW(3,4),
40503                                                  Let(Var("d",F4),
40504                                                      Mop(Cast F4,
40505                                                          Var("Ry",FTy 3)),
40506                                                      MB(Call
40507                                                           ("InITBlock",
40508                                                            ATy(qTy,
40509                                                                PTy(bTy,
40510                                                                    qTy)),
40511                                                            LU),
40512                                                         Close
40513                                                           (bVar"v",
40514                                                            MB(MU(Mop(Not,
40515                                                                      bVar"v"),
40516                                                                  qTy),
40517                                                               Close
40518                                                                 (bVar"setflags",
40519                                                                  MU(Call
40520                                                                       ("Data",
40521                                                                        CTy"instruction",
40522                                                                        Call
40523                                                                          ("ShiftRegister",
40524                                                                           CTy"Data",
40525                                                                           TP[LF,
40526                                                                              bVar"setflags",
40527                                                                              Var("d",
40528                                                                                  F4),
40529                                                                              Var("d",
40530                                                                                  F4),
40531                                                                              Call
40532                                                                                ("DecodeRegShift",
40533                                                                                 CTy"SRType",
40534                                                                                 Mop(Cast
40535                                                                                       (FTy 2),
40536                                                                                     Bop(Sub,
40537                                                                                         Var("opc",
40538                                                                                             F4),
40539                                                                                         LW(2,
40540                                                                                            4)))),
40541                                                                              Mop(Cast
40542                                                                                    F4,
40543                                                                                  Var("Rx",
40544                                                                                      FTy 3))])),
40545                                                                     qTy))))))),
40546                                                 (LW(4,4),
40547                                                  Let(Var("d",F4),
40548                                                      Mop(Cast F4,
40549                                                          Var("Ry",FTy 3)),
40550                                                      MB(Call
40551                                                           ("InITBlock",
40552                                                            ATy(qTy,
40553                                                                PTy(bTy,
40554                                                                    qTy)),
40555                                                            LU),
40556                                                         Close
40557                                                           (bVar"v",
40558                                                            MB(MU(Mop(Not,
40559                                                                      bVar"v"),
40560                                                                  qTy),
40561                                                               Close
40562                                                                 (bVar"setflags",
40563                                                                  MU(Call
40564                                                                       ("Data",
40565                                                                        CTy"instruction",
40566                                                                        Call
40567                                                                          ("ShiftRegister",
40568                                                                           CTy"Data",
40569                                                                           TP[LF,
40570                                                                              bVar"setflags",
40571                                                                              Var("d",
40572                                                                                  F4),
40573                                                                              Var("d",
40574                                                                                  F4),
40575                                                                              Call
40576                                                                                ("DecodeRegShift",
40577                                                                                 CTy"SRType",
40578                                                                                 Mop(Cast
40579                                                                                       (FTy 2),
40580                                                                                     Bop(Sub,
40581                                                                                         Var("opc",
40582                                                                                             F4),
40583                                                                                         LW(2,
40584                                                                                            4)))),
40585                                                                              Mop(Cast
40586                                                                                    F4,
40587                                                                                  Var("Rx",
40588                                                                                      FTy 3))])),
40589                                                                     qTy))))))),
40590                                                 (LW(7,4),
40591                                                  Let(Var("d",F4),
40592                                                      Mop(Cast F4,
40593                                                          Var("Ry",FTy 3)),
40594                                                      MB(Call
40595                                                           ("InITBlock",
40596                                                            ATy(qTy,
40597                                                                PTy(bTy,
40598                                                                    qTy)),
40599                                                            LU),
40600                                                         Close
40601                                                           (bVar"v",
40602                                                            MB(MU(Mop(Not,
40603                                                                      bVar"v"),
40604                                                                  qTy),
40605                                                               Close
40606                                                                 (bVar"setflags",
40607                                                                  MU(Call
40608                                                                       ("Data",
40609                                                                        CTy"instruction",
40610                                                                        Call
40611                                                                          ("ShiftRegister",
40612                                                                           CTy"Data",
40613                                                                           TP[LF,
40614                                                                              bVar"setflags",
40615                                                                              Var("d",
40616                                                                                  F4),
40617                                                                              Var("d",
40618                                                                                  F4),
40619                                                                              LC("SRType_ROR",
40620                                                                                 CTy"SRType"),
40621                                                                              Mop(Cast
40622                                                                                    F4,
40623                                                                                  Var("Rx",
40624                                                                                      FTy 3))])),
40625                                                                     qTy))))))),
40626                                                 (LW(8,4),
40627                                                  MU(Call
40628                                                       ("Data",
40629                                                        CTy"instruction",
40630                                                        Call
40631                                                          ("TestCompareRegister",
40632                                                           CTy"Data",
40633                                                           TP[EX(Var("opc",
40634                                                                     F4),
40635                                                                 LN 1,
40636                                                                 LN 0,
40637                                                                 FTy 2),
40638                                                              Mop(Cast F4,
40639                                                                  Var("Ry",
40640                                                                      FTy 3)),
40641                                                              Mop(Cast F4,
40642                                                                  Var("Rx",
40643                                                                      FTy 3)),
40644                                                              LC("SRType_LSL",
40645                                                                 CTy"SRType"),
40646                                                              LN 0])),qTy)),
40647                                                 (LW(10,4),
40648                                                  MU(Call
40649                                                       ("Data",
40650                                                        CTy"instruction",
40651                                                        Call
40652                                                          ("TestCompareRegister",
40653                                                           CTy"Data",
40654                                                           TP[EX(Var("opc",
40655                                                                     F4),
40656                                                                 LN 1,
40657                                                                 LN 0,
40658                                                                 FTy 2),
40659                                                              Mop(Cast F4,
40660                                                                  Var("Ry",
40661                                                                      FTy 3)),
40662                                                              Mop(Cast F4,
40663                                                                  Var("Rx",
40664                                                                      FTy 3)),
40665                                                              LC("SRType_LSL",
40666                                                                 CTy"SRType"),
40667                                                              LN 0])),qTy)),
40668                                                 (LW(11,4),
40669                                                  MU(Call
40670                                                       ("Data",
40671                                                        CTy"instruction",
40672                                                        Call
40673                                                          ("TestCompareRegister",
40674                                                           CTy"Data",
40675                                                           TP[EX(Var("opc",
40676                                                                     F4),
40677                                                                 LN 1,
40678                                                                 LN 0,
40679                                                                 FTy 2),
40680                                                              Mop(Cast F4,
40681                                                                  Var("Ry",
40682                                                                      FTy 3)),
40683                                                              Mop(Cast F4,
40684                                                                  Var("Rx",
40685                                                                      FTy 3)),
40686                                                              LC("SRType_LSL",
40687                                                                 CTy"SRType"),
40688                                                              LN 0])),qTy)),
40689                                                 (LW(9,4),
40690                                                  MB(Call
40691                                                       ("InITBlock",
40692                                                        ATy(qTy,
40693                                                            PTy(bTy,qTy)),
40694                                                        LU),
40695                                                     Close
40696                                                       (bVar"v",
40697                                                        MB(MU(Mop(Not,
40698                                                                  bVar"v"),
40699                                                              qTy),
40700                                                           Close
40701                                                             (bVar"setflags",
40702                                                              MU(Call
40703                                                                   ("Data",
40704                                                                    CTy"instruction",
40705                                                                    Call
40706                                                                      ("ArithLogicImmediate",
40707                                                                       CTy"Data",
40708                                                                       TP[LW(3,
40709                                                                             4),
40710                                                                          bVar"setflags",
40711                                                                          Mop(Cast
40712                                                                                F4,
40713                                                                              Var("Ry",
40714                                                                                  FTy 3)),
40715                                                                          Mop(Cast
40716                                                                                F4,
40717                                                                              Var("Rx",
40718                                                                                  FTy 3)),
40719                                                                          LW(0,
40720                                                                             12)])),
40721                                                                 qTy)))))),
40722                                                 (LW(13,4),
40723                                                  Let(Var("d",F4),
40724                                                      Mop(Cast F4,
40725                                                          Var("Ry",FTy 3)),
40726                                                      Let(Var("n",F4),
40727                                                          Mop(Cast F4,
40728                                                              Var("Rx",
40729                                                                  FTy 3)),
40730                                                          MB(Call
40731                                                               ("ArchVersion",
40732                                                                ATy(qTy,
40733                                                                    PTy(nTy,
40734                                                                        qTy)),
40735                                                                LU),
40736                                                             Close
40737                                                               (nVar"v",
40738                                                                MB(MB(MB(MU(Bop(Lt,
40739                                                                                nVar"v",
40740                                                                                LN
40741                                                                                 6),
40742                                                                            qTy),
40743                                                                         Close
40744                                                                           (bVar"b",
40745                                                                            MU(Bop(And,
40746                                                                                   bVar"b",
40747                                                                                   EQ(Var("d",
40748                                                                                          F4),
40749                                                                                      Var("n",
40750                                                                                          F4))),
40751                                                                               qTy))),
40752                                                                      Close
40753                                                                        (bVar"b",
40754                                                                         ITE(bVar"b",
40755                                                                             Call
40756                                                                               ("DECODE_UNPREDICTABLE",
40757                                                                                ATy(qTy,
40758                                                                                    PTy(uTy,
40759                                                                                        qTy)),
40760                                                                                TP[Var("mc",
40761                                                                                       CTy"MachineCode"),
40762                                                                                   LS
40763                                                                                    "Multiply"]),
40764                                                                             MU(LU,
40765                                                                                qTy)))),
40766                                                                   Close
40767                                                                     (AVar
40768                                                                        uTy,
40769                                                                      MB(Call
40770                                                                           ("InITBlock",
40771                                                                            ATy(qTy,
40772                                                                                PTy(bTy,
40773                                                                                    qTy)),
40774                                                                            LU),
40775                                                                         Close
40776                                                                           (bVar"v",
40777                                                                            MB(MU(Mop(Not,
40778                                                                                      bVar"v"),
40779                                                                                  qTy),
40780                                                                               Close
40781                                                                                 (bVar"setflags",
40782                                                                                  MU(Call
40783                                                                                       ("Multiply",
40784                                                                                        CTy"instruction",
40785                                                                                        Call
40786                                                                                          ("Multiply32",
40787                                                                                           CTy"Multiply",
40788                                                                                           TP[bVar"setflags",
40789                                                                                              Var("d",
40790                                                                                                  F4),
40791                                                                                              Var("n",
40792                                                                                                  F4),
40793                                                                                              Var("d",
40794                                                                                                  F4)])),
40795                                                                                     qTy)))))))))))),
40796                                                 (LW(15,4),
40797                                                  MB(Call
40798                                                       ("InITBlock",
40799                                                        ATy(qTy,
40800                                                            PTy(bTy,qTy)),
40801                                                        LU),
40802                                                     Close
40803                                                       (bVar"v",
40804                                                        MB(MU(Mop(Not,
40805                                                                  bVar"v"),
40806                                                              qTy),
40807                                                           Close
40808                                                             (bVar"setflags",
40809                                                              MU(Call
40810                                                                   ("Data",
40811                                                                    CTy"instruction",
40812                                                                    Call
40813                                                                      ("ShiftImmediate",
40814                                                                       CTy"Data",
40815                                                                       TP[LT,
40816                                                                          bVar"setflags",
40817                                                                          Mop(Cast
40818                                                                                F4,
40819                                                                              Var("Ry",
40820                                                                                  FTy 3)),
40821                                                                          Mop(Cast
40822                                                                                F4,
40823                                                                              Var("Rx",
40824                                                                                  FTy 3)),
40825                                                                          LC("SRType_LSL",
40826                                                                             CTy"SRType"),
40827                                                                          LN
40828                                                                           0])),
40829                                                                 qTy))))))]),
40830                                             Call
40831                                               ("Skip",
40832                                                ATy(qTy,
40833                                                    PTy(CTy"instruction",
40834                                                        qTy)),LU)))))))))),
40835                (Bop(And,bVar"b'14",
40836                     Bop(And,Mop(Not,bVar"b'12"),
40837                         Bop(And,Mop(Not,bVar"b'11"),
40838                             Bop(And,bVar"b'10",
40839                                 Bop(And,Mop(Not,bVar"b'9"),
40840                                     Mop(Not,bVar"b'8")))))),
40841                 Let(Var("Rm",F4),
40842                     Mop(Cast F4,
40843                         LL[bVar"b'6",bVar"b'5",bVar"b'4",bVar"b'3"]),
40844                     Let(Var("DN",F1),Mop(Cast F1,LL[bVar"b'7"]),
40845                         MB(Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
40846                            Close
40847                              (Var("v",F4),
40848                               MB(MB(MB(Call
40849                                          ("HaveThumb2",
40850                                           ATy(qTy,PTy(bTy,qTy)),LU),
40851                                        Close
40852                                          (bVar"v0",
40853                                           MB(MU(Bop(Or,
40854                                                     Bop(Or,
40855                                                         Mop(Msb,
40856                                                             Var("Rm",F4)),
40857                                                         EQ(Var("DN",F1),
40858                                                            LW(1,1))),
40859                                                     bVar"v0"),qTy),
40860                                              Close
40861                                                (bVar"v0",
40862                                                 MU(TP[Var("v",F4),
40863                                                       bVar"v0"],qTy))))),
40864                                     Close
40865                                       (Var("v",PTy(F4,bTy)),
40866                                        Call
40867                                          ("Take",ATy(qTy,PTy(bTy,qTy)),
40868                                           Var("v",PTy(F4,bTy))))),
40869                                  Close
40870                                    (bVar"b",
40871                                     ITE(bVar"b",
40872                                         Let(Var("d",F4),
40873                                             CC[Var("DN",F1),
40874                                                Mop(Cast(FTy 3),
40875                                                    LL[bVar"b'2",
40876                                                       bVar"b'1",bVar"b'0"])],
40877                                             MB(Call
40878                                                  ("InITBlock",
40879                                                   ATy(qTy,PTy(bTy,qTy)),
40880                                                   LU),
40881                                                Close
40882                                                  (bVar"v",
40883                                                   MB(MB(MB(MB(MU(Bop(And,
40884                                                                      EQ(Var("d",
40885                                                                             F4),
40886                                                                         LW(15,
40887                                                                            4)),
40888                                                                      bVar"v"),
40889                                                                  qTy),
40890                                                               Close
40891                                                                 (bVar"b",
40892                                                                  ITE(bVar"b",
40893                                                                      MB(Call
40894                                                                           ("LastInITBlock",
40895                                                                            ATy(qTy,
40896                                                                                PTy(bTy,
40897                                                                                    qTy)),
40898                                                                            LU),
40899                                                                         Close
40900                                                                           (bVar"v",
40901                                                                            MU(Mop(Not,
40902                                                                                   bVar"v"),
40903                                                                               qTy))),
40904                                                                      MU(LF,
40905                                                                         qTy)))),
40906                                                            Close
40907                                                              (bVar"v",
40908                                                               MU(Bop(Or,
40909                                                                      Bop(And,
40910                                                                          EQ(Var("d",
40911                                                                                 F4),
40912                                                                             LW(15,
40913                                                                                4)),
40914                                                                          EQ(Var("Rm",
40915                                                                                 F4),
40916                                                                             LW(15,
40917                                                                                4))),
40918                                                                      bVar"v"),
40919                                                                  qTy))),
40920                                                         Close
40921                                                           (bVar"b",
40922                                                            ITE(bVar"b",
40923                                                                Call
40924                                                                  ("DECODE_UNPREDICTABLE",
40925                                                                   ATy(qTy,
40926                                                                       PTy(uTy,
40927                                                                           qTy)),
40928                                                                   TP[Var("mc",
40929                                                                          CTy"MachineCode"),
40930                                                                      LS
40931                                                                       "ADD"]),
40932                                                                MU(LU,qTy)))),
40933                                                      Close
40934                                                        (AVar uTy,
40935                                                         MU(Call
40936                                                              ("Data",
40937                                                               CTy"instruction",
40938                                                               Call
40939                                                                 ("Register",
40940                                                                  CTy"Data",
40941                                                                  TP[LW(4,
40942                                                                        4),
40943                                                                     LF,
40944                                                                     Var("d",
40945                                                                         F4),
40946                                                                     Var("d",
40947                                                                         F4),
40948                                                                     Var("Rm",
40949                                                                         F4),
40950                                                                     LC("SRType_LSL",
40951                                                                        CTy"SRType"),
40952                                                                     LN 0])),
40953                                                            qTy)))))),
40954                                         Call
40955                                           ("Skip",
40956                                            ATy(qTy,
40957                                                PTy(CTy"instruction",qTy)),
40958                                            LU))))))))),
40959                (Bop(And,bVar"b'14",
40960                     Bop(And,Mop(Not,bVar"b'12"),
40961                         Bop(And,Mop(Not,bVar"b'11"),
40962                             Bop(And,bVar"b'10",
40963                                 Bop(And,Mop(Not,bVar"b'9"),
40964                                     Bop(And,bVar"b'8",
40965                                         Bop(And,Mop(Not,bVar"b'7"),
40966                                             Mop(Not,bVar"b'6")))))))),
40967                 Call
40968                   ("raise'exception",ATy(qTy,PTy(CTy"instruction",qTy)),
40969                    Call
40970                      ("UNPREDICTABLE",CTy"exception",
40971                       LS"Thumb: 010001 0100 _"))),
40972                (Bop(And,bVar"b'14",
40973                     Bop(And,Mop(Not,bVar"b'12"),
40974                         Bop(And,Mop(Not,bVar"b'11"),
40975                             Bop(And,bVar"b'10",
40976                                 Bop(And,Mop(Not,bVar"b'9"),bVar"b'8"))))),
40977                 Let(Var("Rm",F4),
40978                     Mop(Cast F4,
40979                         LL[bVar"b'6",bVar"b'5",bVar"b'4",bVar"b'3"]),
40980                     MB(Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
40981                        Close
40982                          (Var("v",F4),
40983                           MB(MB(MU(TP[Var("v",F4),LT],qTy),
40984                                 Close
40985                                   (Var("v",PTy(F4,bTy)),
40986                                    Call
40987                                      ("Take",ATy(qTy,PTy(bTy,qTy)),
40988                                       Var("v",PTy(F4,bTy))))),
40989                              Close
40990                                (bVar"b",
40991                                 ITE(bVar"b",
40992                                     Let(Var("n",F4),
40993                                         CC[Mop(Cast F1,LL[bVar"b'7"]),
40994                                            Mop(Cast(FTy 3),
40995                                                LL[bVar"b'2",bVar"b'1",
40996                                                   bVar"b'0"])],
40997                                         MB(ITE(Bop(Or,
40998                                                    Bop(Or,
40999                                                        Bop(And,
41000                                                            Bop(Ult,
41001                                                                Var("n",F4),
41002                                                                LW(8,4)),
41003                                                            Bop(Ult,
41004                                                                Var("Rm",
41005                                                                    F4),
41006                                                                LW(8,4))),
41007                                                        EQ(Var("n",F4),
41008                                                           LW(15,4))),
41009                                                    EQ(Var("Rm",F4),
41010                                                       LW(15,4))),
41011                                                Call
41012                                                  ("DECODE_UNPREDICTABLE",
41013                                                   ATy(qTy,PTy(uTy,qTy)),
41014                                                   TP[Var("mc",
41015                                                          CTy"MachineCode"),
41016                                                      LS"CMP"]),MU(LU,qTy)),
41017                                            Close
41018                                              (AVar uTy,
41019                                               MU(Call
41020                                                    ("Data",
41021                                                     CTy"instruction",
41022                                                     Call
41023                                                       ("TestCompareRegister",
41024                                                        CTy"Data",
41025                                                        TP[LW(2,2),
41026                                                           Var("n",F4),
41027                                                           Var("Rm",F4),
41028                                                           LC("SRType_LSL",
41029                                                              CTy"SRType"),
41030                                                           LN 0])),qTy)))),
41031                                     Call
41032                                       ("Skip",
41033                                        ATy(qTy,PTy(CTy"instruction",qTy)),
41034                                        LU)))))))),
41035                (Bop(And,bVar"b'14",
41036                     Bop(And,Mop(Not,bVar"b'12"),
41037                         Bop(And,Mop(Not,bVar"b'11"),
41038                             Bop(And,bVar"b'10",
41039                                 Bop(And,bVar"b'9",Mop(Not,bVar"b'8")))))),
41040                 Let(Var("Rm",F4),
41041                     Mop(Cast F4,
41042                         LL[bVar"b'6",bVar"b'5",bVar"b'4",bVar"b'3"]),
41043                     Let(Var("D",F1),Mop(Cast F1,LL[bVar"b'7"]),
41044                         MB(Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
41045                            Close
41046                              (Var("v",F4),
41047                               MB(MB(MB(Call
41048                                          ("ArchVersion",
41049                                           ATy(qTy,PTy(nTy,qTy)),LU),
41050                                        Close
41051                                          (nVar"v0",
41052                                           MB(MB(MU(Bop(Ge,nVar"v0",LN 6),
41053                                                    qTy),
41054                                                 Close
41055                                                   (bVar"v",
41056                                                    MU(Bop(Or,
41057                                                           Bop(Or,
41058                                                               Mop(Msb,
41059                                                                   Var("Rm",
41060                                                                       F4)),
41061                                                               EQ(Var("D",
41062                                                                      F1),
41063                                                                  LW(1,1))),
41064                                                           bVar"v"),qTy))),
41065                                              Close
41066                                                (bVar"v0",
41067                                                 MU(TP[Var("v",F4),
41068                                                       bVar"v0"],qTy))))),
41069                                     Close
41070                                       (Var("v",PTy(F4,bTy)),
41071                                        Call
41072                                          ("Take",ATy(qTy,PTy(bTy,qTy)),
41073                                           Var("v",PTy(F4,bTy))))),
41074                                  Close
41075                                    (bVar"b",
41076                                     ITE(bVar"b",
41077                                         Let(Var("d",F4),
41078                                             CC[Var("D",F1),
41079                                                Mop(Cast(FTy 3),
41080                                                    LL[bVar"b'2",
41081                                                       bVar"b'1",bVar"b'0"])],
41082                                             MB(Call
41083                                                  ("InITBlock",
41084                                                   ATy(qTy,PTy(bTy,qTy)),
41085                                                   LU),
41086                                                Close
41087                                                  (bVar"v",
41088                                                   MB(MB(MB(MU(Bop(And,
41089                                                                   EQ(Var("d",
41090                                                                          F4),
41091                                                                      LW(15,
41092                                                                         4)),
41093                                                                   bVar"v"),
41094                                                               qTy),
41095                                                            Close
41096                                                              (bVar"b",
41097                                                               ITE(bVar"b",
41098                                                                   MB(Call
41099                                                                        ("LastInITBlock",
41100                                                                         ATy(qTy,
41101                                                                             PTy(bTy,
41102                                                                                 qTy)),
41103                                                                         LU),
41104                                                                      Close
41105                                                                        (bVar"v",
41106                                                                         MU(Mop(Not,
41107                                                                                bVar"v"),
41108                                                                            qTy))),
41109                                                                   MU(LF,
41110                                                                      qTy)))),
41111                                                         Close
41112                                                           (bVar"b",
41113                                                            ITE(bVar"b",
41114                                                                Call
41115                                                                  ("DECODE_UNPREDICTABLE",
41116                                                                   ATy(qTy,
41117                                                                       PTy(uTy,
41118                                                                           qTy)),
41119                                                                   TP[Var("mc",
41120                                                                          CTy"MachineCode"),
41121                                                                      LS
41122                                                                       "MOV"]),
41123                                                                MU(LU,qTy)))),
41124                                                      Close
41125                                                        (AVar uTy,
41126                                                         MU(Call
41127                                                              ("Data",
41128                                                               CTy"instruction",
41129                                                               Call
41130                                                                 ("ShiftImmediate",
41131                                                                  CTy"Data",
41132                                                                  TP[LF,
41133                                                                     LF,
41134                                                                     Var("d",
41135                                                                         F4),
41136                                                                     Var("Rm",
41137                                                                         F4),
41138                                                                     LC("SRType_LSL",
41139                                                                        CTy"SRType"),
41140                                                                     LN 0])),
41141                                                            qTy)))))),
41142                                         Call
41143                                           ("Skip",
41144                                            ATy(qTy,
41145                                                PTy(CTy"instruction",qTy)),
41146                                            LU))))))))),
41147                (Bop(And,bVar"b'14",
41148                     Bop(And,Mop(Not,bVar"b'12"),
41149                         Bop(And,Mop(Not,bVar"b'11"),
41150                             Bop(And,bVar"b'10",
41151                                 Bop(And,bVar"b'9",
41152                                     Bop(And,bVar"b'8",Mop(Not,bVar"b'7"))))))),
41153                 MB(Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
41154                    Close
41155                      (Var("v",F4),
41156                       MB(MB(MU(TP[Var("v",F4),LT],qTy),
41157                             Close
41158                               (Var("v",PTy(F4,bTy)),
41159                                Call
41160                                  ("Take",ATy(qTy,PTy(bTy,qTy)),
41161                                   Var("v",PTy(F4,bTy))))),
41162                          Close
41163                            (bVar"b",
41164                             ITE(bVar"b",
41165                                 MB(Call
41166                                      ("InITBlock",ATy(qTy,PTy(bTy,qTy)),
41167                                       LU),
41168                                    Close
41169                                      (bVar"v",
41170                                       MB(MB(ITE(bVar"v",
41171                                                 MB(Call
41172                                                      ("LastInITBlock",
41173                                                       ATy(qTy,
41174                                                           PTy(bTy,qTy)),
41175                                                       LU),
41176                                                    Close
41177                                                      (bVar"v",
41178                                                       MU(Mop(Not,bVar"v"),
41179                                                          qTy))),
41180                                                 MU(LF,qTy)),
41181                                             Close
41182                                               (bVar"b",
41183                                                ITE(bVar"b",
41184                                                    Call
41185                                                      ("DECODE_UNPREDICTABLE",
41186                                                       ATy(qTy,
41187                                                           PTy(uTy,qTy)),
41188                                                       TP[Var("mc",
41189                                                              CTy"MachineCode"),
41190                                                          LS
41191                                                           "BranchExchange"]),
41192                                                    MU(LU,qTy)))),
41193                                          Close
41194                                            (AVar uTy,
41195                                             MU(Call
41196                                                  ("Branch",
41197                                                   CTy"instruction",
41198                                                   Call
41199                                                     ("BranchExchange",
41200                                                      CTy"Branch",
41201                                                      Mop(Cast F4,
41202                                                          LL[bVar"b'6",
41203                                                             bVar"b'5",
41204                                                             bVar"b'4",
41205                                                             bVar"b'3"]))),
41206                                                qTy))))),
41207                                 Call
41208                                   ("Skip",
41209                                    ATy(qTy,PTy(CTy"instruction",qTy)),LU))))))),
41210                (Bop(And,bVar"b'14",
41211                     Bop(And,Mop(Not,bVar"b'12"),
41212                         Bop(And,Mop(Not,bVar"b'11"),
41213                             Bop(And,bVar"b'10",
41214                                 Bop(And,bVar"b'9",
41215                                     Bop(And,bVar"b'8",bVar"b'7")))))),
41216                 Let(Var("Rm",F4),
41217                     Mop(Cast F4,
41218                         LL[bVar"b'6",bVar"b'5",bVar"b'4",bVar"b'3"]),
41219                     MB(Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
41220                        Close
41221                          (Var("v",F4),
41222                           MB(MB(MB(Call
41223                                      ("ArchVersion",
41224                                       ATy(qTy,PTy(nTy,qTy)),LU),
41225                                    Close
41226                                      (nVar"v0",
41227                                       MB(MU(Bop(Ge,nVar"v0",LN 5),qTy),
41228                                          Close
41229                                            (bVar"v0",
41230                                             MU(TP[Var("v",F4),bVar"v0"],
41231                                                qTy))))),
41232                                 Close
41233                                   (Var("v",PTy(F4,bTy)),
41234                                    Call
41235                                      ("Take",ATy(qTy,PTy(bTy,qTy)),
41236                                       Var("v",PTy(F4,bTy))))),
41237                              Close
41238                                (bVar"b",
41239                                 ITE(bVar"b",
41240                                     MB(Call
41241                                          ("InITBlock",
41242                                           ATy(qTy,PTy(bTy,qTy)),LU),
41243                                        Close
41244                                          (bVar"v",
41245                                           MB(MB(MB(ITE(bVar"v",
41246                                                        MB(Call
41247                                                             ("LastInITBlock",
41248                                                              ATy(qTy,
41249                                                                  PTy(bTy,
41250                                                                      qTy)),
41251                                                              LU),
41252                                                           Close
41253                                                             (bVar"v",
41254                                                              MU(Mop(Not,
41255                                                                     bVar"v"),
41256                                                                 qTy))),
41257                                                        MU(LF,qTy)),
41258                                                    Close
41259                                                      (bVar"v",
41260                                                       MU(Bop(Or,
41261                                                              EQ(Var("Rm",
41262                                                                     F4),
41263                                                                 LW(15,4)),
41264                                                              bVar"v"),qTy))),
41265                                                 Close
41266                                                   (bVar"b",
41267                                                    ITE(bVar"b",
41268                                                        Call
41269                                                          ("DECODE_UNPREDICTABLE",
41270                                                           ATy(qTy,
41271                                                               PTy(uTy,qTy)),
41272                                                           TP[Var("mc",
41273                                                                  CTy"MachineCode"),
41274                                                              LS
41275                                                               "BranchLinkExchangeRegister"]),
41276                                                        MU(LU,qTy)))),
41277                                              Close
41278                                                (AVar uTy,
41279                                                 MU(Call
41280                                                      ("Branch",
41281                                                       CTy"instruction",
41282                                                       Call
41283                                                         ("BranchLinkExchangeRegister",
41284                                                          CTy"Branch",
41285                                                          Var("Rm",F4))),
41286                                                    qTy))))),
41287                                     Call
41288                                       ("Skip",
41289                                        ATy(qTy,PTy(CTy"instruction",qTy)),
41290                                        LU)))))))),
41291                (Bop(And,bVar"b'14",
41292                     Bop(And,Mop(Not,bVar"b'12"),bVar"b'11")),
41293                 MB(Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
41294                    Close
41295                      (Var("v",F4),
41296                       MB(MB(MU(TP[Var("v",F4),LT],qTy),
41297                             Close
41298                               (Var("v",PTy(F4,bTy)),
41299                                Call
41300                                  ("Take",ATy(qTy,PTy(bTy,qTy)),
41301                                   Var("v",PTy(F4,bTy))))),
41302                          Close
41303                            (bVar"b",
41304                             ITE(bVar"b",
41305                                 MU(Call
41306                                      ("Load",CTy"instruction",
41307                                       Call
41308                                         ("LoadLiteral",CTy"Load",
41309                                          TP[LT,
41310                                             Mop(Cast F4,
41311                                                 Mop(Cast(FTy 3),
41312                                                     LL[bVar"b'10",
41313                                                        bVar"b'9",
41314                                                        bVar"b'8"])),
41315                                             Mop(Cast F32,
41316                                                 CC[Mop(Cast F8,
41317                                                        LL[bVar"b'7",
41318                                                           bVar"b'6",
41319                                                           bVar"b'5",
41320                                                           bVar"b'4",
41321                                                           bVar"b'3",
41322                                                           bVar"b'2",
41323                                                           bVar"b'1",
41324                                                           bVar"b'0"]),
41325                                                    LW(0,2)])])),qTy),
41326                                 Call
41327                                   ("Skip",
41328                                    ATy(qTy,PTy(CTy"instruction",qTy)),LU))))))),
41329                (Bop(And,bVar"b'14",bVar"b'12"),
41330                 Let(Var("Rt",FTy 3),
41331                     Mop(Cast(FTy 3),LL[bVar"b'2",bVar"b'1",bVar"b'0"]),
41332                     Let(Var("Rn",FTy 3),
41333                         Mop(Cast(FTy 3),LL[bVar"b'5",bVar"b'4",bVar"b'3"]),
41334                         MB(Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
41335                            Close
41336                              (Var("v",F4),
41337                               MB(MB(MU(TP[Var("v",F4),LT],qTy),
41338                                     Close
41339                                       (Var("v",PTy(F4,bTy)),
41340                                        Call
41341                                          ("Take",ATy(qTy,PTy(bTy,qTy)),
41342                                           Var("v",PTy(F4,bTy))))),
41343                                  Close
41344                                    (bVar"b",
41345                                     ITE(bVar"b",
41346                                         MU(Let(bVar"index",LT,
41347                                                Let(bVar"add",LT,
41348                                                    Let(bVar"wback",LF,
41349                                                        Let(Var("m",
41350                                                                CTy"offset1"),
41351                                                            Call
41352                                                              ("register_form1",
41353                                                               CTy"offset1",
41354                                                               TP[Mop(Cast
41355                                                                        F4,
41356                                                                      Mop(Cast
41357                                                                            (FTy 3),
41358                                                                          LL[bVar"b'8",
41359                                                                             bVar"b'7",
41360                                                                             bVar"b'6"])),
41361                                                                  LC("SRType_LSL",
41362                                                                     CTy"SRType"),
41363                                                                  LN 0]),
41364                                                            CS(Mop(Cast
41365                                                                     (FTy 3),
41366                                                                   LL[bVar"b'11",
41367                                                                      bVar"b'10",
41368                                                                      bVar"b'9"]),
41369                                                               [(LW(0,3),
41370                                                                 Call
41371                                                                   ("Store",
41372                                                                    CTy"instruction",
41373                                                                    Call
41374                                                                      ("StoreWord",
41375                                                                       CTy"Store",
41376                                                                       TP[bVar"add",
41377                                                                          bVar"index",
41378                                                                          bVar"wback",
41379                                                                          Mop(Cast
41380                                                                                F4,
41381                                                                              Var("Rt",
41382                                                                                  FTy 3)),
41383                                                                          Mop(Cast
41384                                                                                F4,
41385                                                                              Var("Rn",
41386                                                                                  FTy 3)),
41387                                                                          Var("m",
41388                                                                              CTy"offset1")]))),
41389                                                                (LW(1,3),
41390                                                                 Call
41391                                                                   ("Store",
41392                                                                    CTy"instruction",
41393                                                                    Call
41394                                                                      ("StoreHalf",
41395                                                                       CTy"Store",
41396                                                                       TP[bVar"add",
41397                                                                          bVar"index",
41398                                                                          bVar"wback",
41399                                                                          Mop(Cast
41400                                                                                F4,
41401                                                                              Var("Rt",
41402                                                                                  FTy 3)),
41403                                                                          Mop(Cast
41404                                                                                F4,
41405                                                                              Var("Rn",
41406                                                                                  FTy 3)),
41407                                                                          Var("m",
41408                                                                              CTy"offset1")]))),
41409                                                                (LW(2,3),
41410                                                                 Call
41411                                                                   ("Store",
41412                                                                    CTy"instruction",
41413                                                                    Call
41414                                                                      ("StoreByte",
41415                                                                       CTy"Store",
41416                                                                       TP[bVar"add",
41417                                                                          bVar"index",
41418                                                                          bVar"wback",
41419                                                                          Mop(Cast
41420                                                                                F4,
41421                                                                              Var("Rt",
41422                                                                                  FTy 3)),
41423                                                                          Mop(Cast
41424                                                                                F4,
41425                                                                              Var("Rn",
41426                                                                                  FTy 3)),
41427                                                                          Var("m",
41428                                                                              CTy"offset1")]))),
41429                                                                (LW(3,3),
41430                                                                 Call
41431                                                                   ("Load",
41432                                                                    CTy"instruction",
41433                                                                    Call
41434                                                                      ("LoadByte",
41435                                                                       CTy"Load",
41436                                                                       TP[LF,
41437                                                                          bVar"add",
41438                                                                          bVar"index",
41439                                                                          bVar"wback",
41440                                                                          Mop(Cast
41441                                                                                F4,
41442                                                                              Var("Rt",
41443                                                                                  FTy 3)),
41444                                                                          Mop(Cast
41445                                                                                F4,
41446                                                                              Var("Rn",
41447                                                                                  FTy 3)),
41448                                                                          Var("m",
41449                                                                              CTy"offset1")]))),
41450                                                                (LW(4,3),
41451                                                                 Call
41452                                                                   ("Load",
41453                                                                    CTy"instruction",
41454                                                                    Call
41455                                                                      ("LoadWord",
41456                                                                       CTy"Load",
41457                                                                       TP[bVar"add",
41458                                                                          bVar"index",
41459                                                                          bVar"wback",
41460                                                                          Mop(Cast
41461                                                                                F4,
41462                                                                              Var("Rt",
41463                                                                                  FTy 3)),
41464                                                                          Mop(Cast
41465                                                                                F4,
41466                                                                              Var("Rn",
41467                                                                                  FTy 3)),
41468                                                                          Var("m",
41469                                                                              CTy"offset1")]))),
41470                                                                (LW(5,3),
41471                                                                 Call
41472                                                                   ("Load",
41473                                                                    CTy"instruction",
41474                                                                    Call
41475                                                                      ("LoadHalf",
41476                                                                       CTy"Load",
41477                                                                       TP[LT,
41478                                                                          bVar"add",
41479                                                                          bVar"index",
41480                                                                          bVar"wback",
41481                                                                          Mop(Cast
41482                                                                                F4,
41483                                                                              Var("Rt",
41484                                                                                  FTy 3)),
41485                                                                          Mop(Cast
41486                                                                                F4,
41487                                                                              Var("Rn",
41488                                                                                  FTy 3)),
41489                                                                          Var("m",
41490                                                                              CTy"offset1")]))),
41491                                                                (LW(6,3),
41492                                                                 Call
41493                                                                   ("Load",
41494                                                                    CTy"instruction",
41495                                                                    Call
41496                                                                      ("LoadByte",
41497                                                                       CTy"Load",
41498                                                                       TP[LT,
41499                                                                          bVar"add",
41500                                                                          bVar"index",
41501                                                                          bVar"wback",
41502                                                                          Mop(Cast
41503                                                                                F4,
41504                                                                              Var("Rt",
41505                                                                                  FTy 3)),
41506                                                                          Mop(Cast
41507                                                                                F4,
41508                                                                              Var("Rn",
41509                                                                                  FTy 3)),
41510                                                                          Var("m",
41511                                                                              CTy"offset1")]))),
41512                                                                (LW(7,3),
41513                                                                 Call
41514                                                                   ("Load",
41515                                                                    CTy"instruction",
41516                                                                    Call
41517                                                                      ("LoadHalf",
41518                                                                       CTy"Load",
41519                                                                       TP[LF,
41520                                                                          bVar"add",
41521                                                                          bVar"index",
41522                                                                          bVar"wback",
41523                                                                          Mop(Cast
41524                                                                                F4,
41525                                                                              Var("Rt",
41526                                                                                  FTy 3)),
41527                                                                          Mop(Cast
41528                                                                                F4,
41529                                                                              Var("Rn",
41530                                                                                  FTy 3)),
41531                                                                          Var("m",
41532                                                                              CTy"offset1")])))]))))),
41533                                            qTy),
41534                                         Call
41535                                           ("Skip",
41536                                            ATy(qTy,
41537                                                PTy(CTy"instruction",qTy)),
41538                                            LU)))))))))],
41539               Call
41540                 ("UndefinedThumb",ATy(qTy,PTy(CTy"instruction",qTy)),LU)))))
41541;
41542val DecodeThumbEE_def = Def
41543  ("DecodeThumbEE",Var("h",F16),
41544   Let(Var("mc",CTy"MachineCode"),
41545       Call("Thumb",CTy"MachineCode",Var("h",F16)),
41546       Let(TP[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12",bVar"b'11",
41547              bVar"b'10",bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
41548              bVar"b'5",bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",bVar"b'0"],
41549           BL(16,Var("h",F16)),
41550           ITE(Bop(And,bVar"b'14",Mop(Not,bVar"b'13")),
41551               ITB([(Bop(And,Mop(Not,bVar"b'15"),bVar"b'12"),
41552                     Let(Var("Rt",FTy 3),
41553                         Mop(Cast(FTy 3),LL[bVar"b'2",bVar"b'1",bVar"b'0"]),
41554                         Let(Var("Rn",FTy 3),
41555                             Mop(Cast(FTy 3),
41556                                 LL[bVar"b'5",bVar"b'4",bVar"b'3"]),
41557                             MB(Call
41558                                  ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),
41559                                   LU),
41560                                Close
41561                                  (Var("v",F4),
41562                                   MB(MB(MU(TP[Var("v",F4),LT],qTy),
41563                                         Close
41564                                           (Var("v",PTy(F4,bTy)),
41565                                            Call
41566                                              ("Take",
41567                                               ATy(qTy,PTy(bTy,qTy)),
41568                                               Var("v",PTy(F4,bTy))))),
41569                                      Close
41570                                        (bVar"b",
41571                                         ITE(bVar"b",
41572                                             Let(bVar"index",LT,
41573                                                 Let(bVar"add",LT,
41574                                                     Let(bVar"wback",LF,
41575                                                         Let(Var("m",F4),
41576                                                             Mop(Cast F4,
41577                                                                 Mop(Cast
41578                                                                       (FTy 3),
41579                                                                     LL[bVar"b'8",
41580                                                                        bVar"b'7",
41581                                                                        bVar"b'6"])),
41582                                                             Let(Var("m1",
41583                                                                     CTy"offset1"),
41584                                                                 Call
41585                                                                   ("register_form1",
41586                                                                    CTy"offset1",
41587                                                                    TP[Var("m",
41588                                                                           F4),
41589                                                                       LC("SRType_LSL",
41590                                                                          CTy"SRType"),
41591                                                                       LN
41592                                                                        1]),
41593                                                                 Let(Var("m2",
41594                                                                         CTy"offset1"),
41595                                                                     Call
41596                                                                       ("register_form1",
41597                                                                        CTy"offset1",
41598                                                                        TP[Var("m",
41599                                                                               F4),
41600                                                                           LC("SRType_LSL",
41601                                                                              CTy"SRType"),
41602                                                                           LN
41603                                                                            2]),
41604                                                                     CS(Mop(Cast
41605                                                                              (FTy 3),
41606                                                                            LL[bVar"b'11",
41607                                                                               bVar"b'10",
41608                                                                               bVar"b'9"]),
41609                                                                        [(LW(0,
41610                                                                             3),
41611                                                                          MU(Call
41612                                                                               ("Store",
41613                                                                                CTy"instruction",
41614                                                                                Call
41615                                                                                  ("StoreWord",
41616                                                                                   CTy"Store",
41617                                                                                   TP[bVar"add",
41618                                                                                      bVar"index",
41619                                                                                      bVar"wback",
41620                                                                                      Mop(Cast
41621                                                                                            F4,
41622                                                                                          Var("Rt",
41623                                                                                              FTy 3)),
41624                                                                                      Mop(Cast
41625                                                                                            F4,
41626                                                                                          Var("Rn",
41627                                                                                              FTy 3)),
41628                                                                                      Var("m2",
41629                                                                                          CTy"offset1")])),
41630                                                                             qTy)),
41631                                                                         (LW(1,
41632                                                                             3),
41633                                                                          MU(Call
41634                                                                               ("Store",
41635                                                                                CTy"instruction",
41636                                                                                Call
41637                                                                                  ("StoreHalf",
41638                                                                                   CTy"Store",
41639                                                                                   TP[bVar"add",
41640                                                                                      bVar"index",
41641                                                                                      bVar"wback",
41642                                                                                      Mop(Cast
41643                                                                                            F4,
41644                                                                                          Var("Rt",
41645                                                                                              FTy 3)),
41646                                                                                      Mop(Cast
41647                                                                                            F4,
41648                                                                                          Var("Rn",
41649                                                                                              FTy 3)),
41650                                                                                      Var("m1",
41651                                                                                          CTy"offset1")])),
41652                                                                             qTy)),
41653                                                                         (LW(4,
41654                                                                             3),
41655                                                                          MU(Call
41656                                                                               ("Load",
41657                                                                                CTy"instruction",
41658                                                                                Call
41659                                                                                  ("LoadWord",
41660                                                                                   CTy"Load",
41661                                                                                   TP[bVar"add",
41662                                                                                      bVar"index",
41663                                                                                      bVar"wback",
41664                                                                                      Mop(Cast
41665                                                                                            F4,
41666                                                                                          Var("Rt",
41667                                                                                              FTy 3)),
41668                                                                                      Mop(Cast
41669                                                                                            F4,
41670                                                                                          Var("Rn",
41671                                                                                              FTy 3)),
41672                                                                                      Var("m2",
41673                                                                                          CTy"offset1")])),
41674                                                                             qTy)),
41675                                                                         (LW(5,
41676                                                                             3),
41677                                                                          MU(Call
41678                                                                               ("Load",
41679                                                                                CTy"instruction",
41680                                                                                Call
41681                                                                                  ("LoadHalf",
41682                                                                                   CTy"Load",
41683                                                                                   TP[LT,
41684                                                                                      bVar"add",
41685                                                                                      bVar"index",
41686                                                                                      bVar"wback",
41687                                                                                      Mop(Cast
41688                                                                                            F4,
41689                                                                                          Var("Rt",
41690                                                                                              FTy 3)),
41691                                                                                      Mop(Cast
41692                                                                                            F4,
41693                                                                                          Var("Rn",
41694                                                                                              FTy 3)),
41695                                                                                      Var("m1",
41696                                                                                          CTy"offset1")])),
41697                                                                             qTy)),
41698                                                                         (LW(7,
41699                                                                             3),
41700                                                                          MU(Call
41701                                                                               ("Load",
41702                                                                                CTy"instruction",
41703                                                                                Call
41704                                                                                  ("LoadHalf",
41705                                                                                   CTy"Load",
41706                                                                                   TP[LF,
41707                                                                                      bVar"add",
41708                                                                                      bVar"index",
41709                                                                                      bVar"wback",
41710                                                                                      Mop(Cast
41711                                                                                            F4,
41712                                                                                          Var("Rt",
41713                                                                                              FTy 3)),
41714                                                                                      Mop(Cast
41715                                                                                            F4,
41716                                                                                          Var("Rn",
41717                                                                                              FTy 3)),
41718                                                                                      Var("m1",
41719                                                                                          CTy"offset1")])),
41720                                                                             qTy)),
41721                                                                         (AVar
41722                                                                            (FTy 3),
41723                                                                          Call
41724                                                                            ("DecodeThumb",
41725                                                                             ATy(qTy,
41726                                                                                 PTy(CTy"instruction",
41727                                                                                     qTy)),
41728                                                                             Var("h",
41729                                                                                 F16)))]))))))),
41730                                             Call
41731                                               ("Skip",
41732                                                ATy(qTy,
41733                                                    PTy(CTy"instruction",
41734                                                        qTy)),LU))))))))),
41735                    (Bop(And,bVar"b'15",
41736                         Bop(And,Mop(Not,bVar"b'12"),
41737                             Bop(And,Mop(Not,bVar"b'11"),
41738                                 Bop(And,Mop(Not,bVar"b'10"),
41739                                     Bop(And,Mop(Not,bVar"b'9"),
41740                                         Mop(Not,bVar"b'8")))))),
41741                     MB(Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
41742                        Close
41743                          (Var("v",F4),
41744                           MB(MB(MU(TP[Var("v",F4),LT],qTy),
41745                                 Close
41746                                   (Var("v",PTy(F4,bTy)),
41747                                    Call
41748                                      ("Take",ATy(qTy,PTy(bTy,qTy)),
41749                                       Var("v",PTy(F4,bTy))))),
41750                              Close
41751                                (bVar"b",
41752                                 ITE(bVar"b",
41753                                     MB(Call
41754                                          ("InITBlock",
41755                                           ATy(qTy,PTy(bTy,qTy)),LU),
41756                                        Close
41757                                          (bVar"v",
41758                                           MB(MB(ITE(bVar"v",
41759                                                     MB(Call
41760                                                          ("LastInITBlock",
41761                                                           ATy(qTy,
41762                                                               PTy(bTy,qTy)),
41763                                                           LU),
41764                                                        Close
41765                                                          (bVar"v",
41766                                                           MU(Mop(Not,
41767                                                                  bVar"v"),
41768                                                              qTy))),
41769                                                     MU(LF,qTy)),
41770                                                 Close
41771                                                   (bVar"b",
41772                                                    ITE(bVar"b",
41773                                                        Call
41774                                                          ("DECODE_UNPREDICTABLE",
41775                                                           ATy(qTy,
41776                                                               PTy(uTy,qTy)),
41777                                                           TP[Var("mc",
41778                                                                  CTy"MachineCode"),
41779                                                              LS
41780                                                               "HandlerBranchParameter"]),
41781                                                        MU(LU,qTy)))),
41782                                              Close
41783                                                (AVar uTy,
41784                                                 MU(Call
41785                                                      ("Branch",
41786                                                       CTy"instruction",
41787                                                       Call
41788                                                         ("HandlerBranchParameter",
41789                                                          CTy"Branch",
41790                                                          TP[Mop(Cast F32,
41791                                                                 Mop(Cast
41792                                                                       (FTy 3),
41793                                                                     LL[bVar"b'7",
41794                                                                        bVar"b'6",
41795                                                                        bVar"b'5"])),
41796                                                             Mop(Cast F32,
41797                                                                 CC[Mop(Cast
41798                                                                          (FTy 5),
41799                                                                        LL[bVar"b'4",
41800                                                                           bVar"b'3",
41801                                                                           bVar"b'2",
41802                                                                           bVar"b'1",
41803                                                                           bVar"b'0"]),
41804                                                                    LW(0,5)])])),
41805                                                    qTy))))),
41806                                     Call
41807                                       ("Skip",
41808                                        ATy(qTy,PTy(CTy"instruction",qTy)),
41809                                        LU))))))),
41810                    (Bop(And,bVar"b'15",
41811                         Bop(And,Mop(Not,bVar"b'12"),
41812                             Bop(And,Mop(Not,bVar"b'11"),
41813                                 Bop(And,Mop(Not,bVar"b'10"),
41814                                     Bop(And,Mop(Not,bVar"b'9"),bVar"b'8"))))),
41815                     MU(Call("Undefined",CTy"instruction",LW(0,32)),qTy)),
41816                    (Bop(And,bVar"b'15",
41817                         Bop(And,Mop(Not,bVar"b'12"),
41818                             Bop(And,Mop(Not,bVar"b'11"),
41819                                 Bop(And,Mop(Not,bVar"b'10"),bVar"b'9")))),
41820                     MB(Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
41821                        Close
41822                          (Var("v",F4),
41823                           MB(MB(MU(TP[Var("v",F4),LT],qTy),
41824                                 Close
41825                                   (Var("v",PTy(F4,bTy)),
41826                                    Call
41827                                      ("Take",ATy(qTy,PTy(bTy,qTy)),
41828                                       Var("v",PTy(F4,bTy))))),
41829                              Close
41830                                (bVar"b",
41831                                 ITE(bVar"b",
41832                                     MB(Call
41833                                          ("InITBlock",
41834                                           ATy(qTy,PTy(bTy,qTy)),LU),
41835                                        Close
41836                                          (bVar"v",
41837                                           MB(MB(ITE(bVar"v",
41838                                                     MB(Call
41839                                                          ("LastInITBlock",
41840                                                           ATy(qTy,
41841                                                               PTy(bTy,qTy)),
41842                                                           LU),
41843                                                        Close
41844                                                          (bVar"v",
41845                                                           MU(Mop(Not,
41846                                                                  bVar"v"),
41847                                                              qTy))),
41848                                                     MU(LF,qTy)),
41849                                                 Close
41850                                                   (bVar"b",
41851                                                    ITE(bVar"b",
41852                                                        Call
41853                                                          ("DECODE_UNPREDICTABLE",
41854                                                           ATy(qTy,
41855                                                               PTy(uTy,qTy)),
41856                                                           TP[Var("mc",
41857                                                                  CTy"MachineCode"),
41858                                                              LS
41859                                                               "HandlerBranchLink"]),
41860                                                        MU(LU,qTy)))),
41861                                              Close
41862                                                (AVar uTy,
41863                                                 MU(Call
41864                                                      ("Branch",
41865                                                       CTy"instruction",
41866                                                       Call
41867                                                         ("HandlerBranchLink",
41868                                                          CTy"Branch",
41869                                                          TP[EQ(Mop(Cast
41870                                                                      F1,
41871                                                                    LL[bVar"b'8"]),
41872                                                                LW(1,1)),
41873                                                             Mop(Cast F32,
41874                                                                 CC[Mop(Cast
41875                                                                          F8,
41876                                                                        LL[bVar"b'7",
41877                                                                           bVar"b'6",
41878                                                                           bVar"b'5",
41879                                                                           bVar"b'4",
41880                                                                           bVar"b'3",
41881                                                                           bVar"b'2",
41882                                                                           bVar"b'1",
41883                                                                           bVar"b'0"]),
41884                                                                    LW(0,5)])])),
41885                                                    qTy))))),
41886                                     Call
41887                                       ("Skip",
41888                                        ATy(qTy,PTy(CTy"instruction",qTy)),
41889                                        LU))))))),
41890                    (Bop(And,bVar"b'15",
41891                         Bop(And,Mop(Not,bVar"b'12"),
41892                             Bop(And,Mop(Not,bVar"b'11"),bVar"b'10"))),
41893                     MB(Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
41894                        Close
41895                          (Var("v",F4),
41896                           MB(MB(MU(TP[Var("v",F4),LT],qTy),
41897                                 Close
41898                                   (Var("v",PTy(F4,bTy)),
41899                                    Call
41900                                      ("Take",ATy(qTy,PTy(bTy,qTy)),
41901                                       Var("v",PTy(F4,bTy))))),
41902                              Close
41903                                (bVar"b",
41904                                 ITE(bVar"b",
41905                                     MB(Call
41906                                          ("InITBlock",
41907                                           ATy(qTy,PTy(bTy,qTy)),LU),
41908                                        Close
41909                                          (bVar"v",
41910                                           MB(MB(ITE(bVar"v",
41911                                                     MB(Call
41912                                                          ("LastInITBlock",
41913                                                           ATy(qTy,
41914                                                               PTy(bTy,qTy)),
41915                                                           LU),
41916                                                        Close
41917                                                          (bVar"v",
41918                                                           MU(Mop(Not,
41919                                                                  bVar"v"),
41920                                                              qTy))),
41921                                                     MU(LF,qTy)),
41922                                                 Close
41923                                                   (bVar"b",
41924                                                    ITE(bVar"b",
41925                                                        Call
41926                                                          ("DECODE_UNPREDICTABLE",
41927                                                           ATy(qTy,
41928                                                               PTy(uTy,qTy)),
41929                                                           TP[Var("mc",
41930                                                                  CTy"MachineCode"),
41931                                                              LS
41932                                                               "HandlerBranchLinkParameter"]),
41933                                                        MU(LU,qTy)))),
41934                                              Close
41935                                                (AVar uTy,
41936                                                 MU(Call
41937                                                      ("Branch",
41938                                                       CTy"instruction",
41939                                                       Call
41940                                                         ("HandlerBranchLinkParameter",
41941                                                          CTy"Branch",
41942                                                          TP[Mop(Cast F32,
41943                                                                 Mop(Cast
41944                                                                       (FTy 5),
41945                                                                     LL[bVar"b'9",
41946                                                                        bVar"b'8",
41947                                                                        bVar"b'7",
41948                                                                        bVar"b'6",
41949                                                                        bVar"b'5"])),
41950                                                             Mop(Cast F32,
41951                                                                 CC[Mop(Cast
41952                                                                          (FTy 5),
41953                                                                        LL[bVar"b'4",
41954                                                                           bVar"b'3",
41955                                                                           bVar"b'2",
41956                                                                           bVar"b'1",
41957                                                                           bVar"b'0"]),
41958                                                                    LW(0,5)])])),
41959                                                    qTy))))),
41960                                     Call
41961                                       ("Skip",
41962                                        ATy(qTy,PTy(CTy"instruction",qTy)),
41963                                        LU))))))),
41964                    (Bop(And,bVar"b'15",
41965                         Bop(And,Mop(Not,bVar"b'12"),
41966                             Bop(And,bVar"b'11",
41967                                 Bop(And,Mop(Not,bVar"b'10"),
41968                                     Mop(Not,bVar"b'9"))))),
41969                     MB(Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
41970                        Close
41971                          (Var("v",F4),
41972                           MB(MB(MU(TP[Var("v",F4),LT],qTy),
41973                                 Close
41974                                   (Var("v",PTy(F4,bTy)),
41975                                    Call
41976                                      ("Take",ATy(qTy,PTy(bTy,qTy)),
41977                                       Var("v",PTy(F4,bTy))))),
41978                              Close
41979                                (bVar"b",
41980                                 ITE(bVar"b",
41981                                     MU(Call
41982                                          ("Load",CTy"instruction",
41983                                           Call
41984                                             ("LoadWord",CTy"Load",
41985                                              TP[LF,LT,LF,
41986                                                 Mop(Cast F4,
41987                                                     Mop(Cast(FTy 3),
41988                                                         LL[bVar"b'2",
41989                                                            bVar"b'1",
41990                                                            bVar"b'0"])),
41991                                                 Mop(Cast F4,
41992                                                     Mop(Cast(FTy 3),
41993                                                         LL[bVar"b'5",
41994                                                            bVar"b'4",
41995                                                            bVar"b'3"])),
41996                                                 Call
41997                                                   ("immediate_form1",
41998                                                    CTy"offset1",
41999                                                    Mop(Cast F32,
42000                                                        CC[Mop(Cast(FTy 3),
42001                                                               LL[bVar"b'8",
42002                                                                  bVar"b'7",
42003                                                                  bVar"b'6"]),
42004                                                           LW(0,2)]))])),
42005                                        qTy),
42006                                     Call
42007                                       ("Skip",
42008                                        ATy(qTy,PTy(CTy"instruction",qTy)),
42009                                        LU))))))),
42010                    (Bop(And,bVar"b'15",
42011                         Bop(And,Mop(Not,bVar"b'12"),
42012                             Bop(And,bVar"b'11",
42013                                 Bop(And,Mop(Not,bVar"b'10"),
42014                                     Bop(And,bVar"b'9",Mop(Not,bVar"b'8")))))),
42015                     Let(Var("Rm",F4),
42016                         Mop(Cast F4,
42017                             LL[bVar"b'6",bVar"b'5",bVar"b'4",bVar"b'3"]),
42018                         MB(Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
42019                            Close
42020                              (Var("v",F4),
42021                               MB(MB(MU(TP[Var("v",F4),LT],qTy),
42022                                     Close
42023                                       (Var("v",PTy(F4,bTy)),
42024                                        Call
42025                                          ("Take",ATy(qTy,PTy(bTy,qTy)),
42026                                           Var("v",PTy(F4,bTy))))),
42027                                  Close
42028                                    (bVar"b",
42029                                     ITE(bVar"b",
42030                                         Let(Var("n",F4),
42031                                             CC[Mop(Cast F1,LL[bVar"b'7"]),
42032                                                Mop(Cast(FTy 3),
42033                                                    LL[bVar"b'2",
42034                                                       bVar"b'1",bVar"b'0"])],
42035                                             MB(ITE(Bop(Or,
42036                                                        EQ(Var("n",F4),
42037                                                           LW(15,4)),
42038                                                        Bop(In,
42039                                                            Var("Rm",F4),
42040                                                            SL[LW(13,4),
42041                                                               LW(15,4)])),
42042                                                    Call
42043                                                      ("DECODE_UNPREDICTABLE",
42044                                                       ATy(qTy,
42045                                                           PTy(uTy,qTy)),
42046                                                       TP[Var("mc",
42047                                                              CTy"MachineCode"),
42048                                                          LS"CheckArray"]),
42049                                                    MU(LU,qTy)),
42050                                                Close
42051                                                  (AVar uTy,
42052                                                   MU(Call
42053                                                        ("Branch",
42054                                                         CTy"instruction",
42055                                                         Call
42056                                                           ("CheckArray",
42057                                                            CTy"Branch",
42058                                                            TP[Var("Rm",F4),
42059                                                               Var("n",F4)])),
42060                                                      qTy)))),
42061                                         Call
42062                                           ("Skip",
42063                                            ATy(qTy,
42064                                                PTy(CTy"instruction",qTy)),
42065                                            LU)))))))),
42066                    (Bop(And,bVar"b'15",
42067                         Bop(And,Mop(Not,bVar"b'12"),
42068                             Bop(And,bVar"b'11",
42069                                 Bop(And,Mop(Not,bVar"b'10"),
42070                                     Bop(And,bVar"b'9",bVar"b'8"))))),
42071                     MB(Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
42072                        Close
42073                          (Var("v",F4),
42074                           MB(MB(MU(TP[Var("v",F4),LT],qTy),
42075                                 Close
42076                                   (Var("v",PTy(F4,bTy)),
42077                                    Call
42078                                      ("Take",ATy(qTy,PTy(bTy,qTy)),
42079                                       Var("v",PTy(F4,bTy))))),
42080                              Close
42081                                (bVar"b",
42082                                 ITE(bVar"b",
42083                                     MU(Call
42084                                          ("Load",CTy"instruction",
42085                                           Call
42086                                             ("LoadWord",CTy"Load",
42087                                              TP[LT,LT,LF,
42088                                                 Mop(Cast F4,
42089                                                     Mop(Cast(FTy 3),
42090                                                         LL[bVar"b'2",
42091                                                            bVar"b'1",
42092                                                            bVar"b'0"])),
42093                                                 LW(10,4),
42094                                                 Call
42095                                                   ("immediate_form1",
42096                                                    CTy"offset1",
42097                                                    Mop(Cast F32,
42098                                                        CC[Mop(Cast(FTy 5),
42099                                                               LL[bVar"b'7",
42100                                                                  bVar"b'6",
42101                                                                  bVar"b'5",
42102                                                                  bVar"b'4",
42103                                                                  bVar"b'3"]),
42104                                                           LW(0,2)]))])),
42105                                        qTy),
42106                                     Call
42107                                       ("Skip",
42108                                        ATy(qTy,PTy(CTy"instruction",qTy)),
42109                                        LU))))))),
42110                    (Bop(And,bVar"b'15",
42111                         Bop(And,Mop(Not,bVar"b'12"),
42112                             Bop(And,bVar"b'11",bVar"b'10"))),
42113                     Let(Var("Rt",FTy 3),
42114                         Mop(Cast(FTy 3),LL[bVar"b'2",bVar"b'1",bVar"b'0"]),
42115                         MB(Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
42116                            Close
42117                              (Var("v",F4),
42118                               MB(MB(MU(TP[Var("v",F4),LT],qTy),
42119                                     Close
42120                                       (Var("v",PTy(F4,bTy)),
42121                                        Call
42122                                          ("Take",ATy(qTy,PTy(bTy,qTy)),
42123                                           Var("v",PTy(F4,bTy))))),
42124                                  Close
42125                                    (bVar"b",
42126                                     ITE(bVar"b",
42127                                         MU(Let(bVar"index",LT,
42128                                                Let(bVar"add",LT,
42129                                                    Let(bVar"wback",LF,
42130                                                        Let(Var("m",
42131                                                                CTy"offset1"),
42132                                                            Call
42133                                                              ("immediate_form1",
42134                                                               CTy"offset1",
42135                                                               Mop(Cast
42136                                                                     F32,
42137                                                                   CC[Mop(Cast
42138                                                                            (FTy 6),
42139                                                                          LL[bVar"b'8",
42140                                                                             bVar"b'7",
42141                                                                             bVar"b'6",
42142                                                                             bVar"b'5",
42143                                                                             bVar"b'4",
42144                                                                             bVar"b'3"]),
42145                                                                      LW(0,
42146                                                                         2)])),
42147                                                            ITE(EQ(Mop(Cast
42148                                                                         F1,
42149                                                                       LL[bVar"b'9"]),
42150                                                                   LW(1,1)),
42151                                                                Call
42152                                                                  ("Store",
42153                                                                   CTy"instruction",
42154                                                                   Call
42155                                                                     ("StoreWord",
42156                                                                      CTy"Store",
42157                                                                      TP[bVar"add",
42158                                                                         bVar"index",
42159                                                                         bVar"wback",
42160                                                                         Mop(Cast
42161                                                                               F4,
42162                                                                             Var("Rt",
42163                                                                                 FTy 3)),
42164                                                                         LW(9,
42165                                                                            4),
42166                                                                         Var("m",
42167                                                                             CTy"offset1")])),
42168                                                                Call
42169                                                                  ("Load",
42170                                                                   CTy"instruction",
42171                                                                   Call
42172                                                                     ("LoadWord",
42173                                                                      CTy"Load",
42174                                                                      TP[bVar"add",
42175                                                                         bVar"index",
42176                                                                         bVar"wback",
42177                                                                         Mop(Cast
42178                                                                               F4,
42179                                                                             Var("Rt",
42180                                                                                 FTy 3)),
42181                                                                         LW(9,
42182                                                                            4),
42183                                                                         Var("m",
42184                                                                             CTy"offset1")]))))))),
42185                                            qTy),
42186                                         Call
42187                                           ("Skip",
42188                                            ATy(qTy,
42189                                                PTy(CTy"instruction",qTy)),
42190                                            LU))))))))],
42191                   Call
42192                     ("DecodeThumb",ATy(qTy,PTy(CTy"instruction",qTy)),
42193                      Mop(Cast F16,
42194                          LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12",
42195                             bVar"b'11",bVar"b'10",bVar"b'9",bVar"b'8",
42196                             bVar"b'7",bVar"b'6",bVar"b'5",bVar"b'4",
42197                             bVar"b'3",bVar"b'2",bVar"b'1",bVar"b'0"]))),
42198               Call
42199                 ("DecodeThumb",ATy(qTy,PTy(CTy"instruction",qTy)),
42200                  Mop(Cast F16,
42201                      LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12",
42202                         bVar"b'11",bVar"b'10",bVar"b'9",bVar"b'8",
42203                         bVar"b'7",bVar"b'6",bVar"b'5",bVar"b'4",
42204                         bVar"b'3",bVar"b'2",bVar"b'1",bVar"b'0"]))))))
42205;
42206val DecodeThumb2_def = Def
42207  ("DecodeThumb2",Var("h",PTy(F16,F16)),
42208   Let(Var("mc",CTy"MachineCode"),
42209       Call("Thumb2",CTy"MachineCode",Var("h",PTy(F16,F16))),
42210       Let(TP[TP[bVar"b'31",bVar"b'30",bVar"b'29",bVar"b'28",bVar"b'27",
42211                 bVar"b'26",bVar"b'25",bVar"b'24",bVar"b'23",bVar"b'22",
42212                 bVar"b'21",bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
42213                 bVar"b'16"],bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12",
42214              bVar"b'11",bVar"b'10",bVar"b'9",bVar"b'8",bVar"b'7",
42215              bVar"b'6",bVar"b'5",bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
42216              bVar"b'0"],
42217           TP[BL(16,Mop(Fst,Var("h",PTy(F16,F16)))),
42218              BL(16,Mop(Snd,Var("h",PTy(F16,F16))))],
42219           ITB([(bVar"b'27",
42220                 ITB([(bVar"b'28",
42221                       ITB([(bVar"b'25",
42222                             ITE(Bop(And,bVar"b'31",
42223                                     Bop(And,bVar"b'30",
42224                                         Bop(And,bVar"b'29",
42225                                             Mop(Not,bVar"b'26")))),
42226                                 ITB([(Bop(And,Mop(Not,bVar"b'24"),
42227                                           Bop(And,Mop(Not,bVar"b'23"),
42228                                               Bop(And,bVar"b'15",
42229                                                   Bop(And,bVar"b'14",
42230                                                       Bop(And,bVar"b'13",
42231                                                           Bop(And,
42232                                                               bVar"b'12",
42233                                                               Bop(And,
42234                                                                   Mop(Not,
42235                                                                       bVar"b'7"),
42236                                                                   Bop(And,
42237                                                                       Mop(Not,
42238                                                                           bVar"b'6"),
42239                                                                       Bop(And,
42240                                                                           Mop(Not,
42241                                                                               bVar"b'5"),
42242                                                                           Mop(Not,
42243                                                                               bVar"b'4")))))))))),
42244                                       Let(Var("Rn",F4),
42245                                           Mop(Cast F4,
42246                                               LL[bVar"b'19",bVar"b'18",
42247                                                  bVar"b'17",bVar"b'16"]),
42248                                           Let(Var("Rm",F4),
42249                                               Mop(Cast F4,
42250                                                   LL[bVar"b'3",bVar"b'2",
42251                                                      bVar"b'1",bVar"b'0"]),
42252                                               Let(Var("Rd",F4),
42253                                                   Mop(Cast F4,
42254                                                       LL[bVar"b'11",
42255                                                          bVar"b'10",
42256                                                          bVar"b'9",
42257                                                          bVar"b'8"]),
42258                                                   MB(Call
42259                                                        ("ThumbCondition",
42260                                                         ATy(qTy,
42261                                                             PTy(F4,qTy)),
42262                                                         LU),
42263                                                      Close
42264                                                        (Var("v",F4),
42265                                                         MB(MB(MB(Call
42266                                                                    ("HaveThumb2",
42267                                                                     ATy(qTy,
42268                                                                         PTy(bTy,
42269                                                                             qTy)),
42270                                                                     LU),
42271                                                                  Close
42272                                                                    (bVar"v0",
42273                                                                     MU(TP[Var("v",
42274                                                                               F4),
42275                                                                           bVar"v0"],
42276                                                                        qTy))),
42277                                                               Close
42278                                                                 (Var("v",
42279                                                                      PTy(F4,
42280                                                                          bTy)),
42281                                                                  Call
42282                                                                    ("Take",
42283                                                                     ATy(qTy,
42284                                                                         PTy(bTy,
42285                                                                             qTy)),
42286                                                                     Var("v",
42287                                                                         PTy(F4,
42288                                                                             bTy))))),
42289                                                            Close
42290                                                              (bVar"b",
42291                                                               ITE(bVar"b",
42292                                                                   MB(ITE(Bop(Or,
42293                                                                              Bop(Or,
42294                                                                                  Bop(In,
42295                                                                                      Var("Rd",
42296                                                                                          F4),
42297                                                                                      SL[LW(13,
42298                                                                                            4),
42299                                                                                         LW(15,
42300                                                                                            4)]),
42301                                                                                  Bop(In,
42302                                                                                      Var("Rn",
42303                                                                                          F4),
42304                                                                                      SL[LW(13,
42305                                                                                            4),
42306                                                                                         LW(15,
42307                                                                                            4)])),
42308                                                                              Bop(In,
42309                                                                                  Var("Rm",
42310                                                                                      F4),
42311                                                                                  SL[LW(13,
42312                                                                                        4),
42313                                                                                     LW(15,
42314                                                                                        4)])),
42315                                                                          Call
42316                                                                            ("DECODE_UNPREDICTABLE",
42317                                                                             ATy(qTy,
42318                                                                                 PTy(uTy,
42319                                                                                     qTy)),
42320                                                                             TP[Var("mc",
42321                                                                                    CTy"MachineCode"),
42322                                                                                LS
42323                                                                                 "Shift (register)"]),
42324                                                                          MU(LU,
42325                                                                             qTy)),
42326                                                                      Close
42327                                                                        (AVar
42328                                                                           uTy,
42329                                                                         MU(Call
42330                                                                              ("Data",
42331                                                                               CTy"instruction",
42332                                                                               Call
42333                                                                                 ("ShiftRegister",
42334                                                                                  CTy"Data",
42335                                                                                  TP[LF,
42336                                                                                     EQ(Mop(Cast
42337                                                                                              F1,
42338                                                                                            LL[bVar"b'20"]),
42339                                                                                        LW(1,
42340                                                                                           1)),
42341                                                                                     Var("Rd",
42342                                                                                         F4),
42343                                                                                     Var("Rn",
42344                                                                                         F4),
42345                                                                                     Call
42346                                                                                       ("DecodeRegShift",
42347                                                                                        CTy"SRType",
42348                                                                                        Mop(Cast
42349                                                                                              (FTy 2),
42350                                                                                            LL[bVar"b'22",
42351                                                                                               bVar"b'21"])),
42352                                                                                     Var("Rm",
42353                                                                                         F4)])),
42354                                                                            qTy))),
42355                                                                   Call
42356                                                                     ("Skip",
42357                                                                      ATy(qTy,
42358                                                                          PTy(CTy"instruction",
42359                                                                              qTy)),
42360                                                                      LU)))))))))),
42361                                      (Bop(And,Mop(Not,bVar"b'24"),
42362                                           Bop(And,Mop(Not,bVar"b'23"),
42363                                               Bop(And,bVar"b'15",
42364                                                   Bop(And,bVar"b'14",
42365                                                       Bop(And,bVar"b'13",
42366                                                           Bop(And,
42367                                                               bVar"b'12",
42368                                                               bVar"b'7")))))),
42369                                       Let(Var("Rn",F4),
42370                                           Mop(Cast F4,
42371                                               LL[bVar"b'19",bVar"b'18",
42372                                                  bVar"b'17",bVar"b'16"]),
42373                                           Let(Var("Rm",F4),
42374                                               Mop(Cast F4,
42375                                                   LL[bVar"b'3",bVar"b'2",
42376                                                      bVar"b'1",bVar"b'0"]),
42377                                               Let(Var("Rd",F4),
42378                                                   Mop(Cast F4,
42379                                                       LL[bVar"b'11",
42380                                                          bVar"b'10",
42381                                                          bVar"b'9",
42382                                                          bVar"b'8"]),
42383                                                   MB(Call
42384                                                        ("ThumbCondition",
42385                                                         ATy(qTy,
42386                                                             PTy(F4,qTy)),
42387                                                         LU),
42388                                                      Close
42389                                                        (Var("v",F4),
42390                                                         MB(MB(MB(Call
42391                                                                    ("HaveThumb2",
42392                                                                     ATy(qTy,
42393                                                                         PTy(bTy,
42394                                                                             qTy)),
42395                                                                     LU),
42396                                                                  Close
42397                                                                    (bVar"v0",
42398                                                                     MU(TP[Var("v",
42399                                                                               F4),
42400                                                                           bVar"v0"],
42401                                                                        qTy))),
42402                                                               Close
42403                                                                 (Var("v",
42404                                                                      PTy(F4,
42405                                                                          bTy)),
42406                                                                  Call
42407                                                                    ("Take",
42408                                                                     ATy(qTy,
42409                                                                         PTy(bTy,
42410                                                                             qTy)),
42411                                                                     Var("v",
42412                                                                         PTy(F4,
42413                                                                             bTy))))),
42414                                                            Close
42415                                                              (bVar"b",
42416                                                               ITE(bVar"b",
42417                                                                   MB(ITE(Bop(Or,
42418                                                                              Bop(Or,
42419                                                                                  Bop(In,
42420                                                                                      Var("Rd",
42421                                                                                          F4),
42422                                                                                      SL[LW(13,
42423                                                                                            4),
42424                                                                                         LW(15,
42425                                                                                            4)]),
42426                                                                                  EQ(Var("Rn",
42427                                                                                         F4),
42428                                                                                     LW(13,
42429                                                                                        4))),
42430                                                                              Bop(In,
42431                                                                                  Var("Rm",
42432                                                                                      F4),
42433                                                                                  SL[LW(13,
42434                                                                                        4),
42435                                                                                     LW(15,
42436                                                                                        4)])),
42437                                                                          Call
42438                                                                            ("DECODE_UNPREDICTABLE",
42439                                                                             ATy(qTy,
42440                                                                                 PTy(uTy,
42441                                                                                     qTy)),
42442                                                                             TP[Var("mc",
42443                                                                                    CTy"MachineCode"),
42444                                                                                LS
42445                                                                                 "Extend (register)"]),
42446                                                                          MU(LU,
42447                                                                             qTy)),
42448                                                                      Close
42449                                                                        (AVar
42450                                                                           uTy,
42451                                                                         MU(Let(Var("args",
42452                                                                                    PTy(bTy,
42453                                                                                        PTy(F4,
42454                                                                                            PTy(F4,
42455                                                                                                PTy(F4,
42456                                                                                                    nTy))))),
42457                                                                                TP[EQ(Mop(Cast
42458                                                                                            F1,
42459                                                                                          LL[bVar"b'20"]),
42460                                                                                      LW(1,
42461                                                                                         1)),
42462                                                                                   Var("Rd",
42463                                                                                       F4),
42464                                                                                   Var("Rn",
42465                                                                                       F4),
42466                                                                                   Var("Rm",
42467                                                                                       F4),
42468                                                                                   Mop(Cast
42469                                                                                         nTy,
42470                                                                                       CC[Mop(Cast
42471                                                                                                (FTy 2),
42472                                                                                              LL[bVar"b'5",
42473                                                                                                 bVar"b'4"]),
42474                                                                                          LW(0,
42475                                                                                             3)])],
42476                                                                                CS(Mop(Cast
42477                                                                                         (FTy 2),
42478                                                                                       LL[bVar"b'22",
42479                                                                                          bVar"b'21"]),
42480                                                                                   [(LW(0,
42481                                                                                        2),
42482                                                                                     Call
42483                                                                                       ("Media",
42484                                                                                        CTy"instruction",
42485                                                                                        Call
42486                                                                                          ("ExtendHalfword",
42487                                                                                           CTy"Media",
42488                                                                                           Var("args",
42489                                                                                               PTy(bTy,
42490                                                                                                   PTy(F4,
42491                                                                                                       PTy(F4,
42492                                                                                                           PTy(F4,
42493                                                                                                               nTy)))))))),
42494                                                                                    (LW(1,
42495                                                                                        2),
42496                                                                                     Call
42497                                                                                       ("Media",
42498                                                                                        CTy"instruction",
42499                                                                                        Call
42500                                                                                          ("ExtendByte16",
42501                                                                                           CTy"Media",
42502                                                                                           Var("args",
42503                                                                                               PTy(bTy,
42504                                                                                                   PTy(F4,
42505                                                                                                       PTy(F4,
42506                                                                                                           PTy(F4,
42507                                                                                                               nTy)))))))),
42508                                                                                    (LW(2,
42509                                                                                        2),
42510                                                                                     Call
42511                                                                                       ("Media",
42512                                                                                        CTy"instruction",
42513                                                                                        Call
42514                                                                                          ("ExtendByte",
42515                                                                                           CTy"Media",
42516                                                                                           Var("args",
42517                                                                                               PTy(bTy,
42518                                                                                                   PTy(F4,
42519                                                                                                       PTy(F4,
42520                                                                                                           PTy(F4,
42521                                                                                                               nTy)))))))),
42522                                                                                    (LW(3,
42523                                                                                        2),
42524                                                                                     Call
42525                                                                                       ("Undefined",
42526                                                                                        CTy"instruction",
42527                                                                                        LW(0,
42528                                                                                           32)))])),
42529                                                                            qTy))),
42530                                                                   Call
42531                                                                     ("Skip",
42532                                                                      ATy(qTy,
42533                                                                          PTy(CTy"instruction",
42534                                                                              qTy)),
42535                                                                      LU)))))))))),
42536                                      (Bop(And,Mop(Not,bVar"b'24"),
42537                                           Bop(And,bVar"b'23",
42538                                               Bop(And,bVar"b'15",
42539                                                   Bop(And,bVar"b'14",
42540                                                       Bop(And,bVar"b'13",
42541                                                           Bop(And,
42542                                                               bVar"b'12",
42543                                                               Mop(Not,
42544                                                                   bVar"b'7"))))))),
42545                                       Let(Var("Rn",F4),
42546                                           Mop(Cast F4,
42547                                               LL[bVar"b'19",bVar"b'18",
42548                                                  bVar"b'17",bVar"b'16"]),
42549                                           Let(Var("Rm",F4),
42550                                               Mop(Cast F4,
42551                                                   LL[bVar"b'3",bVar"b'2",
42552                                                      bVar"b'1",bVar"b'0"]),
42553                                               Let(Var("Rd",F4),
42554                                                   Mop(Cast F4,
42555                                                       LL[bVar"b'11",
42556                                                          bVar"b'10",
42557                                                          bVar"b'9",
42558                                                          bVar"b'8"]),
42559                                                   MB(Call
42560                                                        ("ThumbCondition",
42561                                                         ATy(qTy,
42562                                                             PTy(F4,qTy)),
42563                                                         LU),
42564                                                      Close
42565                                                        (Var("v",F4),
42566                                                         MB(MB(MB(Call
42567                                                                    ("HaveThumb2",
42568                                                                     ATy(qTy,
42569                                                                         PTy(bTy,
42570                                                                             qTy)),
42571                                                                     LU),
42572                                                                  Close
42573                                                                    (bVar"v0",
42574                                                                     MU(TP[Var("v",
42575                                                                               F4),
42576                                                                           bVar"v0"],
42577                                                                        qTy))),
42578                                                               Close
42579                                                                 (Var("v",
42580                                                                      PTy(F4,
42581                                                                          bTy)),
42582                                                                  Call
42583                                                                    ("Take",
42584                                                                     ATy(qTy,
42585                                                                         PTy(bTy,
42586                                                                             qTy)),
42587                                                                     Var("v",
42588                                                                         PTy(F4,
42589                                                                             bTy))))),
42590                                                            Close
42591                                                              (bVar"b",
42592                                                               ITE(bVar"b",
42593                                                                   MB(ITE(Bop(Or,
42594                                                                              Bop(Or,
42595                                                                                  Bop(In,
42596                                                                                      Var("Rd",
42597                                                                                          F4),
42598                                                                                      SL[LW(13,
42599                                                                                            4),
42600                                                                                         LW(15,
42601                                                                                            4)]),
42602                                                                                  Bop(In,
42603                                                                                      Var("Rn",
42604                                                                                          F4),
42605                                                                                      SL[LW(13,
42606                                                                                            4),
42607                                                                                         LW(15,
42608                                                                                            4)])),
42609                                                                              Bop(In,
42610                                                                                  Var("Rm",
42611                                                                                      F4),
42612                                                                                  SL[LW(13,
42613                                                                                        4),
42614                                                                                     LW(15,
42615                                                                                        4)])),
42616                                                                          Call
42617                                                                            ("DECODE_UNPREDICTABLE",
42618                                                                             ATy(qTy,
42619                                                                                 PTy(uTy,
42620                                                                                     qTy)),
42621                                                                             TP[Var("mc",
42622                                                                                    CTy"MachineCode"),
42623                                                                                LS
42624                                                                                 "Parallel addition and subtraction"]),
42625                                                                          MU(LU,
42626                                                                             qTy)),
42627                                                                      Close
42628                                                                        (uVar"_0",
42629                                                                         MU(Call
42630                                                                              ("DecodeParallelAdditionSubtraction",
42631                                                                               CTy"instruction",
42632                                                                               TP[Bop(Add,
42633                                                                                      Mop(Cast
42634                                                                                            (FTy 2),
42635                                                                                          LL[bVar"b'5",
42636                                                                                             bVar"b'4"]),
42637                                                                                      LW(1,
42638                                                                                         2)),
42639                                                                                  CS(Mop(Cast
42640                                                                                           (FTy 3),
42641                                                                                         LL[bVar"b'22",
42642                                                                                            bVar"b'21",
42643                                                                                            bVar"b'20"]),
42644                                                                                     [(LW(1,
42645                                                                                          3),
42646                                                                                       LW(0,
42647                                                                                          3)),
42648                                                                                      (LW(2,
42649                                                                                          3),
42650                                                                                       LW(1,
42651                                                                                          3)),
42652                                                                                      (LW(6,
42653                                                                                          3),
42654                                                                                       LW(2,
42655                                                                                          3)),
42656                                                                                      (LW(5,
42657                                                                                          3),
42658                                                                                       LW(3,
42659                                                                                          3)),
42660                                                                                      (LW(0,
42661                                                                                          3),
42662                                                                                       LW(4,
42663                                                                                          3)),
42664                                                                                      (LW(4,
42665                                                                                          3),
42666                                                                                       LW(7,
42667                                                                                          3)),
42668                                                                                      (AVar
42669                                                                                         (FTy 3),
42670                                                                                       LW(5,
42671                                                                                          3))]),
42672                                                                                  Mop(Cast
42673                                                                                        F1,
42674                                                                                      LL[bVar"b'6"]),
42675                                                                                  Var("Rd",
42676                                                                                      F4),
42677                                                                                  Var("Rn",
42678                                                                                      F4),
42679                                                                                  Var("Rm",
42680                                                                                      F4)]),
42681                                                                            qTy))),
42682                                                                   Call
42683                                                                     ("Skip",
42684                                                                      ATy(qTy,
42685                                                                          PTy(CTy"instruction",
42686                                                                              qTy)),
42687                                                                      LU)))))))))),
42688                                      (Bop(And,Mop(Not,bVar"b'24"),
42689                                           Bop(And,bVar"b'23",
42690                                               Bop(And,
42691                                                   Mop(Not,bVar"b'22"),
42692                                                   Bop(And,
42693                                                       Mop(Not,bVar"b'21"),
42694                                                       Bop(And,
42695                                                           Mop(Not,
42696                                                               bVar"b'20"),
42697                                                           Bop(And,
42698                                                               bVar"b'15",
42699                                                               Bop(And,
42700                                                                   bVar"b'14",
42701                                                                   Bop(And,
42702                                                                       bVar"b'13",
42703                                                                       Bop(And,
42704                                                                           bVar"b'12",
42705                                                                           Bop(And,
42706                                                                               bVar"b'7",
42707                                                                               Mop(Not,
42708                                                                                   bVar"b'6"))))))))))),
42709                                       Let(Var("Rn",F4),
42710                                           Mop(Cast F4,
42711                                               LL[bVar"b'19",bVar"b'18",
42712                                                  bVar"b'17",bVar"b'16"]),
42713                                           Let(Var("Rm",F4),
42714                                               Mop(Cast F4,
42715                                                   LL[bVar"b'3",bVar"b'2",
42716                                                      bVar"b'1",bVar"b'0"]),
42717                                               Let(Var("Rd",F4),
42718                                                   Mop(Cast F4,
42719                                                       LL[bVar"b'11",
42720                                                          bVar"b'10",
42721                                                          bVar"b'9",
42722                                                          bVar"b'8"]),
42723                                                   MB(Call
42724                                                        ("ThumbCondition",
42725                                                         ATy(qTy,
42726                                                             PTy(F4,qTy)),
42727                                                         LU),
42728                                                      Close
42729                                                        (Var("v",F4),
42730                                                         MB(MB(MB(Call
42731                                                                    ("HaveThumb2",
42732                                                                     ATy(qTy,
42733                                                                         PTy(bTy,
42734                                                                             qTy)),
42735                                                                     LU),
42736                                                                  Close
42737                                                                    (bVar"v0",
42738                                                                     MU(TP[Var("v",
42739                                                                               F4),
42740                                                                           bVar"v0"],
42741                                                                        qTy))),
42742                                                               Close
42743                                                                 (Var("v",
42744                                                                      PTy(F4,
42745                                                                          bTy)),
42746                                                                  Call
42747                                                                    ("Take",
42748                                                                     ATy(qTy,
42749                                                                         PTy(bTy,
42750                                                                             qTy)),
42751                                                                     Var("v",
42752                                                                         PTy(F4,
42753                                                                             bTy))))),
42754                                                            Close
42755                                                              (bVar"b",
42756                                                               ITE(bVar"b",
42757                                                                   MB(ITE(Bop(Or,
42758                                                                              Bop(Or,
42759                                                                                  Bop(In,
42760                                                                                      Var("Rd",
42761                                                                                          F4),
42762                                                                                      SL[LW(13,
42763                                                                                            4),
42764                                                                                         LW(15,
42765                                                                                            4)]),
42766                                                                                  Bop(In,
42767                                                                                      Var("Rn",
42768                                                                                          F4),
42769                                                                                      SL[LW(13,
42770                                                                                            4),
42771                                                                                         LW(15,
42772                                                                                            4)])),
42773                                                                              Bop(In,
42774                                                                                  Var("Rm",
42775                                                                                      F4),
42776                                                                                  SL[LW(13,
42777                                                                                        4),
42778                                                                                     LW(15,
42779                                                                                        4)])),
42780                                                                          Call
42781                                                                            ("DECODE_UNPREDICTABLE",
42782                                                                             ATy(qTy,
42783                                                                                 PTy(uTy,
42784                                                                                     qTy)),
42785                                                                             TP[Var("mc",
42786                                                                                    CTy"MachineCode"),
42787                                                                                LS
42788                                                                                 "SaturatingAddSubtract"]),
42789                                                                          MU(LU,
42790                                                                             qTy)),
42791                                                                      Close
42792                                                                        (AVar
42793                                                                           uTy,
42794                                                                         MU(Call
42795                                                                              ("Media",
42796                                                                               CTy"instruction",
42797                                                                               Call
42798                                                                                 ("SaturatingAddSubtract",
42799                                                                                  CTy"Media",
42800                                                                                  TP[Mop(Rev,
42801                                                                                         Mop(Cast
42802                                                                                               (FTy 2),
42803                                                                                             LL[bVar"b'5",
42804                                                                                                bVar"b'4"])),
42805                                                                                     Var("Rd",
42806                                                                                         F4),
42807                                                                                     Var("Rm",
42808                                                                                         F4),
42809                                                                                     Var("Rn",
42810                                                                                         F4)])),
42811                                                                            qTy))),
42812                                                                   Call
42813                                                                     ("Skip",
42814                                                                      ATy(qTy,
42815                                                                          PTy(CTy"instruction",
42816                                                                              qTy)),
42817                                                                      LU)))))))))),
42818                                      (Bop(And,Mop(Not,bVar"b'24"),
42819                                           Bop(And,bVar"b'23",
42820                                               Bop(And,
42821                                                   Mop(Not,bVar"b'22"),
42822                                                   Bop(And,
42823                                                       Mop(Not,bVar"b'21"),
42824                                                       Bop(And,bVar"b'20",
42825                                                           Bop(And,
42826                                                               bVar"b'15",
42827                                                               Bop(And,
42828                                                                   bVar"b'14",
42829                                                                   Bop(And,
42830                                                                       bVar"b'13",
42831                                                                       Bop(And,
42832                                                                           bVar"b'12",
42833                                                                           Bop(And,
42834                                                                               bVar"b'7",
42835                                                                               Mop(Not,
42836                                                                                   bVar"b'6"))))))))))),
42837                                       Let(Var("Rm",F4),
42838                                           Mop(Cast F4,
42839                                               LL[bVar"b'3",bVar"b'2",
42840                                                  bVar"b'1",bVar"b'0"]),
42841                                           Let(Var("Rd",F4),
42842                                               Mop(Cast F4,
42843                                                   LL[bVar"b'11",
42844                                                      bVar"b'10",
42845                                                      bVar"b'9",bVar"b'8"]),
42846                                               MB(Call
42847                                                    ("ThumbCondition",
42848                                                     ATy(qTy,PTy(F4,qTy)),
42849                                                     LU),
42850                                                  Close
42851                                                    (Var("v",F4),
42852                                                     MB(MB(MB(Call
42853                                                                ("HaveThumb2",
42854                                                                 ATy(qTy,
42855                                                                     PTy(bTy,
42856                                                                         qTy)),
42857                                                                 LU),
42858                                                              Close
42859                                                                (bVar"v0",
42860                                                                 MU(TP[Var("v",
42861                                                                           F4),
42862                                                                       bVar"v0"],
42863                                                                    qTy))),
42864                                                           Close
42865                                                             (Var("v",
42866                                                                  PTy(F4,
42867                                                                      bTy)),
42868                                                              Call
42869                                                                ("Take",
42870                                                                 ATy(qTy,
42871                                                                     PTy(bTy,
42872                                                                         qTy)),
42873                                                                 Var("v",
42874                                                                     PTy(F4,
42875                                                                         bTy))))),
42876                                                        Close
42877                                                          (bVar"b",
42878                                                           ITE(bVar"b",
42879                                                               MB(ITE(Bop(Or,
42880                                                                          Bop(Or,
42881                                                                              Mop(Not,
42882                                                                                  EQ(Mop(Cast
42883                                                                                           F4,
42884                                                                                         LL[bVar"b'19",
42885                                                                                            bVar"b'18",
42886                                                                                            bVar"b'17",
42887                                                                                            bVar"b'16"]),
42888                                                                                     Var("Rm",
42889                                                                                         F4))),
42890                                                                              Bop(In,
42891                                                                                  Var("Rd",
42892                                                                                      F4),
42893                                                                                  SL[LW(13,
42894                                                                                        4),
42895                                                                                     LW(15,
42896                                                                                        4)])),
42897                                                                          Bop(In,
42898                                                                              Var("Rm",
42899                                                                                  F4),
42900                                                                              SL[LW(13,
42901                                                                                    4),
42902                                                                                 LW(15,
42903                                                                                    4)])),
42904                                                                      Call
42905                                                                        ("DECODE_UNPREDICTABLE",
42906                                                                         ATy(qTy,
42907                                                                             PTy(uTy,
42908                                                                                 qTy)),
42909                                                                         TP[Var("mc",
42910                                                                                CTy"MachineCode"),
42911                                                                            LS
42912                                                                             "Reverses"]),
42913                                                                      MU(LU,
42914                                                                         qTy)),
42915                                                                  Close
42916                                                                    (AVar
42917                                                                       uTy,
42918                                                                     MU(CS(Mop(Cast
42919                                                                                 (FTy 2),
42920                                                                               LL[bVar"b'5",
42921                                                                                  bVar"b'4"]),
42922                                                                           [(LW(0,
42923                                                                                2),
42924                                                                             Call
42925                                                                               ("Media",
42926                                                                                CTy"instruction",
42927                                                                                Call
42928                                                                                  ("ByteReverse",
42929                                                                                   CTy"Media",
42930                                                                                   TP[Var("Rd",
42931                                                                                          F4),
42932                                                                                      Var("Rm",
42933                                                                                          F4)]))),
42934                                                                            (LW(1,
42935                                                                                2),
42936                                                                             Call
42937                                                                               ("Media",
42938                                                                                CTy"instruction",
42939                                                                                Call
42940                                                                                  ("ByteReversePackedHalfword",
42941                                                                                   CTy"Media",
42942                                                                                   TP[Var("Rd",
42943                                                                                          F4),
42944                                                                                      Var("Rm",
42945                                                                                          F4)]))),
42946                                                                            (LW(2,
42947                                                                                2),
42948                                                                             Call
42949                                                                               ("Media",
42950                                                                                CTy"instruction",
42951                                                                                Call
42952                                                                                  ("ReverseBits",
42953                                                                                   CTy"Media",
42954                                                                                   TP[Var("Rd",
42955                                                                                          F4),
42956                                                                                      Var("Rm",
42957                                                                                          F4)]))),
42958                                                                            (LW(3,
42959                                                                                2),
42960                                                                             Call
42961                                                                               ("Media",
42962                                                                                CTy"instruction",
42963                                                                                Call
42964                                                                                  ("ByteReverseSignedHalfword",
42965                                                                                   CTy"Media",
42966                                                                                   TP[Var("Rd",
42967                                                                                          F4),
42968                                                                                      Var("Rm",
42969                                                                                          F4)])))]),
42970                                                                        qTy))),
42971                                                               Call
42972                                                                 ("Skip",
42973                                                                  ATy(qTy,
42974                                                                      PTy(CTy"instruction",
42975                                                                          qTy)),
42976                                                                  LU))))))))),
42977                                      (Bop(And,Mop(Not,bVar"b'24"),
42978                                           Bop(And,bVar"b'23",
42979                                               Bop(And,
42980                                                   Mop(Not,bVar"b'22"),
42981                                                   Bop(And,bVar"b'21",
42982                                                       Bop(And,
42983                                                           Mop(Not,
42984                                                               bVar"b'20"),
42985                                                           Bop(And,
42986                                                               bVar"b'15",
42987                                                               Bop(And,
42988                                                                   bVar"b'14",
42989                                                                   Bop(And,
42990                                                                       bVar"b'13",
42991                                                                       Bop(And,
42992                                                                           bVar"b'12",
42993                                                                           Bop(And,
42994                                                                               bVar"b'7",
42995                                                                               Bop(And,
42996                                                                                   Mop(Not,
42997                                                                                       bVar"b'6"),
42998                                                                                   Bop(And,
42999                                                                                       Mop(Not,
43000                                                                                           bVar"b'5"),
43001                                                                                       Mop(Not,
43002                                                                                           bVar"b'4"))))))))))))),
43003                                       Let(Var("Rn",F4),
43004                                           Mop(Cast F4,
43005                                               LL[bVar"b'19",bVar"b'18",
43006                                                  bVar"b'17",bVar"b'16"]),
43007                                           Let(Var("Rm",F4),
43008                                               Mop(Cast F4,
43009                                                   LL[bVar"b'3",bVar"b'2",
43010                                                      bVar"b'1",bVar"b'0"]),
43011                                               Let(Var("Rd",F4),
43012                                                   Mop(Cast F4,
43013                                                       LL[bVar"b'11",
43014                                                          bVar"b'10",
43015                                                          bVar"b'9",
43016                                                          bVar"b'8"]),
43017                                                   MB(Call
43018                                                        ("ThumbCondition",
43019                                                         ATy(qTy,
43020                                                             PTy(F4,qTy)),
43021                                                         LU),
43022                                                      Close
43023                                                        (Var("v",F4),
43024                                                         MB(MB(MB(Call
43025                                                                    ("HaveThumb2",
43026                                                                     ATy(qTy,
43027                                                                         PTy(bTy,
43028                                                                             qTy)),
43029                                                                     LU),
43030                                                                  Close
43031                                                                    (bVar"v0",
43032                                                                     MU(TP[Var("v",
43033                                                                               F4),
43034                                                                           bVar"v0"],
43035                                                                        qTy))),
43036                                                               Close
43037                                                                 (Var("v",
43038                                                                      PTy(F4,
43039                                                                          bTy)),
43040                                                                  Call
43041                                                                    ("Take",
43042                                                                     ATy(qTy,
43043                                                                         PTy(bTy,
43044                                                                             qTy)),
43045                                                                     Var("v",
43046                                                                         PTy(F4,
43047                                                                             bTy))))),
43048                                                            Close
43049                                                              (bVar"b",
43050                                                               ITE(bVar"b",
43051                                                                   MB(ITE(Bop(Or,
43052                                                                              Bop(Or,
43053                                                                                  Bop(In,
43054                                                                                      Var("Rd",
43055                                                                                          F4),
43056                                                                                      SL[LW(13,
43057                                                                                            4),
43058                                                                                         LW(15,
43059                                                                                            4)]),
43060                                                                                  Bop(In,
43061                                                                                      Var("Rn",
43062                                                                                          F4),
43063                                                                                      SL[LW(13,
43064                                                                                            4),
43065                                                                                         LW(15,
43066                                                                                            4)])),
43067                                                                              Bop(In,
43068                                                                                  Var("Rm",
43069                                                                                      F4),
43070                                                                                  SL[LW(13,
43071                                                                                        4),
43072                                                                                     LW(15,
43073                                                                                        4)])),
43074                                                                          Call
43075                                                                            ("DECODE_UNPREDICTABLE",
43076                                                                             ATy(qTy,
43077                                                                                 PTy(uTy,
43078                                                                                     qTy)),
43079                                                                             TP[Var("mc",
43080                                                                                    CTy"MachineCode"),
43081                                                                                LS
43082                                                                                 "SelectBytes"]),
43083                                                                          MU(LU,
43084                                                                             qTy)),
43085                                                                      Close
43086                                                                        (AVar
43087                                                                           uTy,
43088                                                                         MU(Call
43089                                                                              ("Media",
43090                                                                               CTy"instruction",
43091                                                                               Call
43092                                                                                 ("SelectBytes",
43093                                                                                  CTy"Media",
43094                                                                                  TP[Var("Rd",
43095                                                                                         F4),
43096                                                                                     Var("Rn",
43097                                                                                         F4),
43098                                                                                     Var("Rm",
43099                                                                                         F4)])),
43100                                                                            qTy))),
43101                                                                   Call
43102                                                                     ("Skip",
43103                                                                      ATy(qTy,
43104                                                                          PTy(CTy"instruction",
43105                                                                              qTy)),
43106                                                                      LU)))))))))),
43107                                      (Bop(And,Mop(Not,bVar"b'24"),
43108                                           Bop(And,bVar"b'23",
43109                                               Bop(And,
43110                                                   Mop(Not,bVar"b'22"),
43111                                                   Bop(And,bVar"b'21",
43112                                                       Bop(And,bVar"b'20",
43113                                                           Bop(And,
43114                                                               bVar"b'15",
43115                                                               Bop(And,
43116                                                                   bVar"b'14",
43117                                                                   Bop(And,
43118                                                                       bVar"b'13",
43119                                                                       Bop(And,
43120                                                                           bVar"b'12",
43121                                                                           Bop(And,
43122                                                                               bVar"b'7",
43123                                                                               Bop(And,
43124                                                                                   Mop(Not,
43125                                                                                       bVar"b'6"),
43126                                                                                   Bop(And,
43127                                                                                       Mop(Not,
43128                                                                                           bVar"b'5"),
43129                                                                                       Mop(Not,
43130                                                                                           bVar"b'4"))))))))))))),
43131                                       Let(Var("Rm",F4),
43132                                           Mop(Cast F4,
43133                                               LL[bVar"b'3",bVar"b'2",
43134                                                  bVar"b'1",bVar"b'0"]),
43135                                           Let(Var("Rd",F4),
43136                                               Mop(Cast F4,
43137                                                   LL[bVar"b'11",
43138                                                      bVar"b'10",
43139                                                      bVar"b'9",bVar"b'8"]),
43140                                               MB(Call
43141                                                    ("ThumbCondition",
43142                                                     ATy(qTy,PTy(F4,qTy)),
43143                                                     LU),
43144                                                  Close
43145                                                    (Var("v",F4),
43146                                                     MB(MB(MB(Call
43147                                                                ("HaveThumb2",
43148                                                                 ATy(qTy,
43149                                                                     PTy(bTy,
43150                                                                         qTy)),
43151                                                                 LU),
43152                                                              Close
43153                                                                (bVar"v0",
43154                                                                 MU(TP[Var("v",
43155                                                                           F4),
43156                                                                       bVar"v0"],
43157                                                                    qTy))),
43158                                                           Close
43159                                                             (Var("v",
43160                                                                  PTy(F4,
43161                                                                      bTy)),
43162                                                              Call
43163                                                                ("Take",
43164                                                                 ATy(qTy,
43165                                                                     PTy(bTy,
43166                                                                         qTy)),
43167                                                                 Var("v",
43168                                                                     PTy(F4,
43169                                                                         bTy))))),
43170                                                        Close
43171                                                          (bVar"b",
43172                                                           ITE(bVar"b",
43173                                                               MB(ITE(Bop(Or,
43174                                                                          Bop(Or,
43175                                                                              Mop(Not,
43176                                                                                  EQ(Mop(Cast
43177                                                                                           F4,
43178                                                                                         LL[bVar"b'19",
43179                                                                                            bVar"b'18",
43180                                                                                            bVar"b'17",
43181                                                                                            bVar"b'16"]),
43182                                                                                     Var("Rm",
43183                                                                                         F4))),
43184                                                                              Bop(In,
43185                                                                                  Var("Rd",
43186                                                                                      F4),
43187                                                                                  SL[LW(13,
43188                                                                                        4),
43189                                                                                     LW(15,
43190                                                                                        4)])),
43191                                                                          Bop(In,
43192                                                                              Var("Rm",
43193                                                                                  F4),
43194                                                                              SL[LW(13,
43195                                                                                    4),
43196                                                                                 LW(15,
43197                                                                                    4)])),
43198                                                                      Call
43199                                                                        ("DECODE_UNPREDICTABLE",
43200                                                                         ATy(qTy,
43201                                                                             PTy(uTy,
43202                                                                                 qTy)),
43203                                                                         TP[Var("mc",
43204                                                                                CTy"MachineCode"),
43205                                                                            LS
43206                                                                             "CountLeadingZeroes"]),
43207                                                                      MU(LU,
43208                                                                         qTy)),
43209                                                                  Close
43210                                                                    (AVar
43211                                                                       uTy,
43212                                                                     MU(Call
43213                                                                          ("Data",
43214                                                                           CTy"instruction",
43215                                                                           Call
43216                                                                             ("CountLeadingZeroes",
43217                                                                              CTy"Data",
43218                                                                              TP[Var("Rd",
43219                                                                                     F4),
43220                                                                                 Var("Rm",
43221                                                                                     F4)])),
43222                                                                        qTy))),
43223                                                               Call
43224                                                                 ("Skip",
43225                                                                  ATy(qTy,
43226                                                                      PTy(CTy"instruction",
43227                                                                          qTy)),
43228                                                                  LU))))))))),
43229                                      (Bop(And,bVar"b'24",
43230                                           Bop(And,Mop(Not,bVar"b'23"),
43231                                               Bop(And,Mop(Not,bVar"b'7"),
43232                                                   Mop(Not,bVar"b'6")))),
43233                                       Let(Var("Rn",F4),
43234                                           Mop(Cast F4,
43235                                               LL[bVar"b'19",bVar"b'18",
43236                                                  bVar"b'17",bVar"b'16"]),
43237                                           Let(Var("Rm",F4),
43238                                               Mop(Cast F4,
43239                                                   LL[bVar"b'3",bVar"b'2",
43240                                                      bVar"b'1",bVar"b'0"]),
43241                                               Let(Var("Rd",F4),
43242                                                   Mop(Cast F4,
43243                                                       LL[bVar"b'11",
43244                                                          bVar"b'10",
43245                                                          bVar"b'9",
43246                                                          bVar"b'8"]),
43247                                                   Let(Var("Ra",F4),
43248                                                       Mop(Cast F4,
43249                                                           LL[bVar"b'15",
43250                                                              bVar"b'14",
43251                                                              bVar"b'13",
43252                                                              bVar"b'12"]),
43253                                                       MB(Call
43254                                                            ("ThumbCondition",
43255                                                             ATy(qTy,
43256                                                                 PTy(F4,
43257                                                                     qTy)),
43258                                                             LU),
43259                                                          Close
43260                                                            (Var("v",F4),
43261                                                             MB(MB(MB(Call
43262                                                                        ("HaveThumb2",
43263                                                                         ATy(qTy,
43264                                                                             PTy(bTy,
43265                                                                                 qTy)),
43266                                                                         LU),
43267                                                                      Close
43268                                                                        (bVar"v0",
43269                                                                         MU(TP[Var("v",
43270                                                                                   F4),
43271                                                                               bVar"v0"],
43272                                                                            qTy))),
43273                                                                   Close
43274                                                                     (Var("v",
43275                                                                          PTy(F4,
43276                                                                              bTy)),
43277                                                                      Call
43278                                                                        ("Take",
43279                                                                         ATy(qTy,
43280                                                                             PTy(bTy,
43281                                                                                 qTy)),
43282                                                                         Var("v",
43283                                                                             PTy(F4,
43284                                                                                 bTy))))),
43285                                                                Close
43286                                                                  (bVar"b",
43287                                                                   ITE(bVar"b",
43288                                                                       MB(ITE(Bop(Or,
43289                                                                                  Bop(Or,
43290                                                                                      Bop(Or,
43291                                                                                          Bop(In,
43292                                                                                              Var("Rd",
43293                                                                                                  F4),
43294                                                                                              SL[LW(13,
43295                                                                                                    4),
43296                                                                                                 LW(15,
43297                                                                                                    4)]),
43298                                                                                          Bop(In,
43299                                                                                              Var("Rn",
43300                                                                                                  F4),
43301                                                                                              SL[LW(13,
43302                                                                                                    4),
43303                                                                                                 LW(15,
43304                                                                                                    4)])),
43305                                                                                      Bop(In,
43306                                                                                          Var("Rm",
43307                                                                                              F4),
43308                                                                                          SL[LW(13,
43309                                                                                                4),
43310                                                                                             LW(15,
43311                                                                                                4)])),
43312                                                                                  EQ(Var("Ra",
43313                                                                                         F4),
43314                                                                                     LW(13,
43315                                                                                        4))),
43316                                                                              Call
43317                                                                                ("DECODE_UNPREDICTABLE",
43318                                                                                 ATy(qTy,
43319                                                                                     PTy(uTy,
43320                                                                                         qTy)),
43321                                                                                 TP[Var("mc",
43322                                                                                        CTy"MachineCode"),
43323                                                                                    LS
43324                                                                                     "Multiplies and absolute difference"]),
43325                                                                              MU(LU,
43326                                                                                 qTy)),
43327                                                                          Close
43328                                                                            (uVar"_0",
43329                                                                             CS(TP[Mop(Cast
43330                                                                                         (FTy 3),
43331                                                                                       LL[bVar"b'22",
43332                                                                                          bVar"b'21",
43333                                                                                          bVar"b'20"]),
43334                                                                                   Var("Ra",
43335                                                                                       F4),
43336                                                                                   EQ(Mop(Cast
43337                                                                                            F1,
43338                                                                                          LL[bVar"b'5"]),
43339                                                                                      LW(1,
43340                                                                                         1)),
43341                                                                                   EQ(Mop(Cast
43342                                                                                            F1,
43343                                                                                          LL[bVar"b'4"]),
43344                                                                                      LW(1,
43345                                                                                         1))],
43346                                                                                [(TP[LW(0,
43347                                                                                        3),
43348                                                                                     LW(15,
43349                                                                                        4),
43350                                                                                     LF,
43351                                                                                     LF],
43352                                                                                  MU(Call
43353                                                                                       ("Multiply",
43354                                                                                        CTy"instruction",
43355                                                                                        Call
43356                                                                                          ("Multiply32",
43357                                                                                           CTy"Multiply",
43358                                                                                           TP[LF,
43359                                                                                              Var("Rd",
43360                                                                                                  F4),
43361                                                                                              Var("Rn",
43362                                                                                                  F4),
43363                                                                                              Var("Rm",
43364                                                                                                  F4)])),
43365                                                                                     qTy)),
43366                                                                                 (TP[LW(0,
43367                                                                                        3),
43368                                                                                     AVar
43369                                                                                       F4,
43370                                                                                     LF,
43371                                                                                     LF],
43372                                                                                  MU(Call
43373                                                                                       ("Multiply",
43374                                                                                        CTy"instruction",
43375                                                                                        Call
43376                                                                                          ("MultiplyAccumulate",
43377                                                                                           CTy"Multiply",
43378                                                                                           TP[LF,
43379                                                                                              Var("Rd",
43380                                                                                                  F4),
43381                                                                                              Var("Rn",
43382                                                                                                  F4),
43383                                                                                              Var("Rm",
43384                                                                                                  F4),
43385                                                                                              Var("Ra",
43386                                                                                                  F4)])),
43387                                                                                     qTy)),
43388                                                                                 (TP[LW(0,
43389                                                                                        3),
43390                                                                                     LW(15,
43391                                                                                        4),
43392                                                                                     LF,
43393                                                                                     LT],
43394                                                                                  MB(Call
43395                                                                                       ("DECODE_UNPREDICTABLE",
43396                                                                                        ATy(qTy,
43397                                                                                            PTy(uTy,
43398                                                                                                qTy)),
43399                                                                                        TP[Var("mc",
43400                                                                                               CTy"MachineCode"),
43401                                                                                           LS
43402                                                                                            "MultiplySubtract"]),
43403                                                                                     Close
43404                                                                                       (AVar
43405                                                                                          uTy,
43406                                                                                        MU(LX(CTy"instruction"),
43407                                                                                           qTy)))),
43408                                                                                 (TP[LW(0,
43409                                                                                        3),
43410                                                                                     AVar
43411                                                                                       F4,
43412                                                                                     LF,
43413                                                                                     LT],
43414                                                                                  MU(Call
43415                                                                                       ("Multiply",
43416                                                                                        CTy"instruction",
43417                                                                                        Call
43418                                                                                          ("MultiplySubtract",
43419                                                                                           CTy"Multiply",
43420                                                                                           TP[Var("Rd",
43421                                                                                                  F4),
43422                                                                                              Var("Rn",
43423                                                                                                  F4),
43424                                                                                              Var("Rm",
43425                                                                                                  F4),
43426                                                                                              Var("Ra",
43427                                                                                                  F4)])),
43428                                                                                     qTy)),
43429                                                                                 (TP[LW(1,
43430                                                                                        3),
43431                                                                                     LW(15,
43432                                                                                        4),
43433                                                                                     bVar"n_high",
43434                                                                                     bVar"m_high"],
43435                                                                                  MU(Call
43436                                                                                       ("Multiply",
43437                                                                                        CTy"instruction",
43438                                                                                        Call
43439                                                                                          ("Signed16Multiply32Result",
43440                                                                                           CTy"Multiply",
43441                                                                                           TP[bVar"m_high",
43442                                                                                              bVar"n_high",
43443                                                                                              Var("Rd",
43444                                                                                                  F4),
43445                                                                                              Var("Rn",
43446                                                                                                  F4),
43447                                                                                              Var("Rm",
43448                                                                                                  F4)])),
43449                                                                                     qTy)),
43450                                                                                 (TP[LW(1,
43451                                                                                        3),
43452                                                                                     AVar
43453                                                                                       F4,
43454                                                                                     bVar"n_high",
43455                                                                                     bVar"m_high"],
43456                                                                                  MU(Call
43457                                                                                       ("Multiply",
43458                                                                                        CTy"instruction",
43459                                                                                        Call
43460                                                                                          ("Signed16Multiply32Accumulate",
43461                                                                                           CTy"Multiply",
43462                                                                                           TP[bVar"m_high",
43463                                                                                              bVar"n_high",
43464                                                                                              Var("Rd",
43465                                                                                                  F4),
43466                                                                                              Var("Rn",
43467                                                                                                  F4),
43468                                                                                              Var("Rm",
43469                                                                                                  F4),
43470                                                                                              Var("Ra",
43471                                                                                                  F4)])),
43472                                                                                     qTy)),
43473                                                                                 (TP[LW(2,
43474                                                                                        3),
43475                                                                                     AVar
43476                                                                                       F4,
43477                                                                                     LF,
43478                                                                                     bVar"m_swap"],
43479                                                                                  MU(Call
43480                                                                                       ("Multiply",
43481                                                                                        CTy"instruction",
43482                                                                                        Call
43483                                                                                          ("SignedMultiplyDual",
43484                                                                                           CTy"Multiply",
43485                                                                                           TP[LF,
43486                                                                                              bVar"m_swap",
43487                                                                                              Var("Rd",
43488                                                                                                  F4),
43489                                                                                              Var("Rn",
43490                                                                                                  F4),
43491                                                                                              Var("Rm",
43492                                                                                                  F4),
43493                                                                                              Var("Ra",
43494                                                                                                  F4)])),
43495                                                                                     qTy)),
43496                                                                                 (TP[LW(3,
43497                                                                                        3),
43498                                                                                     LW(15,
43499                                                                                        4),
43500                                                                                     LF,
43501                                                                                     bVar"m_high"],
43502                                                                                  MU(Call
43503                                                                                       ("Multiply",
43504                                                                                        CTy"instruction",
43505                                                                                        Call
43506                                                                                          ("Signed16x32Multiply32Result",
43507                                                                                           CTy"Multiply",
43508                                                                                           TP[bVar"m_high",
43509                                                                                              Var("Rd",
43510                                                                                                  F4),
43511                                                                                              Var("Rn",
43512                                                                                                  F4),
43513                                                                                              Var("Rm",
43514                                                                                                  F4)])),
43515                                                                                     qTy)),
43516                                                                                 (TP[LW(3,
43517                                                                                        3),
43518                                                                                     AVar
43519                                                                                       F4,
43520                                                                                     LF,
43521                                                                                     bVar"m_high"],
43522                                                                                  MU(Call
43523                                                                                       ("Multiply",
43524                                                                                        CTy"instruction",
43525                                                                                        Call
43526                                                                                          ("Signed16x32Multiply32Accumulate",
43527                                                                                           CTy"Multiply",
43528                                                                                           TP[bVar"m_high",
43529                                                                                              Var("Rd",
43530                                                                                                  F4),
43531                                                                                              Var("Rn",
43532                                                                                                  F4),
43533                                                                                              Var("Rm",
43534                                                                                                  F4),
43535                                                                                              Var("Ra",
43536                                                                                                  F4)])),
43537                                                                                     qTy)),
43538                                                                                 (TP[LW(4,
43539                                                                                        3),
43540                                                                                     AVar
43541                                                                                       F4,
43542                                                                                     LF,
43543                                                                                     bVar"m_swap"],
43544                                                                                  MU(Call
43545                                                                                       ("Multiply",
43546                                                                                        CTy"instruction",
43547                                                                                        Call
43548                                                                                          ("SignedMultiplyDual",
43549                                                                                           CTy"Multiply",
43550                                                                                           TP[LT,
43551                                                                                              bVar"m_swap",
43552                                                                                              Var("Rd",
43553                                                                                                  F4),
43554                                                                                              Var("Rn",
43555                                                                                                  F4),
43556                                                                                              Var("Rm",
43557                                                                                                  F4),
43558                                                                                              Var("Ra",
43559                                                                                                  F4)])),
43560                                                                                     qTy)),
43561                                                                                 (TP[LW(5,
43562                                                                                        3),
43563                                                                                     AVar
43564                                                                                       F4,
43565                                                                                     LF,
43566                                                                                     bVar"round"],
43567                                                                                  MU(Call
43568                                                                                       ("Multiply",
43569                                                                                        CTy"instruction",
43570                                                                                        Call
43571                                                                                          ("SignedMostSignificantMultiply",
43572                                                                                           CTy"Multiply",
43573                                                                                           TP[bVar"round",
43574                                                                                              Var("Rd",
43575                                                                                                  F4),
43576                                                                                              Var("Rn",
43577                                                                                                  F4),
43578                                                                                              Var("Rm",
43579                                                                                                  F4),
43580                                                                                              Var("Ra",
43581                                                                                                  F4)])),
43582                                                                                     qTy)),
43583                                                                                 (TP[LW(6,
43584                                                                                        3),
43585                                                                                     LW(15,
43586                                                                                        4),
43587                                                                                     LF,
43588                                                                                     AVar
43589                                                                                       bTy],
43590                                                                                  MB(Call
43591                                                                                       ("DECODE_UNPREDICTABLE",
43592                                                                                        ATy(qTy,
43593                                                                                            PTy(uTy,
43594                                                                                                qTy)),
43595                                                                                        TP[Var("mc",
43596                                                                                               CTy"MachineCode"),
43597                                                                                           LS
43598                                                                                            "SignedMostSignificantMultiplySubtract"]),
43599                                                                                     Close
43600                                                                                       (AVar
43601                                                                                          uTy,
43602                                                                                        MU(LX(CTy"instruction"),
43603                                                                                           qTy)))),
43604                                                                                 (TP[LW(6,
43605                                                                                        3),
43606                                                                                     AVar
43607                                                                                       F4,
43608                                                                                     LF,
43609                                                                                     bVar"round"],
43610                                                                                  MU(Call
43611                                                                                       ("Multiply",
43612                                                                                        CTy"instruction",
43613                                                                                        Call
43614                                                                                          ("SignedMostSignificantMultiplySubtract",
43615                                                                                           CTy"Multiply",
43616                                                                                           TP[bVar"round",
43617                                                                                              Var("Rd",
43618                                                                                                  F4),
43619                                                                                              Var("Rn",
43620                                                                                                  F4),
43621                                                                                              Var("Rm",
43622                                                                                                  F4),
43623                                                                                              Var("Ra",
43624                                                                                                  F4)])),
43625                                                                                     qTy)),
43626                                                                                 (TP[LW(7,
43627                                                                                        3),
43628                                                                                     AVar
43629                                                                                       F4,
43630                                                                                     LF,
43631                                                                                     LF],
43632                                                                                  MU(Call
43633                                                                                       ("SIMD",
43634                                                                                        CTy"instruction",
43635                                                                                        Call
43636                                                                                          ("UnsignedSumAbsoluteDifferences",
43637                                                                                           CTy"SIMD",
43638                                                                                           TP[Var("Rd",
43639                                                                                                  F4),
43640                                                                                              Var("Rn",
43641                                                                                                  F4),
43642                                                                                              Var("Rm",
43643                                                                                                  F4),
43644                                                                                              Var("Ra",
43645                                                                                                  F4)])),
43646                                                                                     qTy)),
43647                                                                                 (AVar
43648                                                                                    (PTy(FTy 3,
43649                                                                                         PTy(F4,
43650                                                                                             PTy(bTy,
43651                                                                                                 bTy)))),
43652                                                                                  MU(Call
43653                                                                                       ("Undefined",
43654                                                                                        CTy"instruction",
43655                                                                                        LW(0,
43656                                                                                           32)),
43657                                                                                     qTy))]))),
43658                                                                       Call
43659                                                                         ("Skip",
43660                                                                          ATy(qTy,
43661                                                                              PTy(CTy"instruction",
43662                                                                                  qTy)),
43663                                                                          LU))))))))))),
43664                                      (Bop(And,bVar"b'24",
43665                                           Bop(And,bVar"b'23",
43666                                               Bop(And,
43667                                                   Mop(Not,bVar"b'22"),
43668                                                   Bop(And,bVar"b'20",
43669                                                       Bop(And,bVar"b'7",
43670                                                           Bop(And,
43671                                                               bVar"b'6",
43672                                                               Bop(And,
43673                                                                   bVar"b'5",
43674                                                                   bVar"b'4"))))))),
43675                                       Let(Var("Rn",F4),
43676                                           Mop(Cast F4,
43677                                               LL[bVar"b'19",bVar"b'18",
43678                                                  bVar"b'17",bVar"b'16"]),
43679                                           Let(Var("Rm",F4),
43680                                               Mop(Cast F4,
43681                                                   LL[bVar"b'3",bVar"b'2",
43682                                                      bVar"b'1",bVar"b'0"]),
43683                                               Let(Var("Rd",F4),
43684                                                   Mop(Cast F4,
43685                                                       LL[bVar"b'11",
43686                                                          bVar"b'10",
43687                                                          bVar"b'9",
43688                                                          bVar"b'8"]),
43689                                                   MB(Call
43690                                                        ("ThumbCondition",
43691                                                         ATy(qTy,
43692                                                             PTy(F4,qTy)),
43693                                                         LU),
43694                                                      Close
43695                                                        (Var("v",F4),
43696                                                         MB(MB(MB(Call
43697                                                                    ("HaveVirtExt",
43698                                                                     ATy(qTy,
43699                                                                         PTy(bTy,
43700                                                                             qTy)),
43701                                                                     LU),
43702                                                                  Close
43703                                                                    (bVar"v0",
43704                                                                     MB(ITE(bVar"v0",
43705                                                                            MU(LT,
43706                                                                               qTy),
43707                                                                            MB(MR(Close
43708                                                                                    (qVar"s",
43709                                                                                     Dest
43710                                                                                       ("Architecture",
43711                                                                                        CTy"Architecture",
43712                                                                                        qVar"s"))),
43713                                                                               Close
43714                                                                                 (Var("v",
43715                                                                                      CTy"Architecture"),
43716                                                                                  MU(EQ(Var("v",
43717                                                                                            CTy"Architecture"),
43718                                                                                        LC("ARMv7_R",
43719                                                                                           CTy"Architecture")),
43720                                                                                     qTy)))),
43721                                                                        Close
43722                                                                          (bVar"v0",
43723                                                                           MU(TP[Var("v",
43724                                                                                     F4),
43725                                                                                 bVar"v0"],
43726                                                                              qTy))))),
43727                                                               Close
43728                                                                 (Var("v",
43729                                                                      PTy(F4,
43730                                                                          bTy)),
43731                                                                  Call
43732                                                                    ("Take",
43733                                                                     ATy(qTy,
43734                                                                         PTy(bTy,
43735                                                                             qTy)),
43736                                                                     Var("v",
43737                                                                         PTy(F4,
43738                                                                             bTy))))),
43739                                                            Close
43740                                                              (bVar"b",
43741                                                               ITE(bVar"b",
43742                                                                   MB(ITE(Bop(Or,
43743                                                                              Bop(Or,
43744                                                                                  Bop(In,
43745                                                                                      Var("Rd",
43746                                                                                          F4),
43747                                                                                      SL[LW(13,
43748                                                                                            4),
43749                                                                                         LW(15,
43750                                                                                            4)]),
43751                                                                                  Bop(In,
43752                                                                                      Var("Rn",
43753                                                                                          F4),
43754                                                                                      SL[LW(13,
43755                                                                                            4),
43756                                                                                         LW(15,
43757                                                                                            4)])),
43758                                                                              Bop(In,
43759                                                                                  Var("Rm",
43760                                                                                      F4),
43761                                                                                  SL[LW(13,
43762                                                                                        4),
43763                                                                                     LW(15,
43764                                                                                        4)])),
43765                                                                          Call
43766                                                                            ("DECODE_UNPREDICTABLE",
43767                                                                             ATy(qTy,
43768                                                                                 PTy(uTy,
43769                                                                                     qTy)),
43770                                                                             TP[Var("mc",
43771                                                                                    CTy"MachineCode"),
43772                                                                                LS
43773                                                                                 "Divide"]),
43774                                                                          MU(LU,
43775                                                                             qTy)),
43776                                                                      Close
43777                                                                        (AVar
43778                                                                           uTy,
43779                                                                         MU(Call
43780                                                                              ("Divide",
43781                                                                               CTy"instruction",
43782                                                                               TP[EQ(Mop(Cast
43783                                                                                           F1,
43784                                                                                         LL[bVar"b'21"]),
43785                                                                                     LW(1,
43786                                                                                        1)),
43787                                                                                  Var("Rd",
43788                                                                                      F4),
43789                                                                                  Var("Rn",
43790                                                                                      F4),
43791                                                                                  Var("Rm",
43792                                                                                      F4)]),
43793                                                                            qTy))),
43794                                                                   Call
43795                                                                     ("Skip",
43796                                                                      ATy(qTy,
43797                                                                          PTy(CTy"instruction",
43798                                                                              qTy)),
43799                                                                      LU)))))))))),
43800                                      (Bop(And,bVar"b'24",bVar"b'23"),
43801                                       Let(Var("Rn",F4),
43802                                           Mop(Cast F4,
43803                                               LL[bVar"b'19",bVar"b'18",
43804                                                  bVar"b'17",bVar"b'16"]),
43805                                           Let(Var("Rm",F4),
43806                                               Mop(Cast F4,
43807                                                   LL[bVar"b'3",bVar"b'2",
43808                                                      bVar"b'1",bVar"b'0"]),
43809                                               Let(Var("RdHi",F4),
43810                                                   Mop(Cast F4,
43811                                                       LL[bVar"b'11",
43812                                                          bVar"b'10",
43813                                                          bVar"b'9",
43814                                                          bVar"b'8"]),
43815                                                   Let(Var("RdLo",F4),
43816                                                       Mop(Cast F4,
43817                                                           LL[bVar"b'15",
43818                                                              bVar"b'14",
43819                                                              bVar"b'13",
43820                                                              bVar"b'12"]),
43821                                                       MB(Call
43822                                                            ("ThumbCondition",
43823                                                             ATy(qTy,
43824                                                                 PTy(F4,
43825                                                                     qTy)),
43826                                                             LU),
43827                                                          Close
43828                                                            (Var("v",F4),
43829                                                             MB(MB(MB(Call
43830                                                                        ("HaveThumb2",
43831                                                                         ATy(qTy,
43832                                                                             PTy(bTy,
43833                                                                                 qTy)),
43834                                                                         LU),
43835                                                                      Close
43836                                                                        (bVar"v0",
43837                                                                         MU(TP[Var("v",
43838                                                                                   F4),
43839                                                                               bVar"v0"],
43840                                                                            qTy))),
43841                                                                   Close
43842                                                                     (Var("v",
43843                                                                          PTy(F4,
43844                                                                              bTy)),
43845                                                                      Call
43846                                                                        ("Take",
43847                                                                         ATy(qTy,
43848                                                                             PTy(bTy,
43849                                                                                 qTy)),
43850                                                                         Var("v",
43851                                                                             PTy(F4,
43852                                                                                 bTy))))),
43853                                                                Close
43854                                                                  (bVar"b",
43855                                                                   ITE(bVar"b",
43856                                                                       MB(ITE(Bop(Or,
43857                                                                                  Bop(Or,
43858                                                                                      Bop(Or,
43859                                                                                          Bop(Or,
43860                                                                                              Bop(In,
43861                                                                                                  Var("RdLo",
43862                                                                                                      F4),
43863                                                                                                  SL[LW(13,
43864                                                                                                        4),
43865                                                                                                     LW(15,
43866                                                                                                        4)]),
43867                                                                                              Bop(In,
43868                                                                                                  Var("RdHi",
43869                                                                                                      F4),
43870                                                                                                  SL[LW(13,
43871                                                                                                        4),
43872                                                                                                     LW(15,
43873                                                                                                        4)])),
43874                                                                                          Bop(In,
43875                                                                                              Var("Rn",
43876                                                                                                  F4),
43877                                                                                              SL[LW(13,
43878                                                                                                    4),
43879                                                                                                 LW(15,
43880                                                                                                    4)])),
43881                                                                                      Bop(In,
43882                                                                                          Var("Rm",
43883                                                                                              F4),
43884                                                                                          SL[LW(13,
43885                                                                                                4),
43886                                                                                             LW(15,
43887                                                                                                4)])),
43888                                                                                  EQ(Var("RdHi",
43889                                                                                         F4),
43890                                                                                     Var("RdLo",
43891                                                                                         F4))),
43892                                                                              Call
43893                                                                                ("DECODE_UNPREDICTABLE",
43894                                                                                 ATy(qTy,
43895                                                                                     PTy(uTy,
43896                                                                                         qTy)),
43897                                                                                 TP[Var("mc",
43898                                                                                        CTy"MachineCode"),
43899                                                                                    LS
43900                                                                                     "Long multiply, long multiply accumulate"]),
43901                                                                              MU(LU,
43902                                                                                 qTy)),
43903                                                                          Close
43904                                                                            (uVar"_0",
43905                                                                             MU(Let(TP[TP[bVar"b'6",
43906                                                                                          bVar"b'5",
43907                                                                                          bVar"b'4"],
43908                                                                                       bVar"b'3",
43909                                                                                       bVar"b'2",
43910                                                                                       bVar"b'1",
43911                                                                                       bVar"b'0"],
43912                                                                                    TP[BL(3,
43913                                                                                          Mop(Cast
43914                                                                                                (FTy 3),
43915                                                                                              LL[bVar"b'22",
43916                                                                                                 bVar"b'21",
43917                                                                                                 bVar"b'20"])),
43918                                                                                       BL(4,
43919                                                                                          Mop(Cast
43920                                                                                                F4,
43921                                                                                              LL[bVar"b'7",
43922                                                                                                 bVar"b'6",
43923                                                                                                 bVar"b'5",
43924                                                                                                 bVar"b'4"]))],
43925                                                                                    ITB([(Bop(And,
43926                                                                                              Mop(Not,
43927                                                                                                  bVar"b'4"),
43928                                                                                              Bop(And,
43929                                                                                                  Mop(Not,
43930                                                                                                      bVar"b'3"),
43931                                                                                                  Bop(And,
43932                                                                                                      Mop(Not,
43933                                                                                                          bVar"b'2"),
43934                                                                                                      Bop(And,
43935                                                                                                          Mop(Not,
43936                                                                                                              bVar"b'1"),
43937                                                                                                          Mop(Not,
43938                                                                                                              bVar"b'0"))))),
43939                                                                                          Call
43940                                                                                            ("Multiply",
43941                                                                                             CTy"instruction",
43942                                                                                             Call
43943                                                                                               ("MultiplyLong",
43944                                                                                                CTy"Multiply",
43945                                                                                                TP[EQ(Mop(Cast
43946                                                                                                            F1,
43947                                                                                                          LL[bVar"b'6"]),
43948                                                                                                      LW(1,
43949                                                                                                         1)),
43950                                                                                                   EQ(Mop(Cast
43951                                                                                                            F1,
43952                                                                                                          LL[bVar"b'5"]),
43953                                                                                                      LW(0,
43954                                                                                                         1)),
43955                                                                                                   LF,
43956                                                                                                   Var("RdHi",
43957                                                                                                       F4),
43958                                                                                                   Var("RdLo",
43959                                                                                                       F4),
43960                                                                                                   Var("Rn",
43961                                                                                                       F4),
43962                                                                                                   Var("Rm",
43963                                                                                                       F4)]))),
43964                                                                                         (Bop(And,
43965                                                                                              bVar"b'6",
43966                                                                                              Bop(And,
43967                                                                                                  Mop(Not,
43968                                                                                                      bVar"b'5"),
43969                                                                                                  Bop(And,
43970                                                                                                      Mop(Not,
43971                                                                                                          bVar"b'4"),
43972                                                                                                      Bop(And,
43973                                                                                                          bVar"b'3",
43974                                                                                                          Mop(Not,
43975                                                                                                              bVar"b'2"))))),
43976                                                                                          Call
43977                                                                                            ("Multiply",
43978                                                                                             CTy"instruction",
43979                                                                                             Call
43980                                                                                               ("Signed16Multiply64Accumulate",
43981                                                                                                CTy"Multiply",
43982                                                                                                TP[EQ(Mop(Cast
43983                                                                                                            F1,
43984                                                                                                          LL[bVar"b'0"]),
43985                                                                                                      LW(1,
43986                                                                                                         1)),
43987                                                                                                   EQ(Mop(Cast
43988                                                                                                            F1,
43989                                                                                                          LL[bVar"b'1"]),
43990                                                                                                      LW(1,
43991                                                                                                         1)),
43992                                                                                                   Var("RdHi",
43993                                                                                                       F4),
43994                                                                                                   Var("RdLo",
43995                                                                                                       F4),
43996                                                                                                   Var("Rn",
43997                                                                                                       F4),
43998                                                                                                   Var("Rm",
43999                                                                                                       F4)]))),
44000                                                                                         (Bop(And,
44001                                                                                              bVar"b'6",
44002                                                                                              Bop(And,
44003                                                                                                  Mop(Not,
44004                                                                                                      bVar"b'5"),
44005                                                                                                  Bop(And,
44006                                                                                                      bVar"b'3",
44007                                                                                                      Bop(And,
44008                                                                                                          bVar"b'2",
44009                                                                                                          Mop(Not,
44010                                                                                                              bVar"b'1"))))),
44011                                                                                          Call
44012                                                                                            ("Multiply",
44013                                                                                             CTy"instruction",
44014                                                                                             Call
44015                                                                                               ("SignedMultiplyLongDual",
44016                                                                                                CTy"Multiply",
44017                                                                                                TP[EQ(Mop(Cast
44018                                                                                                            F1,
44019                                                                                                          LL[bVar"b'4"]),
44020                                                                                                      LW(1,
44021                                                                                                         1)),
44022                                                                                                   EQ(Mop(Cast
44023                                                                                                            F1,
44024                                                                                                          LL[bVar"b'0"]),
44025                                                                                                      LW(1,
44026                                                                                                         1)),
44027                                                                                                   Var("RdHi",
44028                                                                                                       F4),
44029                                                                                                   Var("RdLo",
44030                                                                                                       F4),
44031                                                                                                   Var("Rn",
44032                                                                                                       F4),
44033                                                                                                   Var("Rm",
44034                                                                                                       F4)]))),
44035                                                                                         (Bop(And,
44036                                                                                              bVar"b'6",
44037                                                                                              Bop(And,
44038                                                                                                  bVar"b'5",
44039                                                                                                  Bop(And,
44040                                                                                                      Mop(Not,
44041                                                                                                          bVar"b'4"),
44042                                                                                                      Bop(And,
44043                                                                                                          Mop(Not,
44044                                                                                                              bVar"b'3"),
44045                                                                                                          Bop(And,
44046                                                                                                              bVar"b'2",
44047                                                                                                              Bop(And,
44048                                                                                                                  bVar"b'1",
44049                                                                                                                  Mop(Not,
44050                                                                                                                      bVar"b'0"))))))),
44051                                                                                          Call
44052                                                                                            ("Multiply",
44053                                                                                             CTy"instruction",
44054                                                                                             Call
44055                                                                                               ("MultiplyAccumulateAccumulate",
44056                                                                                                CTy"Multiply",
44057                                                                                                TP[Var("RdHi",
44058                                                                                                       F4),
44059                                                                                                   Var("RdLo",
44060                                                                                                       F4),
44061                                                                                                   Var("Rn",
44062                                                                                                       F4),
44063                                                                                                   Var("Rm",
44064                                                                                                       F4)])))],
44065                                                                                        Call
44066                                                                                          ("Undefined",
44067                                                                                           CTy"instruction",
44068                                                                                           LW(0,
44069                                                                                              32)))),
44070                                                                                qTy))),
44071                                                                       Call
44072                                                                         ("Skip",
44073                                                                          ATy(qTy,
44074                                                                              PTy(CTy"instruction",
44075                                                                                  qTy)),
44076                                                                          LU)))))))))))],
44077                                     Call
44078                                       ("UndefinedThumb",
44079                                        ATy(qTy,PTy(CTy"instruction",qTy)),
44080                                        LU)),
44081                                 Call
44082                                   ("UndefinedThumb",
44083                                    ATy(qTy,PTy(CTy"instruction",qTy)),LU))),
44084                            (bVar"b'22",
44085                             ITB([(bVar"b'20",
44086                                   ITE(Bop(And,bVar"b'31",
44087                                           Bop(And,bVar"b'30",
44088                                               Bop(And,bVar"b'29",
44089                                                   Bop(And,
44090                                                       Mop(Not,bVar"b'26"),
44091                                                       Bop(And,
44092                                                           Mop(Not,
44093                                                               bVar"b'24"),
44094                                                           Mop(Not,
44095                                                               bVar"b'21")))))),
44096                                       ITB([(Bop(And,bVar"b'19",
44097                                                 Bop(And,bVar"b'18",
44098                                                     Bop(And,bVar"b'17",
44099                                                         bVar"b'16"))),
44100                                             Let(Var("Rt",F4),
44101                                                 Mop(Cast F4,
44102                                                     LL[bVar"b'15",
44103                                                        bVar"b'14",
44104                                                        bVar"b'13",
44105                                                        bVar"b'12"]),
44106                                                 MB(Call
44107                                                      ("ThumbCondition",
44108                                                       ATy(qTy,PTy(F4,qTy)),
44109                                                       LU),
44110                                                    Close
44111                                                      (Var("v",F4),
44112                                                       MB(MB(MB(Call
44113                                                                  ("HaveThumb2",
44114                                                                   ATy(qTy,
44115                                                                       PTy(bTy,
44116                                                                           qTy)),
44117                                                                   LU),
44118                                                                Close
44119                                                                  (bVar"v0",
44120                                                                   MU(TP[Var("v",
44121                                                                             F4),
44122                                                                         bVar"v0"],
44123                                                                      qTy))),
44124                                                             Close
44125                                                               (Var("v",
44126                                                                    PTy(F4,
44127                                                                        bTy)),
44128                                                                Call
44129                                                                  ("Take",
44130                                                                   ATy(qTy,
44131                                                                       PTy(bTy,
44132                                                                           qTy)),
44133                                                                   Var("v",
44134                                                                       PTy(F4,
44135                                                                           bTy))))),
44136                                                          Close
44137                                                            (bVar"b",
44138                                                             ITE(bVar"b",
44139                                                                 MB(Call
44140                                                                      ("InITBlock",
44141                                                                       ATy(qTy,
44142                                                                           PTy(bTy,
44143                                                                               qTy)),
44144                                                                       LU),
44145                                                                    Close
44146                                                                      (bVar"v",
44147                                                                       MB(MB(MB(MU(Bop(And,
44148                                                                                       EQ(Var("Rt",
44149                                                                                              F4),
44150                                                                                          LW(15,
44151                                                                                             4)),
44152                                                                                       bVar"v"),
44153                                                                                   qTy),
44154                                                                                Close
44155                                                                                  (bVar"b",
44156                                                                                   ITE(bVar"b",
44157                                                                                       MB(Call
44158                                                                                            ("LastInITBlock",
44159                                                                                             ATy(qTy,
44160                                                                                                 PTy(bTy,
44161                                                                                                     qTy)),
44162                                                                                             LU),
44163                                                                                          Close
44164                                                                                            (bVar"v",
44165                                                                                             MU(Mop(Not,
44166                                                                                                    bVar"v"),
44167                                                                                                qTy))),
44168                                                                                       MU(LF,
44169                                                                                          qTy)))),
44170                                                                             Close
44171                                                                               (bVar"b",
44172                                                                                ITE(bVar"b",
44173                                                                                    Call
44174                                                                                      ("DECODE_UNPREDICTABLE",
44175                                                                                       ATy(qTy,
44176                                                                                           PTy(uTy,
44177                                                                                               qTy)),
44178                                                                                       TP[Var("mc",
44179                                                                                              CTy"MachineCode"),
44180                                                                                          LS
44181                                                                                           "LoadLiteral"]),
44182                                                                                    MU(LU,
44183                                                                                       qTy)))),
44184                                                                          Close
44185                                                                            (AVar
44186                                                                               uTy,
44187                                                                             MU(Call
44188                                                                                  ("Load",
44189                                                                                   CTy"instruction",
44190                                                                                   Call
44191                                                                                     ("LoadLiteral",
44192                                                                                      CTy"Load",
44193                                                                                      TP[EQ(Mop(Cast
44194                                                                                                  F1,
44195                                                                                                LL[bVar"b'23"]),
44196                                                                                            LW(1,
44197                                                                                               1)),
44198                                                                                         Var("Rt",
44199                                                                                             F4),
44200                                                                                         Mop(Cast
44201                                                                                               F32,
44202                                                                                             Mop(Cast
44203                                                                                                   (FTy 12),
44204                                                                                                 LL[bVar"b'11",
44205                                                                                                    bVar"b'10",
44206                                                                                                    bVar"b'9",
44207                                                                                                    bVar"b'8",
44208                                                                                                    bVar"b'7",
44209                                                                                                    bVar"b'6",
44210                                                                                                    bVar"b'5",
44211                                                                                                    bVar"b'4",
44212                                                                                                    bVar"b'3",
44213                                                                                                    bVar"b'2",
44214                                                                                                    bVar"b'1",
44215                                                                                                    bVar"b'0"]))])),
44216                                                                                qTy))))),
44217                                                                 Call
44218                                                                   ("Skip",
44219                                                                    ATy(qTy,
44220                                                                        PTy(CTy"instruction",
44221                                                                            qTy)),
44222                                                                    LU)))))))),
44223                                            (bVar"b'23",
44224                                             Let(Var("Rt",F4),
44225                                                 Mop(Cast F4,
44226                                                     LL[bVar"b'15",
44227                                                        bVar"b'14",
44228                                                        bVar"b'13",
44229                                                        bVar"b'12"]),
44230                                                 MB(Call
44231                                                      ("ThumbCondition",
44232                                                       ATy(qTy,PTy(F4,qTy)),
44233                                                       LU),
44234                                                    Close
44235                                                      (Var("v",F4),
44236                                                       MB(MB(MB(Call
44237                                                                  ("HaveThumb2",
44238                                                                   ATy(qTy,
44239                                                                       PTy(bTy,
44240                                                                           qTy)),
44241                                                                   LU),
44242                                                                Close
44243                                                                  (bVar"v0",
44244                                                                   MU(TP[Var("v",
44245                                                                             F4),
44246                                                                         bVar"v0"],
44247                                                                      qTy))),
44248                                                             Close
44249                                                               (Var("v",
44250                                                                    PTy(F4,
44251                                                                        bTy)),
44252                                                                Call
44253                                                                  ("Take",
44254                                                                   ATy(qTy,
44255                                                                       PTy(bTy,
44256                                                                           qTy)),
44257                                                                   Var("v",
44258                                                                       PTy(F4,
44259                                                                           bTy))))),
44260                                                          Close
44261                                                            (bVar"b",
44262                                                             ITE(bVar"b",
44263                                                                 MB(Call
44264                                                                      ("InITBlock",
44265                                                                       ATy(qTy,
44266                                                                           PTy(bTy,
44267                                                                               qTy)),
44268                                                                       LU),
44269                                                                    Close
44270                                                                      (bVar"v",
44271                                                                       MB(MB(MB(MU(Bop(And,
44272                                                                                       EQ(Var("Rt",
44273                                                                                              F4),
44274                                                                                          LW(15,
44275                                                                                             4)),
44276                                                                                       bVar"v"),
44277                                                                                   qTy),
44278                                                                                Close
44279                                                                                  (bVar"b",
44280                                                                                   ITE(bVar"b",
44281                                                                                       MB(Call
44282                                                                                            ("LastInITBlock",
44283                                                                                             ATy(qTy,
44284                                                                                                 PTy(bTy,
44285                                                                                                     qTy)),
44286                                                                                             LU),
44287                                                                                          Close
44288                                                                                            (bVar"v",
44289                                                                                             MU(Mop(Not,
44290                                                                                                    bVar"v"),
44291                                                                                                qTy))),
44292                                                                                       MU(LF,
44293                                                                                          qTy)))),
44294                                                                             Close
44295                                                                               (bVar"b",
44296                                                                                ITE(bVar"b",
44297                                                                                    Call
44298                                                                                      ("DECODE_UNPREDICTABLE",
44299                                                                                       ATy(qTy,
44300                                                                                           PTy(uTy,
44301                                                                                               qTy)),
44302                                                                                       TP[Var("mc",
44303                                                                                              CTy"MachineCode"),
44304                                                                                          LS
44305                                                                                           "LoadWord"]),
44306                                                                                    MU(LU,
44307                                                                                       qTy)))),
44308                                                                          Close
44309                                                                            (AVar
44310                                                                               uTy,
44311                                                                             MU(Call
44312                                                                                  ("Load",
44313                                                                                   CTy"instruction",
44314                                                                                   Call
44315                                                                                     ("LoadWord",
44316                                                                                      CTy"Load",
44317                                                                                      TP[LT,
44318                                                                                         LT,
44319                                                                                         LF,
44320                                                                                         Var("Rt",
44321                                                                                             F4),
44322                                                                                         Mop(Cast
44323                                                                                               F4,
44324                                                                                             LL[bVar"b'19",
44325                                                                                                bVar"b'18",
44326                                                                                                bVar"b'17",
44327                                                                                                bVar"b'16"]),
44328                                                                                         Call
44329                                                                                           ("immediate_form1",
44330                                                                                            CTy"offset1",
44331                                                                                            Mop(Cast
44332                                                                                                  F32,
44333                                                                                                Mop(Cast
44334                                                                                                      (FTy 12),
44335                                                                                                    LL[bVar"b'11",
44336                                                                                                       bVar"b'10",
44337                                                                                                       bVar"b'9",
44338                                                                                                       bVar"b'8",
44339                                                                                                       bVar"b'7",
44340                                                                                                       bVar"b'6",
44341                                                                                                       bVar"b'5",
44342                                                                                                       bVar"b'4",
44343                                                                                                       bVar"b'3",
44344                                                                                                       bVar"b'2",
44345                                                                                                       bVar"b'1",
44346                                                                                                       bVar"b'0"])))])),
44347                                                                                qTy))))),
44348                                                                 Call
44349                                                                   ("Skip",
44350                                                                    ATy(qTy,
44351                                                                        PTy(CTy"instruction",
44352                                                                            qTy)),
44353                                                                    LU)))))))),
44354                                            (Bop(And,Mop(Not,bVar"b'23"),
44355                                                 Bop(And,bVar"b'11",
44356                                                     Bop(And,bVar"b'10",
44357                                                         Bop(And,
44358                                                             bVar"b'9",
44359                                                             Mop(Not,
44360                                                                 bVar"b'8"))))),
44361                                             Let(Var("Rt",F4),
44362                                                 Mop(Cast F4,
44363                                                     LL[bVar"b'15",
44364                                                        bVar"b'14",
44365                                                        bVar"b'13",
44366                                                        bVar"b'12"]),
44367                                                 MB(Call
44368                                                      ("ThumbCondition",
44369                                                       ATy(qTy,PTy(F4,qTy)),
44370                                                       LU),
44371                                                    Close
44372                                                      (Var("v",F4),
44373                                                       MB(MB(MB(Call
44374                                                                  ("HaveThumb2",
44375                                                                   ATy(qTy,
44376                                                                       PTy(bTy,
44377                                                                           qTy)),
44378                                                                   LU),
44379                                                                Close
44380                                                                  (bVar"v0",
44381                                                                   MU(TP[Var("v",
44382                                                                             F4),
44383                                                                         bVar"v0"],
44384                                                                      qTy))),
44385                                                             Close
44386                                                               (Var("v",
44387                                                                    PTy(F4,
44388                                                                        bTy)),
44389                                                                Call
44390                                                                  ("Take",
44391                                                                   ATy(qTy,
44392                                                                       PTy(bTy,
44393                                                                           qTy)),
44394                                                                   Var("v",
44395                                                                       PTy(F4,
44396                                                                           bTy))))),
44397                                                          Close
44398                                                            (bVar"b",
44399                                                             ITE(bVar"b",
44400                                                                 MB(ITE(Bop(In,
44401                                                                            Var("Rt",
44402                                                                                F4),
44403                                                                            SL[LW(13,
44404                                                                                  4),
44405                                                                               LW(15,
44406                                                                                  4)]),
44407                                                                        Call
44408                                                                          ("DECODE_UNPREDICTABLE",
44409                                                                           ATy(qTy,
44410                                                                               PTy(uTy,
44411                                                                                   qTy)),
44412                                                                           TP[Var("mc",
44413                                                                                  CTy"MachineCode"),
44414                                                                              LS
44415                                                                               "LoadUnprivileged"]),
44416                                                                        MU(LU,
44417                                                                           qTy)),
44418                                                                    Close
44419                                                                      (AVar
44420                                                                         uTy,
44421                                                                       MU(Call
44422                                                                            ("Load",
44423                                                                             CTy"instruction",
44424                                                                             Call
44425                                                                               ("LoadUnprivileged",
44426                                                                                CTy"Load",
44427                                                                                TP[LT,
44428                                                                                   LF,
44429                                                                                   Var("Rt",
44430                                                                                       F4),
44431                                                                                   Mop(Cast
44432                                                                                         F4,
44433                                                                                       LL[bVar"b'19",
44434                                                                                          bVar"b'18",
44435                                                                                          bVar"b'17",
44436                                                                                          bVar"b'16"]),
44437                                                                                   Call
44438                                                                                     ("immediate_form1",
44439                                                                                      CTy"offset1",
44440                                                                                      Mop(Cast
44441                                                                                            F32,
44442                                                                                          Mop(Cast
44443                                                                                                F8,
44444                                                                                              LL[bVar"b'7",
44445                                                                                                 bVar"b'6",
44446                                                                                                 bVar"b'5",
44447                                                                                                 bVar"b'4",
44448                                                                                                 bVar"b'3",
44449                                                                                                 bVar"b'2",
44450                                                                                                 bVar"b'1",
44451                                                                                                 bVar"b'0"])))])),
44452                                                                          qTy))),
44453                                                                 Call
44454                                                                   ("Skip",
44455                                                                    ATy(qTy,
44456                                                                        PTy(CTy"instruction",
44457                                                                            qTy)),
44458                                                                    LU)))))))),
44459                                            (Bop(And,Mop(Not,bVar"b'23"),
44460                                                 bVar"b'11"),
44461                                             Let(Var("Rn",F4),
44462                                                 Mop(Cast F4,
44463                                                     LL[bVar"b'19",
44464                                                        bVar"b'18",
44465                                                        bVar"b'17",
44466                                                        bVar"b'16"]),
44467                                                 Let(Var("W",F1),
44468                                                     Mop(Cast F1,
44469                                                         LL[bVar"b'8"]),
44470                                                     Let(Var("P",F1),
44471                                                         Mop(Cast F1,
44472                                                             LL[bVar"b'10"]),
44473                                                         Let(Var("Rt",F4),
44474                                                             Mop(Cast F4,
44475                                                                 LL[bVar"b'15",
44476                                                                    bVar"b'14",
44477                                                                    bVar"b'13",
44478                                                                    bVar"b'12"]),
44479                                                             MB(Call
44480                                                                  ("ThumbCondition",
44481                                                                   ATy(qTy,
44482                                                                       PTy(F4,
44483                                                                           qTy)),
44484                                                                   LU),
44485                                                                Close
44486                                                                  (Var("v",
44487                                                                       F4),
44488                                                                   MB(MB(MB(Call
44489                                                                              ("HaveThumb2",
44490                                                                               ATy(qTy,
44491                                                                                   PTy(bTy,
44492                                                                                       qTy)),
44493                                                                               LU),
44494                                                                            Close
44495                                                                              (bVar"v0",
44496                                                                               MB(MU(Bop(And,
44497                                                                                         Bop(Or,
44498                                                                                             EQ(Var("P",
44499                                                                                                    F1),
44500                                                                                                LW(1,
44501                                                                                                   1)),
44502                                                                                             EQ(Var("W",
44503                                                                                                    F1),
44504                                                                                                LW(1,
44505                                                                                                   1))),
44506                                                                                         bVar"v0"),
44507                                                                                     qTy),
44508                                                                                  Close
44509                                                                                    (bVar"v0",
44510                                                                                     MU(TP[Var("v",
44511                                                                                               F4),
44512                                                                                           bVar"v0"],
44513                                                                                        qTy))))),
44514                                                                         Close
44515                                                                           (Var("v",
44516                                                                                PTy(F4,
44517                                                                                    bTy)),
44518                                                                            Call
44519                                                                              ("Take",
44520                                                                               ATy(qTy,
44521                                                                                   PTy(bTy,
44522                                                                                       qTy)),
44523                                                                               Var("v",
44524                                                                                   PTy(F4,
44525                                                                                       bTy))))),
44526                                                                      Close
44527                                                                        (bVar"b",
44528                                                                         ITE(bVar"b",
44529                                                                             Let(bVar"wback",
44530                                                                                 EQ(Var("W",
44531                                                                                        F1),
44532                                                                                    LW(1,
44533                                                                                       1)),
44534                                                                                 MB(Call
44535                                                                                      ("InITBlock",
44536                                                                                       ATy(qTy,
44537                                                                                           PTy(bTy,
44538                                                                                               qTy)),
44539                                                                                       LU),
44540                                                                                    Close
44541                                                                                      (bVar"v",
44542                                                                                       MB(MB(MB(MB(MU(Bop(And,
44543                                                                                                          EQ(Var("Rt",
44544                                                                                                                 F4),
44545                                                                                                             LW(15,
44546                                                                                                                4)),
44547                                                                                                          bVar"v"),
44548                                                                                                      qTy),
44549                                                                                                   Close
44550                                                                                                     (bVar"b",
44551                                                                                                      ITE(bVar"b",
44552                                                                                                          MB(Call
44553                                                                                                               ("LastInITBlock",
44554                                                                                                                ATy(qTy,
44555                                                                                                                    PTy(bTy,
44556                                                                                                                        qTy)),
44557                                                                                                                LU),
44558                                                                                                             Close
44559                                                                                                               (bVar"v",
44560                                                                                                                MU(Mop(Not,
44561                                                                                                                       bVar"v"),
44562                                                                                                                   qTy))),
44563                                                                                                          MU(LF,
44564                                                                                                             qTy)))),
44565                                                                                                Close
44566                                                                                                  (bVar"v",
44567                                                                                                   MU(Bop(Or,
44568                                                                                                          Bop(And,
44569                                                                                                              bVar"wback",
44570                                                                                                              EQ(Var("Rn",
44571                                                                                                                     F4),
44572                                                                                                                 Var("Rt",
44573                                                                                                                     F4))),
44574                                                                                                          bVar"v"),
44575                                                                                                      qTy))),
44576                                                                                             Close
44577                                                                                               (bVar"b",
44578                                                                                                ITE(bVar"b",
44579                                                                                                    Call
44580                                                                                                      ("DECODE_UNPREDICTABLE",
44581                                                                                                       ATy(qTy,
44582                                                                                                           PTy(uTy,
44583                                                                                                               qTy)),
44584                                                                                                       TP[Var("mc",
44585                                                                                                              CTy"MachineCode"),
44586                                                                                                          LS
44587                                                                                                           "LoadWord"]),
44588                                                                                                    MU(LU,
44589                                                                                                       qTy)))),
44590                                                                                          Close
44591                                                                                            (AVar
44592                                                                                               uTy,
44593                                                                                             MU(Call
44594                                                                                                  ("Load",
44595                                                                                                   CTy"instruction",
44596                                                                                                   Call
44597                                                                                                     ("LoadWord",
44598                                                                                                      CTy"Load",
44599                                                                                                      TP[EQ(Mop(Cast
44600                                                                                                                  F1,
44601                                                                                                                LL[bVar"b'9"]),
44602                                                                                                            LW(1,
44603                                                                                                               1)),
44604                                                                                                         EQ(Var("P",
44605                                                                                                                F1),
44606                                                                                                            LW(1,
44607                                                                                                               1)),
44608                                                                                                         bVar"wback",
44609                                                                                                         Var("Rt",
44610                                                                                                             F4),
44611                                                                                                         Var("Rn",
44612                                                                                                             F4),
44613                                                                                                         Call
44614                                                                                                           ("immediate_form1",
44615                                                                                                            CTy"offset1",
44616                                                                                                            Mop(Cast
44617                                                                                                                  F32,
44618                                                                                                                Mop(Cast
44619                                                                                                                      F8,
44620                                                                                                                    LL[bVar"b'7",
44621                                                                                                                       bVar"b'6",
44622                                                                                                                       bVar"b'5",
44623                                                                                                                       bVar"b'4",
44624                                                                                                                       bVar"b'3",
44625                                                                                                                       bVar"b'2",
44626                                                                                                                       bVar"b'1",
44627                                                                                                                       bVar"b'0"])))])),
44628                                                                                                qTy)))))),
44629                                                                             Call
44630                                                                               ("Skip",
44631                                                                                ATy(qTy,
44632                                                                                    PTy(CTy"instruction",
44633                                                                                        qTy)),
44634                                                                                LU))))))))))),
44635                                            (Bop(And,Mop(Not,bVar"b'23"),
44636                                                 Bop(And,
44637                                                     Mop(Not,bVar"b'11"),
44638                                                     Bop(And,
44639                                                         Mop(Not,
44640                                                             bVar"b'10"),
44641                                                         Bop(And,
44642                                                             Mop(Not,
44643                                                                 bVar"b'9"),
44644                                                             Bop(And,
44645                                                                 Mop(Not,
44646                                                                     bVar"b'8"),
44647                                                                 Bop(And,
44648                                                                     Mop(Not,
44649                                                                         bVar"b'7"),
44650                                                                     Mop(Not,
44651                                                                         bVar"b'6"))))))),
44652                                             Let(Var("Rm",F4),
44653                                                 Mop(Cast F4,
44654                                                     LL[bVar"b'3",
44655                                                        bVar"b'2",
44656                                                        bVar"b'1",
44657                                                        bVar"b'0"]),
44658                                                 Let(Var("Rt",F4),
44659                                                     Mop(Cast F4,
44660                                                         LL[bVar"b'15",
44661                                                            bVar"b'14",
44662                                                            bVar"b'13",
44663                                                            bVar"b'12"]),
44664                                                     MB(Call
44665                                                          ("ThumbCondition",
44666                                                           ATy(qTy,
44667                                                               PTy(F4,qTy)),
44668                                                           LU),
44669                                                        Close
44670                                                          (Var("v",F4),
44671                                                           MB(MB(MB(Call
44672                                                                      ("HaveThumb2",
44673                                                                       ATy(qTy,
44674                                                                           PTy(bTy,
44675                                                                               qTy)),
44676                                                                       LU),
44677                                                                    Close
44678                                                                      (bVar"v0",
44679                                                                       MU(TP[Var("v",
44680                                                                                 F4),
44681                                                                             bVar"v0"],
44682                                                                          qTy))),
44683                                                                 Close
44684                                                                   (Var("v",
44685                                                                        PTy(F4,
44686                                                                            bTy)),
44687                                                                    Call
44688                                                                      ("Take",
44689                                                                       ATy(qTy,
44690                                                                           PTy(bTy,
44691                                                                               qTy)),
44692                                                                       Var("v",
44693                                                                           PTy(F4,
44694                                                                               bTy))))),
44695                                                              Close
44696                                                                (bVar"b",
44697                                                                 ITE(bVar"b",
44698                                                                     MB(Call
44699                                                                          ("InITBlock",
44700                                                                           ATy(qTy,
44701                                                                               PTy(bTy,
44702                                                                                   qTy)),
44703                                                                           LU),
44704                                                                        Close
44705                                                                          (bVar"v",
44706                                                                           MB(MB(MB(MB(MU(Bop(And,
44707                                                                                              EQ(Var("Rt",
44708                                                                                                     F4),
44709                                                                                                 LW(15,
44710                                                                                                    4)),
44711                                                                                              bVar"v"),
44712                                                                                          qTy),
44713                                                                                       Close
44714                                                                                         (bVar"b",
44715                                                                                          ITE(bVar"b",
44716                                                                                              MB(Call
44717                                                                                                   ("LastInITBlock",
44718                                                                                                    ATy(qTy,
44719                                                                                                        PTy(bTy,
44720                                                                                                            qTy)),
44721                                                                                                    LU),
44722                                                                                                 Close
44723                                                                                                   (bVar"v",
44724                                                                                                    MU(Mop(Not,
44725                                                                                                           bVar"v"),
44726                                                                                                       qTy))),
44727                                                                                              MU(LF,
44728                                                                                                 qTy)))),
44729                                                                                    Close
44730                                                                                      (bVar"b",
44731                                                                                       MU(Bop(Or,
44732                                                                                              bVar"b",
44733                                                                                              Bop(In,
44734                                                                                                  Var("Rm",
44735                                                                                                      F4),
44736                                                                                                  SL[LW(13,
44737                                                                                                        4),
44738                                                                                                     LW(15,
44739                                                                                                        4)])),
44740                                                                                          qTy))),
44741                                                                                 Close
44742                                                                                   (bVar"b",
44743                                                                                    ITE(bVar"b",
44744                                                                                        Call
44745                                                                                          ("DECODE_UNPREDICTABLE",
44746                                                                                           ATy(qTy,
44747                                                                                               PTy(uTy,
44748                                                                                                   qTy)),
44749                                                                                           TP[Var("mc",
44750                                                                                                  CTy"MachineCode"),
44751                                                                                              LS
44752                                                                                               "LoadWord"]),
44753                                                                                        MU(LU,
44754                                                                                           qTy)))),
44755                                                                              Close
44756                                                                                (AVar
44757                                                                                   uTy,
44758                                                                                 MU(Call
44759                                                                                      ("Load",
44760                                                                                       CTy"instruction",
44761                                                                                       Call
44762                                                                                         ("LoadWord",
44763                                                                                          CTy"Load",
44764                                                                                          TP[LT,
44765                                                                                             LT,
44766                                                                                             LF,
44767                                                                                             Var("Rt",
44768                                                                                                 F4),
44769                                                                                             Mop(Cast
44770                                                                                                   F4,
44771                                                                                                 LL[bVar"b'19",
44772                                                                                                    bVar"b'18",
44773                                                                                                    bVar"b'17",
44774                                                                                                    bVar"b'16"]),
44775                                                                                             Call
44776                                                                                               ("register_form1",
44777                                                                                                CTy"offset1",
44778                                                                                                TP[Var("Rm",
44779                                                                                                       F4),
44780                                                                                                   LC("SRType_LSL",
44781                                                                                                      CTy"SRType"),
44782                                                                                                   Mop(Cast
44783                                                                                                         nTy,
44784                                                                                                       Mop(Cast
44785                                                                                                             (FTy 2),
44786                                                                                                           LL[bVar"b'5",
44787                                                                                                              bVar"b'4"]))])])),
44788                                                                                    qTy))))),
44789                                                                     Call
44790                                                                       ("Skip",
44791                                                                        ATy(qTy,
44792                                                                            PTy(CTy"instruction",
44793                                                                                qTy)),
44794                                                                        LU)))))))))],
44795                                           Call
44796                                             ("UndefinedThumb",
44797                                              ATy(qTy,
44798                                                  PTy(CTy"instruction",qTy)),
44799                                              LU)),
44800                                       Call
44801                                         ("UndefinedThumb",
44802                                          ATy(qTy,
44803                                              PTy(CTy"instruction",qTy)),
44804                                          LU))),
44805                                  (Bop(And,bVar"b'31",
44806                                       Bop(And,bVar"b'30",
44807                                           Bop(And,bVar"b'29",
44808                                               Bop(And,
44809                                                   Mop(Not,bVar"b'26"),
44810                                                   Bop(And,
44811                                                       Mop(Not,bVar"b'24"),
44812                                                       Mop(Not,bVar"b'21")))))),
44813                                   ITB([(Bop(And,Mop(Not,bVar"b'23"),
44814                                             Bop(And,Mop(Not,bVar"b'11"),
44815                                                 Bop(And,
44816                                                     Mop(Not,bVar"b'10"),
44817                                                     Bop(And,
44818                                                         Mop(Not,bVar"b'9"),
44819                                                         Bop(And,
44820                                                             Mop(Not,
44821                                                                 bVar"b'8"),
44822                                                             Bop(And,
44823                                                                 Mop(Not,
44824                                                                     bVar"b'7"),
44825                                                                 Mop(Not,
44826                                                                     bVar"b'6"))))))),
44827                                         Let(Var("Rn",F4),
44828                                             Mop(Cast F4,
44829                                                 LL[bVar"b'19",bVar"b'18",
44830                                                    bVar"b'17",bVar"b'16"]),
44831                                             Let(Var("Rm",F4),
44832                                                 Mop(Cast F4,
44833                                                     LL[bVar"b'3",
44834                                                        bVar"b'2",
44835                                                        bVar"b'1",
44836                                                        bVar"b'0"]),
44837                                                 Let(Var("Rt",F4),
44838                                                     Mop(Cast F4,
44839                                                         LL[bVar"b'15",
44840                                                            bVar"b'14",
44841                                                            bVar"b'13",
44842                                                            bVar"b'12"]),
44843                                                     MB(Call
44844                                                          ("ThumbCondition",
44845                                                           ATy(qTy,
44846                                                               PTy(F4,qTy)),
44847                                                           LU),
44848                                                        Close
44849                                                          (Var("v",F4),
44850                                                           MB(MB(MB(Call
44851                                                                      ("HaveThumb2",
44852                                                                       ATy(qTy,
44853                                                                           PTy(bTy,
44854                                                                               qTy)),
44855                                                                       LU),
44856                                                                    Close
44857                                                                      (bVar"v0",
44858                                                                       MB(MU(Bop(And,
44859                                                                                 Mop(Not,
44860                                                                                     EQ(Var("Rn",
44861                                                                                            F4),
44862                                                                                        LW(15,
44863                                                                                           4))),
44864                                                                                 bVar"v0"),
44865                                                                             qTy),
44866                                                                          Close
44867                                                                            (bVar"v0",
44868                                                                             MU(TP[Var("v",
44869                                                                                       F4),
44870                                                                                   bVar"v0"],
44871                                                                                qTy))))),
44872                                                                 Close
44873                                                                   (Var("v",
44874                                                                        PTy(F4,
44875                                                                            bTy)),
44876                                                                    Call
44877                                                                      ("Take",
44878                                                                       ATy(qTy,
44879                                                                           PTy(bTy,
44880                                                                               qTy)),
44881                                                                       Var("v",
44882                                                                           PTy(F4,
44883                                                                               bTy))))),
44884                                                              Close
44885                                                                (bVar"b",
44886                                                                 ITE(bVar"b",
44887                                                                     MB(ITE(Bop(Or,
44888                                                                                EQ(Var("Rt",
44889                                                                                       F4),
44890                                                                                   LW(15,
44891                                                                                      4)),
44892                                                                                Bop(In,
44893                                                                                    Var("Rm",
44894                                                                                        F4),
44895                                                                                    SL[LW(13,
44896                                                                                          4),
44897                                                                                       LW(15,
44898                                                                                          4)])),
44899                                                                            Call
44900                                                                              ("DECODE_UNPREDICTABLE",
44901                                                                               ATy(qTy,
44902                                                                                   PTy(uTy,
44903                                                                                       qTy)),
44904                                                                               TP[Var("mc",
44905                                                                                      CTy"MachineCode"),
44906                                                                                  LS
44907                                                                                   "Store (register)"]),
44908                                                                            MU(LU,
44909                                                                               qTy)),
44910                                                                        Close
44911                                                                          (AVar
44912                                                                             uTy,
44913                                                                           MU(Call
44914                                                                                ("Store",
44915                                                                                 CTy"instruction",
44916                                                                                 Call
44917                                                                                   ("StoreWord",
44918                                                                                    CTy"Store",
44919                                                                                    TP[LT,
44920                                                                                       LT,
44921                                                                                       LF,
44922                                                                                       Var("Rt",
44923                                                                                           F4),
44924                                                                                       Var("Rn",
44925                                                                                           F4),
44926                                                                                       Call
44927                                                                                         ("register_form1",
44928                                                                                          CTy"offset1",
44929                                                                                          TP[Var("Rm",
44930                                                                                                 F4),
44931                                                                                             LC("SRType_LSL",
44932                                                                                                CTy"SRType"),
44933                                                                                             Mop(Cast
44934                                                                                                   nTy,
44935                                                                                                 Mop(Cast
44936                                                                                                       (FTy 2),
44937                                                                                                     LL[bVar"b'5",
44938                                                                                                        bVar"b'4"]))])])),
44939                                                                              qTy))),
44940                                                                     Call
44941                                                                       ("Skip",
44942                                                                        ATy(qTy,
44943                                                                            PTy(CTy"instruction",
44944                                                                                qTy)),
44945                                                                        LU)))))))))),
44946                                        (Bop(And,Mop(Not,bVar"b'23"),
44947                                             Bop(And,bVar"b'11",
44948                                                 Bop(And,bVar"b'10",
44949                                                     Bop(And,bVar"b'9",
44950                                                         Mop(Not,bVar"b'8"))))),
44951                                         Let(Var("Rn",F4),
44952                                             Mop(Cast F4,
44953                                                 LL[bVar"b'19",bVar"b'18",
44954                                                    bVar"b'17",bVar"b'16"]),
44955                                             Let(Var("Rt",F4),
44956                                                 Mop(Cast F4,
44957                                                     LL[bVar"b'15",
44958                                                        bVar"b'14",
44959                                                        bVar"b'13",
44960                                                        bVar"b'12"]),
44961                                                 MB(Call
44962                                                      ("ThumbCondition",
44963                                                       ATy(qTy,PTy(F4,qTy)),
44964                                                       LU),
44965                                                    Close
44966                                                      (Var("v",F4),
44967                                                       MB(MB(MB(Call
44968                                                                  ("HaveThumb2",
44969                                                                   ATy(qTy,
44970                                                                       PTy(bTy,
44971                                                                           qTy)),
44972                                                                   LU),
44973                                                                Close
44974                                                                  (bVar"v0",
44975                                                                   MB(MU(Bop(And,
44976                                                                             Mop(Not,
44977                                                                                 EQ(Var("Rn",
44978                                                                                        F4),
44979                                                                                    LW(15,
44980                                                                                       4))),
44981                                                                             bVar"v0"),
44982                                                                         qTy),
44983                                                                      Close
44984                                                                        (bVar"v0",
44985                                                                         MU(TP[Var("v",
44986                                                                                   F4),
44987                                                                               bVar"v0"],
44988                                                                            qTy))))),
44989                                                             Close
44990                                                               (Var("v",
44991                                                                    PTy(F4,
44992                                                                        bTy)),
44993                                                                Call
44994                                                                  ("Take",
44995                                                                   ATy(qTy,
44996                                                                       PTy(bTy,
44997                                                                           qTy)),
44998                                                                   Var("v",
44999                                                                       PTy(F4,
45000                                                                           bTy))))),
45001                                                          Close
45002                                                            (bVar"b",
45003                                                             ITE(bVar"b",
45004                                                                 MB(ITE(Bop(In,
45005                                                                            Var("Rt",
45006                                                                                F4),
45007                                                                            SL[LW(13,
45008                                                                                  4),
45009                                                                               LW(15,
45010                                                                                  4)]),
45011                                                                        Call
45012                                                                          ("DECODE_UNPREDICTABLE",
45013                                                                           ATy(qTy,
45014                                                                               PTy(uTy,
45015                                                                                   qTy)),
45016                                                                           TP[Var("mc",
45017                                                                                  CTy"MachineCode"),
45018                                                                              LS
45019                                                                               "StoreUnprivileged"]),
45020                                                                        MU(LU,
45021                                                                           qTy)),
45022                                                                    Close
45023                                                                      (AVar
45024                                                                         uTy,
45025                                                                       MU(Call
45026                                                                            ("Store",
45027                                                                             CTy"instruction",
45028                                                                             Call
45029                                                                               ("StoreUnprivileged",
45030                                                                                CTy"Store",
45031                                                                                TP[LT,
45032                                                                                   LF,
45033                                                                                   Var("Rt",
45034                                                                                       F4),
45035                                                                                   Var("Rn",
45036                                                                                       F4),
45037                                                                                   Call
45038                                                                                     ("immediate_form1",
45039                                                                                      CTy"offset1",
45040                                                                                      Mop(Cast
45041                                                                                            F32,
45042                                                                                          Mop(Cast
45043                                                                                                F8,
45044                                                                                              LL[bVar"b'7",
45045                                                                                                 bVar"b'6",
45046                                                                                                 bVar"b'5",
45047                                                                                                 bVar"b'4",
45048                                                                                                 bVar"b'3",
45049                                                                                                 bVar"b'2",
45050                                                                                                 bVar"b'1",
45051                                                                                                 bVar"b'0"])))])),
45052                                                                          qTy))),
45053                                                                 Call
45054                                                                   ("Skip",
45055                                                                    ATy(qTy,
45056                                                                        PTy(CTy"instruction",
45057                                                                            qTy)),
45058                                                                    LU))))))))),
45059                                        (Bop(And,Mop(Not,bVar"b'23"),
45060                                             bVar"b'11"),
45061                                         Let(Var("Rn",F4),
45062                                             Mop(Cast F4,
45063                                                 LL[bVar"b'19",bVar"b'18",
45064                                                    bVar"b'17",bVar"b'16"]),
45065                                             Let(Var("W",F1),
45066                                                 Mop(Cast F1,LL[bVar"b'8"]),
45067                                                 Let(Var("P",F1),
45068                                                     Mop(Cast F1,
45069                                                         LL[bVar"b'10"]),
45070                                                     Let(Var("Rt",F4),
45071                                                         Mop(Cast F4,
45072                                                             LL[bVar"b'15",
45073                                                                bVar"b'14",
45074                                                                bVar"b'13",
45075                                                                bVar"b'12"]),
45076                                                         MB(Call
45077                                                              ("ThumbCondition",
45078                                                               ATy(qTy,
45079                                                                   PTy(F4,
45080                                                                       qTy)),
45081                                                               LU),
45082                                                            Close
45083                                                              (Var("v",F4),
45084                                                               MB(MB(MB(Call
45085                                                                          ("HaveThumb2",
45086                                                                           ATy(qTy,
45087                                                                               PTy(bTy,
45088                                                                                   qTy)),
45089                                                                           LU),
45090                                                                        Close
45091                                                                          (bVar"v0",
45092                                                                           MB(MU(Bop(And,
45093                                                                                     Bop(And,
45094                                                                                         Mop(Not,
45095                                                                                             EQ(Var("Rn",
45096                                                                                                    F4),
45097                                                                                                LW(15,
45098                                                                                                   4))),
45099                                                                                         Bop(Or,
45100                                                                                             EQ(Var("P",
45101                                                                                                    F1),
45102                                                                                                LW(1,
45103                                                                                                   1)),
45104                                                                                             EQ(Var("W",
45105                                                                                                    F1),
45106                                                                                                LW(1,
45107                                                                                                   1)))),
45108                                                                                     bVar"v0"),
45109                                                                                 qTy),
45110                                                                              Close
45111                                                                                (bVar"v0",
45112                                                                                 MU(TP[Var("v",
45113                                                                                           F4),
45114                                                                                       bVar"v0"],
45115                                                                                    qTy))))),
45116                                                                     Close
45117                                                                       (Var("v",
45118                                                                            PTy(F4,
45119                                                                                bTy)),
45120                                                                        Call
45121                                                                          ("Take",
45122                                                                           ATy(qTy,
45123                                                                               PTy(bTy,
45124                                                                                   qTy)),
45125                                                                           Var("v",
45126                                                                               PTy(F4,
45127                                                                                   bTy))))),
45128                                                                  Close
45129                                                                    (bVar"b",
45130                                                                     ITE(bVar"b",
45131                                                                         Let(bVar"wback",
45132                                                                             EQ(Var("W",
45133                                                                                    F1),
45134                                                                                LW(1,
45135                                                                                   1)),
45136                                                                             MB(ITE(Bop(Or,
45137                                                                                        EQ(Var("Rt",
45138                                                                                               F4),
45139                                                                                           LW(15,
45140                                                                                              4)),
45141                                                                                        Bop(And,
45142                                                                                            bVar"wback",
45143                                                                                            EQ(Var("Rn",
45144                                                                                                   F4),
45145                                                                                               Var("Rt",
45146                                                                                                   F4)))),
45147                                                                                    Call
45148                                                                                      ("DECODE_UNPREDICTABLE",
45149                                                                                       ATy(qTy,
45150                                                                                           PTy(uTy,
45151                                                                                               qTy)),
45152                                                                                       TP[Var("mc",
45153                                                                                              CTy"MachineCode"),
45154                                                                                          LS
45155                                                                                           "Store (immediate)"]),
45156                                                                                    MU(LU,
45157                                                                                       qTy)),
45158                                                                                Close
45159                                                                                  (AVar
45160                                                                                     uTy,
45161                                                                                   MU(Call
45162                                                                                        ("Store",
45163                                                                                         CTy"instruction",
45164                                                                                         Call
45165                                                                                           ("StoreWord",
45166                                                                                            CTy"Store",
45167                                                                                            TP[EQ(Mop(Cast
45168                                                                                                        F1,
45169                                                                                                      LL[bVar"b'9"]),
45170                                                                                                  LW(1,
45171                                                                                                     1)),
45172                                                                                               EQ(Var("P",
45173                                                                                                      F1),
45174                                                                                                  LW(1,
45175                                                                                                     1)),
45176                                                                                               bVar"wback",
45177                                                                                               Var("Rt",
45178                                                                                                   F4),
45179                                                                                               Var("Rn",
45180                                                                                                   F4),
45181                                                                                               Call
45182                                                                                                 ("immediate_form1",
45183                                                                                                  CTy"offset1",
45184                                                                                                  Mop(Cast
45185                                                                                                        F32,
45186                                                                                                      Mop(Cast
45187                                                                                                            F8,
45188                                                                                                          LL[bVar"b'7",
45189                                                                                                             bVar"b'6",
45190                                                                                                             bVar"b'5",
45191                                                                                                             bVar"b'4",
45192                                                                                                             bVar"b'3",
45193                                                                                                             bVar"b'2",
45194                                                                                                             bVar"b'1",
45195                                                                                                             bVar"b'0"])))])),
45196                                                                                      qTy)))),
45197                                                                         Call
45198                                                                           ("Skip",
45199                                                                            ATy(qTy,
45200                                                                                PTy(CTy"instruction",
45201                                                                                    qTy)),
45202                                                                            LU))))))))))),
45203                                        (bVar"b'23",
45204                                         Let(Var("Rn",F4),
45205                                             Mop(Cast F4,
45206                                                 LL[bVar"b'19",bVar"b'18",
45207                                                    bVar"b'17",bVar"b'16"]),
45208                                             Let(Var("Rt",F4),
45209                                                 Mop(Cast F4,
45210                                                     LL[bVar"b'15",
45211                                                        bVar"b'14",
45212                                                        bVar"b'13",
45213                                                        bVar"b'12"]),
45214                                                 MB(Call
45215                                                      ("ThumbCondition",
45216                                                       ATy(qTy,PTy(F4,qTy)),
45217                                                       LU),
45218                                                    Close
45219                                                      (Var("v",F4),
45220                                                       MB(MB(MB(Call
45221                                                                  ("HaveThumb2",
45222                                                                   ATy(qTy,
45223                                                                       PTy(bTy,
45224                                                                           qTy)),
45225                                                                   LU),
45226                                                                Close
45227                                                                  (bVar"v0",
45228                                                                   MB(MU(Bop(And,
45229                                                                             Mop(Not,
45230                                                                                 EQ(Var("Rn",
45231                                                                                        F4),
45232                                                                                    LW(15,
45233                                                                                       4))),
45234                                                                             bVar"v0"),
45235                                                                         qTy),
45236                                                                      Close
45237                                                                        (bVar"v0",
45238                                                                         MU(TP[Var("v",
45239                                                                                   F4),
45240                                                                               bVar"v0"],
45241                                                                            qTy))))),
45242                                                             Close
45243                                                               (Var("v",
45244                                                                    PTy(F4,
45245                                                                        bTy)),
45246                                                                Call
45247                                                                  ("Take",
45248                                                                   ATy(qTy,
45249                                                                       PTy(bTy,
45250                                                                           qTy)),
45251                                                                   Var("v",
45252                                                                       PTy(F4,
45253                                                                           bTy))))),
45254                                                          Close
45255                                                            (bVar"b",
45256                                                             ITE(bVar"b",
45257                                                                 MB(ITE(EQ(Var("Rt",
45258                                                                               F4),
45259                                                                           LW(15,
45260                                                                              4)),
45261                                                                        Call
45262                                                                          ("DECODE_UNPREDICTABLE",
45263                                                                           ATy(qTy,
45264                                                                               PTy(uTy,
45265                                                                                   qTy)),
45266                                                                           TP[Var("mc",
45267                                                                                  CTy"MachineCode"),
45268                                                                              LS
45269                                                                               "Store (immediate)"]),
45270                                                                        MU(LU,
45271                                                                           qTy)),
45272                                                                    Close
45273                                                                      (AVar
45274                                                                         uTy,
45275                                                                       MU(Call
45276                                                                            ("Store",
45277                                                                             CTy"instruction",
45278                                                                             Call
45279                                                                               ("StoreWord",
45280                                                                                CTy"Store",
45281                                                                                TP[LT,
45282                                                                                   LT,
45283                                                                                   LF,
45284                                                                                   Var("Rt",
45285                                                                                       F4),
45286                                                                                   Var("Rn",
45287                                                                                       F4),
45288                                                                                   Call
45289                                                                                     ("immediate_form1",
45290                                                                                      CTy"offset1",
45291                                                                                      Mop(Cast
45292                                                                                            F32,
45293                                                                                          Mop(Cast
45294                                                                                                (FTy 12),
45295                                                                                              LL[bVar"b'11",
45296                                                                                                 bVar"b'10",
45297                                                                                                 bVar"b'9",
45298                                                                                                 bVar"b'8",
45299                                                                                                 bVar"b'7",
45300                                                                                                 bVar"b'6",
45301                                                                                                 bVar"b'5",
45302                                                                                                 bVar"b'4",
45303                                                                                                 bVar"b'3",
45304                                                                                                 bVar"b'2",
45305                                                                                                 bVar"b'1",
45306                                                                                                 bVar"b'0"])))])),
45307                                                                          qTy))),
45308                                                                 Call
45309                                                                   ("Skip",
45310                                                                    ATy(qTy,
45311                                                                        PTy(CTy"instruction",
45312                                                                            qTy)),
45313                                                                    LU)))))))))],
45314                                       Call
45315                                         ("UndefinedThumb",
45316                                          ATy(qTy,
45317                                              PTy(CTy"instruction",qTy)),
45318                                          LU)))],
45319                                 Call
45320                                   ("UndefinedThumb",
45321                                    ATy(qTy,PTy(CTy"instruction",qTy)),LU))),
45322                            (bVar"b'20",
45323                             ITE(Bop(And,bVar"b'31",
45324                                     Bop(And,bVar"b'30",
45325                                         Bop(And,bVar"b'29",
45326                                             Mop(Not,bVar"b'26")))),
45327                                 ITB([(Bop(And,Mop(Not,bVar"b'24"),
45328                                           Bop(And,bVar"b'21",
45329                                               Bop(And,bVar"b'19",
45330                                                   Bop(And,bVar"b'18",
45331                                                       Bop(And,bVar"b'17",
45332                                                           Bop(And,
45333                                                               bVar"b'16",
45334                                                               Bop(And,
45335                                                                   bVar"b'15",
45336                                                                   Bop(And,
45337                                                                       bVar"b'14",
45338                                                                       Bop(And,
45339                                                                           bVar"b'13",
45340                                                                           bVar"b'12"))))))))),
45341                                       MB(Call
45342                                            ("DECODE_UNPREDICTABLE",
45343                                             ATy(qTy,PTy(uTy,qTy)),
45344                                             TP[Var("mc",CTy"MachineCode"),
45345                                                LS"PreloadDataLiteral"]),
45346                                          Close
45347                                            (AVar uTy,
45348                                             MU(LX(CTy"instruction"),qTy)))),
45349                                      (Bop(And,Mop(Not,bVar"b'24"),
45350                                           Bop(And,bVar"b'19",
45351                                               Bop(And,bVar"b'18",
45352                                                   Bop(And,bVar"b'17",
45353                                                       Bop(And,bVar"b'16",
45354                                                           Bop(And,
45355                                                               bVar"b'15",
45356                                                               Bop(And,
45357                                                                   bVar"b'14",
45358                                                                   Bop(And,
45359                                                                       bVar"b'13",
45360                                                                       bVar"b'12")))))))),
45361                                       MB(Call
45362                                            ("ThumbCondition",
45363                                             ATy(qTy,PTy(F4,qTy)),LU),
45364                                          Close
45365                                            (Var("v",F4),
45366                                             MB(MB(MB(Call
45367                                                        ("HaveThumb2",
45368                                                         ATy(qTy,
45369                                                             PTy(bTy,qTy)),
45370                                                         LU),
45371                                                      Close
45372                                                        (bVar"v0",
45373                                                         MU(TP[Var("v",F4),
45374                                                               bVar"v0"],
45375                                                            qTy))),
45376                                                   Close
45377                                                     (Var("v",PTy(F4,bTy)),
45378                                                      Call
45379                                                        ("Take",
45380                                                         ATy(qTy,
45381                                                             PTy(bTy,qTy)),
45382                                                         Var("v",
45383                                                             PTy(F4,bTy))))),
45384                                                Close
45385                                                  (bVar"b",
45386                                                   ITE(bVar"b",
45387                                                       MU(Call
45388                                                            ("Hint",
45389                                                             CTy"instruction",
45390                                                             Call
45391                                                               ("PreloadDataLiteral",
45392                                                                CTy"Hint",
45393                                                                TP[EQ(Mop(Cast
45394                                                                            F1,
45395                                                                          LL[bVar"b'23"]),
45396                                                                      LW(1,
45397                                                                         1)),
45398                                                                   Mop(Cast
45399                                                                         F32,
45400                                                                       Mop(Cast
45401                                                                             (FTy 12),
45402                                                                           LL[bVar"b'11",
45403                                                                              bVar"b'10",
45404                                                                              bVar"b'9",
45405                                                                              bVar"b'8",
45406                                                                              bVar"b'7",
45407                                                                              bVar"b'6",
45408                                                                              bVar"b'5",
45409                                                                              bVar"b'4",
45410                                                                              bVar"b'3",
45411                                                                              bVar"b'2",
45412                                                                              bVar"b'1",
45413                                                                              bVar"b'0"]))])),
45414                                                          qTy),
45415                                                       Call
45416                                                         ("Skip",
45417                                                          ATy(qTy,
45418                                                              PTy(CTy"instruction",
45419                                                                  qTy)),LU))))))),
45420                                      (Bop(And,bVar"b'24",
45421                                           Bop(And,Mop(Not,bVar"b'21"),
45422                                               Bop(And,bVar"b'19",
45423                                                   Bop(And,bVar"b'18",
45424                                                       Bop(And,bVar"b'17",
45425                                                           Bop(And,
45426                                                               bVar"b'16",
45427                                                               Bop(And,
45428                                                                   bVar"b'15",
45429                                                                   Bop(And,
45430                                                                       bVar"b'14",
45431                                                                       Bop(And,
45432                                                                           bVar"b'13",
45433                                                                           bVar"b'12"))))))))),
45434                                       MB(Call
45435                                            ("ThumbCondition",
45436                                             ATy(qTy,PTy(F4,qTy)),LU),
45437                                          Close
45438                                            (Var("v",F4),
45439                                             MB(MB(MB(Call
45440                                                        ("ArchVersion",
45441                                                         ATy(qTy,
45442                                                             PTy(nTy,qTy)),
45443                                                         LU),
45444                                                      Close
45445                                                        (nVar"v0",
45446                                                         MB(MU(Bop(Ge,
45447                                                                   nVar"v0",
45448                                                                   LN 7),
45449                                                               qTy),
45450                                                            Close
45451                                                              (bVar"v0",
45452                                                               MU(TP[Var("v",
45453                                                                         F4),
45454                                                                     bVar"v0"],
45455                                                                  qTy))))),
45456                                                   Close
45457                                                     (Var("v",PTy(F4,bTy)),
45458                                                      Call
45459                                                        ("Take",
45460                                                         ATy(qTy,
45461                                                             PTy(bTy,qTy)),
45462                                                         Var("v",
45463                                                             PTy(F4,bTy))))),
45464                                                Close
45465                                                  (bVar"b",
45466                                                   ITE(bVar"b",
45467                                                       MU(Call
45468                                                            ("Hint",
45469                                                             CTy"instruction",
45470                                                             Call
45471                                                               ("PreloadInstruction",
45472                                                                CTy"Hint",
45473                                                                TP[EQ(Mop(Cast
45474                                                                            F1,
45475                                                                          LL[bVar"b'23"]),
45476                                                                      LW(1,
45477                                                                         1)),
45478                                                                   LW(15,4),
45479                                                                   Call
45480                                                                     ("immediate_form1",
45481                                                                      CTy"offset1",
45482                                                                      Mop(Cast
45483                                                                            F32,
45484                                                                          Mop(Cast
45485                                                                                (FTy 12),
45486                                                                              LL[bVar"b'11",
45487                                                                                 bVar"b'10",
45488                                                                                 bVar"b'9",
45489                                                                                 bVar"b'8",
45490                                                                                 bVar"b'7",
45491                                                                                 bVar"b'6",
45492                                                                                 bVar"b'5",
45493                                                                                 bVar"b'4",
45494                                                                                 bVar"b'3",
45495                                                                                 bVar"b'2",
45496                                                                                 bVar"b'1",
45497                                                                                 bVar"b'0"])))])),
45498                                                          qTy),
45499                                                       Call
45500                                                         ("Skip",
45501                                                          ATy(qTy,
45502                                                              PTy(CTy"instruction",
45503                                                                  qTy)),LU))))))),
45504                                      (Bop(And,bVar"b'24",
45505                                           Bop(And,bVar"b'23",
45506                                               Bop(And,
45507                                                   Mop(Not,bVar"b'21"),
45508                                                   Bop(And,bVar"b'15",
45509                                                       Bop(And,bVar"b'14",
45510                                                           Bop(And,
45511                                                               bVar"b'13",
45512                                                               bVar"b'12")))))),
45513                                       MB(Call
45514                                            ("ThumbCondition",
45515                                             ATy(qTy,PTy(F4,qTy)),LU),
45516                                          Close
45517                                            (Var("v",F4),
45518                                             MB(MB(MB(Call
45519                                                        ("ArchVersion",
45520                                                         ATy(qTy,
45521                                                             PTy(nTy,qTy)),
45522                                                         LU),
45523                                                      Close
45524                                                        (nVar"v0",
45525                                                         MB(MU(Bop(Ge,
45526                                                                   nVar"v0",
45527                                                                   LN 7),
45528                                                               qTy),
45529                                                            Close
45530                                                              (bVar"v0",
45531                                                               MU(TP[Var("v",
45532                                                                         F4),
45533                                                                     bVar"v0"],
45534                                                                  qTy))))),
45535                                                   Close
45536                                                     (Var("v",PTy(F4,bTy)),
45537                                                      Call
45538                                                        ("Take",
45539                                                         ATy(qTy,
45540                                                             PTy(bTy,qTy)),
45541                                                         Var("v",
45542                                                             PTy(F4,bTy))))),
45543                                                Close
45544                                                  (bVar"b",
45545                                                   ITE(bVar"b",
45546                                                       MU(Call
45547                                                            ("Hint",
45548                                                             CTy"instruction",
45549                                                             Call
45550                                                               ("PreloadInstruction",
45551                                                                CTy"Hint",
45552                                                                TP[LT,
45553                                                                   Mop(Cast
45554                                                                         F4,
45555                                                                       LL[bVar"b'19",
45556                                                                          bVar"b'18",
45557                                                                          bVar"b'17",
45558                                                                          bVar"b'16"]),
45559                                                                   Call
45560                                                                     ("immediate_form1",
45561                                                                      CTy"offset1",
45562                                                                      Mop(Cast
45563                                                                            F32,
45564                                                                          Mop(Cast
45565                                                                                (FTy 12),
45566                                                                              LL[bVar"b'11",
45567                                                                                 bVar"b'10",
45568                                                                                 bVar"b'9",
45569                                                                                 bVar"b'8",
45570                                                                                 bVar"b'7",
45571                                                                                 bVar"b'6",
45572                                                                                 bVar"b'5",
45573                                                                                 bVar"b'4",
45574                                                                                 bVar"b'3",
45575                                                                                 bVar"b'2",
45576                                                                                 bVar"b'1",
45577                                                                                 bVar"b'0"])))])),
45578                                                          qTy),
45579                                                       Call
45580                                                         ("Skip",
45581                                                          ATy(qTy,
45582                                                              PTy(CTy"instruction",
45583                                                                  qTy)),LU))))))),
45584                                      (Bop(And,Mop(Not,bVar"b'24"),
45585                                           Bop(And,bVar"b'23",
45586                                               Bop(And,bVar"b'15",
45587                                                   Bop(And,bVar"b'14",
45588                                                       Bop(And,bVar"b'13",
45589                                                           bVar"b'12"))))),
45590                                       Let(Var("W",F1),
45591                                           Mop(Cast F1,LL[bVar"b'21"]),
45592                                           MB(Call
45593                                                ("ThumbCondition",
45594                                                 ATy(qTy,PTy(F4,qTy)),LU),
45595                                              Close
45596                                                (Var("v",F4),
45597                                                 MB(MB(MB(ITE(EQ(Var("W",
45598                                                                     F1),
45599                                                                 LW(1,1)),
45600                                                              Call
45601                                                                ("HaveMPExt",
45602                                                                 ATy(qTy,
45603                                                                     PTy(bTy,
45604                                                                         qTy)),
45605                                                                 LU),
45606                                                              Call
45607                                                                ("HaveThumb2",
45608                                                                 ATy(qTy,
45609                                                                     PTy(bTy,
45610                                                                         qTy)),
45611                                                                 LU)),
45612                                                          Close
45613                                                            (bVar"v0",
45614                                                             MU(TP[Var("v",
45615                                                                       F4),
45616                                                                   bVar"v0"],
45617                                                                qTy))),
45618                                                       Close
45619                                                         (Var("v",
45620                                                              PTy(F4,bTy)),
45621                                                          Call
45622                                                            ("Take",
45623                                                             ATy(qTy,
45624                                                                 PTy(bTy,
45625                                                                     qTy)),
45626                                                             Var("v",
45627                                                                 PTy(F4,
45628                                                                     bTy))))),
45629                                                    Close
45630                                                      (bVar"b",
45631                                                       ITE(bVar"b",
45632                                                           MU(Call
45633                                                                ("Hint",
45634                                                                 CTy"instruction",
45635                                                                 Call
45636                                                                   ("PreloadData",
45637                                                                    CTy"Hint",
45638                                                                    TP[LT,
45639                                                                       EQ(Var("W",
45640                                                                              F1),
45641                                                                          LW(1,
45642                                                                             1)),
45643                                                                       Mop(Cast
45644                                                                             F4,
45645                                                                           LL[bVar"b'19",
45646                                                                              bVar"b'18",
45647                                                                              bVar"b'17",
45648                                                                              bVar"b'16"]),
45649                                                                       Call
45650                                                                         ("immediate_form1",
45651                                                                          CTy"offset1",
45652                                                                          Mop(Cast
45653                                                                                F32,
45654                                                                              Mop(Cast
45655                                                                                    (FTy 12),
45656                                                                                  LL[bVar"b'11",
45657                                                                                     bVar"b'10",
45658                                                                                     bVar"b'9",
45659                                                                                     bVar"b'8",
45660                                                                                     bVar"b'7",
45661                                                                                     bVar"b'6",
45662                                                                                     bVar"b'5",
45663                                                                                     bVar"b'4",
45664                                                                                     bVar"b'3",
45665                                                                                     bVar"b'2",
45666                                                                                     bVar"b'1",
45667                                                                                     bVar"b'0"])))])),
45668                                                              qTy),
45669                                                           Call
45670                                                             ("Skip",
45671                                                              ATy(qTy,
45672                                                                  PTy(CTy"instruction",
45673                                                                      qTy)),
45674                                                              LU)))))))),
45675                                      (Bop(And,bVar"b'24",
45676                                           Bop(And,bVar"b'21",
45677                                               Bop(And,bVar"b'19",
45678                                                   Bop(And,bVar"b'18",
45679                                                       Bop(And,bVar"b'17",
45680                                                           Bop(And,
45681                                                               bVar"b'16",
45682                                                               Bop(And,
45683                                                                   bVar"b'15",
45684                                                                   Bop(And,
45685                                                                       bVar"b'14",
45686                                                                       Bop(And,
45687                                                                           bVar"b'13",
45688                                                                           bVar"b'12"))))))))),
45689                                       MU(Const
45690                                            ("NoOperation",
45691                                             CTy"instruction"),qTy)),
45692                                      (Bop(And,bVar"b'19",
45693                                           Bop(And,bVar"b'18",
45694                                               Bop(And,bVar"b'17",
45695                                                   bVar"b'16"))),
45696                                       Let(Var("Rt",F4),
45697                                           Mop(Cast F4,
45698                                               LL[bVar"b'15",bVar"b'14",
45699                                                  bVar"b'13",bVar"b'12"]),
45700                                           MB(Call
45701                                                ("ThumbCondition",
45702                                                 ATy(qTy,PTy(F4,qTy)),LU),
45703                                              Close
45704                                                (Var("v",F4),
45705                                                 MB(MB(MB(Call
45706                                                            ("HaveThumb2",
45707                                                             ATy(qTy,
45708                                                                 PTy(bTy,
45709                                                                     qTy)),
45710                                                             LU),
45711                                                          Close
45712                                                            (bVar"v0",
45713                                                             MU(TP[Var("v",
45714                                                                       F4),
45715                                                                   bVar"v0"],
45716                                                                qTy))),
45717                                                       Close
45718                                                         (Var("v",
45719                                                              PTy(F4,bTy)),
45720                                                          Call
45721                                                            ("Take",
45722                                                             ATy(qTy,
45723                                                                 PTy(bTy,
45724                                                                     qTy)),
45725                                                             Var("v",
45726                                                                 PTy(F4,
45727                                                                     bTy))))),
45728                                                    Close
45729                                                      (bVar"b",
45730                                                       ITE(bVar"b",
45731                                                           MB(ITE(EQ(Var("Rt",
45732                                                                         F4),
45733                                                                     LW(13,
45734                                                                        4)),
45735                                                                  Call
45736                                                                    ("DECODE_UNPREDICTABLE",
45737                                                                     ATy(qTy,
45738                                                                         PTy(uTy,
45739                                                                             qTy)),
45740                                                                     TP[Var("mc",
45741                                                                            CTy"MachineCode"),
45742                                                                        LS
45743                                                                         "LoadByteLiteral/LoadHalfLiteral"]),
45744                                                                  MU(LU,
45745                                                                     qTy)),
45746                                                              Close
45747                                                                (AVar uTy,
45748                                                                 MU(Let(Var("imm32",
45749                                                                            F32),
45750                                                                        Mop(Cast
45751                                                                              F32,
45752                                                                            Mop(Cast
45753                                                                                  (FTy 12),
45754                                                                                LL[bVar"b'11",
45755                                                                                   bVar"b'10",
45756                                                                                   bVar"b'9",
45757                                                                                   bVar"b'8",
45758                                                                                   bVar"b'7",
45759                                                                                   bVar"b'6",
45760                                                                                   bVar"b'5",
45761                                                                                   bVar"b'4",
45762                                                                                   bVar"b'3",
45763                                                                                   bVar"b'2",
45764                                                                                   bVar"b'1",
45765                                                                                   bVar"b'0"])),
45766                                                                        Let(bVar"add",
45767                                                                            EQ(Mop(Cast
45768                                                                                     F1,
45769                                                                                   LL[bVar"b'23"]),
45770                                                                               LW(1,
45771                                                                                  1)),
45772                                                                            Let(bVar"unsigned",
45773                                                                                EQ(Mop(Cast
45774                                                                                         F1,
45775                                                                                       LL[bVar"b'24"]),
45776                                                                                   LW(0,
45777                                                                                      1)),
45778                                                                                ITE(EQ(Mop(Cast
45779                                                                                             F1,
45780                                                                                           LL[bVar"b'21"]),
45781                                                                                       LW(1,
45782                                                                                          1)),
45783                                                                                    Call
45784                                                                                      ("Load",
45785                                                                                       CTy"instruction",
45786                                                                                       Call
45787                                                                                         ("LoadHalfLiteral",
45788                                                                                          CTy"Load",
45789                                                                                          TP[bVar"unsigned",
45790                                                                                             bVar"add",
45791                                                                                             Var("Rt",
45792                                                                                                 F4),
45793                                                                                             Var("imm32",
45794                                                                                                 F32)])),
45795                                                                                    Call
45796                                                                                      ("Load",
45797                                                                                       CTy"instruction",
45798                                                                                       Call
45799                                                                                         ("LoadByteLiteral",
45800                                                                                          CTy"Load",
45801                                                                                          TP[bVar"unsigned",
45802                                                                                             bVar"add",
45803                                                                                             Var("Rt",
45804                                                                                                 F4),
45805                                                                                             Var("imm32",
45806                                                                                                 F32)])))))),
45807                                                                    qTy))),
45808                                                           Call
45809                                                             ("Skip",
45810                                                              ATy(qTy,
45811                                                                  PTy(CTy"instruction",
45812                                                                      qTy)),
45813                                                              LU)))))))),
45814                                      (bVar"b'23",
45815                                       Let(Var("Rn",F4),
45816                                           Mop(Cast F4,
45817                                               LL[bVar"b'19",bVar"b'18",
45818                                                  bVar"b'17",bVar"b'16"]),
45819                                           Let(Var("Rt",F4),
45820                                               Mop(Cast F4,
45821                                                   LL[bVar"b'15",
45822                                                      bVar"b'14",
45823                                                      bVar"b'13",
45824                                                      bVar"b'12"]),
45825                                               MB(Call
45826                                                    ("ThumbCondition",
45827                                                     ATy(qTy,PTy(F4,qTy)),
45828                                                     LU),
45829                                                  Close
45830                                                    (Var("v",F4),
45831                                                     MB(MB(MB(Call
45832                                                                ("HaveThumb2",
45833                                                                 ATy(qTy,
45834                                                                     PTy(bTy,
45835                                                                         qTy)),
45836                                                                 LU),
45837                                                              Close
45838                                                                (bVar"v0",
45839                                                                 MU(TP[Var("v",
45840                                                                           F4),
45841                                                                       bVar"v0"],
45842                                                                    qTy))),
45843                                                           Close
45844                                                             (Var("v",
45845                                                                  PTy(F4,
45846                                                                      bTy)),
45847                                                              Call
45848                                                                ("Take",
45849                                                                 ATy(qTy,
45850                                                                     PTy(bTy,
45851                                                                         qTy)),
45852                                                                 Var("v",
45853                                                                     PTy(F4,
45854                                                                         bTy))))),
45855                                                        Close
45856                                                          (bVar"b",
45857                                                           ITE(bVar"b",
45858                                                               MB(ITE(EQ(Var("Rt",
45859                                                                             F4),
45860                                                                         LW(13,
45861                                                                            4)),
45862                                                                      Call
45863                                                                        ("DECODE_UNPREDICTABLE",
45864                                                                         ATy(qTy,
45865                                                                             PTy(uTy,
45866                                                                                 qTy)),
45867                                                                         TP[Var("mc",
45868                                                                                CTy"MachineCode"),
45869                                                                            LS
45870                                                                             "LoadByte/LoadHalf (immediate)"]),
45871                                                                      MU(LU,
45872                                                                         qTy)),
45873                                                                  Close
45874                                                                    (AVar
45875                                                                       uTy,
45876                                                                     MU(Let(bVar"add",
45877                                                                            LT,
45878                                                                            Let(bVar"index",
45879                                                                                LT,
45880                                                                                Let(bVar"wback",
45881                                                                                    LF,
45882                                                                                    Let(Var("m",
45883                                                                                            CTy"offset1"),
45884                                                                                        Call
45885                                                                                          ("immediate_form1",
45886                                                                                           CTy"offset1",
45887                                                                                           Mop(Cast
45888                                                                                                 F32,
45889                                                                                               Mop(Cast
45890                                                                                                     (FTy 12),
45891                                                                                                   LL[bVar"b'11",
45892                                                                                                      bVar"b'10",
45893                                                                                                      bVar"b'9",
45894                                                                                                      bVar"b'8",
45895                                                                                                      bVar"b'7",
45896                                                                                                      bVar"b'6",
45897                                                                                                      bVar"b'5",
45898                                                                                                      bVar"b'4",
45899                                                                                                      bVar"b'3",
45900                                                                                                      bVar"b'2",
45901                                                                                                      bVar"b'1",
45902                                                                                                      bVar"b'0"]))),
45903                                                                                        Let(bVar"unsigned",
45904                                                                                            EQ(Mop(Cast
45905                                                                                                     F1,
45906                                                                                                   LL[bVar"b'24"]),
45907                                                                                               LW(0,
45908                                                                                                  1)),
45909                                                                                            ITE(EQ(Mop(Cast
45910                                                                                                         F1,
45911                                                                                                       LL[bVar"b'21"]),
45912                                                                                                   LW(1,
45913                                                                                                      1)),
45914                                                                                                Call
45915                                                                                                  ("Load",
45916                                                                                                   CTy"instruction",
45917                                                                                                   Call
45918                                                                                                     ("LoadHalf",
45919                                                                                                      CTy"Load",
45920                                                                                                      TP[bVar"unsigned",
45921                                                                                                         bVar"add",
45922                                                                                                         bVar"index",
45923                                                                                                         bVar"wback",
45924                                                                                                         Var("Rt",
45925                                                                                                             F4),
45926                                                                                                         Var("Rn",
45927                                                                                                             F4),
45928                                                                                                         Var("m",
45929                                                                                                             CTy"offset1")])),
45930                                                                                                Call
45931                                                                                                  ("Load",
45932                                                                                                   CTy"instruction",
45933                                                                                                   Call
45934                                                                                                     ("LoadByte",
45935                                                                                                      CTy"Load",
45936                                                                                                      TP[bVar"unsigned",
45937                                                                                                         bVar"add",
45938                                                                                                         bVar"index",
45939                                                                                                         bVar"wback",
45940                                                                                                         Var("Rt",
45941                                                                                                             F4),
45942                                                                                                         Var("Rn",
45943                                                                                                             F4),
45944                                                                                                         Var("m",
45945                                                                                                             CTy"offset1")])))))))),
45946                                                                        qTy))),
45947                                                               Call
45948                                                                 ("Skip",
45949                                                                  ATy(qTy,
45950                                                                      PTy(CTy"instruction",
45951                                                                          qTy)),
45952                                                                  LU))))))))),
45953                                      (Bop(And,Mop(Not,bVar"b'24"),
45954                                           Bop(And,Mop(Not,bVar"b'23"),
45955                                               Bop(And,bVar"b'15",
45956                                                   Bop(And,bVar"b'14",
45957                                                       Bop(And,bVar"b'13",
45958                                                           Bop(And,
45959                                                               bVar"b'12",
45960                                                               Bop(And,
45961                                                                   bVar"b'11",
45962                                                                   Bop(And,
45963                                                                       bVar"b'10",
45964                                                                       Bop(And,
45965                                                                           Mop(Not,
45966                                                                               bVar"b'9"),
45967                                                                           Mop(Not,
45968                                                                               bVar"b'8")))))))))),
45969                                       Let(Var("W",F1),
45970                                           Mop(Cast F1,LL[bVar"b'21"]),
45971                                           MB(Call
45972                                                ("ThumbCondition",
45973                                                 ATy(qTy,PTy(F4,qTy)),LU),
45974                                              Close
45975                                                (Var("v",F4),
45976                                                 MB(MB(MB(ITE(EQ(Var("W",
45977                                                                     F1),
45978                                                                 LW(1,1)),
45979                                                              Call
45980                                                                ("HaveMPExt",
45981                                                                 ATy(qTy,
45982                                                                     PTy(bTy,
45983                                                                         qTy)),
45984                                                                 LU),
45985                                                              Call
45986                                                                ("HaveThumb2",
45987                                                                 ATy(qTy,
45988                                                                     PTy(bTy,
45989                                                                         qTy)),
45990                                                                 LU)),
45991                                                          Close
45992                                                            (bVar"v0",
45993                                                             MU(TP[Var("v",
45994                                                                       F4),
45995                                                                   bVar"v0"],
45996                                                                qTy))),
45997                                                       Close
45998                                                         (Var("v",
45999                                                              PTy(F4,bTy)),
46000                                                          Call
46001                                                            ("Take",
46002                                                             ATy(qTy,
46003                                                                 PTy(bTy,
46004                                                                     qTy)),
46005                                                             Var("v",
46006                                                                 PTy(F4,
46007                                                                     bTy))))),
46008                                                    Close
46009                                                      (bVar"b",
46010                                                       ITE(bVar"b",
46011                                                           MU(Call
46012                                                                ("Hint",
46013                                                                 CTy"instruction",
46014                                                                 Call
46015                                                                   ("PreloadData",
46016                                                                    CTy"Hint",
46017                                                                    TP[LF,
46018                                                                       EQ(Var("W",
46019                                                                              F1),
46020                                                                          LW(1,
46021                                                                             1)),
46022                                                                       Mop(Cast
46023                                                                             F4,
46024                                                                           LL[bVar"b'19",
46025                                                                              bVar"b'18",
46026                                                                              bVar"b'17",
46027                                                                              bVar"b'16"]),
46028                                                                       Call
46029                                                                         ("immediate_form1",
46030                                                                          CTy"offset1",
46031                                                                          Mop(Cast
46032                                                                                F32,
46033                                                                              Mop(Cast
46034                                                                                    F8,
46035                                                                                  LL[bVar"b'7",
46036                                                                                     bVar"b'6",
46037                                                                                     bVar"b'5",
46038                                                                                     bVar"b'4",
46039                                                                                     bVar"b'3",
46040                                                                                     bVar"b'2",
46041                                                                                     bVar"b'1",
46042                                                                                     bVar"b'0"])))])),
46043                                                              qTy),
46044                                                           Call
46045                                                             ("Skip",
46046                                                              ATy(qTy,
46047                                                                  PTy(CTy"instruction",
46048                                                                      qTy)),
46049                                                              LU)))))))),
46050                                      (Bop(And,bVar"b'24",
46051                                           Bop(And,Mop(Not,bVar"b'23"),
46052                                               Bop(And,
46053                                                   Mop(Not,bVar"b'21"),
46054                                                   Bop(And,bVar"b'15",
46055                                                       Bop(And,bVar"b'14",
46056                                                           Bop(And,
46057                                                               bVar"b'13",
46058                                                               Bop(And,
46059                                                                   bVar"b'12",
46060                                                                   Bop(And,
46061                                                                       bVar"b'11",
46062                                                                       Bop(And,
46063                                                                           bVar"b'10",
46064                                                                           Bop(And,
46065                                                                               Mop(Not,
46066                                                                                   bVar"b'9"),
46067                                                                               Mop(Not,
46068                                                                                   bVar"b'8"))))))))))),
46069                                       MB(Call
46070                                            ("ThumbCondition",
46071                                             ATy(qTy,PTy(F4,qTy)),LU),
46072                                          Close
46073                                            (Var("v",F4),
46074                                             MB(MB(MB(Call
46075                                                        ("ArchVersion",
46076                                                         ATy(qTy,
46077                                                             PTy(nTy,qTy)),
46078                                                         LU),
46079                                                      Close
46080                                                        (nVar"v0",
46081                                                         MB(MU(Bop(Ge,
46082                                                                   nVar"v0",
46083                                                                   LN 7),
46084                                                               qTy),
46085                                                            Close
46086                                                              (bVar"v0",
46087                                                               MU(TP[Var("v",
46088                                                                         F4),
46089                                                                     bVar"v0"],
46090                                                                  qTy))))),
46091                                                   Close
46092                                                     (Var("v",PTy(F4,bTy)),
46093                                                      Call
46094                                                        ("Take",
46095                                                         ATy(qTy,
46096                                                             PTy(bTy,qTy)),
46097                                                         Var("v",
46098                                                             PTy(F4,bTy))))),
46099                                                Close
46100                                                  (bVar"b",
46101                                                   ITE(bVar"b",
46102                                                       MU(Call
46103                                                            ("Hint",
46104                                                             CTy"instruction",
46105                                                             Call
46106                                                               ("PreloadInstruction",
46107                                                                CTy"Hint",
46108                                                                TP[LF,
46109                                                                   Mop(Cast
46110                                                                         F4,
46111                                                                       LL[bVar"b'19",
46112                                                                          bVar"b'18",
46113                                                                          bVar"b'17",
46114                                                                          bVar"b'16"]),
46115                                                                   Call
46116                                                                     ("immediate_form1",
46117                                                                      CTy"offset1",
46118                                                                      Mop(Cast
46119                                                                            F32,
46120                                                                          Mop(Cast
46121                                                                                F8,
46122                                                                              LL[bVar"b'7",
46123                                                                                 bVar"b'6",
46124                                                                                 bVar"b'5",
46125                                                                                 bVar"b'4",
46126                                                                                 bVar"b'3",
46127                                                                                 bVar"b'2",
46128                                                                                 bVar"b'1",
46129                                                                                 bVar"b'0"])))])),
46130                                                          qTy),
46131                                                       Call
46132                                                         ("Skip",
46133                                                          ATy(qTy,
46134                                                              PTy(CTy"instruction",
46135                                                                  qTy)),LU))))))),
46136                                      (Bop(And,Mop(Not,bVar"b'23"),
46137                                           Bop(And,bVar"b'11",
46138                                               Bop(And,
46139                                                   Mop(Not,bVar"b'10"),
46140                                                   Mop(Not,bVar"b'8")))),
46141                                       MU(Call
46142                                            ("Undefined",CTy"instruction",
46143                                             LW(0,32)),qTy)),
46144                                      (Bop(And,Mop(Not,bVar"b'23"),
46145                                           Bop(And,bVar"b'11",
46146                                               Bop(And,bVar"b'10",
46147                                                   Bop(And,bVar"b'9",
46148                                                       Mop(Not,bVar"b'8"))))),
46149                                       Let(Var("Rn",F4),
46150                                           Mop(Cast F4,
46151                                               LL[bVar"b'19",bVar"b'18",
46152                                                  bVar"b'17",bVar"b'16"]),
46153                                           Let(Var("Rt",F4),
46154                                               Mop(Cast F4,
46155                                                   LL[bVar"b'15",
46156                                                      bVar"b'14",
46157                                                      bVar"b'13",
46158                                                      bVar"b'12"]),
46159                                               MB(Call
46160                                                    ("ThumbCondition",
46161                                                     ATy(qTy,PTy(F4,qTy)),
46162                                                     LU),
46163                                                  Close
46164                                                    (Var("v",F4),
46165                                                     MB(MB(MB(Call
46166                                                                ("HaveThumb2",
46167                                                                 ATy(qTy,
46168                                                                     PTy(bTy,
46169                                                                         qTy)),
46170                                                                 LU),
46171                                                              Close
46172                                                                (bVar"v0",
46173                                                                 MU(TP[Var("v",
46174                                                                           F4),
46175                                                                       bVar"v0"],
46176                                                                    qTy))),
46177                                                           Close
46178                                                             (Var("v",
46179                                                                  PTy(F4,
46180                                                                      bTy)),
46181                                                              Call
46182                                                                ("Take",
46183                                                                 ATy(qTy,
46184                                                                     PTy(bTy,
46185                                                                         qTy)),
46186                                                                 Var("v",
46187                                                                     PTy(F4,
46188                                                                         bTy))))),
46189                                                        Close
46190                                                          (bVar"b",
46191                                                           ITE(bVar"b",
46192                                                               MB(ITE(Bop(In,
46193                                                                          Var("Rt",
46194                                                                              F4),
46195                                                                          SL[LW(13,
46196                                                                                4),
46197                                                                             LW(15,
46198                                                                                4)]),
46199                                                                      Call
46200                                                                        ("DECODE_UNPREDICTABLE",
46201                                                                         ATy(qTy,
46202                                                                             PTy(uTy,
46203                                                                                 qTy)),
46204                                                                         TP[Var("mc",
46205                                                                                CTy"MachineCode"),
46206                                                                            LS
46207                                                                             "LoadUnprivileged"]),
46208                                                                      MU(LU,
46209                                                                         qTy)),
46210                                                                  Close
46211                                                                    (AVar
46212                                                                       uTy,
46213                                                                     MU(Let(bVar"add",
46214                                                                            LT,
46215                                                                            Let(bVar"postindex",
46216                                                                                LF,
46217                                                                                Let(bVar"unsigned",
46218                                                                                    EQ(Mop(Cast
46219                                                                                             F1,
46220                                                                                           LL[bVar"b'24"]),
46221                                                                                       LW(0,
46222                                                                                          1)),
46223                                                                                    Let(Var("imm32",
46224                                                                                            F32),
46225                                                                                        Mop(Cast
46226                                                                                              F32,
46227                                                                                            Mop(Cast
46228                                                                                                  F8,
46229                                                                                                LL[bVar"b'7",
46230                                                                                                   bVar"b'6",
46231                                                                                                   bVar"b'5",
46232                                                                                                   bVar"b'4",
46233                                                                                                   bVar"b'3",
46234                                                                                                   bVar"b'2",
46235                                                                                                   bVar"b'1",
46236                                                                                                   bVar"b'0"])),
46237                                                                                        Let(Var("m",
46238                                                                                                CTy"offset2"),
46239                                                                                            Call
46240                                                                                              ("immediate_form2",
46241                                                                                               CTy"offset2",
46242                                                                                               Var("imm32",
46243                                                                                                   F32)),
46244                                                                                            ITB([(EQ(Mop(Cast
46245                                                                                                           F1,
46246                                                                                                         LL[bVar"b'21"]),
46247                                                                                                     LW(1,
46248                                                                                                        1)),
46249                                                                                                  Call
46250                                                                                                    ("Load",
46251                                                                                                     CTy"instruction",
46252                                                                                                     Call
46253                                                                                                       ("LoadHalfUnprivileged",
46254                                                                                                        CTy"Load",
46255                                                                                                        TP[bVar"unsigned",
46256                                                                                                           bVar"add",
46257                                                                                                           bVar"postindex",
46258                                                                                                           Var("Rt",
46259                                                                                                               F4),
46260                                                                                                           Var("Rn",
46261                                                                                                               F4),
46262                                                                                                           Var("m",
46263                                                                                                               CTy"offset2")]))),
46264                                                                                                 (bVar"unsigned",
46265                                                                                                  Call
46266                                                                                                    ("Load",
46267                                                                                                     CTy"instruction",
46268                                                                                                     Call
46269                                                                                                       ("LoadByteUnprivileged",
46270                                                                                                        CTy"Load",
46271                                                                                                        TP[bVar"add",
46272                                                                                                           bVar"postindex",
46273                                                                                                           Var("Rt",
46274                                                                                                               F4),
46275                                                                                                           Var("Rn",
46276                                                                                                               F4),
46277                                                                                                           Call
46278                                                                                                             ("immediate_form1",
46279                                                                                                              CTy"offset1",
46280                                                                                                              Var("imm32",
46281                                                                                                                  F32))])))],
46282                                                                                                Call
46283                                                                                                  ("Load",
46284                                                                                                   CTy"instruction",
46285                                                                                                   Call
46286                                                                                                     ("LoadSignedByteUnprivileged",
46287                                                                                                      CTy"Load",
46288                                                                                                      TP[bVar"add",
46289                                                                                                         bVar"postindex",
46290                                                                                                         Var("Rt",
46291                                                                                                             F4),
46292                                                                                                         Var("Rn",
46293                                                                                                             F4),
46294                                                                                                         Var("m",
46295                                                                                                             CTy"offset2")])))))))),
46296                                                                        qTy))),
46297                                                               Call
46298                                                                 ("Skip",
46299                                                                  ATy(qTy,
46300                                                                      PTy(CTy"instruction",
46301                                                                          qTy)),
46302                                                                  LU))))))))),
46303                                      (Bop(And,bVar"b'24",
46304                                           Bop(And,Mop(Not,bVar"b'23"),
46305                                               Bop(And,bVar"b'21",
46306                                                   Bop(And,bVar"b'15",
46307                                                       Bop(And,bVar"b'14",
46308                                                           Bop(And,
46309                                                               bVar"b'13",
46310                                                               Bop(And,
46311                                                                   bVar"b'12",
46312                                                                   Bop(And,
46313                                                                       bVar"b'11",
46314                                                                       Bop(And,
46315                                                                           bVar"b'10",
46316                                                                           Bop(And,
46317                                                                               Mop(Not,
46318                                                                                   bVar"b'9"),
46319                                                                               Mop(Not,
46320                                                                                   bVar"b'8"))))))))))),
46321                                       MU(Const
46322                                            ("NoOperation",
46323                                             CTy"instruction"),qTy)),
46324                                      (Bop(And,Mop(Not,bVar"b'23"),
46325                                           bVar"b'11"),
46326                                       Let(Var("Rn",F4),
46327                                           Mop(Cast F4,
46328                                               LL[bVar"b'19",bVar"b'18",
46329                                                  bVar"b'17",bVar"b'16"]),
46330                                           Let(Var("Rt",F4),
46331                                               Mop(Cast F4,
46332                                                   LL[bVar"b'15",
46333                                                      bVar"b'14",
46334                                                      bVar"b'13",
46335                                                      bVar"b'12"]),
46336                                               MB(Call
46337                                                    ("ThumbCondition",
46338                                                     ATy(qTy,PTy(F4,qTy)),
46339                                                     LU),
46340                                                  Close
46341                                                    (Var("v",F4),
46342                                                     MB(MB(MB(Call
46343                                                                ("HaveThumb2",
46344                                                                 ATy(qTy,
46345                                                                     PTy(bTy,
46346                                                                         qTy)),
46347                                                                 LU),
46348                                                              Close
46349                                                                (bVar"v0",
46350                                                                 MU(TP[Var("v",
46351                                                                           F4),
46352                                                                       bVar"v0"],
46353                                                                    qTy))),
46354                                                           Close
46355                                                             (Var("v",
46356                                                                  PTy(F4,
46357                                                                      bTy)),
46358                                                              Call
46359                                                                ("Take",
46360                                                                 ATy(qTy,
46361                                                                     PTy(bTy,
46362                                                                         qTy)),
46363                                                                 Var("v",
46364                                                                     PTy(F4,
46365                                                                         bTy))))),
46366                                                        Close
46367                                                          (bVar"b",
46368                                                           ITE(bVar"b",
46369                                                               Let(bVar"wback",
46370                                                                   EQ(Mop(Cast
46371                                                                            F1,
46372                                                                          LL[bVar"b'8"]),
46373                                                                      LW(1,
46374                                                                         1)),
46375                                                                   MB(ITE(Bop(Or,
46376                                                                              Bop(Or,
46377                                                                                  EQ(Var("Rt",
46378                                                                                         F4),
46379                                                                                     LW(13,
46380                                                                                        4)),
46381                                                                                  Bop(And,
46382                                                                                      EQ(Var("Rt",
46383                                                                                             F4),
46384                                                                                         LW(15,
46385                                                                                            4)),
46386                                                                                      bVar"wback")),
46387                                                                              Bop(And,
46388                                                                                  bVar"wback",
46389                                                                                  EQ(Var("Rn",
46390                                                                                         F4),
46391                                                                                     Var("Rt",
46392                                                                                         F4)))),
46393                                                                          Call
46394                                                                            ("DECODE_UNPREDICTABLE",
46395                                                                             ATy(qTy,
46396                                                                                 PTy(uTy,
46397                                                                                     qTy)),
46398                                                                             TP[Var("mc",
46399                                                                                    CTy"MachineCode"),
46400                                                                                LS
46401                                                                                 "Load (immediate)"]),
46402                                                                          MU(LU,
46403                                                                             qTy)),
46404                                                                      Close
46405                                                                        (AVar
46406                                                                           uTy,
46407                                                                         MU(Let(bVar"add",
46408                                                                                EQ(Mop(Cast
46409                                                                                         F1,
46410                                                                                       LL[bVar"b'9"]),
46411                                                                                   LW(1,
46412                                                                                      1)),
46413                                                                                Let(bVar"index",
46414                                                                                    EQ(Mop(Cast
46415                                                                                             F1,
46416                                                                                           LL[bVar"b'10"]),
46417                                                                                       LW(1,
46418                                                                                          1)),
46419                                                                                    Let(bVar"unsigned",
46420                                                                                        EQ(Mop(Cast
46421                                                                                                 F1,
46422                                                                                               LL[bVar"b'24"]),
46423                                                                                           LW(0,
46424                                                                                              1)),
46425                                                                                        Let(Var("m",
46426                                                                                                CTy"offset1"),
46427                                                                                            Call
46428                                                                                              ("immediate_form1",
46429                                                                                               CTy"offset1",
46430                                                                                               Mop(Cast
46431                                                                                                     F32,
46432                                                                                                   Mop(Cast
46433                                                                                                         F8,
46434                                                                                                       LL[bVar"b'7",
46435                                                                                                          bVar"b'6",
46436                                                                                                          bVar"b'5",
46437                                                                                                          bVar"b'4",
46438                                                                                                          bVar"b'3",
46439                                                                                                          bVar"b'2",
46440                                                                                                          bVar"b'1",
46441                                                                                                          bVar"b'0"]))),
46442                                                                                            ITE(EQ(Mop(Cast
46443                                                                                                         F1,
46444                                                                                                       LL[bVar"b'21"]),
46445                                                                                                   LW(1,
46446                                                                                                      1)),
46447                                                                                                Call
46448                                                                                                  ("Load",
46449                                                                                                   CTy"instruction",
46450                                                                                                   Call
46451                                                                                                     ("LoadHalf",
46452                                                                                                      CTy"Load",
46453                                                                                                      TP[bVar"unsigned",
46454                                                                                                         bVar"add",
46455                                                                                                         bVar"index",
46456                                                                                                         bVar"wback",
46457                                                                                                         Var("Rt",
46458                                                                                                             F4),
46459                                                                                                         Var("Rn",
46460                                                                                                             F4),
46461                                                                                                         Var("m",
46462                                                                                                             CTy"offset1")])),
46463                                                                                                Call
46464                                                                                                  ("Load",
46465                                                                                                   CTy"instruction",
46466                                                                                                   Call
46467                                                                                                     ("LoadByte",
46468                                                                                                      CTy"Load",
46469                                                                                                      TP[bVar"unsigned",
46470                                                                                                         bVar"add",
46471                                                                                                         bVar"index",
46472                                                                                                         bVar"wback",
46473                                                                                                         Var("Rt",
46474                                                                                                             F4),
46475                                                                                                         Var("Rn",
46476                                                                                                             F4),
46477                                                                                                         Var("m",
46478                                                                                                             CTy"offset1")]))))))),
46479                                                                            qTy)))),
46480                                                               Call
46481                                                                 ("Skip",
46482                                                                  ATy(qTy,
46483                                                                      PTy(CTy"instruction",
46484                                                                          qTy)),
46485                                                                  LU))))))))),
46486                                      (Bop(And,Mop(Not,bVar"b'24"),
46487                                           Bop(And,Mop(Not,bVar"b'23"),
46488                                               Bop(And,bVar"b'15",
46489                                                   Bop(And,bVar"b'14",
46490                                                       Bop(And,bVar"b'13",
46491                                                           Bop(And,
46492                                                               bVar"b'12",
46493                                                               Bop(And,
46494                                                                   Mop(Not,
46495                                                                       bVar"b'11"),
46496                                                                   Bop(And,
46497                                                                       Mop(Not,
46498                                                                           bVar"b'10"),
46499                                                                       Bop(And,
46500                                                                           Mop(Not,
46501                                                                               bVar"b'9"),
46502                                                                           Bop(And,
46503                                                                               Mop(Not,
46504                                                                                   bVar"b'8"),
46505                                                                               Bop(And,
46506                                                                                   Mop(Not,
46507                                                                                       bVar"b'7"),
46508                                                                                   Mop(Not,
46509                                                                                       bVar"b'6")))))))))))),
46510                                       Let(Var("W",F1),
46511                                           Mop(Cast F1,LL[bVar"b'21"]),
46512                                           Let(Var("Rm",F4),
46513                                               Mop(Cast F4,
46514                                                   LL[bVar"b'3",bVar"b'2",
46515                                                      bVar"b'1",bVar"b'0"]),
46516                                               MB(Call
46517                                                    ("ThumbCondition",
46518                                                     ATy(qTy,PTy(F4,qTy)),
46519                                                     LU),
46520                                                  Close
46521                                                    (Var("v",F4),
46522                                                     MB(MB(MB(ITE(EQ(Var("W",
46523                                                                         F1),
46524                                                                     LW(1,
46525                                                                        1)),
46526                                                                  Call
46527                                                                    ("HaveMPExt",
46528                                                                     ATy(qTy,
46529                                                                         PTy(bTy,
46530                                                                             qTy)),
46531                                                                     LU),
46532                                                                  Call
46533                                                                    ("HaveThumb2",
46534                                                                     ATy(qTy,
46535                                                                         PTy(bTy,
46536                                                                             qTy)),
46537                                                                     LU)),
46538                                                              Close
46539                                                                (bVar"v0",
46540                                                                 MU(TP[Var("v",
46541                                                                           F4),
46542                                                                       bVar"v0"],
46543                                                                    qTy))),
46544                                                           Close
46545                                                             (Var("v",
46546                                                                  PTy(F4,
46547                                                                      bTy)),
46548                                                              Call
46549                                                                ("Take",
46550                                                                 ATy(qTy,
46551                                                                     PTy(bTy,
46552                                                                         qTy)),
46553                                                                 Var("v",
46554                                                                     PTy(F4,
46555                                                                         bTy))))),
46556                                                        Close
46557                                                          (bVar"b",
46558                                                           ITE(bVar"b",
46559                                                               MB(ITE(Bop(In,
46560                                                                          Var("Rm",
46561                                                                              F4),
46562                                                                          SL[LW(13,
46563                                                                                4),
46564                                                                             LW(15,
46565                                                                                4)]),
46566                                                                      Call
46567                                                                        ("DECODE_UNPREDICTABLE",
46568                                                                         ATy(qTy,
46569                                                                             PTy(uTy,
46570                                                                                 qTy)),
46571                                                                         TP[Var("mc",
46572                                                                                CTy"MachineCode"),
46573                                                                            LS
46574                                                                             "PreloadData"]),
46575                                                                      MU(LU,
46576                                                                         qTy)),
46577                                                                  Close
46578                                                                    (AVar
46579                                                                       uTy,
46580                                                                     MU(Call
46581                                                                          ("Hint",
46582                                                                           CTy"instruction",
46583                                                                           Call
46584                                                                             ("PreloadData",
46585                                                                              CTy"Hint",
46586                                                                              TP[LT,
46587                                                                                 EQ(Var("W",
46588                                                                                        F1),
46589                                                                                    LW(1,
46590                                                                                       1)),
46591                                                                                 Mop(Cast
46592                                                                                       F4,
46593                                                                                     LL[bVar"b'19",
46594                                                                                        bVar"b'18",
46595                                                                                        bVar"b'17",
46596                                                                                        bVar"b'16"]),
46597                                                                                 Call
46598                                                                                   ("register_form1",
46599                                                                                    CTy"offset1",
46600                                                                                    TP[Var("Rm",
46601                                                                                           F4),
46602                                                                                       LC("SRType_LSL",
46603                                                                                          CTy"SRType"),
46604                                                                                       Mop(Cast
46605                                                                                             nTy,
46606                                                                                           Mop(Cast
46607                                                                                                 (FTy 2),
46608                                                                                               LL[bVar"b'5",
46609                                                                                                  bVar"b'4"]))])])),
46610                                                                        qTy))),
46611                                                               Call
46612                                                                 ("Skip",
46613                                                                  ATy(qTy,
46614                                                                      PTy(CTy"instruction",
46615                                                                          qTy)),
46616                                                                  LU))))))))),
46617                                      (Bop(And,bVar"b'24",
46618                                           Bop(And,Mop(Not,bVar"b'23"),
46619                                               Bop(And,
46620                                                   Mop(Not,bVar"b'21"),
46621                                                   Bop(And,bVar"b'15",
46622                                                       Bop(And,bVar"b'14",
46623                                                           Bop(And,
46624                                                               bVar"b'13",
46625                                                               Bop(And,
46626                                                                   bVar"b'12",
46627                                                                   Bop(And,
46628                                                                       Mop(Not,
46629                                                                           bVar"b'11"),
46630                                                                       Bop(And,
46631                                                                           Mop(Not,
46632                                                                               bVar"b'10"),
46633                                                                           Bop(And,
46634                                                                               Mop(Not,
46635                                                                                   bVar"b'9"),
46636                                                                               Bop(And,
46637                                                                                   Mop(Not,
46638                                                                                       bVar"b'8"),
46639                                                                                   Bop(And,
46640                                                                                       Mop(Not,
46641                                                                                           bVar"b'7"),
46642                                                                                       Mop(Not,
46643                                                                                           bVar"b'6"))))))))))))),
46644                                       Let(Var("Rm",F4),
46645                                           Mop(Cast F4,
46646                                               LL[bVar"b'3",bVar"b'2",
46647                                                  bVar"b'1",bVar"b'0"]),
46648                                           MB(Call
46649                                                ("ThumbCondition",
46650                                                 ATy(qTy,PTy(F4,qTy)),LU),
46651                                              Close
46652                                                (Var("v",F4),
46653                                                 MB(MB(MB(Call
46654                                                            ("ArchVersion",
46655                                                             ATy(qTy,
46656                                                                 PTy(nTy,
46657                                                                     qTy)),
46658                                                             LU),
46659                                                          Close
46660                                                            (nVar"v0",
46661                                                             MB(MU(Bop(Ge,
46662                                                                       nVar"v0",
46663                                                                       LN
46664                                                                        7),
46665                                                                   qTy),
46666                                                                Close
46667                                                                  (bVar"v0",
46668                                                                   MU(TP[Var("v",
46669                                                                             F4),
46670                                                                         bVar"v0"],
46671                                                                      qTy))))),
46672                                                       Close
46673                                                         (Var("v",
46674                                                              PTy(F4,bTy)),
46675                                                          Call
46676                                                            ("Take",
46677                                                             ATy(qTy,
46678                                                                 PTy(bTy,
46679                                                                     qTy)),
46680                                                             Var("v",
46681                                                                 PTy(F4,
46682                                                                     bTy))))),
46683                                                    Close
46684                                                      (bVar"b",
46685                                                       ITE(bVar"b",
46686                                                           MB(ITE(Bop(In,
46687                                                                      Var("Rm",
46688                                                                          F4),
46689                                                                      SL[LW(13,
46690                                                                            4),
46691                                                                         LW(15,
46692                                                                            4)]),
46693                                                                  Call
46694                                                                    ("DECODE_UNPREDICTABLE",
46695                                                                     ATy(qTy,
46696                                                                         PTy(uTy,
46697                                                                             qTy)),
46698                                                                     TP[Var("mc",
46699                                                                            CTy"MachineCode"),
46700                                                                        LS
46701                                                                         "PreloadInstruction"]),
46702                                                                  MU(LU,
46703                                                                     qTy)),
46704                                                              Close
46705                                                                (AVar uTy,
46706                                                                 MU(Call
46707                                                                      ("Hint",
46708                                                                       CTy"instruction",
46709                                                                       Call
46710                                                                         ("PreloadInstruction",
46711                                                                          CTy"Hint",
46712                                                                          TP[LT,
46713                                                                             Mop(Cast
46714                                                                                   F4,
46715                                                                                 LL[bVar"b'19",
46716                                                                                    bVar"b'18",
46717                                                                                    bVar"b'17",
46718                                                                                    bVar"b'16"]),
46719                                                                             Call
46720                                                                               ("register_form1",
46721                                                                                CTy"offset1",
46722                                                                                TP[Var("Rm",
46723                                                                                       F4),
46724                                                                                   LC("SRType_LSL",
46725                                                                                      CTy"SRType"),
46726                                                                                   Mop(Cast
46727                                                                                         nTy,
46728                                                                                       Mop(Cast
46729                                                                                             (FTy 2),
46730                                                                                           LL[bVar"b'5",
46731                                                                                              bVar"b'4"]))])])),
46732                                                                    qTy))),
46733                                                           Call
46734                                                             ("Skip",
46735                                                              ATy(qTy,
46736                                                                  PTy(CTy"instruction",
46737                                                                      qTy)),
46738                                                              LU)))))))),
46739                                      (Bop(And,bVar"b'24",
46740                                           Bop(And,Mop(Not,bVar"b'23"),
46741                                               Bop(And,bVar"b'21",
46742                                                   Bop(And,bVar"b'15",
46743                                                       Bop(And,bVar"b'14",
46744                                                           Bop(And,
46745                                                               bVar"b'13",
46746                                                               Bop(And,
46747                                                                   bVar"b'12",
46748                                                                   Bop(And,
46749                                                                       Mop(Not,
46750                                                                           bVar"b'11"),
46751                                                                       Bop(And,
46752                                                                           Mop(Not,
46753                                                                               bVar"b'10"),
46754                                                                           Bop(And,
46755                                                                               Mop(Not,
46756                                                                                   bVar"b'9"),
46757                                                                               Bop(And,
46758                                                                                   Mop(Not,
46759                                                                                       bVar"b'8"),
46760                                                                                   Bop(And,
46761                                                                                       Mop(Not,
46762                                                                                           bVar"b'7"),
46763                                                                                       Mop(Not,
46764                                                                                           bVar"b'6"))))))))))))),
46765                                       MU(Const
46766                                            ("NoOperation",
46767                                             CTy"instruction"),qTy)),
46768                                      (Bop(And,Mop(Not,bVar"b'23"),
46769                                           Bop(And,Mop(Not,bVar"b'11"),
46770                                               Bop(And,
46771                                                   Mop(Not,bVar"b'10"),
46772                                                   Bop(And,
46773                                                       Mop(Not,bVar"b'9"),
46774                                                       Bop(And,
46775                                                           Mop(Not,
46776                                                               bVar"b'8"),
46777                                                           Bop(And,
46778                                                               Mop(Not,
46779                                                                   bVar"b'7"),
46780                                                               Mop(Not,
46781                                                                   bVar"b'6"))))))),
46782                                       Let(Var("Rn",F4),
46783                                           Mop(Cast F4,
46784                                               LL[bVar"b'19",bVar"b'18",
46785                                                  bVar"b'17",bVar"b'16"]),
46786                                           Let(Var("Rm",F4),
46787                                               Mop(Cast F4,
46788                                                   LL[bVar"b'3",bVar"b'2",
46789                                                      bVar"b'1",bVar"b'0"]),
46790                                               Let(Var("Rt",F4),
46791                                                   Mop(Cast F4,
46792                                                       LL[bVar"b'15",
46793                                                          bVar"b'14",
46794                                                          bVar"b'13",
46795                                                          bVar"b'12"]),
46796                                                   MB(Call
46797                                                        ("ThumbCondition",
46798                                                         ATy(qTy,
46799                                                             PTy(F4,qTy)),
46800                                                         LU),
46801                                                      Close
46802                                                        (Var("v",F4),
46803                                                         MB(MB(MB(Call
46804                                                                    ("HaveThumb2",
46805                                                                     ATy(qTy,
46806                                                                         PTy(bTy,
46807                                                                             qTy)),
46808                                                                     LU),
46809                                                                  Close
46810                                                                    (bVar"v0",
46811                                                                     MU(TP[Var("v",
46812                                                                               F4),
46813                                                                           bVar"v0"],
46814                                                                        qTy))),
46815                                                               Close
46816                                                                 (Var("v",
46817                                                                      PTy(F4,
46818                                                                          bTy)),
46819                                                                  Call
46820                                                                    ("Take",
46821                                                                     ATy(qTy,
46822                                                                         PTy(bTy,
46823                                                                             qTy)),
46824                                                                     Var("v",
46825                                                                         PTy(F4,
46826                                                                             bTy))))),
46827                                                            Close
46828                                                              (bVar"b",
46829                                                               ITE(bVar"b",
46830                                                                   MB(ITE(Bop(Or,
46831                                                                              EQ(Var("Rt",
46832                                                                                     F4),
46833                                                                                 LW(13,
46834                                                                                    4)),
46835                                                                              Bop(In,
46836                                                                                  Var("Rm",
46837                                                                                      F4),
46838                                                                                  SL[LW(13,
46839                                                                                        4),
46840                                                                                     LW(15,
46841                                                                                        4)])),
46842                                                                          Call
46843                                                                            ("DECODE_UNPREDICTABLE",
46844                                                                             ATy(qTy,
46845                                                                                 PTy(uTy,
46846                                                                                     qTy)),
46847                                                                             TP[Var("mc",
46848                                                                                    CTy"MachineCode"),
46849                                                                                LS
46850                                                                                 "Load (register)"]),
46851                                                                          MU(LU,
46852                                                                             qTy)),
46853                                                                      Close
46854                                                                        (AVar
46855                                                                           uTy,
46856                                                                         MU(Let(bVar"add",
46857                                                                                LT,
46858                                                                                Let(bVar"index",
46859                                                                                    LT,
46860                                                                                    Let(bVar"wback",
46861                                                                                        LF,
46862                                                                                        Let(bVar"unsigned",
46863                                                                                            EQ(Mop(Cast
46864                                                                                                     F1,
46865                                                                                                   LL[bVar"b'24"]),
46866                                                                                               LW(0,
46867                                                                                                  1)),
46868                                                                                            Let(Var("m",
46869                                                                                                    CTy"offset1"),
46870                                                                                                Call
46871                                                                                                  ("register_form1",
46872                                                                                                   CTy"offset1",
46873                                                                                                   TP[Var("Rm",
46874                                                                                                          F4),
46875                                                                                                      LC("SRType_LSL",
46876                                                                                                         CTy"SRType"),
46877                                                                                                      Mop(Cast
46878                                                                                                            nTy,
46879                                                                                                          Mop(Cast
46880                                                                                                                (FTy 2),
46881                                                                                                              LL[bVar"b'5",
46882                                                                                                                 bVar"b'4"]))]),
46883                                                                                                ITE(EQ(Mop(Cast
46884                                                                                                             F1,
46885                                                                                                           LL[bVar"b'21"]),
46886                                                                                                       LW(1,
46887                                                                                                          1)),
46888                                                                                                    Call
46889                                                                                                      ("Load",
46890                                                                                                       CTy"instruction",
46891                                                                                                       Call
46892                                                                                                         ("LoadHalf",
46893                                                                                                          CTy"Load",
46894                                                                                                          TP[bVar"unsigned",
46895                                                                                                             bVar"add",
46896                                                                                                             bVar"index",
46897                                                                                                             bVar"wback",
46898                                                                                                             Var("Rt",
46899                                                                                                                 F4),
46900                                                                                                             Var("Rn",
46901                                                                                                                 F4),
46902                                                                                                             Var("m",
46903                                                                                                                 CTy"offset1")])),
46904                                                                                                    Call
46905                                                                                                      ("Load",
46906                                                                                                       CTy"instruction",
46907                                                                                                       Call
46908                                                                                                         ("LoadByte",
46909                                                                                                          CTy"Load",
46910                                                                                                          TP[bVar"unsigned",
46911                                                                                                             bVar"add",
46912                                                                                                             bVar"index",
46913                                                                                                             bVar"wback",
46914                                                                                                             Var("Rt",
46915                                                                                                                 F4),
46916                                                                                                             Var("Rn",
46917                                                                                                                 F4),
46918                                                                                                             Var("m",
46919                                                                                                                 CTy"offset1")])))))))),
46920                                                                            qTy))),
46921                                                                   Call
46922                                                                     ("Skip",
46923                                                                      ATy(qTy,
46924                                                                          PTy(CTy"instruction",
46925                                                                              qTy)),
46926                                                                      LU))))))))))],
46927                                     Call
46928                                       ("UndefinedThumb",
46929                                        ATy(qTy,PTy(CTy"instruction",qTy)),
46930                                        LU)),
46931                                 Call
46932                                   ("UndefinedThumb",
46933                                    ATy(qTy,PTy(CTy"instruction",qTy)),LU))),
46934                            (Bop(And,bVar"b'31",
46935                                 Bop(And,bVar"b'30",
46936                                     Bop(And,bVar"b'29",
46937                                         Bop(And,Mop(Not,bVar"b'26"),
46938                                             Mop(Not,bVar"b'24"))))),
46939                             ITB([(Bop(And,Mop(Not,bVar"b'23"),
46940                                       Bop(And,Mop(Not,bVar"b'11"),
46941                                           Bop(And,Mop(Not,bVar"b'10"),
46942                                               Bop(And,Mop(Not,bVar"b'9"),
46943                                                   Bop(And,
46944                                                       Mop(Not,bVar"b'8"),
46945                                                       Bop(And,
46946                                                           Mop(Not,
46947                                                               bVar"b'7"),
46948                                                           Mop(Not,
46949                                                               bVar"b'6"))))))),
46950                                   Let(Var("Rn",F4),
46951                                       Mop(Cast F4,
46952                                           LL[bVar"b'19",bVar"b'18",
46953                                              bVar"b'17",bVar"b'16"]),
46954                                       Let(Var("Rm",F4),
46955                                           Mop(Cast F4,
46956                                               LL[bVar"b'3",bVar"b'2",
46957                                                  bVar"b'1",bVar"b'0"]),
46958                                           Let(Var("Rt",F4),
46959                                               Mop(Cast F4,
46960                                                   LL[bVar"b'15",
46961                                                      bVar"b'14",
46962                                                      bVar"b'13",
46963                                                      bVar"b'12"]),
46964                                               MB(Call
46965                                                    ("ThumbCondition",
46966                                                     ATy(qTy,PTy(F4,qTy)),
46967                                                     LU),
46968                                                  Close
46969                                                    (Var("v",F4),
46970                                                     MB(MB(MB(Call
46971                                                                ("HaveThumb2",
46972                                                                 ATy(qTy,
46973                                                                     PTy(bTy,
46974                                                                         qTy)),
46975                                                                 LU),
46976                                                              Close
46977                                                                (bVar"v0",
46978                                                                 MB(MU(Bop(And,
46979                                                                           Mop(Not,
46980                                                                               EQ(Var("Rn",
46981                                                                                      F4),
46982                                                                                  LW(15,
46983                                                                                     4))),
46984                                                                           bVar"v0"),
46985                                                                       qTy),
46986                                                                    Close
46987                                                                      (bVar"v0",
46988                                                                       MU(TP[Var("v",
46989                                                                                 F4),
46990                                                                             bVar"v0"],
46991                                                                          qTy))))),
46992                                                           Close
46993                                                             (Var("v",
46994                                                                  PTy(F4,
46995                                                                      bTy)),
46996                                                              Call
46997                                                                ("Take",
46998                                                                 ATy(qTy,
46999                                                                     PTy(bTy,
47000                                                                         qTy)),
47001                                                                 Var("v",
47002                                                                     PTy(F4,
47003                                                                         bTy))))),
47004                                                        Close
47005                                                          (bVar"b",
47006                                                           ITE(bVar"b",
47007                                                               MB(ITE(Bop(Or,
47008                                                                          Bop(In,
47009                                                                              Var("Rt",
47010                                                                                  F4),
47011                                                                              SL[LW(13,
47012                                                                                    4),
47013                                                                                 LW(15,
47014                                                                                    4)]),
47015                                                                          Bop(In,
47016                                                                              Var("Rm",
47017                                                                                  F4),
47018                                                                              SL[LW(13,
47019                                                                                    4),
47020                                                                                 LW(15,
47021                                                                                    4)])),
47022                                                                      Call
47023                                                                        ("DECODE_UNPREDICTABLE",
47024                                                                         ATy(qTy,
47025                                                                             PTy(uTy,
47026                                                                                 qTy)),
47027                                                                         TP[Var("mc",
47028                                                                                CTy"MachineCode"),
47029                                                                            LS
47030                                                                             "StoreByte/Half (register)"]),
47031                                                                      MU(LU,
47032                                                                         qTy)),
47033                                                                  Close
47034                                                                    (AVar
47035                                                                       uTy,
47036                                                                     MU(Let(bVar"add",
47037                                                                            LT,
47038                                                                            Let(bVar"index",
47039                                                                                LT,
47040                                                                                Let(bVar"wback",
47041                                                                                    LF,
47042                                                                                    Let(Var("m",
47043                                                                                            CTy"offset1"),
47044                                                                                        Call
47045                                                                                          ("register_form1",
47046                                                                                           CTy"offset1",
47047                                                                                           TP[Var("Rm",
47048                                                                                                  F4),
47049                                                                                              LC("SRType_LSL",
47050                                                                                                 CTy"SRType"),
47051                                                                                              Mop(Cast
47052                                                                                                    nTy,
47053                                                                                                  Mop(Cast
47054                                                                                                        (FTy 2),
47055                                                                                                      LL[bVar"b'5",
47056                                                                                                         bVar"b'4"]))]),
47057                                                                                        ITE(EQ(Mop(Cast
47058                                                                                                     F1,
47059                                                                                                   LL[bVar"b'21"]),
47060                                                                                               LW(1,
47061                                                                                                  1)),
47062                                                                                            Call
47063                                                                                              ("Store",
47064                                                                                               CTy"instruction",
47065                                                                                               Call
47066                                                                                                 ("StoreHalf",
47067                                                                                                  CTy"Store",
47068                                                                                                  TP[bVar"add",
47069                                                                                                     bVar"index",
47070                                                                                                     bVar"wback",
47071                                                                                                     Var("Rt",
47072                                                                                                         F4),
47073                                                                                                     Var("Rn",
47074                                                                                                         F4),
47075                                                                                                     Var("m",
47076                                                                                                         CTy"offset1")])),
47077                                                                                            Call
47078                                                                                              ("Store",
47079                                                                                               CTy"instruction",
47080                                                                                               Call
47081                                                                                                 ("StoreByte",
47082                                                                                                  CTy"Store",
47083                                                                                                  TP[bVar"add",
47084                                                                                                     bVar"index",
47085                                                                                                     bVar"wback",
47086                                                                                                     Var("Rt",
47087                                                                                                         F4),
47088                                                                                                     Var("Rn",
47089                                                                                                         F4),
47090                                                                                                     Var("m",
47091                                                                                                         CTy"offset1")]))))))),
47092                                                                        qTy))),
47093                                                               Call
47094                                                                 ("Skip",
47095                                                                  ATy(qTy,
47096                                                                      PTy(CTy"instruction",
47097                                                                          qTy)),
47098                                                                  LU)))))))))),
47099                                  (Bop(And,Mop(Not,bVar"b'23"),
47100                                       Bop(And,bVar"b'11",
47101                                           Bop(And,bVar"b'10",
47102                                               Bop(And,bVar"b'9",
47103                                                   Mop(Not,bVar"b'8"))))),
47104                                   Let(Var("Rn",F4),
47105                                       Mop(Cast F4,
47106                                           LL[bVar"b'19",bVar"b'18",
47107                                              bVar"b'17",bVar"b'16"]),
47108                                       Let(Var("Rt",F4),
47109                                           Mop(Cast F4,
47110                                               LL[bVar"b'15",bVar"b'14",
47111                                                  bVar"b'13",bVar"b'12"]),
47112                                           MB(Call
47113                                                ("ThumbCondition",
47114                                                 ATy(qTy,PTy(F4,qTy)),LU),
47115                                              Close
47116                                                (Var("v",F4),
47117                                                 MB(MB(MB(Call
47118                                                            ("HaveThumb2",
47119                                                             ATy(qTy,
47120                                                                 PTy(bTy,
47121                                                                     qTy)),
47122                                                             LU),
47123                                                          Close
47124                                                            (bVar"v0",
47125                                                             MB(MU(Bop(And,
47126                                                                       Mop(Not,
47127                                                                           EQ(Var("Rn",
47128                                                                                  F4),
47129                                                                              LW(15,
47130                                                                                 4))),
47131                                                                       bVar"v0"),
47132                                                                   qTy),
47133                                                                Close
47134                                                                  (bVar"v0",
47135                                                                   MU(TP[Var("v",
47136                                                                             F4),
47137                                                                         bVar"v0"],
47138                                                                      qTy))))),
47139                                                       Close
47140                                                         (Var("v",
47141                                                              PTy(F4,bTy)),
47142                                                          Call
47143                                                            ("Take",
47144                                                             ATy(qTy,
47145                                                                 PTy(bTy,
47146                                                                     qTy)),
47147                                                             Var("v",
47148                                                                 PTy(F4,
47149                                                                     bTy))))),
47150                                                    Close
47151                                                      (bVar"b",
47152                                                       ITE(bVar"b",
47153                                                           MB(ITE(Bop(In,
47154                                                                      Var("Rt",
47155                                                                          F4),
47156                                                                      SL[LW(13,
47157                                                                            4),
47158                                                                         LW(15,
47159                                                                            4)]),
47160                                                                  Call
47161                                                                    ("DECODE_UNPREDICTABLE",
47162                                                                     ATy(qTy,
47163                                                                         PTy(uTy,
47164                                                                             qTy)),
47165                                                                     TP[Var("mc",
47166                                                                            CTy"MachineCode"),
47167                                                                        LS
47168                                                                         "StoreByte/HalfUnprivileged"]),
47169                                                                  MU(LU,
47170                                                                     qTy)),
47171                                                              Close
47172                                                                (AVar uTy,
47173                                                                 MU(Let(bVar"add",
47174                                                                        LT,
47175                                                                        Let(bVar"postindex",
47176                                                                            LF,
47177                                                                            Let(Var("imm32",
47178                                                                                    F32),
47179                                                                                Mop(Cast
47180                                                                                      F32,
47181                                                                                    Mop(Cast
47182                                                                                          F8,
47183                                                                                        LL[bVar"b'7",
47184                                                                                           bVar"b'6",
47185                                                                                           bVar"b'5",
47186                                                                                           bVar"b'4",
47187                                                                                           bVar"b'3",
47188                                                                                           bVar"b'2",
47189                                                                                           bVar"b'1",
47190                                                                                           bVar"b'0"])),
47191                                                                                ITE(EQ(Mop(Cast
47192                                                                                             F1,
47193                                                                                           LL[bVar"b'21"]),
47194                                                                                       LW(1,
47195                                                                                          1)),
47196                                                                                    Call
47197                                                                                      ("Store",
47198                                                                                       CTy"instruction",
47199                                                                                       Call
47200                                                                                         ("StoreHalfUnprivileged",
47201                                                                                          CTy"Store",
47202                                                                                          TP[bVar"add",
47203                                                                                             bVar"postindex",
47204                                                                                             Var("Rt",
47205                                                                                                 F4),
47206                                                                                             Var("Rn",
47207                                                                                                 F4),
47208                                                                                             Call
47209                                                                                               ("immediate_form2",
47210                                                                                                CTy"offset2",
47211                                                                                                Var("imm32",
47212                                                                                                    F32))])),
47213                                                                                    Call
47214                                                                                      ("Store",
47215                                                                                       CTy"instruction",
47216                                                                                       Call
47217                                                                                         ("StoreByteUnprivileged",
47218                                                                                          CTy"Store",
47219                                                                                          TP[bVar"add",
47220                                                                                             bVar"postindex",
47221                                                                                             Var("Rt",
47222                                                                                                 F4),
47223                                                                                             Var("Rn",
47224                                                                                                 F4),
47225                                                                                             Call
47226                                                                                               ("immediate_form1",
47227                                                                                                CTy"offset1",
47228                                                                                                Var("imm32",
47229                                                                                                    F32))])))))),
47230                                                                    qTy))),
47231                                                           Call
47232                                                             ("Skip",
47233                                                              ATy(qTy,
47234                                                                  PTy(CTy"instruction",
47235                                                                      qTy)),
47236                                                              LU))))))))),
47237                                  (Bop(And,Mop(Not,bVar"b'23"),bVar"b'11"),
47238                                   Let(Var("Rn",F4),
47239                                       Mop(Cast F4,
47240                                           LL[bVar"b'19",bVar"b'18",
47241                                              bVar"b'17",bVar"b'16"]),
47242                                       Let(Var("W",F1),
47243                                           Mop(Cast F1,LL[bVar"b'8"]),
47244                                           Let(Var("P",F1),
47245                                               Mop(Cast F1,LL[bVar"b'10"]),
47246                                               Let(Var("Rt",F4),
47247                                                   Mop(Cast F4,
47248                                                       LL[bVar"b'15",
47249                                                          bVar"b'14",
47250                                                          bVar"b'13",
47251                                                          bVar"b'12"]),
47252                                                   MB(Call
47253                                                        ("ThumbCondition",
47254                                                         ATy(qTy,
47255                                                             PTy(F4,qTy)),
47256                                                         LU),
47257                                                      Close
47258                                                        (Var("v",F4),
47259                                                         MB(MB(MB(Call
47260                                                                    ("HaveThumb2",
47261                                                                     ATy(qTy,
47262                                                                         PTy(bTy,
47263                                                                             qTy)),
47264                                                                     LU),
47265                                                                  Close
47266                                                                    (bVar"v0",
47267                                                                     MB(MU(Bop(And,
47268                                                                               Bop(And,
47269                                                                                   Mop(Not,
47270                                                                                       EQ(Var("Rn",
47271                                                                                              F4),
47272                                                                                          LW(15,
47273                                                                                             4))),
47274                                                                                   Bop(Or,
47275                                                                                       EQ(Var("P",
47276                                                                                              F1),
47277                                                                                          LW(1,
47278                                                                                             1)),
47279                                                                                       EQ(Var("W",
47280                                                                                              F1),
47281                                                                                          LW(1,
47282                                                                                             1)))),
47283                                                                               bVar"v0"),
47284                                                                           qTy),
47285                                                                        Close
47286                                                                          (bVar"v0",
47287                                                                           MU(TP[Var("v",
47288                                                                                     F4),
47289                                                                                 bVar"v0"],
47290                                                                              qTy))))),
47291                                                               Close
47292                                                                 (Var("v",
47293                                                                      PTy(F4,
47294                                                                          bTy)),
47295                                                                  Call
47296                                                                    ("Take",
47297                                                                     ATy(qTy,
47298                                                                         PTy(bTy,
47299                                                                             qTy)),
47300                                                                     Var("v",
47301                                                                         PTy(F4,
47302                                                                             bTy))))),
47303                                                            Close
47304                                                              (bVar"b",
47305                                                               ITE(bVar"b",
47306                                                                   Let(bVar"wback",
47307                                                                       EQ(Var("W",
47308                                                                              F1),
47309                                                                          LW(1,
47310                                                                             1)),
47311                                                                       MB(ITE(Bop(Or,
47312                                                                                  Bop(In,
47313                                                                                      Var("Rt",
47314                                                                                          F4),
47315                                                                                      SL[LW(13,
47316                                                                                            4),
47317                                                                                         LW(15,
47318                                                                                            4)]),
47319                                                                                  Bop(And,
47320                                                                                      bVar"wback",
47321                                                                                      EQ(Var("Rn",
47322                                                                                             F4),
47323                                                                                         Var("Rt",
47324                                                                                             F4)))),
47325                                                                              Call
47326                                                                                ("DECODE_UNPREDICTABLE",
47327                                                                                 ATy(qTy,
47328                                                                                     PTy(uTy,
47329                                                                                         qTy)),
47330                                                                                 TP[Var("mc",
47331                                                                                        CTy"MachineCode"),
47332                                                                                    LS
47333                                                                                     "StoreByte/Half (immediate)"]),
47334                                                                              MU(LU,
47335                                                                                 qTy)),
47336                                                                          Close
47337                                                                            (AVar
47338                                                                               uTy,
47339                                                                             MU(Let(bVar"add",
47340                                                                                    EQ(Mop(Cast
47341                                                                                             F1,
47342                                                                                           LL[bVar"b'9"]),
47343                                                                                       LW(1,
47344                                                                                          1)),
47345                                                                                    Let(bVar"index",
47346                                                                                        EQ(Var("P",
47347                                                                                               F1),
47348                                                                                           LW(1,
47349                                                                                              1)),
47350                                                                                        Let(Var("m",
47351                                                                                                CTy"offset1"),
47352                                                                                            Call
47353                                                                                              ("immediate_form1",
47354                                                                                               CTy"offset1",
47355                                                                                               Mop(Cast
47356                                                                                                     F32,
47357                                                                                                   Mop(Cast
47358                                                                                                         F8,
47359                                                                                                       LL[bVar"b'7",
47360                                                                                                          bVar"b'6",
47361                                                                                                          bVar"b'5",
47362                                                                                                          bVar"b'4",
47363                                                                                                          bVar"b'3",
47364                                                                                                          bVar"b'2",
47365                                                                                                          bVar"b'1",
47366                                                                                                          bVar"b'0"]))),
47367                                                                                            ITE(EQ(Mop(Cast
47368                                                                                                         F1,
47369                                                                                                       LL[bVar"b'21"]),
47370                                                                                                   LW(1,
47371                                                                                                      1)),
47372                                                                                                Call
47373                                                                                                  ("Store",
47374                                                                                                   CTy"instruction",
47375                                                                                                   Call
47376                                                                                                     ("StoreHalf",
47377                                                                                                      CTy"Store",
47378                                                                                                      TP[bVar"add",
47379                                                                                                         bVar"index",
47380                                                                                                         bVar"wback",
47381                                                                                                         Var("Rt",
47382                                                                                                             F4),
47383                                                                                                         Var("Rn",
47384                                                                                                             F4),
47385                                                                                                         Var("m",
47386                                                                                                             CTy"offset1")])),
47387                                                                                                Call
47388                                                                                                  ("Store",
47389                                                                                                   CTy"instruction",
47390                                                                                                   Call
47391                                                                                                     ("StoreByte",
47392                                                                                                      CTy"Store",
47393                                                                                                      TP[bVar"add",
47394                                                                                                         bVar"index",
47395                                                                                                         bVar"wback",
47396                                                                                                         Var("Rt",
47397                                                                                                             F4),
47398                                                                                                         Var("Rn",
47399                                                                                                             F4),
47400                                                                                                         Var("m",
47401                                                                                                             CTy"offset1")])))))),
47402                                                                                qTy)))),
47403                                                                   Call
47404                                                                     ("Skip",
47405                                                                      ATy(qTy,
47406                                                                          PTy(CTy"instruction",
47407                                                                              qTy)),
47408                                                                      LU))))))))))),
47409                                  (bVar"b'23",
47410                                   Let(Var("Rn",F4),
47411                                       Mop(Cast F4,
47412                                           LL[bVar"b'19",bVar"b'18",
47413                                              bVar"b'17",bVar"b'16"]),
47414                                       Let(Var("Rt",F4),
47415                                           Mop(Cast F4,
47416                                               LL[bVar"b'15",bVar"b'14",
47417                                                  bVar"b'13",bVar"b'12"]),
47418                                           MB(Call
47419                                                ("ThumbCondition",
47420                                                 ATy(qTy,PTy(F4,qTy)),LU),
47421                                              Close
47422                                                (Var("v",F4),
47423                                                 MB(MB(MB(Call
47424                                                            ("HaveThumb2",
47425                                                             ATy(qTy,
47426                                                                 PTy(bTy,
47427                                                                     qTy)),
47428                                                             LU),
47429                                                          Close
47430                                                            (bVar"v0",
47431                                                             MB(MU(Bop(And,
47432                                                                       Mop(Not,
47433                                                                           EQ(Var("Rn",
47434                                                                                  F4),
47435                                                                              LW(15,
47436                                                                                 4))),
47437                                                                       bVar"v0"),
47438                                                                   qTy),
47439                                                                Close
47440                                                                  (bVar"v0",
47441                                                                   MU(TP[Var("v",
47442                                                                             F4),
47443                                                                         bVar"v0"],
47444                                                                      qTy))))),
47445                                                       Close
47446                                                         (Var("v",
47447                                                              PTy(F4,bTy)),
47448                                                          Call
47449                                                            ("Take",
47450                                                             ATy(qTy,
47451                                                                 PTy(bTy,
47452                                                                     qTy)),
47453                                                             Var("v",
47454                                                                 PTy(F4,
47455                                                                     bTy))))),
47456                                                    Close
47457                                                      (bVar"b",
47458                                                       ITE(bVar"b",
47459                                                           MB(ITE(Bop(In,
47460                                                                      Var("Rt",
47461                                                                          F4),
47462                                                                      SL[LW(13,
47463                                                                            4),
47464                                                                         LW(15,
47465                                                                            4)]),
47466                                                                  Call
47467                                                                    ("DECODE_UNPREDICTABLE",
47468                                                                     ATy(qTy,
47469                                                                         PTy(uTy,
47470                                                                             qTy)),
47471                                                                     TP[Var("mc",
47472                                                                            CTy"MachineCode"),
47473                                                                        LS
47474                                                                         "StoreByte/Half (immediate)"]),
47475                                                                  MU(LU,
47476                                                                     qTy)),
47477                                                              Close
47478                                                                (AVar uTy,
47479                                                                 MU(Let(bVar"add",
47480                                                                        LT,
47481                                                                        Let(bVar"index",
47482                                                                            LT,
47483                                                                            Let(bVar"wback",
47484                                                                                LF,
47485                                                                                Let(Var("m",
47486                                                                                        CTy"offset1"),
47487                                                                                    Call
47488                                                                                      ("immediate_form1",
47489                                                                                       CTy"offset1",
47490                                                                                       Mop(Cast
47491                                                                                             F32,
47492                                                                                           Mop(Cast
47493                                                                                                 (FTy 12),
47494                                                                                               LL[bVar"b'11",
47495                                                                                                  bVar"b'10",
47496                                                                                                  bVar"b'9",
47497                                                                                                  bVar"b'8",
47498                                                                                                  bVar"b'7",
47499                                                                                                  bVar"b'6",
47500                                                                                                  bVar"b'5",
47501                                                                                                  bVar"b'4",
47502                                                                                                  bVar"b'3",
47503                                                                                                  bVar"b'2",
47504                                                                                                  bVar"b'1",
47505                                                                                                  bVar"b'0"]))),
47506                                                                                    ITE(EQ(Mop(Cast
47507                                                                                                 F1,
47508                                                                                               LL[bVar"b'21"]),
47509                                                                                           LW(1,
47510                                                                                              1)),
47511                                                                                        Call
47512                                                                                          ("Store",
47513                                                                                           CTy"instruction",
47514                                                                                           Call
47515                                                                                             ("StoreHalf",
47516                                                                                              CTy"Store",
47517                                                                                              TP[bVar"add",
47518                                                                                                 bVar"index",
47519                                                                                                 bVar"wback",
47520                                                                                                 Var("Rt",
47521                                                                                                     F4),
47522                                                                                                 Var("Rn",
47523                                                                                                     F4),
47524                                                                                                 Var("m",
47525                                                                                                     CTy"offset1")])),
47526                                                                                        Call
47527                                                                                          ("Store",
47528                                                                                           CTy"instruction",
47529                                                                                           Call
47530                                                                                             ("StoreByte",
47531                                                                                              CTy"Store",
47532                                                                                              TP[bVar"add",
47533                                                                                                 bVar"index",
47534                                                                                                 bVar"wback",
47535                                                                                                 Var("Rt",
47536                                                                                                     F4),
47537                                                                                                 Var("Rn",
47538                                                                                                     F4),
47539                                                                                                 Var("m",
47540                                                                                                     CTy"offset1")]))))))),
47541                                                                    qTy))),
47542                                                           Call
47543                                                             ("Skip",
47544                                                              ATy(qTy,
47545                                                                  PTy(CTy"instruction",
47546                                                                      qTy)),
47547                                                              LU)))))))))],
47548                                 Call
47549                                   ("UndefinedThumb",
47550                                    ATy(qTy,PTy(CTy"instruction",qTy)),LU)))],
47551                           Call
47552                             ("UndefinedThumb",
47553                              ATy(qTy,PTy(CTy"instruction",qTy)),LU))),
47554                      (Bop(And,bVar"b'31",
47555                           Bop(And,bVar"b'30",
47556                               Bop(And,bVar"b'29",Mop(Not,bVar"b'26")))),
47557                       ITB([(Bop(And,Mop(Not,bVar"b'25"),
47558                                 Bop(And,Mop(Not,bVar"b'24"),
47559                                     Bop(And,bVar"b'23",
47560                                         Bop(And,Mop(Not,bVar"b'22"),
47561                                             Mop(Not,bVar"b'20"))))),
47562                             Let(Var("Rn",F4),
47563                                 Mop(Cast F4,
47564                                     LL[bVar"b'19",bVar"b'18",bVar"b'17",
47565                                        bVar"b'16"]),
47566                                 MB(Call
47567                                      ("ThumbCondition",
47568                                       ATy(qTy,PTy(F4,qTy)),LU),
47569                                    Close
47570                                      (Var("v",F4),
47571                                       MB(MB(MB(Call
47572                                                  ("HaveThumb2",
47573                                                   ATy(qTy,PTy(bTy,qTy)),
47574                                                   LU),
47575                                                Close
47576                                                  (bVar"v0",
47577                                                   MU(TP[Var("v",F4),
47578                                                         bVar"v0"],qTy))),
47579                                             Close
47580                                               (Var("v",PTy(F4,bTy)),
47581                                                Call
47582                                                  ("Take",
47583                                                   ATy(qTy,PTy(bTy,qTy)),
47584                                                   Var("v",PTy(F4,bTy))))),
47585                                          Close
47586                                            (bVar"b",
47587                                             ITE(bVar"b",
47588                                                 Let(Var("registers",F16),
47589                                                     CC[LW(0,1),
47590                                                        Mop(Cast F1,
47591                                                            LL[bVar"b'14"]),
47592                                                        LW(0,1),
47593                                                        Mop(Cast(FTy 13),
47594                                                            LL[bVar"b'12",
47595                                                               bVar"b'11",
47596                                                               bVar"b'10",
47597                                                               bVar"b'9",
47598                                                               bVar"b'8",
47599                                                               bVar"b'7",
47600                                                               bVar"b'6",
47601                                                               bVar"b'5",
47602                                                               bVar"b'4",
47603                                                               bVar"b'3",
47604                                                               bVar"b'2",
47605                                                               bVar"b'1",
47606                                                               bVar"b'0"])],
47607                                                     Let(bVar"wback",
47608                                                         EQ(Mop(Cast F1,
47609                                                                LL[bVar"b'21"]),
47610                                                            LW(1,1)),
47611                                                         MB(Call
47612                                                              ("BitCount",
47613                                                               ATy(qTy,
47614                                                                   PTy(nTy,
47615                                                                       qTy)),
47616                                                               Var("registers",
47617                                                                   F16)),
47618                                                            Close
47619                                                              (nVar"v",
47620                                                               MB(MB(MB(MB(MU(Bop(Lt,
47621                                                                                  nVar"v",
47622                                                                                  LN
47623                                                                                   2),
47624                                                                              qTy),
47625                                                                           Close
47626                                                                             (bVar"v",
47627                                                                              MU(Bop(Or,
47628                                                                                     EQ(Var("Rn",
47629                                                                                            F4),
47630                                                                                        LW(15,
47631                                                                                           4)),
47632                                                                                     bVar"v"),
47633                                                                                 qTy))),
47634                                                                        Close
47635                                                                          (bVar"b",
47636                                                                           MU(Bop(Or,
47637                                                                                  bVar"b",
47638                                                                                  Bop(And,
47639                                                                                      bVar"wback",
47640                                                                                      Bop(Bit,
47641                                                                                          Var("registers",
47642                                                                                              F16),
47643                                                                                          Mop(Cast
47644                                                                                                nTy,
47645                                                                                              Var("Rn",
47646                                                                                                  F4))))),
47647                                                                              qTy))),
47648                                                                     Close
47649                                                                       (bVar"b",
47650                                                                        ITE(bVar"b",
47651                                                                            Call
47652                                                                              ("DECODE_UNPREDICTABLE",
47653                                                                               ATy(qTy,
47654                                                                                   PTy(uTy,
47655                                                                                       qTy)),
47656                                                                               TP[Var("mc",
47657                                                                                      CTy"MachineCode"),
47658                                                                                  LS
47659                                                                                   "StoreMultiple"]),
47660                                                                            MU(LU,
47661                                                                               qTy)))),
47662                                                                  Close
47663                                                                    (AVar
47664                                                                       uTy,
47665                                                                     MU(Call
47666                                                                          ("Store",
47667                                                                           CTy"instruction",
47668                                                                           Call
47669                                                                             ("StoreMultiple",
47670                                                                              CTy"Store",
47671                                                                              TP[LT,
47672                                                                                 LF,
47673                                                                                 bVar"wback",
47674                                                                                 Var("Rn",
47675                                                                                     F4),
47676                                                                                 Var("registers",
47677                                                                                     F16)])),
47678                                                                        qTy))))))),
47679                                                 Call
47680                                                   ("Skip",
47681                                                    ATy(qTy,
47682                                                        PTy(CTy"instruction",
47683                                                            qTy)),LU)))))))),
47684                            (Bop(And,Mop(Not,bVar"b'25"),
47685                                 Bop(And,bVar"b'24",
47686                                     Bop(And,Mop(Not,bVar"b'23"),
47687                                         Bop(And,Mop(Not,bVar"b'22"),
47688                                             Mop(Not,bVar"b'20"))))),
47689                             Let(Var("Rn",F4),
47690                                 Mop(Cast F4,
47691                                     LL[bVar"b'19",bVar"b'18",bVar"b'17",
47692                                        bVar"b'16"]),
47693                                 MB(Call
47694                                      ("ThumbCondition",
47695                                       ATy(qTy,PTy(F4,qTy)),LU),
47696                                    Close
47697                                      (Var("v",F4),
47698                                       MB(MB(MB(Call
47699                                                  ("HaveThumb2",
47700                                                   ATy(qTy,PTy(bTy,qTy)),
47701                                                   LU),
47702                                                Close
47703                                                  (bVar"v0",
47704                                                   MU(TP[Var("v",F4),
47705                                                         bVar"v0"],qTy))),
47706                                             Close
47707                                               (Var("v",PTy(F4,bTy)),
47708                                                Call
47709                                                  ("Take",
47710                                                   ATy(qTy,PTy(bTy,qTy)),
47711                                                   Var("v",PTy(F4,bTy))))),
47712                                          Close
47713                                            (bVar"b",
47714                                             ITE(bVar"b",
47715                                                 Let(Var("registers",F16),
47716                                                     CC[LW(0,1),
47717                                                        Mop(Cast F1,
47718                                                            LL[bVar"b'14"]),
47719                                                        LW(0,1),
47720                                                        Mop(Cast(FTy 13),
47721                                                            LL[bVar"b'12",
47722                                                               bVar"b'11",
47723                                                               bVar"b'10",
47724                                                               bVar"b'9",
47725                                                               bVar"b'8",
47726                                                               bVar"b'7",
47727                                                               bVar"b'6",
47728                                                               bVar"b'5",
47729                                                               bVar"b'4",
47730                                                               bVar"b'3",
47731                                                               bVar"b'2",
47732                                                               bVar"b'1",
47733                                                               bVar"b'0"])],
47734                                                     Let(bVar"wback",
47735                                                         EQ(Mop(Cast F1,
47736                                                                LL[bVar"b'21"]),
47737                                                            LW(1,1)),
47738                                                         MB(Call
47739                                                              ("BitCount",
47740                                                               ATy(qTy,
47741                                                                   PTy(nTy,
47742                                                                       qTy)),
47743                                                               Var("registers",
47744                                                                   F16)),
47745                                                            Close
47746                                                              (nVar"v",
47747                                                               MB(MB(MB(MB(MU(Bop(Lt,
47748                                                                                  nVar"v",
47749                                                                                  LN
47750                                                                                   2),
47751                                                                              qTy),
47752                                                                           Close
47753                                                                             (bVar"v",
47754                                                                              MU(Bop(Or,
47755                                                                                     EQ(Var("Rn",
47756                                                                                            F4),
47757                                                                                        LW(15,
47758                                                                                           4)),
47759                                                                                     bVar"v"),
47760                                                                                 qTy))),
47761                                                                        Close
47762                                                                          (bVar"b",
47763                                                                           MU(Bop(Or,
47764                                                                                  bVar"b",
47765                                                                                  Bop(And,
47766                                                                                      bVar"wback",
47767                                                                                      Bop(Bit,
47768                                                                                          Var("registers",
47769                                                                                              F16),
47770                                                                                          Mop(Cast
47771                                                                                                nTy,
47772                                                                                              Var("Rn",
47773                                                                                                  F4))))),
47774                                                                              qTy))),
47775                                                                     Close
47776                                                                       (bVar"b",
47777                                                                        ITE(bVar"b",
47778                                                                            Call
47779                                                                              ("DECODE_UNPREDICTABLE",
47780                                                                               ATy(qTy,
47781                                                                                   PTy(uTy,
47782                                                                                       qTy)),
47783                                                                               TP[Var("mc",
47784                                                                                      CTy"MachineCode"),
47785                                                                                  LS
47786                                                                                   "StoreMultiple"]),
47787                                                                            MU(LU,
47788                                                                               qTy)))),
47789                                                                  Close
47790                                                                    (AVar
47791                                                                       uTy,
47792                                                                     MU(Call
47793                                                                          ("Store",
47794                                                                           CTy"instruction",
47795                                                                           Call
47796                                                                             ("StoreMultiple",
47797                                                                              CTy"Store",
47798                                                                              TP[LF,
47799                                                                                 LT,
47800                                                                                 bVar"wback",
47801                                                                                 Var("Rn",
47802                                                                                     F4),
47803                                                                                 Var("registers",
47804                                                                                     F16)])),
47805                                                                        qTy))))))),
47806                                                 Call
47807                                                   ("Skip",
47808                                                    ATy(qTy,
47809                                                        PTy(CTy"instruction",
47810                                                            qTy)),LU)))))))),
47811                            (Bop(And,Mop(Not,bVar"b'25"),
47812                                 Bop(And,Mop(Not,bVar"b'24"),
47813                                     Bop(And,bVar"b'23",
47814                                         Bop(And,Mop(Not,bVar"b'22"),
47815                                             bVar"b'20")))),
47816                             Let(Var("Rn",F4),
47817                                 Mop(Cast F4,
47818                                     LL[bVar"b'19",bVar"b'18",bVar"b'17",
47819                                        bVar"b'16"]),
47820                                 Let(Var("M",F1),
47821                                     Mop(Cast F1,LL[bVar"b'14"]),
47822                                     Let(Var("P",F1),
47823                                         Mop(Cast F1,LL[bVar"b'15"]),
47824                                         MB(Call
47825                                              ("ThumbCondition",
47826                                               ATy(qTy,PTy(F4,qTy)),LU),
47827                                            Close
47828                                              (Var("v",F4),
47829                                               MB(MB(MB(Call
47830                                                          ("HaveThumb2",
47831                                                           ATy(qTy,
47832                                                               PTy(bTy,qTy)),
47833                                                           LU),
47834                                                        Close
47835                                                          (bVar"v0",
47836                                                           MU(TP[Var("v",
47837                                                                     F4),
47838                                                                 bVar"v0"],
47839                                                              qTy))),
47840                                                     Close
47841                                                       (Var("v",
47842                                                            PTy(F4,bTy)),
47843                                                        Call
47844                                                          ("Take",
47845                                                           ATy(qTy,
47846                                                               PTy(bTy,qTy)),
47847                                                           Var("v",
47848                                                               PTy(F4,bTy))))),
47849                                                  Close
47850                                                    (bVar"b",
47851                                                     ITE(bVar"b",
47852                                                         Let(Var("registers",
47853                                                                 F16),
47854                                                             CC[Var("P",F1),
47855                                                                Var("M",F1),
47856                                                                LW(0,1),
47857                                                                Mop(Cast
47858                                                                      (FTy 13),
47859                                                                    LL[bVar"b'12",
47860                                                                       bVar"b'11",
47861                                                                       bVar"b'10",
47862                                                                       bVar"b'9",
47863                                                                       bVar"b'8",
47864                                                                       bVar"b'7",
47865                                                                       bVar"b'6",
47866                                                                       bVar"b'5",
47867                                                                       bVar"b'4",
47868                                                                       bVar"b'3",
47869                                                                       bVar"b'2",
47870                                                                       bVar"b'1",
47871                                                                       bVar"b'0"])],
47872                                                             Let(bVar"wback",
47873                                                                 EQ(Mop(Cast
47874                                                                          F1,
47875                                                                        LL[bVar"b'21"]),
47876                                                                    LW(1,1)),
47877                                                                 MB(Call
47878                                                                      ("BitCount",
47879                                                                       ATy(qTy,
47880                                                                           PTy(nTy,
47881                                                                               qTy)),
47882                                                                       Var("registers",
47883                                                                           F16)),
47884                                                                    Close
47885                                                                      (nVar"v",
47886                                                                       MB(MB(MB(MB(MB(MB(MU(Bop(Lt,
47887                                                                                                nVar"v",
47888                                                                                                LN
47889                                                                                                 2),
47890                                                                                            qTy),
47891                                                                                         Close
47892                                                                                           (bVar"v",
47893                                                                                            MU(Bop(Or,
47894                                                                                                   EQ(Var("Rn",
47895                                                                                                          F4),
47896                                                                                                      LW(15,
47897                                                                                                         4)),
47898                                                                                                   bVar"v"),
47899                                                                                               qTy))),
47900                                                                                      Close
47901                                                                                        (bVar"b",
47902                                                                                         MU(Bop(Or,
47903                                                                                                bVar"b",
47904                                                                                                Bop(And,
47905                                                                                                    EQ(Var("P",
47906                                                                                                           F1),
47907                                                                                                       LW(1,
47908                                                                                                          1)),
47909                                                                                                    EQ(Var("M",
47910                                                                                                           F1),
47911                                                                                                       LW(1,
47912                                                                                                          1)))),
47913                                                                                            qTy))),
47914                                                                                   Close
47915                                                                                     (bVar"b",
47916                                                                                      ITE(bVar"b",
47917                                                                                          MU(LT,
47918                                                                                             qTy),
47919                                                                                          MB(Call
47920                                                                                               ("InITBlock",
47921                                                                                                ATy(qTy,
47922                                                                                                    PTy(bTy,
47923                                                                                                        qTy)),
47924                                                                                                LU),
47925                                                                                             Close
47926                                                                                               (bVar"v",
47927                                                                                                MB(MU(Bop(And,
47928                                                                                                          Bop(Bit,
47929                                                                                                              Var("registers",
47930                                                                                                                  F16),
47931                                                                                                              LN
47932                                                                                                               15),
47933                                                                                                          bVar"v"),
47934                                                                                                      qTy),
47935                                                                                                   Close
47936                                                                                                     (bVar"b",
47937                                                                                                      ITE(bVar"b",
47938                                                                                                          MB(Call
47939                                                                                                               ("LastInITBlock",
47940                                                                                                                ATy(qTy,
47941                                                                                                                    PTy(bTy,
47942                                                                                                                        qTy)),
47943                                                                                                                LU),
47944                                                                                                             Close
47945                                                                                                               (bVar"v",
47946                                                                                                                MU(Mop(Not,
47947                                                                                                                       bVar"v"),
47948                                                                                                                   qTy))),
47949                                                                                                          MU(LF,
47950                                                                                                             qTy))))))))),
47951                                                                                Close
47952                                                                                  (bVar"b",
47953                                                                                   MU(Bop(Or,
47954                                                                                          bVar"b",
47955                                                                                          Bop(And,
47956                                                                                              bVar"wback",
47957                                                                                              Bop(Bit,
47958                                                                                                  Var("registers",
47959                                                                                                      F16),
47960                                                                                                  Mop(Cast
47961                                                                                                        nTy,
47962                                                                                                      Var("Rn",
47963                                                                                                          F4))))),
47964                                                                                      qTy))),
47965                                                                             Close
47966                                                                               (bVar"b",
47967                                                                                ITE(bVar"b",
47968                                                                                    Call
47969                                                                                      ("DECODE_UNPREDICTABLE",
47970                                                                                       ATy(qTy,
47971                                                                                           PTy(uTy,
47972                                                                                               qTy)),
47973                                                                                       TP[Var("mc",
47974                                                                                              CTy"MachineCode"),
47975                                                                                          LS
47976                                                                                           "LoadMultiple"]),
47977                                                                                    MU(LU,
47978                                                                                       qTy)))),
47979                                                                          Close
47980                                                                            (AVar
47981                                                                               uTy,
47982                                                                             MU(Call
47983                                                                                  ("Load",
47984                                                                                   CTy"instruction",
47985                                                                                   Call
47986                                                                                     ("LoadMultiple",
47987                                                                                      CTy"Load",
47988                                                                                      TP[LT,
47989                                                                                         LF,
47990                                                                                         bVar"wback",
47991                                                                                         Var("Rn",
47992                                                                                             F4),
47993                                                                                         Var("registers",
47994                                                                                             F16)])),
47995                                                                                qTy))))))),
47996                                                         Call
47997                                                           ("Skip",
47998                                                            ATy(qTy,
47999                                                                PTy(CTy"instruction",
48000                                                                    qTy)),
48001                                                            LU)))))))))),
48002                            (Bop(And,Mop(Not,bVar"b'25"),
48003                                 Bop(And,bVar"b'24",
48004                                     Bop(And,Mop(Not,bVar"b'23"),
48005                                         Bop(And,Mop(Not,bVar"b'22"),
48006                                             bVar"b'20")))),
48007                             Let(Var("Rn",F4),
48008                                 Mop(Cast F4,
48009                                     LL[bVar"b'19",bVar"b'18",bVar"b'17",
48010                                        bVar"b'16"]),
48011                                 Let(Var("M",F1),
48012                                     Mop(Cast F1,LL[bVar"b'14"]),
48013                                     Let(Var("P",F1),
48014                                         Mop(Cast F1,LL[bVar"b'15"]),
48015                                         MB(Call
48016                                              ("ThumbCondition",
48017                                               ATy(qTy,PTy(F4,qTy)),LU),
48018                                            Close
48019                                              (Var("v",F4),
48020                                               MB(MB(MB(Call
48021                                                          ("HaveThumb2",
48022                                                           ATy(qTy,
48023                                                               PTy(bTy,qTy)),
48024                                                           LU),
48025                                                        Close
48026                                                          (bVar"v0",
48027                                                           MU(TP[Var("v",
48028                                                                     F4),
48029                                                                 bVar"v0"],
48030                                                              qTy))),
48031                                                     Close
48032                                                       (Var("v",
48033                                                            PTy(F4,bTy)),
48034                                                        Call
48035                                                          ("Take",
48036                                                           ATy(qTy,
48037                                                               PTy(bTy,qTy)),
48038                                                           Var("v",
48039                                                               PTy(F4,bTy))))),
48040                                                  Close
48041                                                    (bVar"b",
48042                                                     ITE(bVar"b",
48043                                                         Let(Var("registers",
48044                                                                 F16),
48045                                                             CC[Var("P",F1),
48046                                                                Var("M",F1),
48047                                                                LW(0,1),
48048                                                                Mop(Cast
48049                                                                      (FTy 13),
48050                                                                    LL[bVar"b'12",
48051                                                                       bVar"b'11",
48052                                                                       bVar"b'10",
48053                                                                       bVar"b'9",
48054                                                                       bVar"b'8",
48055                                                                       bVar"b'7",
48056                                                                       bVar"b'6",
48057                                                                       bVar"b'5",
48058                                                                       bVar"b'4",
48059                                                                       bVar"b'3",
48060                                                                       bVar"b'2",
48061                                                                       bVar"b'1",
48062                                                                       bVar"b'0"])],
48063                                                             Let(bVar"wback",
48064                                                                 EQ(Mop(Cast
48065                                                                          F1,
48066                                                                        LL[bVar"b'21"]),
48067                                                                    LW(1,1)),
48068                                                                 MB(Call
48069                                                                      ("BitCount",
48070                                                                       ATy(qTy,
48071                                                                           PTy(nTy,
48072                                                                               qTy)),
48073                                                                       Var("registers",
48074                                                                           F16)),
48075                                                                    Close
48076                                                                      (nVar"v",
48077                                                                       MB(MB(MB(MB(MB(MB(MU(Bop(Lt,
48078                                                                                                nVar"v",
48079                                                                                                LN
48080                                                                                                 2),
48081                                                                                            qTy),
48082                                                                                         Close
48083                                                                                           (bVar"v",
48084                                                                                            MU(Bop(Or,
48085                                                                                                   EQ(Var("Rn",
48086                                                                                                          F4),
48087                                                                                                      LW(15,
48088                                                                                                         4)),
48089                                                                                                   bVar"v"),
48090                                                                                               qTy))),
48091                                                                                      Close
48092                                                                                        (bVar"b",
48093                                                                                         MU(Bop(Or,
48094                                                                                                bVar"b",
48095                                                                                                Bop(And,
48096                                                                                                    EQ(Var("P",
48097                                                                                                           F1),
48098                                                                                                       LW(1,
48099                                                                                                          1)),
48100                                                                                                    EQ(Var("M",
48101                                                                                                           F1),
48102                                                                                                       LW(1,
48103                                                                                                          1)))),
48104                                                                                            qTy))),
48105                                                                                   Close
48106                                                                                     (bVar"b",
48107                                                                                      ITE(bVar"b",
48108                                                                                          MU(LT,
48109                                                                                             qTy),
48110                                                                                          MB(Call
48111                                                                                               ("InITBlock",
48112                                                                                                ATy(qTy,
48113                                                                                                    PTy(bTy,
48114                                                                                                        qTy)),
48115                                                                                                LU),
48116                                                                                             Close
48117                                                                                               (bVar"v",
48118                                                                                                MB(MU(Bop(And,
48119                                                                                                          Bop(Bit,
48120                                                                                                              Var("registers",
48121                                                                                                                  F16),
48122                                                                                                              LN
48123                                                                                                               15),
48124                                                                                                          bVar"v"),
48125                                                                                                      qTy),
48126                                                                                                   Close
48127                                                                                                     (bVar"b",
48128                                                                                                      ITE(bVar"b",
48129                                                                                                          MB(Call
48130                                                                                                               ("LastInITBlock",
48131                                                                                                                ATy(qTy,
48132                                                                                                                    PTy(bTy,
48133                                                                                                                        qTy)),
48134                                                                                                                LU),
48135                                                                                                             Close
48136                                                                                                               (bVar"v",
48137                                                                                                                MU(Mop(Not,
48138                                                                                                                       bVar"v"),
48139                                                                                                                   qTy))),
48140                                                                                                          MU(LF,
48141                                                                                                             qTy))))))))),
48142                                                                                Close
48143                                                                                  (bVar"b",
48144                                                                                   MU(Bop(Or,
48145                                                                                          bVar"b",
48146                                                                                          Bop(And,
48147                                                                                              bVar"wback",
48148                                                                                              Bop(Bit,
48149                                                                                                  Var("registers",
48150                                                                                                      F16),
48151                                                                                                  Mop(Cast
48152                                                                                                        nTy,
48153                                                                                                      Var("Rn",
48154                                                                                                          F4))))),
48155                                                                                      qTy))),
48156                                                                             Close
48157                                                                               (bVar"b",
48158                                                                                ITE(bVar"b",
48159                                                                                    Call
48160                                                                                      ("DECODE_UNPREDICTABLE",
48161                                                                                       ATy(qTy,
48162                                                                                           PTy(uTy,
48163                                                                                               qTy)),
48164                                                                                       TP[Var("mc",
48165                                                                                              CTy"MachineCode"),
48166                                                                                          LS
48167                                                                                           "LoadMultiple"]),
48168                                                                                    MU(LU,
48169                                                                                       qTy)))),
48170                                                                          Close
48171                                                                            (AVar
48172                                                                               uTy,
48173                                                                             MU(Call
48174                                                                                  ("Load",
48175                                                                                   CTy"instruction",
48176                                                                                   Call
48177                                                                                     ("LoadMultiple",
48178                                                                                      CTy"Load",
48179                                                                                      TP[LF,
48180                                                                                         LT,
48181                                                                                         bVar"wback",
48182                                                                                         Var("Rn",
48183                                                                                             F4),
48184                                                                                         Var("registers",
48185                                                                                             F16)])),
48186                                                                                qTy))))))),
48187                                                         Call
48188                                                           ("Skip",
48189                                                            ATy(qTy,
48190                                                                PTy(CTy"instruction",
48191                                                                    qTy)),
48192                                                            LU)))))))))),
48193                            (Bop(And,Mop(Not,bVar"b'25"),
48194                                 Bop(And,Mop(Not,bVar"b'22"),
48195                                     Mop(Not,bVar"b'20"))),
48196                             Let(Var("op",FTy 2),
48197                                 Mop(Cast(FTy 2),LL[bVar"b'24",bVar"b'23"]),
48198                                 MB(Call
48199                                      ("ThumbCondition",
48200                                       ATy(qTy,PTy(F4,qTy)),LU),
48201                                    Close
48202                                      (Var("v",F4),
48203                                       MB(MB(MB(Call
48204                                                  ("HaveThumb2",
48205                                                   ATy(qTy,PTy(bTy,qTy)),
48206                                                   LU),
48207                                                Close
48208                                                  (bVar"v0",
48209                                                   MB(MU(Bop(And,
48210                                                             Bop(In,
48211                                                                 Var("op",
48212                                                                     FTy 2),
48213                                                                 SL[LW(0,2),
48214                                                                    LW(3,2)]),
48215                                                             bVar"v0"),qTy),
48216                                                      Close
48217                                                        (bVar"v0",
48218                                                         MU(TP[Var("v",F4),
48219                                                               bVar"v0"],
48220                                                            qTy))))),
48221                                             Close
48222                                               (Var("v",PTy(F4,bTy)),
48223                                                Call
48224                                                  ("Take",
48225                                                   ATy(qTy,PTy(bTy,qTy)),
48226                                                   Var("v",PTy(F4,bTy))))),
48227                                          Close
48228                                            (bVar"b",
48229                                             ITE(bVar"b",
48230                                                 MB(Call
48231                                                      ("CurrentInstrSet",
48232                                                       ATy(qTy,
48233                                                           PTy(CTy"InstrSet",
48234                                                               qTy)),LU),
48235                                                    Close
48236                                                      (Var("v",
48237                                                           CTy"InstrSet"),
48238                                                       MB(MB(MU(EQ(Var("v",
48239                                                                       CTy"InstrSet"),
48240                                                                   LC("InstrSet_ThumbEE",
48241                                                                      CTy"InstrSet")),
48242                                                                qTy),
48243                                                             Close
48244                                                               (bVar"b",
48245                                                                ITE(bVar"b",
48246                                                                    Call
48247                                                                      ("DECODE_UNPREDICTABLE",
48248                                                                       ATy(qTy,
48249                                                                           PTy(uTy,
48250                                                                               qTy)),
48251                                                                       TP[Var("mc",
48252                                                                              CTy"MachineCode"),
48253                                                                          LS
48254                                                                           "StoreReturnState"]),
48255                                                                    MU(LU,
48256                                                                       qTy)))),
48257                                                          Close
48258                                                            (AVar uTy,
48259                                                             MU(Call
48260                                                                  ("System",
48261                                                                   CTy"instruction",
48262                                                                   Call
48263                                                                     ("StoreReturnState",
48264                                                                      CTy"System",
48265                                                                      TP[EQ(Var("op",
48266                                                                                FTy 2),
48267                                                                            LW(3,
48268                                                                               2)),
48269                                                                         LF,
48270                                                                         EQ(Mop(Cast
48271                                                                                  F1,
48272                                                                                LL[bVar"b'21"]),
48273                                                                            LW(1,
48274                                                                               1)),
48275                                                                         Mop(Cast
48276                                                                               (FTy 5),
48277                                                                             LL[bVar"b'4",
48278                                                                                bVar"b'3",
48279                                                                                bVar"b'2",
48280                                                                                bVar"b'1",
48281                                                                                bVar"b'0"])])),
48282                                                                qTy))))),
48283                                                 Call
48284                                                   ("Skip",
48285                                                    ATy(qTy,
48286                                                        PTy(CTy"instruction",
48287                                                            qTy)),LU)))))))),
48288                            (Bop(And,Mop(Not,bVar"b'25"),
48289                                 Bop(And,Mop(Not,bVar"b'22"),bVar"b'20")),
48290                             Let(Var("Rn",F4),
48291                                 Mop(Cast F4,
48292                                     LL[bVar"b'19",bVar"b'18",bVar"b'17",
48293                                        bVar"b'16"]),
48294                                 Let(Var("op",FTy 2),
48295                                     Mop(Cast(FTy 2),
48296                                         LL[bVar"b'24",bVar"b'23"]),
48297                                     MB(Call
48298                                          ("ThumbCondition",
48299                                           ATy(qTy,PTy(F4,qTy)),LU),
48300                                        Close
48301                                          (Var("v",F4),
48302                                           MB(MB(MB(Call
48303                                                      ("HaveThumb2",
48304                                                       ATy(qTy,
48305                                                           PTy(bTy,qTy)),
48306                                                       LU),
48307                                                    Close
48308                                                      (bVar"v0",
48309                                                       MB(MU(Bop(And,
48310                                                                 Bop(In,
48311                                                                     Var("op",
48312                                                                         FTy 2),
48313                                                                     SL[LW(0,
48314                                                                           2),
48315                                                                        LW(3,
48316                                                                           2)]),
48317                                                                 bVar"v0"),
48318                                                             qTy),
48319                                                          Close
48320                                                            (bVar"v0",
48321                                                             MU(TP[Var("v",
48322                                                                       F4),
48323                                                                   bVar"v0"],
48324                                                                qTy))))),
48325                                                 Close
48326                                                   (Var("v",PTy(F4,bTy)),
48327                                                    Call
48328                                                      ("Take",
48329                                                       ATy(qTy,
48330                                                           PTy(bTy,qTy)),
48331                                                       Var("v",PTy(F4,bTy))))),
48332                                              Close
48333                                                (bVar"b",
48334                                                 ITE(bVar"b",
48335                                                     MB(Call
48336                                                          ("CurrentInstrSet",
48337                                                           ATy(qTy,
48338                                                               PTy(CTy"InstrSet",
48339                                                                   qTy)),
48340                                                           LU),
48341                                                        Close
48342                                                          (Var("v",
48343                                                               CTy"InstrSet"),
48344                                                           MB(MB(MB(MB(MU(EQ(Var("v",
48345                                                                                 CTy"InstrSet"),
48346                                                                             LC("InstrSet_ThumbEE",
48347                                                                                CTy"InstrSet")),
48348                                                                          qTy),
48349                                                                       Close
48350                                                                         (bVar"b",
48351                                                                          MU(Bop(Or,
48352                                                                                 bVar"b",
48353                                                                                 EQ(Var("Rn",
48354                                                                                        F4),
48355                                                                                    LW(15,
48356                                                                                       4))),
48357                                                                             qTy))),
48358                                                                    Close
48359                                                                      (bVar"b",
48360                                                                       ITE(bVar"b",
48361                                                                           MU(LT,
48362                                                                              qTy),
48363                                                                           MB(Call
48364                                                                                ("InITBlock",
48365                                                                                 ATy(qTy,
48366                                                                                     PTy(bTy,
48367                                                                                         qTy)),
48368                                                                                 LU),
48369                                                                              Close
48370                                                                                (bVar"b",
48371                                                                                 ITE(bVar"b",
48372                                                                                     MB(Call
48373                                                                                          ("LastInITBlock",
48374                                                                                           ATy(qTy,
48375                                                                                               PTy(bTy,
48376                                                                                                   qTy)),
48377                                                                                           LU),
48378                                                                                        Close
48379                                                                                          (bVar"v",
48380                                                                                           MU(Mop(Not,
48381                                                                                                  bVar"v"),
48382                                                                                              qTy))),
48383                                                                                     MU(LF,
48384                                                                                        qTy))))))),
48385                                                                 Close
48386                                                                   (bVar"b",
48387                                                                    ITE(bVar"b",
48388                                                                        Call
48389                                                                          ("DECODE_UNPREDICTABLE",
48390                                                                           ATy(qTy,
48391                                                                               PTy(uTy,
48392                                                                                   qTy)),
48393                                                                           TP[Var("mc",
48394                                                                                  CTy"MachineCode"),
48395                                                                              LS
48396                                                                               "ReturnFromException"]),
48397                                                                        MU(LU,
48398                                                                           qTy)))),
48399                                                              Close
48400                                                                (AVar uTy,
48401                                                                 MU(Call
48402                                                                      ("System",
48403                                                                       CTy"instruction",
48404                                                                       Call
48405                                                                         ("ReturnFromException",
48406                                                                          CTy"System",
48407                                                                          TP[EQ(Var("op",
48408                                                                                    FTy 2),
48409                                                                                LW(3,
48410                                                                                   2)),
48411                                                                             LF,
48412                                                                             EQ(Mop(Cast
48413                                                                                      F1,
48414                                                                                    LL[bVar"b'21"]),
48415                                                                                LW(1,
48416                                                                                   1)),
48417                                                                             Var("Rn",
48418                                                                                 F4)])),
48419                                                                    qTy))))),
48420                                                     Call
48421                                                       ("Skip",
48422                                                        ATy(qTy,
48423                                                            PTy(CTy"instruction",
48424                                                                qTy)),LU))))))))),
48425                            (Bop(And,Mop(Not,bVar"b'25"),
48426                                 Bop(And,Mop(Not,bVar"b'24"),
48427                                     Bop(And,Mop(Not,bVar"b'23"),
48428                                         Bop(And,bVar"b'22",
48429                                             Bop(And,Mop(Not,bVar"b'21"),
48430                                                 Mop(Not,bVar"b'20")))))),
48431                             Let(Var("Rn",F4),
48432                                 Mop(Cast F4,
48433                                     LL[bVar"b'19",bVar"b'18",bVar"b'17",
48434                                        bVar"b'16"]),
48435                                 Let(Var("Rd",F4),
48436                                     Mop(Cast F4,
48437                                         LL[bVar"b'11",bVar"b'10",
48438                                            bVar"b'9",bVar"b'8"]),
48439                                     Let(Var("Rt",F4),
48440                                         Mop(Cast F4,
48441                                             LL[bVar"b'15",bVar"b'14",
48442                                                bVar"b'13",bVar"b'12"]),
48443                                         MB(Call
48444                                              ("ThumbCondition",
48445                                               ATy(qTy,PTy(F4,qTy)),LU),
48446                                            Close
48447                                              (Var("v",F4),
48448                                               MB(MB(MB(Call
48449                                                          ("HaveThumb2",
48450                                                           ATy(qTy,
48451                                                               PTy(bTy,qTy)),
48452                                                           LU),
48453                                                        Close
48454                                                          (bVar"v0",
48455                                                           MU(TP[Var("v",
48456                                                                     F4),
48457                                                                 bVar"v0"],
48458                                                              qTy))),
48459                                                     Close
48460                                                       (Var("v",
48461                                                            PTy(F4,bTy)),
48462                                                        Call
48463                                                          ("Take",
48464                                                           ATy(qTy,
48465                                                               PTy(bTy,qTy)),
48466                                                           Var("v",
48467                                                               PTy(F4,bTy))))),
48468                                                  Close
48469                                                    (bVar"b",
48470                                                     ITE(bVar"b",
48471                                                         MB(ITE(Bop(Or,
48472                                                                    Bop(Or,
48473                                                                        Bop(Or,
48474                                                                            Bop(Or,
48475                                                                                Bop(In,
48476                                                                                    Var("Rd",
48477                                                                                        F4),
48478                                                                                    SL[LW(13,
48479                                                                                          4),
48480                                                                                       LW(15,
48481                                                                                          4)]),
48482                                                                                Bop(In,
48483                                                                                    Var("Rt",
48484                                                                                        F4),
48485                                                                                    SL[LW(13,
48486                                                                                          4),
48487                                                                                       LW(15,
48488                                                                                          4)])),
48489                                                                            EQ(Var("Rn",
48490                                                                                   F4),
48491                                                                               LW(15,
48492                                                                                  4))),
48493                                                                        EQ(Var("Rd",
48494                                                                               F4),
48495                                                                           Var("Rn",
48496                                                                               F4))),
48497                                                                    EQ(Var("Rd",
48498                                                                           F4),
48499                                                                       Var("Rt",
48500                                                                           F4))),
48501                                                                Call
48502                                                                  ("DECODE_UNPREDICTABLE",
48503                                                                   ATy(qTy,
48504                                                                       PTy(uTy,
48505                                                                           qTy)),
48506                                                                   TP[Var("mc",
48507                                                                          CTy"MachineCode"),
48508                                                                      LS
48509                                                                       "StoreExclusive"]),
48510                                                                MU(LU,qTy)),
48511                                                            Close
48512                                                              (AVar uTy,
48513                                                               MU(Call
48514                                                                    ("Store",
48515                                                                     CTy"instruction",
48516                                                                     Call
48517                                                                       ("StoreExclusive",
48518                                                                        CTy"Store",
48519                                                                        TP[Var("Rd",
48520                                                                               F4),
48521                                                                           Var("Rt",
48522                                                                               F4),
48523                                                                           Var("Rn",
48524                                                                               F4),
48525                                                                           Mop(Cast
48526                                                                                 F32,
48527                                                                               CC[Mop(Cast
48528                                                                                        F8,
48529                                                                                      LL[bVar"b'7",
48530                                                                                         bVar"b'6",
48531                                                                                         bVar"b'5",
48532                                                                                         bVar"b'4",
48533                                                                                         bVar"b'3",
48534                                                                                         bVar"b'2",
48535                                                                                         bVar"b'1",
48536                                                                                         bVar"b'0"]),
48537                                                                                  LW(0,
48538                                                                                     2)])])),
48539                                                                  qTy))),
48540                                                         Call
48541                                                           ("Skip",
48542                                                            ATy(qTy,
48543                                                                PTy(CTy"instruction",
48544                                                                    qTy)),
48545                                                            LU)))))))))),
48546                            (Bop(And,Mop(Not,bVar"b'25"),
48547                                 Bop(And,Mop(Not,bVar"b'24"),
48548                                     Bop(And,Mop(Not,bVar"b'23"),
48549                                         Bop(And,bVar"b'22",
48550                                             Bop(And,Mop(Not,bVar"b'21"),
48551                                                 bVar"b'20"))))),
48552                             Let(Var("Rn",F4),
48553                                 Mop(Cast F4,
48554                                     LL[bVar"b'19",bVar"b'18",bVar"b'17",
48555                                        bVar"b'16"]),
48556                                 Let(Var("Rt",F4),
48557                                     Mop(Cast F4,
48558                                         LL[bVar"b'15",bVar"b'14",
48559                                            bVar"b'13",bVar"b'12"]),
48560                                     MB(Call
48561                                          ("ThumbCondition",
48562                                           ATy(qTy,PTy(F4,qTy)),LU),
48563                                        Close
48564                                          (Var("v",F4),
48565                                           MB(MB(MB(Call
48566                                                      ("HaveThumb2",
48567                                                       ATy(qTy,
48568                                                           PTy(bTy,qTy)),
48569                                                       LU),
48570                                                    Close
48571                                                      (bVar"v0",
48572                                                       MU(TP[Var("v",F4),
48573                                                             bVar"v0"],qTy))),
48574                                                 Close
48575                                                   (Var("v",PTy(F4,bTy)),
48576                                                    Call
48577                                                      ("Take",
48578                                                       ATy(qTy,
48579                                                           PTy(bTy,qTy)),
48580                                                       Var("v",PTy(F4,bTy))))),
48581                                              Close
48582                                                (bVar"b",
48583                                                 ITE(bVar"b",
48584                                                     MB(ITE(Bop(Or,
48585                                                                Bop(In,
48586                                                                    Var("Rt",
48587                                                                        F4),
48588                                                                    SL[LW(13,
48589                                                                          4),
48590                                                                       LW(15,
48591                                                                          4)]),
48592                                                                EQ(Var("Rn",
48593                                                                       F4),
48594                                                                   LW(15,4))),
48595                                                            Call
48596                                                              ("DECODE_UNPREDICTABLE",
48597                                                               ATy(qTy,
48598                                                                   PTy(uTy,
48599                                                                       qTy)),
48600                                                               TP[Var("mc",
48601                                                                      CTy"MachineCode"),
48602                                                                  LS
48603                                                                   "StoreExclusive"]),
48604                                                            MU(LU,qTy)),
48605                                                        Close
48606                                                          (AVar uTy,
48607                                                           MU(Call
48608                                                                ("Load",
48609                                                                 CTy"instruction",
48610                                                                 Call
48611                                                                   ("LoadExclusive",
48612                                                                    CTy"Load",
48613                                                                    TP[Var("Rt",
48614                                                                           F4),
48615                                                                       Var("Rn",
48616                                                                           F4),
48617                                                                       Mop(Cast
48618                                                                             F32,
48619                                                                           CC[Mop(Cast
48620                                                                                    F8,
48621                                                                                  LL[bVar"b'7",
48622                                                                                     bVar"b'6",
48623                                                                                     bVar"b'5",
48624                                                                                     bVar"b'4",
48625                                                                                     bVar"b'3",
48626                                                                                     bVar"b'2",
48627                                                                                     bVar"b'1",
48628                                                                                     bVar"b'0"]),
48629                                                                              LW(0,
48630                                                                                 2)])])),
48631                                                              qTy))),
48632                                                     Call
48633                                                       ("Skip",
48634                                                        ATy(qTy,
48635                                                            PTy(CTy"instruction",
48636                                                                qTy)),LU))))))))),
48637                            (Bop(And,Mop(Not,bVar"b'25"),
48638                                 Bop(And,Mop(Not,bVar"b'24"),
48639                                     Bop(And,bVar"b'23",
48640                                         Bop(And,bVar"b'22",
48641                                             Bop(And,Mop(Not,bVar"b'21"),
48642                                                 Bop(And,
48643                                                     Mop(Not,bVar"b'20"),
48644                                                     Bop(And,
48645                                                         Mop(Not,bVar"b'7"),
48646                                                         Bop(And,
48647                                                             bVar"b'6",
48648                                                             Mop(Not,
48649                                                                 bVar"b'5"))))))))),
48650                             Let(Var("Rn",F4),
48651                                 Mop(Cast F4,
48652                                     LL[bVar"b'19",bVar"b'18",bVar"b'17",
48653                                        bVar"b'16"]),
48654                                 Let(Var("Rd",F4),
48655                                     Mop(Cast F4,
48656                                         LL[bVar"b'3",bVar"b'2",bVar"b'1",
48657                                            bVar"b'0"]),
48658                                     Let(Var("Rt",F4),
48659                                         Mop(Cast F4,
48660                                             LL[bVar"b'15",bVar"b'14",
48661                                                bVar"b'13",bVar"b'12"]),
48662                                         MB(Call
48663                                              ("ThumbCondition",
48664                                               ATy(qTy,PTy(F4,qTy)),LU),
48665                                            Close
48666                                              (Var("v",F4),
48667                                               MB(MB(MB(Call
48668                                                          ("ArchVersion",
48669                                                           ATy(qTy,
48670                                                               PTy(nTy,qTy)),
48671                                                           LU),
48672                                                        Close
48673                                                          (nVar"v0",
48674                                                           MB(MU(Bop(Ge,
48675                                                                     nVar"v0",
48676                                                                     LN 7),
48677                                                                 qTy),
48678                                                              Close
48679                                                                (bVar"v0",
48680                                                                 MU(TP[Var("v",
48681                                                                           F4),
48682                                                                       bVar"v0"],
48683                                                                    qTy))))),
48684                                                     Close
48685                                                       (Var("v",
48686                                                            PTy(F4,bTy)),
48687                                                        Call
48688                                                          ("Take",
48689                                                           ATy(qTy,
48690                                                               PTy(bTy,qTy)),
48691                                                           Var("v",
48692                                                               PTy(F4,bTy))))),
48693                                                  Close
48694                                                    (bVar"b",
48695                                                     ITE(bVar"b",
48696                                                         MB(ITE(Bop(Or,
48697                                                                    Bop(Or,
48698                                                                        Bop(Or,
48699                                                                            Bop(Or,
48700                                                                                Bop(In,
48701                                                                                    Var("Rd",
48702                                                                                        F4),
48703                                                                                    SL[LW(13,
48704                                                                                          4),
48705                                                                                       LW(15,
48706                                                                                          4)]),
48707                                                                                Bop(In,
48708                                                                                    Var("Rt",
48709                                                                                        F4),
48710                                                                                    SL[LW(13,
48711                                                                                          4),
48712                                                                                       LW(15,
48713                                                                                          4)])),
48714                                                                            EQ(Var("Rn",
48715                                                                                   F4),
48716                                                                               LW(15,
48717                                                                                  4))),
48718                                                                        EQ(Var("Rd",
48719                                                                               F4),
48720                                                                           Var("Rn",
48721                                                                               F4))),
48722                                                                    EQ(Var("Rd",
48723                                                                           F4),
48724                                                                       Var("Rt",
48725                                                                           F4))),
48726                                                                Call
48727                                                                  ("DECODE_UNPREDICTABLE",
48728                                                                   ATy(qTy,
48729                                                                       PTy(uTy,
48730                                                                           qTy)),
48731                                                                   TP[Var("mc",
48732                                                                          CTy"MachineCode"),
48733                                                                      LS
48734                                                                       "StoreExclusive: Byte or Halfword"]),
48735                                                                MU(LU,qTy)),
48736                                                            Close
48737                                                              (AVar uTy,
48738                                                               MU(ITE(EQ(Mop(Cast
48739                                                                               F1,
48740                                                                             LL[bVar"b'4"]),
48741                                                                         LW(1,
48742                                                                            1)),
48743                                                                      Call
48744                                                                        ("Store",
48745                                                                         CTy"instruction",
48746                                                                         Call
48747                                                                           ("StoreExclusiveHalf",
48748                                                                            CTy"Store",
48749                                                                            TP[Var("Rd",
48750                                                                                   F4),
48751                                                                               Var("Rt",
48752                                                                                   F4),
48753                                                                               Var("Rn",
48754                                                                                   F4)])),
48755                                                                      Call
48756                                                                        ("Store",
48757                                                                         CTy"instruction",
48758                                                                         Call
48759                                                                           ("StoreExclusiveByte",
48760                                                                            CTy"Store",
48761                                                                            TP[Var("Rd",
48762                                                                                   F4),
48763                                                                               Var("Rt",
48764                                                                                   F4),
48765                                                                               Var("Rn",
48766                                                                                   F4)]))),
48767                                                                  qTy))),
48768                                                         Call
48769                                                           ("Skip",
48770                                                            ATy(qTy,
48771                                                                PTy(CTy"instruction",
48772                                                                    qTy)),
48773                                                            LU)))))))))),
48774                            (Bop(And,Mop(Not,bVar"b'25"),
48775                                 Bop(And,Mop(Not,bVar"b'24"),
48776                                     Bop(And,bVar"b'23",
48777                                         Bop(And,bVar"b'22",
48778                                             Bop(And,Mop(Not,bVar"b'21"),
48779                                                 Bop(And,
48780                                                     Mop(Not,bVar"b'20"),
48781                                                     Bop(And,
48782                                                         Mop(Not,bVar"b'7"),
48783                                                         Bop(And,
48784                                                             bVar"b'6",
48785                                                             Bop(And,
48786                                                                 bVar"b'5",
48787                                                                 bVar"b'4"))))))))),
48788                             Let(Var("Rn",F4),
48789                                 Mop(Cast F4,
48790                                     LL[bVar"b'19",bVar"b'18",bVar"b'17",
48791                                        bVar"b'16"]),
48792                                 Let(Var("Rd",F4),
48793                                     Mop(Cast F4,
48794                                         LL[bVar"b'3",bVar"b'2",bVar"b'1",
48795                                            bVar"b'0"]),
48796                                     Let(Var("Rt2",F4),
48797                                         Mop(Cast F4,
48798                                             LL[bVar"b'11",bVar"b'10",
48799                                                bVar"b'9",bVar"b'8"]),
48800                                         Let(Var("Rt",F4),
48801                                             Mop(Cast F4,
48802                                                 LL[bVar"b'15",bVar"b'14",
48803                                                    bVar"b'13",bVar"b'12"]),
48804                                             MB(Call
48805                                                  ("ThumbCondition",
48806                                                   ATy(qTy,PTy(F4,qTy)),LU),
48807                                                Close
48808                                                  (Var("v",F4),
48809                                                   MB(MB(MB(Call
48810                                                              ("ArchVersion",
48811                                                               ATy(qTy,
48812                                                                   PTy(nTy,
48813                                                                       qTy)),
48814                                                               LU),
48815                                                            Close
48816                                                              (nVar"v0",
48817                                                               MB(MU(Bop(Ge,
48818                                                                         nVar"v0",
48819                                                                         LN
48820                                                                          7),
48821                                                                     qTy),
48822                                                                  Close
48823                                                                    (bVar"v0",
48824                                                                     MU(TP[Var("v",
48825                                                                               F4),
48826                                                                           bVar"v0"],
48827                                                                        qTy))))),
48828                                                         Close
48829                                                           (Var("v",
48830                                                                PTy(F4,bTy)),
48831                                                            Call
48832                                                              ("Take",
48833                                                               ATy(qTy,
48834                                                                   PTy(bTy,
48835                                                                       qTy)),
48836                                                               Var("v",
48837                                                                   PTy(F4,
48838                                                                       bTy))))),
48839                                                      Close
48840                                                        (bVar"b",
48841                                                         ITE(bVar"b",
48842                                                             MB(ITE(Bop(Or,
48843                                                                        Bop(Or,
48844                                                                            Bop(Or,
48845                                                                                Bop(Or,
48846                                                                                    Bop(Or,
48847                                                                                        Bop(In,
48848                                                                                            Var("Rd",
48849                                                                                                F4),
48850                                                                                            SL[LW(13,
48851                                                                                                  4),
48852                                                                                               LW(15,
48853                                                                                                  4)]),
48854                                                                                        Bop(In,
48855                                                                                            Var("Rt",
48856                                                                                                F4),
48857                                                                                            SL[LW(13,
48858                                                                                                  4),
48859                                                                                               LW(15,
48860                                                                                                  4)])),
48861                                                                                    Bop(In,
48862                                                                                        Var("Rt2",
48863                                                                                            F4),
48864                                                                                        SL[LW(13,
48865                                                                                              4),
48866                                                                                           LW(15,
48867                                                                                              4)])),
48868                                                                                EQ(Var("Rn",
48869                                                                                       F4),
48870                                                                                   LW(15,
48871                                                                                      4))),
48872                                                                            EQ(Var("Rd",
48873                                                                                   F4),
48874                                                                               Var("Rn",
48875                                                                                   F4))),
48876                                                                        EQ(Var("Rd",
48877                                                                               F4),
48878                                                                           Var("Rt",
48879                                                                               F4))),
48880                                                                    Call
48881                                                                      ("DECODE_UNPREDICTABLE",
48882                                                                       ATy(qTy,
48883                                                                           PTy(uTy,
48884                                                                               qTy)),
48885                                                                       TP[Var("mc",
48886                                                                              CTy"MachineCode"),
48887                                                                          LS
48888                                                                           "StoreExclusivDoubleword"]),
48889                                                                    MU(LU,
48890                                                                       qTy)),
48891                                                                Close
48892                                                                  (AVar
48893                                                                     uTy,
48894                                                                   MU(Call
48895                                                                        ("Store",
48896                                                                         CTy"instruction",
48897                                                                         Call
48898                                                                           ("StoreExclusiveDoubleword",
48899                                                                            CTy"Store",
48900                                                                            TP[Var("Rd",
48901                                                                                   F4),
48902                                                                               Var("Rt",
48903                                                                                   F4),
48904                                                                               Var("Rt2",
48905                                                                                   F4),
48906                                                                               Var("Rn",
48907                                                                                   F4)])),
48908                                                                      qTy))),
48909                                                             Call
48910                                                               ("Skip",
48911                                                                ATy(qTy,
48912                                                                    PTy(CTy"instruction",
48913                                                                        qTy)),
48914                                                                LU))))))))))),
48915                            (Bop(And,Mop(Not,bVar"b'25"),
48916                                 Bop(And,Mop(Not,bVar"b'24"),
48917                                     Bop(And,bVar"b'23",
48918                                         Bop(And,bVar"b'22",
48919                                             Bop(And,Mop(Not,bVar"b'21"),
48920                                                 Bop(And,bVar"b'20",
48921                                                     Bop(And,
48922                                                         Mop(Not,bVar"b'7"),
48923                                                         Bop(And,
48924                                                             Mop(Not,
48925                                                                 bVar"b'6"),
48926                                                             Mop(Not,
48927                                                                 bVar"b'5"))))))))),
48928                             Let(Var("Rn",F4),
48929                                 Mop(Cast F4,
48930                                     LL[bVar"b'19",bVar"b'18",bVar"b'17",
48931                                        bVar"b'16"]),
48932                                 Let(Var("Rm",F4),
48933                                     Mop(Cast F4,
48934                                         LL[bVar"b'3",bVar"b'2",bVar"b'1",
48935                                            bVar"b'0"]),
48936                                     MB(Call
48937                                          ("ThumbCondition",
48938                                           ATy(qTy,PTy(F4,qTy)),LU),
48939                                        Close
48940                                          (Var("v",F4),
48941                                           MB(MB(MB(Call
48942                                                      ("HaveThumb2",
48943                                                       ATy(qTy,
48944                                                           PTy(bTy,qTy)),
48945                                                       LU),
48946                                                    Close
48947                                                      (bVar"v0",
48948                                                       MU(TP[Var("v",F4),
48949                                                             bVar"v0"],qTy))),
48950                                                 Close
48951                                                   (Var("v",PTy(F4,bTy)),
48952                                                    Call
48953                                                      ("Take",
48954                                                       ATy(qTy,
48955                                                           PTy(bTy,qTy)),
48956                                                       Var("v",PTy(F4,bTy))))),
48957                                              Close
48958                                                (bVar"b",
48959                                                 ITE(bVar"b",
48960                                                     MB(Call
48961                                                          ("InITBlock",
48962                                                           ATy(qTy,
48963                                                               PTy(bTy,qTy)),
48964                                                           LU),
48965                                                        Close
48966                                                          (bVar"v",
48967                                                           MB(MB(MB(ITE(bVar"v",
48968                                                                        MB(Call
48969                                                                             ("LastInITBlock",
48970                                                                              ATy(qTy,
48971                                                                                  PTy(bTy,
48972                                                                                      qTy)),
48973                                                                              LU),
48974                                                                           Close
48975                                                                             (bVar"v",
48976                                                                              MU(Mop(Not,
48977                                                                                     bVar"v"),
48978                                                                                 qTy))),
48979                                                                        MU(LF,
48980                                                                           qTy)),
48981                                                                    Close
48982                                                                      (bVar"v",
48983                                                                       MU(Bop(Or,
48984                                                                              Bop(Or,
48985                                                                                  EQ(Var("Rn",
48986                                                                                         F4),
48987                                                                                     LW(13,
48988                                                                                        4)),
48989                                                                                  Bop(In,
48990                                                                                      Var("Rm",
48991                                                                                          F4),
48992                                                                                      SL[LW(13,
48993                                                                                            4),
48994                                                                                         LW(15,
48995                                                                                            4)])),
48996                                                                              bVar"v"),
48997                                                                          qTy))),
48998                                                                 Close
48999                                                                   (bVar"b",
49000                                                                    ITE(bVar"b",
49001                                                                        Call
49002                                                                          ("DECODE_UNPREDICTABLE",
49003                                                                           ATy(qTy,
49004                                                                               PTy(uTy,
49005                                                                                   qTy)),
49006                                                                           TP[Var("mc",
49007                                                                                  CTy"MachineCode"),
49008                                                                              LS
49009                                                                               "TableBranchByte"]),
49010                                                                        MU(LU,
49011                                                                           qTy)))),
49012                                                              Close
49013                                                                (AVar uTy,
49014                                                                 MU(Call
49015                                                                      ("Branch",
49016                                                                       CTy"instruction",
49017                                                                       Call
49018                                                                         ("TableBranchByte",
49019                                                                          CTy"Branch",
49020                                                                          TP[EQ(Mop(Cast
49021                                                                                      F1,
49022                                                                                    LL[bVar"b'4"]),
49023                                                                                LW(1,
49024                                                                                   1)),
49025                                                                             Var("Rm",
49026                                                                                 F4),
49027                                                                             Var("Rn",
49028                                                                                 F4)])),
49029                                                                    qTy))))),
49030                                                     Call
49031                                                       ("Skip",
49032                                                        ATy(qTy,
49033                                                            PTy(CTy"instruction",
49034                                                                qTy)),LU))))))))),
49035                            (Bop(And,Mop(Not,bVar"b'25"),
49036                                 Bop(And,Mop(Not,bVar"b'24"),
49037                                     Bop(And,bVar"b'23",
49038                                         Bop(And,bVar"b'22",
49039                                             Bop(And,Mop(Not,bVar"b'21"),
49040                                                 Bop(And,bVar"b'20",
49041                                                     Bop(And,
49042                                                         Mop(Not,bVar"b'7"),
49043                                                         Bop(And,
49044                                                             bVar"b'6",
49045                                                             Mop(Not,
49046                                                                 bVar"b'5"))))))))),
49047                             Let(Var("Rn",F4),
49048                                 Mop(Cast F4,
49049                                     LL[bVar"b'19",bVar"b'18",bVar"b'17",
49050                                        bVar"b'16"]),
49051                                 Let(Var("Rt",F4),
49052                                     Mop(Cast F4,
49053                                         LL[bVar"b'15",bVar"b'14",
49054                                            bVar"b'13",bVar"b'12"]),
49055                                     MB(Call
49056                                          ("ThumbCondition",
49057                                           ATy(qTy,PTy(F4,qTy)),LU),
49058                                        Close
49059                                          (Var("v",F4),
49060                                           MB(MB(MB(Call
49061                                                      ("ArchVersion",
49062                                                       ATy(qTy,
49063                                                           PTy(nTy,qTy)),
49064                                                       LU),
49065                                                    Close
49066                                                      (nVar"v0",
49067                                                       MB(MU(Bop(Ge,
49068                                                                 nVar"v0",
49069                                                                 LN 7),qTy),
49070                                                          Close
49071                                                            (bVar"v0",
49072                                                             MU(TP[Var("v",
49073                                                                       F4),
49074                                                                   bVar"v0"],
49075                                                                qTy))))),
49076                                                 Close
49077                                                   (Var("v",PTy(F4,bTy)),
49078                                                    Call
49079                                                      ("Take",
49080                                                       ATy(qTy,
49081                                                           PTy(bTy,qTy)),
49082                                                       Var("v",PTy(F4,bTy))))),
49083                                              Close
49084                                                (bVar"b",
49085                                                 ITE(bVar"b",
49086                                                     MB(ITE(Bop(Or,
49087                                                                Bop(In,
49088                                                                    Var("Rt",
49089                                                                        F4),
49090                                                                    SL[LW(13,
49091                                                                          4),
49092                                                                       LW(15,
49093                                                                          4)]),
49094                                                                EQ(Var("Rn",
49095                                                                       F4),
49096                                                                   LW(15,4))),
49097                                                            Call
49098                                                              ("DECODE_UNPREDICTABLE",
49099                                                               ATy(qTy,
49100                                                                   PTy(uTy,
49101                                                                       qTy)),
49102                                                               TP[Var("mc",
49103                                                                      CTy"MachineCode"),
49104                                                                  LS
49105                                                                   "LoadExclusive: Byte or Halfword"]),
49106                                                            MU(LU,qTy)),
49107                                                        Close
49108                                                          (AVar uTy,
49109                                                           MU(ITE(EQ(Mop(Cast
49110                                                                           F1,
49111                                                                         LL[bVar"b'4"]),
49112                                                                     LW(1,
49113                                                                        1)),
49114                                                                  Call
49115                                                                    ("Load",
49116                                                                     CTy"instruction",
49117                                                                     Call
49118                                                                       ("LoadExclusiveHalf",
49119                                                                        CTy"Load",
49120                                                                        TP[Var("Rt",
49121                                                                               F4),
49122                                                                           Var("Rn",
49123                                                                               F4)])),
49124                                                                  Call
49125                                                                    ("Load",
49126                                                                     CTy"instruction",
49127                                                                     Call
49128                                                                       ("LoadExclusiveByte",
49129                                                                        CTy"Load",
49130                                                                        TP[Var("Rt",
49131                                                                               F4),
49132                                                                           Var("Rn",
49133                                                                               F4)]))),
49134                                                              qTy))),
49135                                                     Call
49136                                                       ("Skip",
49137                                                        ATy(qTy,
49138                                                            PTy(CTy"instruction",
49139                                                                qTy)),LU))))))))),
49140                            (Bop(And,Mop(Not,bVar"b'25"),
49141                                 Bop(And,Mop(Not,bVar"b'24"),
49142                                     Bop(And,bVar"b'23",
49143                                         Bop(And,bVar"b'22",
49144                                             Bop(And,Mop(Not,bVar"b'21"),
49145                                                 Bop(And,bVar"b'20",
49146                                                     Bop(And,
49147                                                         Mop(Not,bVar"b'7"),
49148                                                         Bop(And,
49149                                                             bVar"b'6",
49150                                                             Bop(And,
49151                                                                 bVar"b'5",
49152                                                                 bVar"b'4"))))))))),
49153                             Let(Var("Rn",F4),
49154                                 Mop(Cast F4,
49155                                     LL[bVar"b'19",bVar"b'18",bVar"b'17",
49156                                        bVar"b'16"]),
49157                                 Let(Var("Rt2",F4),
49158                                     Mop(Cast F4,
49159                                         LL[bVar"b'11",bVar"b'10",
49160                                            bVar"b'9",bVar"b'8"]),
49161                                     Let(Var("Rt",F4),
49162                                         Mop(Cast F4,
49163                                             LL[bVar"b'15",bVar"b'14",
49164                                                bVar"b'13",bVar"b'12"]),
49165                                         MB(Call
49166                                              ("ThumbCondition",
49167                                               ATy(qTy,PTy(F4,qTy)),LU),
49168                                            Close
49169                                              (Var("v",F4),
49170                                               MB(MB(MB(Call
49171                                                          ("ArchVersion",
49172                                                           ATy(qTy,
49173                                                               PTy(nTy,qTy)),
49174                                                           LU),
49175                                                        Close
49176                                                          (nVar"v0",
49177                                                           MB(MU(Bop(Ge,
49178                                                                     nVar"v0",
49179                                                                     LN 7),
49180                                                                 qTy),
49181                                                              Close
49182                                                                (bVar"v0",
49183                                                                 MU(TP[Var("v",
49184                                                                           F4),
49185                                                                       bVar"v0"],
49186                                                                    qTy))))),
49187                                                     Close
49188                                                       (Var("v",
49189                                                            PTy(F4,bTy)),
49190                                                        Call
49191                                                          ("Take",
49192                                                           ATy(qTy,
49193                                                               PTy(bTy,qTy)),
49194                                                           Var("v",
49195                                                               PTy(F4,bTy))))),
49196                                                  Close
49197                                                    (bVar"b",
49198                                                     ITE(bVar"b",
49199                                                         MB(ITE(Bop(Or,
49200                                                                    Bop(Or,
49201                                                                        Bop(Or,
49202                                                                            Bop(In,
49203                                                                                Var("Rt",
49204                                                                                    F4),
49205                                                                                SL[LW(13,
49206                                                                                      4),
49207                                                                                   LW(15,
49208                                                                                      4)]),
49209                                                                            Bop(In,
49210                                                                                Var("Rt2",
49211                                                                                    F4),
49212                                                                                SL[LW(13,
49213                                                                                      4),
49214                                                                                   LW(15,
49215                                                                                      4)])),
49216                                                                        EQ(Var("Rt",
49217                                                                               F4),
49218                                                                           Var("Rt2",
49219                                                                               F4))),
49220                                                                    EQ(Var("Rn",
49221                                                                           F4),
49222                                                                       LW(15,
49223                                                                          4))),
49224                                                                Call
49225                                                                  ("DECODE_UNPREDICTABLE",
49226                                                                   ATy(qTy,
49227                                                                       PTy(uTy,
49228                                                                           qTy)),
49229                                                                   TP[Var("mc",
49230                                                                          CTy"MachineCode"),
49231                                                                      LS
49232                                                                       "LoadExclusiveDoubleword"]),
49233                                                                MU(LU,qTy)),
49234                                                            Close
49235                                                              (AVar uTy,
49236                                                               MU(Call
49237                                                                    ("Load",
49238                                                                     CTy"instruction",
49239                                                                     Call
49240                                                                       ("LoadExclusiveDoubleword",
49241                                                                        CTy"Load",
49242                                                                        TP[Var("Rt",
49243                                                                               F4),
49244                                                                           Var("Rt2",
49245                                                                               F4),
49246                                                                           Var("Rn",
49247                                                                               F4)])),
49248                                                                  qTy))),
49249                                                         Call
49250                                                           ("Skip",
49251                                                            ATy(qTy,
49252                                                                PTy(CTy"instruction",
49253                                                                    qTy)),
49254                                                            LU)))))))))),
49255                            (Bop(And,Mop(Not,bVar"b'25"),
49256                                 Bop(And,bVar"b'22",Mop(Not,bVar"b'20"))),
49257                             Let(Var("Rn",F4),
49258                                 Mop(Cast F4,
49259                                     LL[bVar"b'19",bVar"b'18",bVar"b'17",
49260                                        bVar"b'16"]),
49261                                 Let(Var("W",F1),
49262                                     Mop(Cast F1,LL[bVar"b'21"]),
49263                                     Let(Var("P",F1),
49264                                         Mop(Cast F1,LL[bVar"b'24"]),
49265                                         Let(Var("Rt2",F4),
49266                                             Mop(Cast F4,
49267                                                 LL[bVar"b'11",bVar"b'10",
49268                                                    bVar"b'9",bVar"b'8"]),
49269                                             Let(Var("Rt",F4),
49270                                                 Mop(Cast F4,
49271                                                     LL[bVar"b'15",
49272                                                        bVar"b'14",
49273                                                        bVar"b'13",
49274                                                        bVar"b'12"]),
49275                                                 MB(Call
49276                                                      ("ThumbCondition",
49277                                                       ATy(qTy,PTy(F4,qTy)),
49278                                                       LU),
49279                                                    Close
49280                                                      (Var("v",F4),
49281                                                       MB(MB(MB(Call
49282                                                                  ("HaveThumb2",
49283                                                                   ATy(qTy,
49284                                                                       PTy(bTy,
49285                                                                           qTy)),
49286                                                                   LU),
49287                                                                Close
49288                                                                  (bVar"v0",
49289                                                                   MB(MU(Bop(And,
49290                                                                             Bop(Or,
49291                                                                                 EQ(Var("P",
49292                                                                                        F1),
49293                                                                                    LW(1,
49294                                                                                       1)),
49295                                                                                 EQ(Var("W",
49296                                                                                        F1),
49297                                                                                    LW(1,
49298                                                                                       1))),
49299                                                                             bVar"v0"),
49300                                                                         qTy),
49301                                                                      Close
49302                                                                        (bVar"v0",
49303                                                                         MU(TP[Var("v",
49304                                                                                   F4),
49305                                                                               bVar"v0"],
49306                                                                            qTy))))),
49307                                                             Close
49308                                                               (Var("v",
49309                                                                    PTy(F4,
49310                                                                        bTy)),
49311                                                                Call
49312                                                                  ("Take",
49313                                                                   ATy(qTy,
49314                                                                       PTy(bTy,
49315                                                                           qTy)),
49316                                                                   Var("v",
49317                                                                       PTy(F4,
49318                                                                           bTy))))),
49319                                                          Close
49320                                                            (bVar"b",
49321                                                             ITE(bVar"b",
49322                                                                 Let(bVar"wback",
49323                                                                     EQ(Var("W",
49324                                                                            F1),
49325                                                                        LW(1,
49326                                                                           1)),
49327                                                                     MB(ITE(Bop(Or,
49328                                                                                Bop(Or,
49329                                                                                    Bop(Or,
49330                                                                                        Bop(And,
49331                                                                                            bVar"wback",
49332                                                                                            Bop(Or,
49333                                                                                                EQ(Var("Rn",
49334                                                                                                       F4),
49335                                                                                                   Var("Rt",
49336                                                                                                       F4)),
49337                                                                                                EQ(Var("Rn",
49338                                                                                                       F4),
49339                                                                                                   Var("Rt2",
49340                                                                                                       F4)))),
49341                                                                                        EQ(Var("Rn",
49342                                                                                               F4),
49343                                                                                           LW(15,
49344                                                                                              4))),
49345                                                                                    Bop(In,
49346                                                                                        Var("Rt",
49347                                                                                            F4),
49348                                                                                        SL[LW(13,
49349                                                                                              4),
49350                                                                                           LW(15,
49351                                                                                              4)])),
49352                                                                                Bop(In,
49353                                                                                    Var("Rt2",
49354                                                                                        F4),
49355                                                                                    SL[LW(13,
49356                                                                                          4),
49357                                                                                       LW(15,
49358                                                                                          4)])),
49359                                                                            Call
49360                                                                              ("DECODE_UNPREDICTABLE",
49361                                                                               ATy(qTy,
49362                                                                                   PTy(uTy,
49363                                                                                       qTy)),
49364                                                                               TP[Var("mc",
49365                                                                                      CTy"MachineCode"),
49366                                                                                  LS
49367                                                                                   "StoreDual"]),
49368                                                                            MU(LU,
49369                                                                               qTy)),
49370                                                                        Close
49371                                                                          (AVar
49372                                                                             uTy,
49373                                                                           MU(Call
49374                                                                                ("Store",
49375                                                                                 CTy"instruction",
49376                                                                                 Call
49377                                                                                   ("StoreDual",
49378                                                                                    CTy"Store",
49379                                                                                    TP[EQ(Mop(Cast
49380                                                                                                F1,
49381                                                                                              LL[bVar"b'23"]),
49382                                                                                          LW(1,
49383                                                                                             1)),
49384                                                                                       EQ(Var("P",
49385                                                                                              F1),
49386                                                                                          LW(1,
49387                                                                                             1)),
49388                                                                                       bVar"wback",
49389                                                                                       Var("Rt",
49390                                                                                           F4),
49391                                                                                       Var("Rt2",
49392                                                                                           F4),
49393                                                                                       Var("Rn",
49394                                                                                           F4),
49395                                                                                       Call
49396                                                                                         ("immediate_form2",
49397                                                                                          CTy"offset2",
49398                                                                                          Mop(Cast
49399                                                                                                F32,
49400                                                                                              CC[Mop(Cast
49401                                                                                                       F8,
49402                                                                                                     LL[bVar"b'7",
49403                                                                                                        bVar"b'6",
49404                                                                                                        bVar"b'5",
49405                                                                                                        bVar"b'4",
49406                                                                                                        bVar"b'3",
49407                                                                                                        bVar"b'2",
49408                                                                                                        bVar"b'1",
49409                                                                                                        bVar"b'0"]),
49410                                                                                                 LW(0,
49411                                                                                                    2)]))])),
49412                                                                              qTy)))),
49413                                                                 Call
49414                                                                   ("Skip",
49415                                                                    ATy(qTy,
49416                                                                        PTy(CTy"instruction",
49417                                                                            qTy)),
49418                                                                    LU)))))))))))),
49419                            (Bop(And,Mop(Not,bVar"b'25"),
49420                                 Bop(And,bVar"b'22",
49421                                     Bop(And,bVar"b'20",
49422                                         Bop(And,bVar"b'19",
49423                                             Bop(And,bVar"b'18",
49424                                                 Bop(And,bVar"b'17",
49425                                                     bVar"b'16")))))),
49426                             Let(Var("W",F1),Mop(Cast F1,LL[bVar"b'21"]),
49427                                 Let(Var("Rt2",F4),
49428                                     Mop(Cast F4,
49429                                         LL[bVar"b'11",bVar"b'10",
49430                                            bVar"b'9",bVar"b'8"]),
49431                                     Let(Var("Rt",F4),
49432                                         Mop(Cast F4,
49433                                             LL[bVar"b'15",bVar"b'14",
49434                                                bVar"b'13",bVar"b'12"]),
49435                                         MB(Call
49436                                              ("ThumbCondition",
49437                                               ATy(qTy,PTy(F4,qTy)),LU),
49438                                            Close
49439                                              (Var("v",F4),
49440                                               MB(MB(MB(Call
49441                                                          ("HaveThumb2",
49442                                                           ATy(qTy,
49443                                                               PTy(bTy,qTy)),
49444                                                           LU),
49445                                                        Close
49446                                                          (bVar"v0",
49447                                                           MB(MU(Bop(And,
49448                                                                     Bop(Or,
49449                                                                         EQ(Mop(Cast
49450                                                                                  F1,
49451                                                                                LL[bVar"b'24"]),
49452                                                                            LW(1,
49453                                                                               1)),
49454                                                                         EQ(Var("W",
49455                                                                                F1),
49456                                                                            LW(1,
49457                                                                               1))),
49458                                                                     bVar"v0"),
49459                                                                 qTy),
49460                                                              Close
49461                                                                (bVar"v0",
49462                                                                 MU(TP[Var("v",
49463                                                                           F4),
49464                                                                       bVar"v0"],
49465                                                                    qTy))))),
49466                                                     Close
49467                                                       (Var("v",
49468                                                            PTy(F4,bTy)),
49469                                                        Call
49470                                                          ("Take",
49471                                                           ATy(qTy,
49472                                                               PTy(bTy,qTy)),
49473                                                           Var("v",
49474                                                               PTy(F4,bTy))))),
49475                                                  Close
49476                                                    (bVar"b",
49477                                                     ITE(bVar"b",
49478                                                         MB(ITE(Bop(Or,
49479                                                                    Bop(Or,
49480                                                                        Bop(Or,
49481                                                                            Bop(In,
49482                                                                                Var("Rt",
49483                                                                                    F4),
49484                                                                                SL[LW(13,
49485                                                                                      4),
49486                                                                                   LW(15,
49487                                                                                      4)]),
49488                                                                            Bop(In,
49489                                                                                Var("Rt2",
49490                                                                                    F4),
49491                                                                                SL[LW(13,
49492                                                                                      4),
49493                                                                                   LW(15,
49494                                                                                      4)])),
49495                                                                        EQ(Var("Rt",
49496                                                                               F4),
49497                                                                           Var("Rt2",
49498                                                                               F4))),
49499                                                                    EQ(Var("W",
49500                                                                           F1),
49501                                                                       LW(1,
49502                                                                          1))),
49503                                                                Call
49504                                                                  ("DECODE_UNPREDICTABLE",
49505                                                                   ATy(qTy,
49506                                                                       PTy(uTy,
49507                                                                           qTy)),
49508                                                                   TP[Var("mc",
49509                                                                          CTy"MachineCode"),
49510                                                                      LS
49511                                                                       "LoadDual: literal"]),
49512                                                                MU(LU,qTy)),
49513                                                            Close
49514                                                              (AVar uTy,
49515                                                               MU(Call
49516                                                                    ("Load",
49517                                                                     CTy"instruction",
49518                                                                     Call
49519                                                                       ("LoadDualLiteral",
49520                                                                        CTy"Load",
49521                                                                        TP[EQ(Mop(Cast
49522                                                                                    F1,
49523                                                                                  LL[bVar"b'23"]),
49524                                                                              LW(1,
49525                                                                                 1)),
49526                                                                           Var("Rt",
49527                                                                               F4),
49528                                                                           Var("Rt2",
49529                                                                               F4),
49530                                                                           Mop(Cast
49531                                                                                 F32,
49532                                                                               CC[Mop(Cast
49533                                                                                        F8,
49534                                                                                      LL[bVar"b'7",
49535                                                                                         bVar"b'6",
49536                                                                                         bVar"b'5",
49537                                                                                         bVar"b'4",
49538                                                                                         bVar"b'3",
49539                                                                                         bVar"b'2",
49540                                                                                         bVar"b'1",
49541                                                                                         bVar"b'0"]),
49542                                                                                  LW(0,
49543                                                                                     2)])])),
49544                                                                  qTy))),
49545                                                         Call
49546                                                           ("Skip",
49547                                                            ATy(qTy,
49548                                                                PTy(CTy"instruction",
49549                                                                    qTy)),
49550                                                            LU)))))))))),
49551                            (Bop(And,Mop(Not,bVar"b'25"),
49552                                 Bop(And,bVar"b'22",bVar"b'20")),
49553                             Let(Var("Rn",F4),
49554                                 Mop(Cast F4,
49555                                     LL[bVar"b'19",bVar"b'18",bVar"b'17",
49556                                        bVar"b'16"]),
49557                                 Let(Var("W",F1),
49558                                     Mop(Cast F1,LL[bVar"b'21"]),
49559                                     Let(Var("P",F1),
49560                                         Mop(Cast F1,LL[bVar"b'24"]),
49561                                         Let(Var("Rt2",F4),
49562                                             Mop(Cast F4,
49563                                                 LL[bVar"b'11",bVar"b'10",
49564                                                    bVar"b'9",bVar"b'8"]),
49565                                             Let(Var("Rt",F4),
49566                                                 Mop(Cast F4,
49567                                                     LL[bVar"b'15",
49568                                                        bVar"b'14",
49569                                                        bVar"b'13",
49570                                                        bVar"b'12"]),
49571                                                 MB(Call
49572                                                      ("ThumbCondition",
49573                                                       ATy(qTy,PTy(F4,qTy)),
49574                                                       LU),
49575                                                    Close
49576                                                      (Var("v",F4),
49577                                                       MB(MB(MB(Call
49578                                                                  ("HaveThumb2",
49579                                                                   ATy(qTy,
49580                                                                       PTy(bTy,
49581                                                                           qTy)),
49582                                                                   LU),
49583                                                                Close
49584                                                                  (bVar"v0",
49585                                                                   MB(MU(Bop(And,
49586                                                                             Bop(Or,
49587                                                                                 EQ(Var("P",
49588                                                                                        F1),
49589                                                                                    LW(1,
49590                                                                                       1)),
49591                                                                                 EQ(Var("W",
49592                                                                                        F1),
49593                                                                                    LW(1,
49594                                                                                       1))),
49595                                                                             bVar"v0"),
49596                                                                         qTy),
49597                                                                      Close
49598                                                                        (bVar"v0",
49599                                                                         MU(TP[Var("v",
49600                                                                                   F4),
49601                                                                               bVar"v0"],
49602                                                                            qTy))))),
49603                                                             Close
49604                                                               (Var("v",
49605                                                                    PTy(F4,
49606                                                                        bTy)),
49607                                                                Call
49608                                                                  ("Take",
49609                                                                   ATy(qTy,
49610                                                                       PTy(bTy,
49611                                                                           qTy)),
49612                                                                   Var("v",
49613                                                                       PTy(F4,
49614                                                                           bTy))))),
49615                                                          Close
49616                                                            (bVar"b",
49617                                                             ITE(bVar"b",
49618                                                                 Let(bVar"wback",
49619                                                                     EQ(Var("W",
49620                                                                            F1),
49621                                                                        LW(1,
49622                                                                           1)),
49623                                                                     MB(ITE(Bop(Or,
49624                                                                                Bop(Or,
49625                                                                                    Bop(Or,
49626                                                                                        Bop(And,
49627                                                                                            bVar"wback",
49628                                                                                            Bop(Or,
49629                                                                                                EQ(Var("Rn",
49630                                                                                                       F4),
49631                                                                                                   Var("Rt",
49632                                                                                                       F4)),
49633                                                                                                EQ(Var("Rn",
49634                                                                                                       F4),
49635                                                                                                   Var("Rt2",
49636                                                                                                       F4)))),
49637                                                                                        Bop(In,
49638                                                                                            Var("Rt",
49639                                                                                                F4),
49640                                                                                            SL[LW(13,
49641                                                                                                  4),
49642                                                                                               LW(15,
49643                                                                                                  4)])),
49644                                                                                    Bop(In,
49645                                                                                        Var("Rt2",
49646                                                                                            F4),
49647                                                                                        SL[LW(13,
49648                                                                                              4),
49649                                                                                           LW(15,
49650                                                                                              4)])),
49651                                                                                EQ(Var("Rt",
49652                                                                                       F4),
49653                                                                                   Var("Rt2",
49654                                                                                       F4))),
49655                                                                            Call
49656                                                                              ("DECODE_UNPREDICTABLE",
49657                                                                               ATy(qTy,
49658                                                                                   PTy(uTy,
49659                                                                                       qTy)),
49660                                                                               TP[Var("mc",
49661                                                                                      CTy"MachineCode"),
49662                                                                                  LS
49663                                                                                   "LoadDual"]),
49664                                                                            MU(LU,
49665                                                                               qTy)),
49666                                                                        Close
49667                                                                          (AVar
49668                                                                             uTy,
49669                                                                           MU(Call
49670                                                                                ("Load",
49671                                                                                 CTy"instruction",
49672                                                                                 Call
49673                                                                                   ("LoadDual",
49674                                                                                    CTy"Load",
49675                                                                                    TP[EQ(Mop(Cast
49676                                                                                                F1,
49677                                                                                              LL[bVar"b'23"]),
49678                                                                                          LW(1,
49679                                                                                             1)),
49680                                                                                       EQ(Var("P",
49681                                                                                              F1),
49682                                                                                          LW(1,
49683                                                                                             1)),
49684                                                                                       bVar"wback",
49685                                                                                       Var("Rt",
49686                                                                                           F4),
49687                                                                                       Var("Rt2",
49688                                                                                           F4),
49689                                                                                       Var("Rn",
49690                                                                                           F4),
49691                                                                                       Call
49692                                                                                         ("immediate_form2",
49693                                                                                          CTy"offset2",
49694                                                                                          Mop(Cast
49695                                                                                                F32,
49696                                                                                              CC[Mop(Cast
49697                                                                                                       F8,
49698                                                                                                     LL[bVar"b'7",
49699                                                                                                        bVar"b'6",
49700                                                                                                        bVar"b'5",
49701                                                                                                        bVar"b'4",
49702                                                                                                        bVar"b'3",
49703                                                                                                        bVar"b'2",
49704                                                                                                        bVar"b'1",
49705                                                                                                        bVar"b'0"]),
49706                                                                                                 LW(0,
49707                                                                                                    2)]))])),
49708                                                                              qTy)))),
49709                                                                 Call
49710                                                                   ("Skip",
49711                                                                    ATy(qTy,
49712                                                                        PTy(CTy"instruction",
49713                                                                            qTy)),
49714                                                                    LU)))))))))))),
49715                            (bVar"b'25",
49716                             Let(Var("Rn",F4),
49717                                 Mop(Cast F4,
49718                                     LL[bVar"b'19",bVar"b'18",bVar"b'17",
49719                                        bVar"b'16"]),
49720                                 Let(Var("S",F1),
49721                                     Mop(Cast F1,LL[bVar"b'20"]),
49722                                     Let(Var("Rm",F4),
49723                                         Mop(Cast F4,
49724                                             LL[bVar"b'3",bVar"b'2",
49725                                                bVar"b'1",bVar"b'0"]),
49726                                         Let(Var("typ",FTy 2),
49727                                             Mop(Cast(FTy 2),
49728                                                 LL[bVar"b'5",bVar"b'4"]),
49729                                             Let(Var("imm2",FTy 2),
49730                                                 Mop(Cast(FTy 2),
49731                                                     LL[bVar"b'7",
49732                                                        bVar"b'6"]),
49733                                                 Let(Var("Rd",F4),
49734                                                     Mop(Cast F4,
49735                                                         LL[bVar"b'11",
49736                                                            bVar"b'10",
49737                                                            bVar"b'9",
49738                                                            bVar"b'8"]),
49739                                                     Let(Var("imm3",FTy 3),
49740                                                         Mop(Cast(FTy 3),
49741                                                             LL[bVar"b'14",
49742                                                                bVar"b'13",
49743                                                                bVar"b'12"]),
49744                                                         MB(Call
49745                                                              ("ThumbCondition",
49746                                                               ATy(qTy,
49747                                                                   PTy(F4,
49748                                                                       qTy)),
49749                                                               LU),
49750                                                            Close
49751                                                              (Var("v",F4),
49752                                                               MB(MB(MB(Call
49753                                                                          ("HaveThumb2",
49754                                                                           ATy(qTy,
49755                                                                               PTy(bTy,
49756                                                                                   qTy)),
49757                                                                           LU),
49758                                                                        Close
49759                                                                          (bVar"v0",
49760                                                                           MU(TP[Var("v",
49761                                                                                     F4),
49762                                                                                 bVar"v0"],
49763                                                                              qTy))),
49764                                                                     Close
49765                                                                       (Var("v",
49766                                                                            PTy(F4,
49767                                                                                bTy)),
49768                                                                        Call
49769                                                                          ("Take",
49770                                                                           ATy(qTy,
49771                                                                               PTy(bTy,
49772                                                                                   qTy)),
49773                                                                           Var("v",
49774                                                                               PTy(F4,
49775                                                                                   bTy))))),
49776                                                                  Close
49777                                                                    (bVar"b",
49778                                                                     ITE(bVar"b",
49779                                                                         Let(TP[Var("shift_t",
49780                                                                                    CTy"SRType"),
49781                                                                                nVar"shift_n"],
49782                                                                             Call
49783                                                                               ("DecodeImmShift",
49784                                                                                PTy(CTy"SRType",
49785                                                                                    nTy),
49786                                                                                TP[Var("typ",
49787                                                                                       FTy 2),
49788                                                                                   CC[Var("imm3",
49789                                                                                          FTy 3),
49790                                                                                      Var("imm2",
49791                                                                                          FTy 2)]]),
49792                                                                             Let(bVar"setflags",
49793                                                                                 EQ(Var("S",
49794                                                                                        F1),
49795                                                                                    LW(1,
49796                                                                                       1)),
49797                                                                                 CS(TP[Mop(Cast
49798                                                                                             F4,
49799                                                                                           LL[bVar"b'24",
49800                                                                                              bVar"b'23",
49801                                                                                              bVar"b'22",
49802                                                                                              bVar"b'21"]),
49803                                                                                       Var("Rn",
49804                                                                                           F4),
49805                                                                                       Var("Rd",
49806                                                                                           F4),
49807                                                                                       Var("S",
49808                                                                                           F1)],
49809                                                                                    [(TP[LW(0,
49810                                                                                            4),
49811                                                                                         AVar
49812                                                                                           F4,
49813                                                                                         LW(15,
49814                                                                                            4),
49815                                                                                         LW(1,
49816                                                                                            1)],
49817                                                                                      MB(ITE(Bop(Or,
49818                                                                                                 Bop(In,
49819                                                                                                     Var("Rn",
49820                                                                                                         F4),
49821                                                                                                     SL[LW(13,
49822                                                                                                           4),
49823                                                                                                        LW(15,
49824                                                                                                           4)]),
49825                                                                                                 Bop(In,
49826                                                                                                     Var("Rm",
49827                                                                                                         F4),
49828                                                                                                     SL[LW(13,
49829                                                                                                           4),
49830                                                                                                        LW(15,
49831                                                                                                           4)])),
49832                                                                                             Call
49833                                                                                               ("DECODE_UNPREDICTABLE",
49834                                                                                                ATy(qTy,
49835                                                                                                    PTy(uTy,
49836                                                                                                        qTy)),
49837                                                                                                TP[Var("mc",
49838                                                                                                       CTy"MachineCode"),
49839                                                                                                   LS
49840                                                                                                    "TST (register)"]),
49841                                                                                             MU(LU,
49842                                                                                                qTy)),
49843                                                                                         Close
49844                                                                                           (AVar
49845                                                                                              uTy,
49846                                                                                            MU(Call
49847                                                                                                 ("Data",
49848                                                                                                  CTy"instruction",
49849                                                                                                  Call
49850                                                                                                    ("TestCompareRegister",
49851                                                                                                     CTy"Data",
49852                                                                                                     TP[LW(0,
49853                                                                                                           2),
49854                                                                                                        Var("Rn",
49855                                                                                                            F4),
49856                                                                                                        Var("Rm",
49857                                                                                                            F4),
49858                                                                                                        Var("shift_t",
49859                                                                                                            CTy"SRType"),
49860                                                                                                        nVar"shift_n"])),
49861                                                                                               qTy)))),
49862                                                                                     (TP[LW(0,
49863                                                                                            4),
49864                                                                                         AVar
49865                                                                                           (PTy(F4,
49866                                                                                                PTy(F4,
49867                                                                                                    F1)))],
49868                                                                                      MB(ITE(Bop(Or,
49869                                                                                                 Bop(Or,
49870                                                                                                     Bop(Or,
49871                                                                                                         EQ(Var("Rd",
49872                                                                                                                F4),
49873                                                                                                            LW(13,
49874                                                                                                               4)),
49875                                                                                                         Bop(And,
49876                                                                                                             EQ(Var("Rd",
49877                                                                                                                    F4),
49878                                                                                                                LW(15,
49879                                                                                                                   4)),
49880                                                                                                             Mop(Not,
49881                                                                                                                 bVar"setflags"))),
49882                                                                                                     Bop(In,
49883                                                                                                         Var("Rn",
49884                                                                                                             F4),
49885                                                                                                         SL[LW(13,
49886                                                                                                               4),
49887                                                                                                            LW(15,
49888                                                                                                               4)])),
49889                                                                                                 Bop(In,
49890                                                                                                     Var("Rm",
49891                                                                                                         F4),
49892                                                                                                     SL[LW(13,
49893                                                                                                           4),
49894                                                                                                        LW(15,
49895                                                                                                           4)])),
49896                                                                                             Call
49897                                                                                               ("DECODE_UNPREDICTABLE",
49898                                                                                                ATy(qTy,
49899                                                                                                    PTy(uTy,
49900                                                                                                        qTy)),
49901                                                                                                TP[Var("mc",
49902                                                                                                       CTy"MachineCode"),
49903                                                                                                   LS
49904                                                                                                    "AND (register)"]),
49905                                                                                             MU(LU,
49906                                                                                                qTy)),
49907                                                                                         Close
49908                                                                                           (AVar
49909                                                                                              uTy,
49910                                                                                            MU(Call
49911                                                                                                 ("Data",
49912                                                                                                  CTy"instruction",
49913                                                                                                  Call
49914                                                                                                    ("Register",
49915                                                                                                     CTy"Data",
49916                                                                                                     TP[LW(0,
49917                                                                                                           4),
49918                                                                                                        bVar"setflags",
49919                                                                                                        Var("Rd",
49920                                                                                                            F4),
49921                                                                                                        Var("Rn",
49922                                                                                                            F4),
49923                                                                                                        Var("Rm",
49924                                                                                                            F4),
49925                                                                                                        Var("shift_t",
49926                                                                                                            CTy"SRType"),
49927                                                                                                        nVar"shift_n"])),
49928                                                                                               qTy)))),
49929                                                                                     (TP[LW(1,
49930                                                                                            4),
49931                                                                                         AVar
49932                                                                                           (PTy(F4,
49933                                                                                                PTy(F4,
49934                                                                                                    F1)))],
49935                                                                                      MB(ITE(Bop(Or,
49936                                                                                                 Bop(Or,
49937                                                                                                     Bop(In,
49938                                                                                                         Var("Rd",
49939                                                                                                             F4),
49940                                                                                                         SL[LW(13,
49941                                                                                                               4),
49942                                                                                                            LW(15,
49943                                                                                                               4)]),
49944                                                                                                     Bop(In,
49945                                                                                                         Var("Rn",
49946                                                                                                             F4),
49947                                                                                                         SL[LW(13,
49948                                                                                                               4),
49949                                                                                                            LW(15,
49950                                                                                                               4)])),
49951                                                                                                 Bop(In,
49952                                                                                                     Var("Rm",
49953                                                                                                         F4),
49954                                                                                                     SL[LW(13,
49955                                                                                                           4),
49956                                                                                                        LW(15,
49957                                                                                                           4)])),
49958                                                                                             Call
49959                                                                                               ("DECODE_UNPREDICTABLE",
49960                                                                                                ATy(qTy,
49961                                                                                                    PTy(uTy,
49962                                                                                                        qTy)),
49963                                                                                                TP[Var("mc",
49964                                                                                                       CTy"MachineCode"),
49965                                                                                                   LS
49966                                                                                                    "BIC (register)"]),
49967                                                                                             MU(LU,
49968                                                                                                qTy)),
49969                                                                                         Close
49970                                                                                           (AVar
49971                                                                                              uTy,
49972                                                                                            MU(Call
49973                                                                                                 ("Data",
49974                                                                                                  CTy"instruction",
49975                                                                                                  Call
49976                                                                                                    ("Register",
49977                                                                                                     CTy"Data",
49978                                                                                                     TP[LW(14,
49979                                                                                                           4),
49980                                                                                                        bVar"setflags",
49981                                                                                                        Var("Rd",
49982                                                                                                            F4),
49983                                                                                                        Var("Rn",
49984                                                                                                            F4),
49985                                                                                                        Var("Rm",
49986                                                                                                            F4),
49987                                                                                                        Var("shift_t",
49988                                                                                                            CTy"SRType"),
49989                                                                                                        nVar"shift_n"])),
49990                                                                                               qTy)))),
49991                                                                                     (TP[LW(2,
49992                                                                                            4),
49993                                                                                         LW(15,
49994                                                                                            4),
49995                                                                                         AVar
49996                                                                                           (PTy(F4,
49997                                                                                                F1))],
49998                                                                                      MB(ITB([(Bop(And,
49999                                                                                                   Bop(And,
50000                                                                                                       EQ(Var("typ",
50001                                                                                                              FTy 2),
50002                                                                                                          LW(0,
50003                                                                                                             2)),
50004                                                                                                       EQ(Var("imm3",
50005                                                                                                              FTy 3),
50006                                                                                                          LW(0,
50007                                                                                                             3))),
50008                                                                                                   EQ(Var("imm2",
50009                                                                                                          FTy 2),
50010                                                                                                      LW(0,
50011                                                                                                         2))),
50012                                                                                               ITE(Bop(Or,
50013                                                                                                       Bop(And,
50014                                                                                                           bVar"setflags",
50015                                                                                                           Bop(Or,
50016                                                                                                               Bop(In,
50017                                                                                                                   Var("Rd",
50018                                                                                                                       F4),
50019                                                                                                                   SL[LW(13,
50020                                                                                                                         4),
50021                                                                                                                      LW(15,
50022                                                                                                                         4)]),
50023                                                                                                               Bop(In,
50024                                                                                                                   Var("Rm",
50025                                                                                                                       F4),
50026                                                                                                                   SL[LW(13,
50027                                                                                                                         4),
50028                                                                                                                      LW(15,
50029                                                                                                                         4)]))),
50030                                                                                                       Bop(And,
50031                                                                                                           Mop(Not,
50032                                                                                                               bVar"setflags"),
50033                                                                                                           Bop(Or,
50034                                                                                                               Bop(Or,
50035                                                                                                                   EQ(Var("Rd",
50036                                                                                                                          F4),
50037                                                                                                                      LW(15,
50038                                                                                                                         4)),
50039                                                                                                                   EQ(Var("Rm",
50040                                                                                                                          F4),
50041                                                                                                                      LW(15,
50042                                                                                                                         4))),
50043                                                                                                               Bop(And,
50044                                                                                                                   EQ(Var("Rd",
50045                                                                                                                          F4),
50046                                                                                                                      LW(13,
50047                                                                                                                         4)),
50048                                                                                                                   EQ(Var("Rm",
50049                                                                                                                          F4),
50050                                                                                                                      LW(13,
50051                                                                                                                         4)))))),
50052                                                                                                   Call
50053                                                                                                     ("DECODE_UNPREDICTABLE",
50054                                                                                                      ATy(qTy,
50055                                                                                                          PTy(uTy,
50056                                                                                                              qTy)),
50057                                                                                                      TP[Var("mc",
50058                                                                                                             CTy"MachineCode"),
50059                                                                                                         LS
50060                                                                                                          "MOV (register)"]),
50061                                                                                                   MU(LU,
50062                                                                                                      qTy))),
50063                                                                                              (Bop(Or,
50064                                                                                                   Bop(In,
50065                                                                                                       Var("Rd",
50066                                                                                                           F4),
50067                                                                                                       SL[LW(13,
50068                                                                                                             4),
50069                                                                                                          LW(15,
50070                                                                                                             4)]),
50071                                                                                                   Bop(In,
50072                                                                                                       Var("Rm",
50073                                                                                                           F4),
50074                                                                                                       SL[LW(13,
50075                                                                                                             4),
50076                                                                                                          LW(15,
50077                                                                                                             4)])),
50078                                                                                               Call
50079                                                                                                 ("DECODE_UNPREDICTABLE",
50080                                                                                                  ATy(qTy,
50081                                                                                                      PTy(uTy,
50082                                                                                                          qTy)),
50083                                                                                                  TP[Var("mc",
50084                                                                                                         CTy"MachineCode"),
50085                                                                                                     LS
50086                                                                                                      "SHIFT (register)"]))],
50087                                                                                             MU(LU,
50088                                                                                                qTy)),
50089                                                                                         Close
50090                                                                                           (AVar
50091                                                                                              uTy,
50092                                                                                            MU(Call
50093                                                                                                 ("Data",
50094                                                                                                  CTy"instruction",
50095                                                                                                  Call
50096                                                                                                    ("ShiftImmediate",
50097                                                                                                     CTy"Data",
50098                                                                                                     TP[LF,
50099                                                                                                        bVar"setflags",
50100                                                                                                        Var("Rd",
50101                                                                                                            F4),
50102                                                                                                        Var("Rm",
50103                                                                                                            F4),
50104                                                                                                        Var("shift_t",
50105                                                                                                            CTy"SRType"),
50106                                                                                                        nVar"shift_n"])),
50107                                                                                               qTy)))),
50108                                                                                     (TP[LW(2,
50109                                                                                            4),
50110                                                                                         AVar
50111                                                                                           (PTy(F4,
50112                                                                                                PTy(F4,
50113                                                                                                    F1)))],
50114                                                                                      MB(ITE(Bop(Or,
50115                                                                                                 Bop(Or,
50116                                                                                                     Bop(In,
50117                                                                                                         Var("Rd",
50118                                                                                                             F4),
50119                                                                                                         SL[LW(13,
50120                                                                                                               4),
50121                                                                                                            LW(15,
50122                                                                                                               4)]),
50123                                                                                                     EQ(Var("Rn",
50124                                                                                                            F4),
50125                                                                                                        LW(13,
50126                                                                                                           4))),
50127                                                                                                 Bop(In,
50128                                                                                                     Var("Rm",
50129                                                                                                         F4),
50130                                                                                                     SL[LW(13,
50131                                                                                                           4),
50132                                                                                                        LW(15,
50133                                                                                                           4)])),
50134                                                                                             Call
50135                                                                                               ("DECODE_UNPREDICTABLE",
50136                                                                                                ATy(qTy,
50137                                                                                                    PTy(uTy,
50138                                                                                                        qTy)),
50139                                                                                                TP[Var("mc",
50140                                                                                                       CTy"MachineCode"),
50141                                                                                                   LS
50142                                                                                                    "ORR (register)"]),
50143                                                                                             MU(LU,
50144                                                                                                qTy)),
50145                                                                                         Close
50146                                                                                           (AVar
50147                                                                                              uTy,
50148                                                                                            MU(Call
50149                                                                                                 ("Data",
50150                                                                                                  CTy"instruction",
50151                                                                                                  Call
50152                                                                                                    ("Register",
50153                                                                                                     CTy"Data",
50154                                                                                                     TP[LW(12,
50155                                                                                                           4),
50156                                                                                                        bVar"setflags",
50157                                                                                                        Var("Rd",
50158                                                                                                            F4),
50159                                                                                                        Var("Rn",
50160                                                                                                            F4),
50161                                                                                                        Var("Rm",
50162                                                                                                            F4),
50163                                                                                                        Var("shift_t",
50164                                                                                                            CTy"SRType"),
50165                                                                                                        nVar"shift_n"])),
50166                                                                                               qTy)))),
50167                                                                                     (TP[LW(3,
50168                                                                                            4),
50169                                                                                         LW(15,
50170                                                                                            4),
50171                                                                                         AVar
50172                                                                                           (PTy(F4,
50173                                                                                                F1))],
50174                                                                                      MB(ITE(Bop(Or,
50175                                                                                                 Bop(In,
50176                                                                                                     Var("Rd",
50177                                                                                                         F4),
50178                                                                                                     SL[LW(13,
50179                                                                                                           4),
50180                                                                                                        LW(15,
50181                                                                                                           4)]),
50182                                                                                                 Bop(In,
50183                                                                                                     Var("Rm",
50184                                                                                                         F4),
50185                                                                                                     SL[LW(13,
50186                                                                                                           4),
50187                                                                                                        LW(15,
50188                                                                                                           4)])),
50189                                                                                             Call
50190                                                                                               ("DECODE_UNPREDICTABLE",
50191                                                                                                ATy(qTy,
50192                                                                                                    PTy(uTy,
50193                                                                                                        qTy)),
50194                                                                                                TP[Var("mc",
50195                                                                                                       CTy"MachineCode"),
50196                                                                                                   LS
50197                                                                                                    "MVN (register)"]),
50198                                                                                             MU(LU,
50199                                                                                                qTy)),
50200                                                                                         Close
50201                                                                                           (AVar
50202                                                                                              uTy,
50203                                                                                            MU(Call
50204                                                                                                 ("Data",
50205                                                                                                  CTy"instruction",
50206                                                                                                  Call
50207                                                                                                    ("ShiftImmediate",
50208                                                                                                     CTy"Data",
50209                                                                                                     TP[LT,
50210                                                                                                        bVar"setflags",
50211                                                                                                        Var("Rd",
50212                                                                                                            F4),
50213                                                                                                        Var("Rm",
50214                                                                                                            F4),
50215                                                                                                        Var("shift_t",
50216                                                                                                            CTy"SRType"),
50217                                                                                                        nVar"shift_n"])),
50218                                                                                               qTy)))),
50219                                                                                     (TP[LW(3,
50220                                                                                            4),
50221                                                                                         AVar
50222                                                                                           (PTy(F4,
50223                                                                                                PTy(F4,
50224                                                                                                    F1)))],
50225                                                                                      MB(ITE(Bop(Or,
50226                                                                                                 Bop(Or,
50227                                                                                                     Bop(In,
50228                                                                                                         Var("Rd",
50229                                                                                                             F4),
50230                                                                                                         SL[LW(13,
50231                                                                                                               4),
50232                                                                                                            LW(15,
50233                                                                                                               4)]),
50234                                                                                                     EQ(Var("Rn",
50235                                                                                                            F4),
50236                                                                                                        LW(13,
50237                                                                                                           4))),
50238                                                                                                 Bop(In,
50239                                                                                                     Var("Rm",
50240                                                                                                         F4),
50241                                                                                                     SL[LW(13,
50242                                                                                                           4),
50243                                                                                                        LW(15,
50244                                                                                                           4)])),
50245                                                                                             Call
50246                                                                                               ("DECODE_UNPREDICTABLE",
50247                                                                                                ATy(qTy,
50248                                                                                                    PTy(uTy,
50249                                                                                                        qTy)),
50250                                                                                                TP[Var("mc",
50251                                                                                                       CTy"MachineCode"),
50252                                                                                                   LS
50253                                                                                                    "ORN (register)"]),
50254                                                                                             MU(LU,
50255                                                                                                qTy)),
50256                                                                                         Close
50257                                                                                           (AVar
50258                                                                                              uTy,
50259                                                                                            MU(Call
50260                                                                                                 ("Data",
50261                                                                                                  CTy"instruction",
50262                                                                                                  Call
50263                                                                                                    ("Register",
50264                                                                                                     CTy"Data",
50265                                                                                                     TP[LW(15,
50266                                                                                                           4),
50267                                                                                                        bVar"setflags",
50268                                                                                                        Var("Rd",
50269                                                                                                            F4),
50270                                                                                                        Var("Rn",
50271                                                                                                            F4),
50272                                                                                                        Var("Rm",
50273                                                                                                            F4),
50274                                                                                                        Var("shift_t",
50275                                                                                                            CTy"SRType"),
50276                                                                                                        nVar"shift_n"])),
50277                                                                                               qTy)))),
50278                                                                                     (TP[LW(4,
50279                                                                                            4),
50280                                                                                         AVar
50281                                                                                           F4,
50282                                                                                         LW(15,
50283                                                                                            4),
50284                                                                                         LW(1,
50285                                                                                            1)],
50286                                                                                      MB(ITE(Bop(Or,
50287                                                                                                 Bop(In,
50288                                                                                                     Var("Rn",
50289                                                                                                         F4),
50290                                                                                                     SL[LW(13,
50291                                                                                                           4),
50292                                                                                                        LW(15,
50293                                                                                                           4)]),
50294                                                                                                 Bop(In,
50295                                                                                                     Var("Rm",
50296                                                                                                         F4),
50297                                                                                                     SL[LW(13,
50298                                                                                                           4),
50299                                                                                                        LW(15,
50300                                                                                                           4)])),
50301                                                                                             Call
50302                                                                                               ("DECODE_UNPREDICTABLE",
50303                                                                                                ATy(qTy,
50304                                                                                                    PTy(uTy,
50305                                                                                                        qTy)),
50306                                                                                                TP[Var("mc",
50307                                                                                                       CTy"MachineCode"),
50308                                                                                                   LS
50309                                                                                                    "TEQ (register)"]),
50310                                                                                             MU(LU,
50311                                                                                                qTy)),
50312                                                                                         Close
50313                                                                                           (AVar
50314                                                                                              uTy,
50315                                                                                            MU(Call
50316                                                                                                 ("Data",
50317                                                                                                  CTy"instruction",
50318                                                                                                  Call
50319                                                                                                    ("TestCompareRegister",
50320                                                                                                     CTy"Data",
50321                                                                                                     TP[LW(1,
50322                                                                                                           2),
50323                                                                                                        Var("Rn",
50324                                                                                                            F4),
50325                                                                                                        Var("Rm",
50326                                                                                                            F4),
50327                                                                                                        Var("shift_t",
50328                                                                                                            CTy"SRType"),
50329                                                                                                        nVar"shift_n"])),
50330                                                                                               qTy)))),
50331                                                                                     (TP[LW(4,
50332                                                                                            4),
50333                                                                                         AVar
50334                                                                                           (PTy(F4,
50335                                                                                                PTy(F4,
50336                                                                                                    F1)))],
50337                                                                                      MB(ITE(Bop(Or,
50338                                                                                                 Bop(Or,
50339                                                                                                     Bop(Or,
50340                                                                                                         EQ(Var("Rd",
50341                                                                                                                F4),
50342                                                                                                            LW(13,
50343                                                                                                               4)),
50344                                                                                                         Bop(And,
50345                                                                                                             EQ(Var("Rd",
50346                                                                                                                    F4),
50347                                                                                                                LW(15,
50348                                                                                                                   4)),
50349                                                                                                             Mop(Not,
50350                                                                                                                 bVar"setflags"))),
50351                                                                                                     Bop(In,
50352                                                                                                         Var("Rn",
50353                                                                                                             F4),
50354                                                                                                         SL[LW(13,
50355                                                                                                               4),
50356                                                                                                            LW(15,
50357                                                                                                               4)])),
50358                                                                                                 Bop(In,
50359                                                                                                     Var("Rm",
50360                                                                                                         F4),
50361                                                                                                     SL[LW(13,
50362                                                                                                           4),
50363                                                                                                        LW(15,
50364                                                                                                           4)])),
50365                                                                                             Call
50366                                                                                               ("DECODE_UNPREDICTABLE",
50367                                                                                                ATy(qTy,
50368                                                                                                    PTy(uTy,
50369                                                                                                        qTy)),
50370                                                                                                TP[Var("mc",
50371                                                                                                       CTy"MachineCode"),
50372                                                                                                   LS
50373                                                                                                    "EOR (register)"]),
50374                                                                                             MU(LU,
50375                                                                                                qTy)),
50376                                                                                         Close
50377                                                                                           (AVar
50378                                                                                              uTy,
50379                                                                                            MU(Call
50380                                                                                                 ("Data",
50381                                                                                                  CTy"instruction",
50382                                                                                                  Call
50383                                                                                                    ("Register",
50384                                                                                                     CTy"Data",
50385                                                                                                     TP[LW(1,
50386                                                                                                           4),
50387                                                                                                        bVar"setflags",
50388                                                                                                        Var("Rd",
50389                                                                                                            F4),
50390                                                                                                        Var("Rn",
50391                                                                                                            F4),
50392                                                                                                        Var("Rm",
50393                                                                                                            F4),
50394                                                                                                        Var("shift_t",
50395                                                                                                            CTy"SRType"),
50396                                                                                                        nVar"shift_n"])),
50397                                                                                               qTy)))),
50398                                                                                     (TP[LW(6,
50399                                                                                            4),
50400                                                                                         AVar
50401                                                                                           F4,
50402                                                                                         AVar
50403                                                                                           F4,
50404                                                                                         LW(0,
50405                                                                                            1)],
50406                                                                                      ITE(Bop(Bit,
50407                                                                                              Var("typ",
50408                                                                                                  FTy 2),
50409                                                                                              LN
50410                                                                                               0),
50411                                                                                          MU(Call
50412                                                                                               ("Undefined",
50413                                                                                                CTy"instruction",
50414                                                                                                LW(0,
50415                                                                                                   32)),
50416                                                                                             qTy),
50417                                                                                          MB(ITE(Bop(Or,
50418                                                                                                     Bop(Or,
50419                                                                                                         Bop(In,
50420                                                                                                             Var("Rd",
50421                                                                                                                 F4),
50422                                                                                                             SL[LW(13,
50423                                                                                                                   4),
50424                                                                                                                LW(15,
50425                                                                                                                   4)]),
50426                                                                                                         Bop(In,
50427                                                                                                             Var("Rn",
50428                                                                                                                 F4),
50429                                                                                                             SL[LW(13,
50430                                                                                                                   4),
50431                                                                                                                LW(15,
50432                                                                                                                   4)])),
50433                                                                                                     Bop(In,
50434                                                                                                         Var("Rm",
50435                                                                                                             F4),
50436                                                                                                         SL[LW(13,
50437                                                                                                               4),
50438                                                                                                            LW(15,
50439                                                                                                               4)])),
50440                                                                                                 Call
50441                                                                                                   ("DECODE_UNPREDICTABLE",
50442                                                                                                    ATy(qTy,
50443                                                                                                        PTy(uTy,
50444                                                                                                            qTy)),
50445                                                                                                    TP[Var("mc",
50446                                                                                                           CTy"MachineCode"),
50447                                                                                                       LS
50448                                                                                                        "PackHalfword"]),
50449                                                                                                 MU(LU,
50450                                                                                                    qTy)),
50451                                                                                             Close
50452                                                                                               (AVar
50453                                                                                                  uTy,
50454                                                                                                MU(Call
50455                                                                                                     ("Media",
50456                                                                                                      CTy"instruction",
50457                                                                                                      Call
50458                                                                                                        ("PackHalfword",
50459                                                                                                         CTy"Media",
50460                                                                                                         TP[Var("shift_t",
50461                                                                                                                CTy"SRType"),
50462                                                                                                            nVar"shift_n",
50463                                                                                                            Bop(Bit,
50464                                                                                                                Var("typ",
50465                                                                                                                    FTy 2),
50466                                                                                                                LN
50467                                                                                                                 1),
50468                                                                                                            Var("Rd",
50469                                                                                                                F4),
50470                                                                                                            Var("Rn",
50471                                                                                                                F4),
50472                                                                                                            Var("Rm",
50473                                                                                                                F4)])),
50474                                                                                                   qTy))))),
50475                                                                                     (TP[LW(8,
50476                                                                                            4),
50477                                                                                         AVar
50478                                                                                           F4,
50479                                                                                         LW(15,
50480                                                                                            4),
50481                                                                                         LW(1,
50482                                                                                            1)],
50483                                                                                      MB(ITE(Bop(Or,
50484                                                                                                 EQ(Var("Rn",
50485                                                                                                        F4),
50486                                                                                                    LW(15,
50487                                                                                                       4)),
50488                                                                                                 Bop(In,
50489                                                                                                     Var("Rm",
50490                                                                                                         F4),
50491                                                                                                     SL[LW(13,
50492                                                                                                           4),
50493                                                                                                        LW(15,
50494                                                                                                           4)])),
50495                                                                                             Call
50496                                                                                               ("DECODE_UNPREDICTABLE",
50497                                                                                                ATy(qTy,
50498                                                                                                    PTy(uTy,
50499                                                                                                        qTy)),
50500                                                                                                TP[Var("mc",
50501                                                                                                       CTy"MachineCode"),
50502                                                                                                   LS
50503                                                                                                    "CMN (register)"]),
50504                                                                                             MU(LU,
50505                                                                                                qTy)),
50506                                                                                         Close
50507                                                                                           (AVar
50508                                                                                              uTy,
50509                                                                                            MU(Call
50510                                                                                                 ("Data",
50511                                                                                                  CTy"instruction",
50512                                                                                                  Call
50513                                                                                                    ("TestCompareRegister",
50514                                                                                                     CTy"Data",
50515                                                                                                     TP[LW(3,
50516                                                                                                           2),
50517                                                                                                        Var("Rn",
50518                                                                                                            F4),
50519                                                                                                        Var("Rm",
50520                                                                                                            F4),
50521                                                                                                        Var("shift_t",
50522                                                                                                            CTy"SRType"),
50523                                                                                                        nVar"shift_n"])),
50524                                                                                               qTy)))),
50525                                                                                     (TP[LW(8,
50526                                                                                            4),
50527                                                                                         AVar
50528                                                                                           (PTy(F4,
50529                                                                                                PTy(F4,
50530                                                                                                    F1)))],
50531                                                                                      MB(ITE(Bop(Or,
50532                                                                                                 Bop(Or,
50533                                                                                                     Bop(Or,
50534                                                                                                         EQ(Var("Rd",
50535                                                                                                                F4),
50536                                                                                                            LW(13,
50537                                                                                                               4)),
50538                                                                                                         Bop(And,
50539                                                                                                             EQ(Var("Rd",
50540                                                                                                                    F4),
50541                                                                                                                LW(15,
50542                                                                                                                   4)),
50543                                                                                                             Mop(Not,
50544                                                                                                                 bVar"setflags"))),
50545                                                                                                     EQ(Var("Rn",
50546                                                                                                            F4),
50547                                                                                                        LW(15,
50548                                                                                                           4))),
50549                                                                                                 Bop(In,
50550                                                                                                     Var("Rm",
50551                                                                                                         F4),
50552                                                                                                     SL[LW(13,
50553                                                                                                           4),
50554                                                                                                        LW(15,
50555                                                                                                           4)])),
50556                                                                                             Call
50557                                                                                               ("DECODE_UNPREDICTABLE",
50558                                                                                                ATy(qTy,
50559                                                                                                    PTy(uTy,
50560                                                                                                        qTy)),
50561                                                                                                TP[Var("mc",
50562                                                                                                       CTy"MachineCode"),
50563                                                                                                   LS
50564                                                                                                    "ADD (register)"]),
50565                                                                                             MU(LU,
50566                                                                                                qTy)),
50567                                                                                         Close
50568                                                                                           (AVar
50569                                                                                              uTy,
50570                                                                                            MU(Let(TP[Var("shift_t",
50571                                                                                                          CTy"SRType"),
50572                                                                                                      nVar"shift_n"],
50573                                                                                                   Call
50574                                                                                                     ("DecodeImmShift",
50575                                                                                                      PTy(CTy"SRType",
50576                                                                                                          nTy),
50577                                                                                                      TP[Var("typ",
50578                                                                                                             FTy 2),
50579                                                                                                         CC[Var("imm3",
50580                                                                                                                FTy 3),
50581                                                                                                            Var("imm2",
50582                                                                                                                FTy 2)]]),
50583                                                                                                   Call
50584                                                                                                     ("Data",
50585                                                                                                      CTy"instruction",
50586                                                                                                      Call
50587                                                                                                        ("Register",
50588                                                                                                         CTy"Data",
50589                                                                                                         TP[LW(4,
50590                                                                                                               4),
50591                                                                                                            bVar"setflags",
50592                                                                                                            Var("Rd",
50593                                                                                                                F4),
50594                                                                                                            Var("Rn",
50595                                                                                                                F4),
50596                                                                                                            Var("Rm",
50597                                                                                                                F4),
50598                                                                                                            Var("shift_t",
50599                                                                                                                CTy"SRType"),
50600                                                                                                            nVar"shift_n"]))),
50601                                                                                               qTy)))),
50602                                                                                     (TP[LW(10,
50603                                                                                            4),
50604                                                                                         AVar
50605                                                                                           (PTy(F4,
50606                                                                                                PTy(F4,
50607                                                                                                    F1)))],
50608                                                                                      MB(ITE(Bop(Or,
50609                                                                                                 Bop(Or,
50610                                                                                                     Bop(In,
50611                                                                                                         Var("Rd",
50612                                                                                                             F4),
50613                                                                                                         SL[LW(13,
50614                                                                                                               4),
50615                                                                                                            LW(15,
50616                                                                                                               4)]),
50617                                                                                                     Bop(In,
50618                                                                                                         Var("Rn",
50619                                                                                                             F4),
50620                                                                                                         SL[LW(13,
50621                                                                                                               4),
50622                                                                                                            LW(15,
50623                                                                                                               4)])),
50624                                                                                                 Bop(In,
50625                                                                                                     Var("Rm",
50626                                                                                                         F4),
50627                                                                                                     SL[LW(13,
50628                                                                                                           4),
50629                                                                                                        LW(15,
50630                                                                                                           4)])),
50631                                                                                             Call
50632                                                                                               ("DECODE_UNPREDICTABLE",
50633                                                                                                ATy(qTy,
50634                                                                                                    PTy(uTy,
50635                                                                                                        qTy)),
50636                                                                                                TP[Var("mc",
50637                                                                                                       CTy"MachineCode"),
50638                                                                                                   LS
50639                                                                                                    "ADC (register)"]),
50640                                                                                             MU(LU,
50641                                                                                                qTy)),
50642                                                                                         Close
50643                                                                                           (AVar
50644                                                                                              uTy,
50645                                                                                            MU(Call
50646                                                                                                 ("Data",
50647                                                                                                  CTy"instruction",
50648                                                                                                  Call
50649                                                                                                    ("Register",
50650                                                                                                     CTy"Data",
50651                                                                                                     TP[LW(5,
50652                                                                                                           4),
50653                                                                                                        bVar"setflags",
50654                                                                                                        Var("Rd",
50655                                                                                                            F4),
50656                                                                                                        Var("Rn",
50657                                                                                                            F4),
50658                                                                                                        Var("Rm",
50659                                                                                                            F4),
50660                                                                                                        Var("shift_t",
50661                                                                                                            CTy"SRType"),
50662                                                                                                        nVar"shift_n"])),
50663                                                                                               qTy)))),
50664                                                                                     (TP[LW(11,
50665                                                                                            4),
50666                                                                                         AVar
50667                                                                                           (PTy(F4,
50668                                                                                                PTy(F4,
50669                                                                                                    F1)))],
50670                                                                                      MB(ITE(Bop(Or,
50671                                                                                                 Bop(Or,
50672                                                                                                     Bop(In,
50673                                                                                                         Var("Rd",
50674                                                                                                             F4),
50675                                                                                                         SL[LW(13,
50676                                                                                                               4),
50677                                                                                                            LW(15,
50678                                                                                                               4)]),
50679                                                                                                     Bop(In,
50680                                                                                                         Var("Rn",
50681                                                                                                             F4),
50682                                                                                                         SL[LW(13,
50683                                                                                                               4),
50684                                                                                                            LW(15,
50685                                                                                                               4)])),
50686                                                                                                 Bop(In,
50687                                                                                                     Var("Rm",
50688                                                                                                         F4),
50689                                                                                                     SL[LW(13,
50690                                                                                                           4),
50691                                                                                                        LW(15,
50692                                                                                                           4)])),
50693                                                                                             Call
50694                                                                                               ("DECODE_UNPREDICTABLE",
50695                                                                                                ATy(qTy,
50696                                                                                                    PTy(uTy,
50697                                                                                                        qTy)),
50698                                                                                                TP[Var("mc",
50699                                                                                                       CTy"MachineCode"),
50700                                                                                                   LS
50701                                                                                                    "SBC (register)"]),
50702                                                                                             MU(LU,
50703                                                                                                qTy)),
50704                                                                                         Close
50705                                                                                           (AVar
50706                                                                                              uTy,
50707                                                                                            MU(Call
50708                                                                                                 ("Data",
50709                                                                                                  CTy"instruction",
50710                                                                                                  Call
50711                                                                                                    ("Register",
50712                                                                                                     CTy"Data",
50713                                                                                                     TP[LW(6,
50714                                                                                                           4),
50715                                                                                                        bVar"setflags",
50716                                                                                                        Var("Rd",
50717                                                                                                            F4),
50718                                                                                                        Var("Rn",
50719                                                                                                            F4),
50720                                                                                                        Var("Rm",
50721                                                                                                            F4),
50722                                                                                                        Var("shift_t",
50723                                                                                                            CTy"SRType"),
50724                                                                                                        nVar"shift_n"])),
50725                                                                                               qTy)))),
50726                                                                                     (TP[LW(13,
50727                                                                                            4),
50728                                                                                         AVar
50729                                                                                           F4,
50730                                                                                         LW(15,
50731                                                                                            4),
50732                                                                                         LW(1,
50733                                                                                            1)],
50734                                                                                      MB(ITE(Bop(Or,
50735                                                                                                 EQ(Var("Rn",
50736                                                                                                        F4),
50737                                                                                                    LW(15,
50738                                                                                                       4)),
50739                                                                                                 Bop(In,
50740                                                                                                     Var("Rm",
50741                                                                                                         F4),
50742                                                                                                     SL[LW(13,
50743                                                                                                           4),
50744                                                                                                        LW(15,
50745                                                                                                           4)])),
50746                                                                                             Call
50747                                                                                               ("DECODE_UNPREDICTABLE",
50748                                                                                                ATy(qTy,
50749                                                                                                    PTy(uTy,
50750                                                                                                        qTy)),
50751                                                                                                TP[Var("mc",
50752                                                                                                       CTy"MachineCode"),
50753                                                                                                   LS
50754                                                                                                    "CMP (register)"]),
50755                                                                                             MU(LU,
50756                                                                                                qTy)),
50757                                                                                         Close
50758                                                                                           (AVar
50759                                                                                              uTy,
50760                                                                                            MU(Call
50761                                                                                                 ("Data",
50762                                                                                                  CTy"instruction",
50763                                                                                                  Call
50764                                                                                                    ("TestCompareRegister",
50765                                                                                                     CTy"Data",
50766                                                                                                     TP[LW(2,
50767                                                                                                           2),
50768                                                                                                        Var("Rn",
50769                                                                                                            F4),
50770                                                                                                        Var("Rm",
50771                                                                                                            F4),
50772                                                                                                        Var("shift_t",
50773                                                                                                            CTy"SRType"),
50774                                                                                                        nVar"shift_n"])),
50775                                                                                               qTy)))),
50776                                                                                     (TP[LW(13,
50777                                                                                            4),
50778                                                                                         AVar
50779                                                                                           (PTy(F4,
50780                                                                                                PTy(F4,
50781                                                                                                    F1)))],
50782                                                                                      MB(ITE(Bop(Or,
50783                                                                                                 Bop(Or,
50784                                                                                                     Bop(Or,
50785                                                                                                         EQ(Var("Rd",
50786                                                                                                                F4),
50787                                                                                                            LW(13,
50788                                                                                                               4)),
50789                                                                                                         Bop(And,
50790                                                                                                             EQ(Var("Rd",
50791                                                                                                                    F4),
50792                                                                                                                LW(15,
50793                                                                                                                   4)),
50794                                                                                                             Mop(Not,
50795                                                                                                                 bVar"setflags"))),
50796                                                                                                     EQ(Var("Rn",
50797                                                                                                            F4),
50798                                                                                                        LW(15,
50799                                                                                                           4))),
50800                                                                                                 Bop(In,
50801                                                                                                     Var("Rm",
50802                                                                                                         F4),
50803                                                                                                     SL[LW(13,
50804                                                                                                           4),
50805                                                                                                        LW(15,
50806                                                                                                           4)])),
50807                                                                                             Call
50808                                                                                               ("DECODE_UNPREDICTABLE",
50809                                                                                                ATy(qTy,
50810                                                                                                    PTy(uTy,
50811                                                                                                        qTy)),
50812                                                                                                TP[Var("mc",
50813                                                                                                       CTy"MachineCode"),
50814                                                                                                   LS
50815                                                                                                    "SUB (register)"]),
50816                                                                                             MU(LU,
50817                                                                                                qTy)),
50818                                                                                         Close
50819                                                                                           (AVar
50820                                                                                              uTy,
50821                                                                                            MU(Call
50822                                                                                                 ("Data",
50823                                                                                                  CTy"instruction",
50824                                                                                                  Call
50825                                                                                                    ("Register",
50826                                                                                                     CTy"Data",
50827                                                                                                     TP[LW(2,
50828                                                                                                           4),
50829                                                                                                        bVar"setflags",
50830                                                                                                        Var("Rd",
50831                                                                                                            F4),
50832                                                                                                        Var("Rn",
50833                                                                                                            F4),
50834                                                                                                        Var("Rm",
50835                                                                                                            F4),
50836                                                                                                        Var("shift_t",
50837                                                                                                            CTy"SRType"),
50838                                                                                                        nVar"shift_n"])),
50839                                                                                               qTy)))),
50840                                                                                     (TP[LW(14,
50841                                                                                            4),
50842                                                                                         AVar
50843                                                                                           (PTy(F4,
50844                                                                                                PTy(F4,
50845                                                                                                    F1)))],
50846                                                                                      MB(ITE(Bop(Or,
50847                                                                                                 Bop(Or,
50848                                                                                                     Bop(In,
50849                                                                                                         Var("Rd",
50850                                                                                                             F4),
50851                                                                                                         SL[LW(13,
50852                                                                                                               4),
50853                                                                                                            LW(15,
50854                                                                                                               4)]),
50855                                                                                                     Bop(In,
50856                                                                                                         Var("Rn",
50857                                                                                                             F4),
50858                                                                                                         SL[LW(13,
50859                                                                                                               4),
50860                                                                                                            LW(15,
50861                                                                                                               4)])),
50862                                                                                                 Bop(In,
50863                                                                                                     Var("Rm",
50864                                                                                                         F4),
50865                                                                                                     SL[LW(13,
50866                                                                                                           4),
50867                                                                                                        LW(15,
50868                                                                                                           4)])),
50869                                                                                             Call
50870                                                                                               ("DECODE_UNPREDICTABLE",
50871                                                                                                ATy(qTy,
50872                                                                                                    PTy(uTy,
50873                                                                                                        qTy)),
50874                                                                                                TP[Var("mc",
50875                                                                                                       CTy"MachineCode"),
50876                                                                                                   LS
50877                                                                                                    "RSB (register)"]),
50878                                                                                             MU(LU,
50879                                                                                                qTy)),
50880                                                                                         Close
50881                                                                                           (AVar
50882                                                                                              uTy,
50883                                                                                            MU(Call
50884                                                                                                 ("Data",
50885                                                                                                  CTy"instruction",
50886                                                                                                  Call
50887                                                                                                    ("Register",
50888                                                                                                     CTy"Data",
50889                                                                                                     TP[LW(3,
50890                                                                                                           4),
50891                                                                                                        bVar"setflags",
50892                                                                                                        Var("Rd",
50893                                                                                                            F4),
50894                                                                                                        Var("Rn",
50895                                                                                                            F4),
50896                                                                                                        Var("Rm",
50897                                                                                                            F4),
50898                                                                                                        Var("shift_t",
50899                                                                                                            CTy"SRType"),
50900                                                                                                        nVar"shift_n"])),
50901                                                                                               qTy)))),
50902                                                                                     (AVar
50903                                                                                        (PTy(F4,
50904                                                                                             PTy(F4,
50905                                                                                                 PTy(F4,
50906                                                                                                     F1)))),
50907                                                                                      MU(Call
50908                                                                                           ("Undefined",
50909                                                                                            CTy"instruction",
50910                                                                                            LW(0,
50911                                                                                               32)),
50912                                                                                         qTy))]))),
50913                                                                         Call
50914                                                                           ("Skip",
50915                                                                            ATy(qTy,
50916                                                                                PTy(CTy"instruction",
50917                                                                                    qTy)),
50918                                                                            LU))))))))))))))],
50919                           Call
50920                             ("UndefinedThumb",
50921                              ATy(qTy,PTy(CTy"instruction",qTy)),LU)))],
50922                     Call
50923                       ("UndefinedThumb",
50924                        ATy(qTy,PTy(CTy"instruction",qTy)),LU))),
50925                (bVar"b'15",
50926                 ITE(Bop(And,bVar"b'31",
50927                         Bop(And,bVar"b'30",Bop(And,bVar"b'29",bVar"b'28"))),
50928                     ITB([(Bop(And,Mop(Not,bVar"b'26"),
50929                               Bop(And,bVar"b'25",
50930                                   Bop(And,bVar"b'24",
50931                                       Bop(And,bVar"b'23",
50932                                           Bop(And,Mop(Not,bVar"b'22"),
50933                                               Bop(And,
50934                                                   Mop(Not,bVar"b'21"),
50935                                                   Bop(And,
50936                                                       Mop(Not,bVar"b'14"),
50937                                                       Bop(And,
50938                                                           Mop(Not,
50939                                                               bVar"b'12"),
50940                                                           bVar"b'5")))))))),
50941                           Let(Var("Rn",F4),
50942                               Mop(Cast F4,
50943                                   LL[bVar"b'19",bVar"b'18",bVar"b'17",
50944                                      bVar"b'16"]),
50945                               MB(Call
50946                                    ("ThumbCondition",
50947                                     ATy(qTy,PTy(F4,qTy)),LU),
50948                                  Close
50949                                    (Var("v",F4),
50950                                     MB(MB(MB(Call
50951                                                ("HaveVirtExt",
50952                                                 ATy(qTy,PTy(bTy,qTy)),LU),
50953                                              Close
50954                                                (bVar"v0",
50955                                                 MU(TP[Var("v",F4),
50956                                                       bVar"v0"],qTy))),
50957                                           Close
50958                                             (Var("v",PTy(F4,bTy)),
50959                                              Call
50960                                                ("Take",
50961                                                 ATy(qTy,PTy(bTy,qTy)),
50962                                                 Var("v",PTy(F4,bTy))))),
50963                                        Close
50964                                          (bVar"b",
50965                                           ITE(bVar"b",
50966                                               MB(ITE(Bop(In,Var("Rn",F4),
50967                                                          SL[LW(13,4),
50968                                                             LW(15,4)]),
50969                                                      Call
50970                                                        ("DECODE_UNPREDICTABLE",
50971                                                         ATy(qTy,
50972                                                             PTy(uTy,qTy)),
50973                                                         TP[Var("mc",
50974                                                                CTy"MachineCode"),
50975                                                            LS
50976                                                             "MoveToBankedOrSpecialRegister"]),
50977                                                      MU(LU,qTy)),
50978                                                  Close
50979                                                    (AVar uTy,
50980                                                     MU(Call
50981                                                          ("System",
50982                                                           CTy"instruction",
50983                                                           Call
50984                                                             ("MoveToBankedOrSpecialRegister",
50985                                                              CTy"System",
50986                                                              TP[EQ(Mop(Cast
50987                                                                          F1,
50988                                                                        LL[bVar"b'20"]),
50989                                                                    LW(1,1)),
50990                                                                 CC[Mop(Cast
50991                                                                          F1,
50992                                                                        LL[bVar"b'4"]),
50993                                                                    Mop(Cast
50994                                                                          F4,
50995                                                                        LL[bVar"b'11",
50996                                                                           bVar"b'10",
50997                                                                           bVar"b'9",
50998                                                                           bVar"b'8"])],
50999                                                                 Var("Rn",
51000                                                                     F4)])),
51001                                                        qTy))),
51002                                               Call
51003                                                 ("Skip",
51004                                                  ATy(qTy,
51005                                                      PTy(CTy"instruction",
51006                                                          qTy)),LU)))))))),
51007                          (Bop(And,Mop(Not,bVar"b'26"),
51008                               Bop(And,bVar"b'25",
51009                                   Bop(And,bVar"b'24",
51010                                       Bop(And,bVar"b'23",
51011                                           Bop(And,Mop(Not,bVar"b'22"),
51012                                               Bop(And,
51013                                                   Mop(Not,bVar"b'21"),
51014                                                   Bop(And,
51015                                                       Mop(Not,bVar"b'14"),
51016                                                       Bop(And,
51017                                                           Mop(Not,
51018                                                               bVar"b'12"),
51019                                                           Mop(Not,
51020                                                               bVar"b'5"))))))))),
51021                           Let(Var("Rn",F4),
51022                               Mop(Cast F4,
51023                                   LL[bVar"b'19",bVar"b'18",bVar"b'17",
51024                                      bVar"b'16"]),
51025                               Let(Var("mask",F4),
51026                                   Mop(Cast F4,
51027                                       LL[bVar"b'11",bVar"b'10",bVar"b'9",
51028                                          bVar"b'8"]),
51029                                   MB(Call
51030                                        ("ThumbCondition",
51031                                         ATy(qTy,PTy(F4,qTy)),LU),
51032                                      Close
51033                                        (Var("v",F4),
51034                                         MB(MB(MB(Call
51035                                                    ("HaveThumb2",
51036                                                     ATy(qTy,PTy(bTy,qTy)),
51037                                                     LU),
51038                                                  Close
51039                                                    (bVar"v0",
51040                                                     MU(TP[Var("v",F4),
51041                                                           bVar"v0"],qTy))),
51042                                               Close
51043                                                 (Var("v",PTy(F4,bTy)),
51044                                                  Call
51045                                                    ("Take",
51046                                                     ATy(qTy,PTy(bTy,qTy)),
51047                                                     Var("v",PTy(F4,bTy))))),
51048                                            Close
51049                                              (bVar"b",
51050                                               ITE(bVar"b",
51051                                                   MB(ITE(Bop(Or,
51052                                                              EQ(Var("mask",
51053                                                                     F4),
51054                                                                 LW(0,4)),
51055                                                              Bop(In,
51056                                                                  Var("Rn",
51057                                                                      F4),
51058                                                                  SL[LW(13,
51059                                                                        4),
51060                                                                     LW(15,
51061                                                                        4)])),
51062                                                          Call
51063                                                            ("DECODE_UNPREDICTABLE",
51064                                                             ATy(qTy,
51065                                                                 PTy(uTy,
51066                                                                     qTy)),
51067                                                             TP[Var("mc",
51068                                                                    CTy"MachineCode"),
51069                                                                LS
51070                                                                 "MoveToSpecialFromRegister"]),
51071                                                          MU(LU,qTy)),
51072                                                      Close
51073                                                        (AVar uTy,
51074                                                         MU(Call
51075                                                              ("System",
51076                                                               CTy"instruction",
51077                                                               Call
51078                                                                 ("MoveToSpecialFromRegister",
51079                                                                  CTy"System",
51080                                                                  TP[EQ(Mop(Cast
51081                                                                              F1,
51082                                                                            LL[bVar"b'20"]),
51083                                                                        LW(1,
51084                                                                           1)),
51085                                                                     Var("Rn",
51086                                                                         F4),
51087                                                                     Var("mask",
51088                                                                         F4)])),
51089                                                            qTy))),
51090                                                   Call
51091                                                     ("Skip",
51092                                                      ATy(qTy,
51093                                                          PTy(CTy"instruction",
51094                                                              qTy)),LU))))))))),
51095                          (Bop(And,Mop(Not,bVar"b'26"),
51096                               Bop(And,bVar"b'25",
51097                                   Bop(And,bVar"b'24",
51098                                       Bop(And,bVar"b'23",
51099                                           Bop(And,Mop(Not,bVar"b'22"),
51100                                               Bop(And,bVar"b'21",
51101                                                   Bop(And,
51102                                                       Mop(Not,bVar"b'20"),
51103                                                       Bop(And,
51104                                                           Mop(Not,
51105                                                               bVar"b'14"),
51106                                                           Bop(And,
51107                                                               Mop(Not,
51108                                                                   bVar"b'12"),
51109                                                               Bop(And,
51110                                                                   Mop(Not,
51111                                                                       bVar"b'10"),
51112                                                                   Bop(And,
51113                                                                       Mop(Not,
51114                                                                           bVar"b'9"),
51115                                                                       Mop(Not,
51116                                                                           bVar"b'8")))))))))))),
51117                           MB(Call
51118                                ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
51119                              Close
51120                                (Var("v",F4),
51121                                 MB(MU(TP[Var("v",F4),
51122                                          Mop(Cast F8,
51123                                              LL[bVar"b'7",bVar"b'6",
51124                                                 bVar"b'5",bVar"b'4",
51125                                                 bVar"b'3",bVar"b'2",
51126                                                 bVar"b'1",bVar"b'0"])],
51127                                       qTy),
51128                                    Close
51129                                      (Var("v",PTy(F4,F8)),
51130                                       Call
51131                                         ("DecodeHint",
51132                                          ATy(qTy,
51133                                              PTy(CTy"instruction",qTy)),
51134                                          Var("v",PTy(F4,F8)))))))),
51135                          (Bop(And,Mop(Not,bVar"b'26"),
51136                               Bop(And,bVar"b'25",
51137                                   Bop(And,bVar"b'24",
51138                                       Bop(And,bVar"b'23",
51139                                           Bop(And,Mop(Not,bVar"b'22"),
51140                                               Bop(And,bVar"b'21",
51141                                                   Bop(And,
51142                                                       Mop(Not,bVar"b'20"),
51143                                                       Bop(And,
51144                                                           Mop(Not,
51145                                                               bVar"b'14"),
51146                                                           Mop(Not,
51147                                                               bVar"b'12"))))))))),
51148                           Let(Var("mode",FTy 5),
51149                               Mop(Cast(FTy 5),
51150                                   LL[bVar"b'4",bVar"b'3",bVar"b'2",
51151                                      bVar"b'1",bVar"b'0"]),
51152                               Let(Var("F",F1),Mop(Cast F1,LL[bVar"b'5"]),
51153                                   Let(Var("I",F1),
51154                                       Mop(Cast F1,LL[bVar"b'6"]),
51155                                       Let(Var("A",F1),
51156                                           Mop(Cast F1,LL[bVar"b'7"]),
51157                                           Let(Var("M",F1),
51158                                               Mop(Cast F1,LL[bVar"b'8"]),
51159                                               Let(Var("imod",FTy 2),
51160                                                   Mop(Cast(FTy 2),
51161                                                       LL[bVar"b'10",
51162                                                          bVar"b'9"]),
51163                                                   MB(Call
51164                                                        ("ThumbCondition",
51165                                                         ATy(qTy,
51166                                                             PTy(F4,qTy)),
51167                                                         LU),
51168                                                      Close
51169                                                        (Var("v",F4),
51170                                                         MB(MB(MB(Call
51171                                                                    ("HaveThumb2",
51172                                                                     ATy(qTy,
51173                                                                         PTy(bTy,
51174                                                                             qTy)),
51175                                                                     LU),
51176                                                                  Close
51177                                                                    (bVar"v0",
51178                                                                     MU(TP[Var("v",
51179                                                                               F4),
51180                                                                           bVar"v0"],
51181                                                                        qTy))),
51182                                                               Close
51183                                                                 (Var("v",
51184                                                                      PTy(F4,
51185                                                                          bTy)),
51186                                                                  Call
51187                                                                    ("Take",
51188                                                                     ATy(qTy,
51189                                                                         PTy(bTy,
51190                                                                             qTy)),
51191                                                                     Var("v",
51192                                                                         PTy(F4,
51193                                                                             bTy))))),
51194                                                            Close
51195                                                              (bVar"b",
51196                                                               ITE(bVar"b",
51197                                                                   MB(Call
51198                                                                        ("InITBlock",
51199                                                                         ATy(qTy,
51200                                                                             PTy(bTy,
51201                                                                                 qTy)),
51202                                                                         LU),
51203                                                                      Close
51204                                                                        (bVar"v",
51205                                                                         MB(MB(MU(Bop(Or,
51206                                                                                      Bop(Or,
51207                                                                                          Bop(Or,
51208                                                                                              Bop(And,
51209                                                                                                  Mop(Not,
51210                                                                                                      EQ(Var("mode",
51211                                                                                                             FTy 5),
51212                                                                                                         LW(0,
51213                                                                                                            5))),
51214                                                                                                  EQ(Var("M",
51215                                                                                                         F1),
51216                                                                                                     LW(0,
51217                                                                                                        1))),
51218                                                                                              EQ(Bop(Bit,
51219                                                                                                     Var("imod",
51220                                                                                                         FTy 2),
51221                                                                                                     LN
51222                                                                                                      1),
51223                                                                                                 EQ(CC[Var("A",
51224                                                                                                           F1),
51225                                                                                                       Var("I",
51226                                                                                                           F1),
51227                                                                                                       Var("F",
51228                                                                                                           F1)],
51229                                                                                                    LW(0,
51230                                                                                                       3)))),
51231                                                                                          EQ(Var("imod",
51232                                                                                                 FTy 2),
51233                                                                                             LW(1,
51234                                                                                                2))),
51235                                                                                      bVar"v"),
51236                                                                                  qTy),
51237                                                                               Close
51238                                                                                 (bVar"b",
51239                                                                                  ITE(bVar"b",
51240                                                                                      Call
51241                                                                                        ("DECODE_UNPREDICTABLE",
51242                                                                                         ATy(qTy,
51243                                                                                             PTy(uTy,
51244                                                                                                 qTy)),
51245                                                                                         TP[Var("mc",
51246                                                                                                CTy"MachineCode"),
51247                                                                                            LS
51248                                                                                             "ChangeProcessorState"]),
51249                                                                                      MU(LU,
51250                                                                                         qTy)))),
51251                                                                            Close
51252                                                                              (AVar
51253                                                                                 uTy,
51254                                                                               MU(Call
51255                                                                                    ("System",
51256                                                                                     CTy"instruction",
51257                                                                                     Call
51258                                                                                       ("ChangeProcessorState",
51259                                                                                        CTy"System",
51260                                                                                        TP[EQ(Var("imod",
51261                                                                                                  FTy 2),
51262                                                                                              LW(2,
51263                                                                                                 2)),
51264                                                                                           EQ(Var("imod",
51265                                                                                                  FTy 2),
51266                                                                                              LW(3,
51267                                                                                                 2)),
51268                                                                                           EQ(Var("A",
51269                                                                                                  F1),
51270                                                                                              LW(1,
51271                                                                                                 1)),
51272                                                                                           EQ(Var("I",
51273                                                                                                  F1),
51274                                                                                              LW(1,
51275                                                                                                 1)),
51276                                                                                           EQ(Var("F",
51277                                                                                                  F1),
51278                                                                                              LW(1,
51279                                                                                                 1)),
51280                                                                                           EQ(Var("M",
51281                                                                                                  F1),
51282                                                                                              LW(1,
51283                                                                                                 1)),
51284                                                                                           Var("mode",
51285                                                                                               FTy 5)])),
51286                                                                                  qTy))))),
51287                                                                   Call
51288                                                                     ("Skip",
51289                                                                      ATy(qTy,
51290                                                                          PTy(CTy"instruction",
51291                                                                              qTy)),
51292                                                                      LU))))))))))))),
51293                          (Bop(And,Mop(Not,bVar"b'26"),
51294                               Bop(And,bVar"b'25",
51295                                   Bop(And,bVar"b'24",
51296                                       Bop(And,bVar"b'23",
51297                                           Bop(And,Mop(Not,bVar"b'22"),
51298                                               Bop(And,bVar"b'21",
51299                                                   Bop(And,bVar"b'20",
51300                                                       Bop(And,
51301                                                           Mop(Not,
51302                                                               bVar"b'14"),
51303                                                           Bop(And,
51304                                                               Mop(Not,
51305                                                                   bVar"b'12"),
51306                                                               Bop(And,
51307                                                                   Mop(Not,
51308                                                                       bVar"b'7"),
51309                                                                   Bop(And,
51310                                                                       Mop(Not,
51311                                                                           bVar"b'6"),
51312                                                                       Mop(Not,
51313                                                                           bVar"b'5")))))))))))),
51314                           Let(Var("J",F1),Mop(Cast F1,LL[bVar"b'4"]),
51315                               MB(Call
51316                                    ("ThumbCondition",
51317                                     ATy(qTy,PTy(F4,qTy)),LU),
51318                                  Close
51319                                    (Var("v",F4),
51320                                     MB(MB(MB(MB(Call
51321                                                   ("HaveThumbEE",
51322                                                    ATy(qTy,PTy(bTy,qTy)),
51323                                                    LU),
51324                                                 Close
51325                                                   (bVar"v0",
51326                                                    MU(TP[Var("v",F4),
51327                                                          bVar"v0"],qTy))),
51328                                              Close
51329                                                (Var("v",PTy(F4,bTy)),
51330                                                 Call
51331                                                   ("Take",
51332                                                    ATy(qTy,PTy(bTy,qTy)),
51333                                                    Var("v",PTy(F4,bTy))))),
51334                                           Close
51335                                             (bVar"b",
51336                                              ITE(bVar"b",
51337                                                  MB(Call
51338                                                       ("CurrentInstrSet",
51339                                                        ATy(qTy,
51340                                                            PTy(CTy"InstrSet",
51341                                                                qTy)),LU),
51342                                                     Close
51343                                                       (Var("v",
51344                                                            CTy"InstrSet"),
51345                                                        MB(MB(MU(EQ(Var("v",
51346                                                                        CTy"InstrSet"),
51347                                                                    LC("InstrSet_Thumb",
51348                                                                       CTy"InstrSet")),
51349                                                                 qTy),
51350                                                              Close
51351                                                                (bVar"b",
51352                                                                 MU(Bop(And,
51353                                                                        bVar"b",
51354                                                                        EQ(Var("J",
51355                                                                               F1),
51356                                                                           LW(0,
51357                                                                              1))),
51358                                                                    qTy))),
51359                                                           Close
51360                                                             (bVar"v",
51361                                                              MU(Mop(Not,
51362                                                                     bVar"v"),
51363                                                                 qTy))))),
51364                                                  MU(LF,qTy)))),
51365                                        Close
51366                                          (bVar"b",
51367                                           ITE(bVar"b",
51368                                               MB(Call
51369                                                    ("InITBlock",
51370                                                     ATy(qTy,PTy(bTy,qTy)),
51371                                                     LU),
51372                                                  Close
51373                                                    (bVar"v",
51374                                                     MB(ITE(bVar"v",
51375                                                            Call
51376                                                              ("DECODE_UNPREDICTABLE",
51377                                                               ATy(qTy,
51378                                                                   PTy(uTy,
51379                                                                       qTy)),
51380                                                               TP[Var("mc",
51381                                                                      CTy"MachineCode"),
51382                                                                  LS
51383                                                                   "EnterxLeavex"]),
51384                                                            MU(LU,qTy)),
51385                                                        Close
51386                                                          (AVar uTy,
51387                                                           MU(Call
51388                                                                ("System",
51389                                                                 CTy"instruction",
51390                                                                 Call
51391                                                                   ("EnterxLeavex",
51392                                                                    CTy"System",
51393                                                                    EQ(Var("J",
51394                                                                           F1),
51395                                                                       LW(1,
51396                                                                          1)))),
51397                                                              qTy))))),
51398                                               Call
51399                                                 ("Skip",
51400                                                  ATy(qTy,
51401                                                      PTy(CTy"instruction",
51402                                                          qTy)),LU)))))))),
51403                          (Bop(And,Mop(Not,bVar"b'26"),
51404                               Bop(And,bVar"b'25",
51405                                   Bop(And,bVar"b'24",
51406                                       Bop(And,bVar"b'23",
51407                                           Bop(And,Mop(Not,bVar"b'22"),
51408                                               Bop(And,bVar"b'21",
51409                                                   Bop(And,bVar"b'20",
51410                                                       Bop(And,
51411                                                           Mop(Not,
51412                                                               bVar"b'14"),
51413                                                           Mop(Not,
51414                                                               bVar"b'12"))))))))),
51415                           Let(Var("option",F4),
51416                               Mop(Cast F4,
51417                                   LL[bVar"b'3",bVar"b'2",bVar"b'1",
51418                                      bVar"b'0"]),
51419                               MB(Call
51420                                    ("ThumbCondition",
51421                                     ATy(qTy,PTy(F4,qTy)),LU),
51422                                  Close
51423                                    (Var("v",F4),
51424                                     MB(MB(MB(Call
51425                                                ("HaveThumb2",
51426                                                 ATy(qTy,PTy(bTy,qTy)),LU),
51427                                              Close
51428                                                (bVar"v0",
51429                                                 MU(TP[Var("v",F4),
51430                                                       bVar"v0"],qTy))),
51431                                           Close
51432                                             (Var("v",PTy(F4,bTy)),
51433                                              Call
51434                                                ("Take",
51435                                                 ATy(qTy,PTy(bTy,qTy)),
51436                                                 Var("v",PTy(F4,bTy))))),
51437                                        Close
51438                                          (bVar"b",
51439                                           ITE(bVar"b",
51440                                               CS(Mop(Cast F4,
51441                                                      LL[bVar"b'7",
51442                                                         bVar"b'6",
51443                                                         bVar"b'5",
51444                                                         bVar"b'4"]),
51445                                                  [(LW(2,4),
51446                                                    MU(Const
51447                                                         ("ClearExclusive",
51448                                                          CTy"instruction"),
51449                                                       qTy)),
51450                                                   (LW(4,4),
51451                                                    MU(Call
51452                                                         ("Hint",
51453                                                          CTy"instruction",
51454                                                          Call
51455                                                            ("DataSynchronizationBarrier",
51456                                                             CTy"Hint",
51457                                                             Var("option",
51458                                                                 F4))),qTy)),
51459                                                   (LW(5,4),
51460                                                    MU(Call
51461                                                         ("Hint",
51462                                                          CTy"instruction",
51463                                                          Call
51464                                                            ("DataMemoryBarrier",
51465                                                             CTy"Hint",
51466                                                             Var("option",
51467                                                                 F4))),qTy)),
51468                                                   (LW(6,4),
51469                                                    MU(Call
51470                                                         ("Hint",
51471                                                          CTy"instruction",
51472                                                          Call
51473                                                            ("InstructionSynchronizationBarrier",
51474                                                             CTy"Hint",
51475                                                             Var("option",
51476                                                                 F4))),qTy)),
51477                                                   (AVar F4,
51478                                                    MB(Call
51479                                                         ("ArchVersion",
51480                                                          ATy(qTy,
51481                                                              PTy(nTy,qTy)),
51482                                                          LU),
51483                                                       Close
51484                                                         (nVar"v",
51485                                                          MB(MU(Bop(Ge,
51486                                                                    nVar"v",
51487                                                                    LN 7),
51488                                                                qTy),
51489                                                             Close
51490                                                               (bVar"b",
51491                                                                ITE(bVar"b",
51492                                                                    MU(Call
51493                                                                         ("Undefined",
51494                                                                          CTy"instruction",
51495                                                                          LW(0,
51496                                                                             32)),
51497                                                                       qTy),
51498                                                                    MB(Call
51499                                                                         ("DECODE_UNPREDICTABLE",
51500                                                                          ATy(qTy,
51501                                                                              PTy(uTy,
51502                                                                                  qTy)),
51503                                                                          TP[Var("mc",
51504                                                                                 CTy"MachineCode"),
51505                                                                             LS
51506                                                                              "Miscellaneous control"]),
51507                                                                       Close
51508                                                                         (AVar
51509                                                                            uTy,
51510                                                                          MU(LX(CTy"instruction"),
51511                                                                             qTy)))))))))]),
51512                                               Call
51513                                                 ("Skip",
51514                                                  ATy(qTy,
51515                                                      PTy(CTy"instruction",
51516                                                          qTy)),LU)))))))),
51517                          (Bop(And,Mop(Not,bVar"b'26"),
51518                               Bop(And,bVar"b'25",
51519                                   Bop(And,bVar"b'24",
51520                                       Bop(And,bVar"b'23",
51521                                           Bop(And,bVar"b'22",
51522                                               Bop(And,
51523                                                   Mop(Not,bVar"b'21"),
51524                                                   Bop(And,bVar"b'20",
51525                                                       Bop(And,
51526                                                           Mop(Not,
51527                                                               bVar"b'14"),
51528                                                           Mop(Not,
51529                                                               bVar"b'12"))))))))),
51530                           Let(Var("imm8",F8),
51531                               Mop(Cast F8,
51532                                   LL[bVar"b'7",bVar"b'6",bVar"b'5",
51533                                      bVar"b'4",bVar"b'3",bVar"b'2",
51534                                      bVar"b'1",bVar"b'0"]),
51535                               MB(Call
51536                                    ("ThumbCondition",
51537                                     ATy(qTy,PTy(F4,qTy)),LU),
51538                                  Close
51539                                    (Var("v",F4),
51540                                     MB(MB(MB(Call
51541                                                ("HaveThumb2",
51542                                                 ATy(qTy,PTy(bTy,qTy)),LU),
51543                                              Close
51544                                                (bVar"v0",
51545                                                 MU(TP[Var("v",F4),
51546                                                       bVar"v0"],qTy))),
51547                                           Close
51548                                             (Var("v",PTy(F4,bTy)),
51549                                              Call
51550                                                ("Take",
51551                                                 ATy(qTy,PTy(bTy,qTy)),
51552                                                 Var("v",PTy(F4,bTy))))),
51553                                        Close
51554                                          (bVar"b",
51555                                           ITE(bVar"b",
51556                                               MB(Call
51557                                                    ("HaveVirtExt",
51558                                                     ATy(qTy,PTy(bTy,qTy)),
51559                                                     LU),
51560                                                  Close
51561                                                    (bVar"v",
51562                                                     MB(MU(Bop(And,
51563                                                               bVar"v",
51564                                                               EQ(Var("imm8",
51565                                                                      F8),
51566                                                                  LW(0,8))),
51567                                                           qTy),
51568                                                        Close
51569                                                          (bVar"b",
51570                                                           ITE(bVar"b",
51571                                                               MU(Call
51572                                                                    ("System",
51573                                                                     CTy"instruction",
51574                                                                     Const
51575                                                                       ("ExceptionReturn",
51576                                                                        CTy"System")),
51577                                                                  qTy),
51578                                                               MB(Call
51579                                                                    ("CurrentInstrSet",
51580                                                                     ATy(qTy,
51581                                                                         PTy(CTy"InstrSet",
51582                                                                             qTy)),
51583                                                                     LU),
51584                                                                  Close
51585                                                                    (Var("v",
51586                                                                         CTy"InstrSet"),
51587                                                                     MB(MB(MB(MU(EQ(Var("v",
51588                                                                                        CTy"InstrSet"),
51589                                                                                    LC("InstrSet_ThumbEE",
51590                                                                                       CTy"InstrSet")),
51591                                                                                 qTy),
51592                                                                              Close
51593                                                                                (bVar"b",
51594                                                                                 ITE(bVar"b",
51595                                                                                     MU(LT,
51596                                                                                        qTy),
51597                                                                                     MB(Call
51598                                                                                          ("InITBlock",
51599                                                                                           ATy(qTy,
51600                                                                                               PTy(bTy,
51601                                                                                                   qTy)),
51602                                                                                           LU),
51603                                                                                        Close
51604                                                                                          (bVar"b",
51605                                                                                           ITE(bVar"b",
51606                                                                                               MB(Call
51607                                                                                                    ("LastInITBlock",
51608                                                                                                     ATy(qTy,
51609                                                                                                         PTy(bTy,
51610                                                                                                             qTy)),
51611                                                                                                     LU),
51612                                                                                                  Close
51613                                                                                                    (bVar"v",
51614                                                                                                     MU(Mop(Not,
51615                                                                                                            bVar"v"),
51616                                                                                                        qTy))),
51617                                                                                               MU(LF,
51618                                                                                                  qTy))))))),
51619                                                                           Close
51620                                                                             (bVar"b",
51621                                                                              ITE(bVar"b",
51622                                                                                  Call
51623                                                                                    ("DECODE_UNPREDICTABLE",
51624                                                                                     ATy(qTy,
51625                                                                                         PTy(uTy,
51626                                                                                             qTy)),
51627                                                                                     TP[Var("mc",
51628                                                                                            CTy"MachineCode"),
51629                                                                                        LS
51630                                                                                         "SUBS<c> PC, LR, #0"]),
51631                                                                                  MU(LU,
51632                                                                                     qTy)))),
51633                                                                        Close
51634                                                                          (AVar
51635                                                                             uTy,
51636                                                                           MB(Call
51637                                                                                ("CurrentModeIsHyp",
51638                                                                                 ATy(qTy,
51639                                                                                     PTy(bTy,
51640                                                                                         qTy)),
51641                                                                                 LU),
51642                                                                              Close
51643                                                                                (bVar"b",
51644                                                                                 MU(ITE(bVar"b",
51645                                                                                        Call
51646                                                                                          ("Undefined",
51647                                                                                           CTy"instruction",
51648                                                                                           LW(0,
51649                                                                                              32)),
51650                                                                                        Call
51651                                                                                          ("Data",
51652                                                                                           CTy"instruction",
51653                                                                                           Call
51654                                                                                             ("ArithLogicImmediate",
51655                                                                                              CTy"Data",
51656                                                                                              TP[LW(2,
51657                                                                                                    4),
51658                                                                                                 LT,
51659                                                                                                 LW(15,
51660                                                                                                    4),
51661                                                                                                 LW(14,
51662                                                                                                    4),
51663                                                                                                 Mop(Cast
51664                                                                                                       (FTy 12),
51665                                                                                                     Var("imm8",
51666                                                                                                         F8))]))),
51667                                                                                    qTy)))))))))))),
51668                                               Call
51669                                                 ("Skip",
51670                                                  ATy(qTy,
51671                                                      PTy(CTy"instruction",
51672                                                          qTy)),LU)))))))),
51673                          (Bop(And,Mop(Not,bVar"b'26"),
51674                               Bop(And,bVar"b'25",
51675                                   Bop(And,bVar"b'24",
51676                                       Bop(And,bVar"b'23",
51677                                           Bop(And,bVar"b'22",
51678                                               Bop(And,bVar"b'21",
51679                                                   Bop(And,
51680                                                       Mop(Not,bVar"b'14"),
51681                                                       Bop(And,
51682                                                           Mop(Not,
51683                                                               bVar"b'12"),
51684                                                           bVar"b'5")))))))),
51685                           Let(Var("Rd",F4),
51686                               Mop(Cast F4,
51687                                   LL[bVar"b'11",bVar"b'10",bVar"b'9",
51688                                      bVar"b'8"]),
51689                               MB(Call
51690                                    ("ThumbCondition",
51691                                     ATy(qTy,PTy(F4,qTy)),LU),
51692                                  Close
51693                                    (Var("v",F4),
51694                                     MB(MB(MB(Call
51695                                                ("HaveVirtExt",
51696                                                 ATy(qTy,PTy(bTy,qTy)),LU),
51697                                              Close
51698                                                (bVar"v0",
51699                                                 MU(TP[Var("v",F4),
51700                                                       bVar"v0"],qTy))),
51701                                           Close
51702                                             (Var("v",PTy(F4,bTy)),
51703                                              Call
51704                                                ("Take",
51705                                                 ATy(qTy,PTy(bTy,qTy)),
51706                                                 Var("v",PTy(F4,bTy))))),
51707                                        Close
51708                                          (bVar"b",
51709                                           ITE(bVar"b",
51710                                               MB(ITE(Bop(In,Var("Rd",F4),
51711                                                          SL[LW(13,4),
51712                                                             LW(15,4)]),
51713                                                      Call
51714                                                        ("DECODE_UNPREDICTABLE",
51715                                                         ATy(qTy,
51716                                                             PTy(uTy,qTy)),
51717                                                         TP[Var("mc",
51718                                                                CTy"MachineCode"),
51719                                                            LS
51720                                                             "MoveToRegisterFromBankedOrSpecial"]),
51721                                                      MU(LU,qTy)),
51722                                                  Close
51723                                                    (AVar uTy,
51724                                                     MU(Call
51725                                                          ("System",
51726                                                           CTy"instruction",
51727                                                           Call
51728                                                             ("MoveToRegisterFromBankedOrSpecial",
51729                                                              CTy"System",
51730                                                              TP[EQ(Mop(Cast
51731                                                                          F1,
51732                                                                        LL[bVar"b'20"]),
51733                                                                    LW(1,1)),
51734                                                                 CC[Mop(Cast
51735                                                                          F1,
51736                                                                        LL[bVar"b'4"]),
51737                                                                    Mop(Cast
51738                                                                          F4,
51739                                                                        LL[bVar"b'19",
51740                                                                           bVar"b'18",
51741                                                                           bVar"b'17",
51742                                                                           bVar"b'16"])],
51743                                                                 Var("Rd",
51744                                                                     F4)])),
51745                                                        qTy))),
51746                                               Call
51747                                                 ("Skip",
51748                                                  ATy(qTy,
51749                                                      PTy(CTy"instruction",
51750                                                          qTy)),LU)))))))),
51751                          (Bop(And,Mop(Not,bVar"b'26"),
51752                               Bop(And,bVar"b'25",
51753                                   Bop(And,bVar"b'24",
51754                                       Bop(And,bVar"b'23",
51755                                           Bop(And,bVar"b'22",
51756                                               Bop(And,bVar"b'21",
51757                                                   Bop(And,
51758                                                       Mop(Not,bVar"b'14"),
51759                                                       Bop(And,
51760                                                           Mop(Not,
51761                                                               bVar"b'12"),
51762                                                           Mop(Not,
51763                                                               bVar"b'5"))))))))),
51764                           Let(Var("Rd",F4),
51765                               Mop(Cast F4,
51766                                   LL[bVar"b'11",bVar"b'10",bVar"b'9",
51767                                      bVar"b'8"]),
51768                               MB(Call
51769                                    ("ThumbCondition",
51770                                     ATy(qTy,PTy(F4,qTy)),LU),
51771                                  Close
51772                                    (Var("v",F4),
51773                                     MB(MB(MB(Call
51774                                                ("HaveThumb2",
51775                                                 ATy(qTy,PTy(bTy,qTy)),LU),
51776                                              Close
51777                                                (bVar"v0",
51778                                                 MU(TP[Var("v",F4),
51779                                                       bVar"v0"],qTy))),
51780                                           Close
51781                                             (Var("v",PTy(F4,bTy)),
51782                                              Call
51783                                                ("Take",
51784                                                 ATy(qTy,PTy(bTy,qTy)),
51785                                                 Var("v",PTy(F4,bTy))))),
51786                                        Close
51787                                          (bVar"b",
51788                                           ITE(bVar"b",
51789                                               MB(ITE(Bop(In,Var("Rd",F4),
51790                                                          SL[LW(13,4),
51791                                                             LW(15,4)]),
51792                                                      Call
51793                                                        ("DECODE_UNPREDICTABLE",
51794                                                         ATy(qTy,
51795                                                             PTy(uTy,qTy)),
51796                                                         TP[Var("mc",
51797                                                                CTy"MachineCode"),
51798                                                            LS
51799                                                             "MoveToRegisterFromSpecial"]),
51800                                                      MU(LU,qTy)),
51801                                                  Close
51802                                                    (AVar uTy,
51803                                                     MU(Call
51804                                                          ("System",
51805                                                           CTy"instruction",
51806                                                           Call
51807                                                             ("MoveToRegisterFromSpecial",
51808                                                              CTy"System",
51809                                                              TP[EQ(Mop(Cast
51810                                                                          F1,
51811                                                                        LL[bVar"b'20"]),
51812                                                                    LW(1,1)),
51813                                                                 Var("Rd",
51814                                                                     F4)])),
51815                                                        qTy))),
51816                                               Call
51817                                                 ("Skip",
51818                                                  ATy(qTy,
51819                                                      PTy(CTy"instruction",
51820                                                          qTy)),LU)))))))),
51821                          (Bop(And,bVar"b'26",
51822                               Bop(And,bVar"b'25",
51823                                   Bop(And,bVar"b'24",
51824                                       Bop(And,bVar"b'23",
51825                                           Bop(And,bVar"b'22",
51826                                               Bop(And,bVar"b'21",
51827                                                   Bop(And,
51828                                                       Mop(Not,bVar"b'20"),
51829                                                       Bop(And,
51830                                                           Mop(Not,
51831                                                               bVar"b'14"),
51832                                                           Bop(And,
51833                                                               Mop(Not,
51834                                                                   bVar"b'13"),
51835                                                               Mop(Not,
51836                                                                   bVar"b'12")))))))))),
51837                           MB(Call
51838                                ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
51839                              Close
51840                                (Var("v",F4),
51841                                 MB(MB(MB(Call
51842                                            ("HaveVirtExt",
51843                                             ATy(qTy,PTy(bTy,qTy)),LU),
51844                                          Close
51845                                            (bVar"v0",
51846                                             MU(TP[Var("v",F4),bVar"v0"],
51847                                                qTy))),
51848                                       Close
51849                                         (Var("v",PTy(F4,bTy)),
51850                                          Call
51851                                            ("Take",ATy(qTy,PTy(bTy,qTy)),
51852                                             Var("v",PTy(F4,bTy))))),
51853                                    Close
51854                                      (bVar"b",
51855                                       ITE(bVar"b",
51856                                           MB(Call
51857                                                ("InITBlock",
51858                                                 ATy(qTy,PTy(bTy,qTy)),LU),
51859                                              Close
51860                                                (bVar"v",
51861                                                 MB(ITE(bVar"v",
51862                                                        Call
51863                                                          ("DECODE_UNPREDICTABLE",
51864                                                           ATy(qTy,
51865                                                               PTy(uTy,qTy)),
51866                                                           TP[Var("mc",
51867                                                                  CTy"MachineCode"),
51868                                                              LS
51869                                                               "HypervisorCall"]),
51870                                                        MU(LU,qTy)),
51871                                                    Close
51872                                                      (AVar uTy,
51873                                                       MU(Call
51874                                                            ("System",
51875                                                             CTy"instruction",
51876                                                             Call
51877                                                               ("HypervisorCall",
51878                                                                CTy"System",
51879                                                                CC[Mop(Cast
51880                                                                         F4,
51881                                                                       LL[bVar"b'19",
51882                                                                          bVar"b'18",
51883                                                                          bVar"b'17",
51884                                                                          bVar"b'16"]),
51885                                                                   Mop(Cast
51886                                                                         (FTy 12),
51887                                                                       LL[bVar"b'11",
51888                                                                          bVar"b'10",
51889                                                                          bVar"b'9",
51890                                                                          bVar"b'8",
51891                                                                          bVar"b'7",
51892                                                                          bVar"b'6",
51893                                                                          bVar"b'5",
51894                                                                          bVar"b'4",
51895                                                                          bVar"b'3",
51896                                                                          bVar"b'2",
51897                                                                          bVar"b'1",
51898                                                                          bVar"b'0"])])),
51899                                                          qTy))))),
51900                                           Call
51901                                             ("Skip",
51902                                              ATy(qTy,
51903                                                  PTy(CTy"instruction",qTy)),
51904                                              LU))))))),
51905                          (Bop(And,bVar"b'26",
51906                               Bop(And,bVar"b'25",
51907                                   Bop(And,bVar"b'24",
51908                                       Bop(And,bVar"b'23",
51909                                           Bop(And,bVar"b'22",
51910                                               Bop(And,bVar"b'21",
51911                                                   Bop(And,bVar"b'20",
51912                                                       Bop(And,
51913                                                           Mop(Not,
51914                                                               bVar"b'14"),
51915                                                           Bop(And,
51916                                                               Mop(Not,
51917                                                                   bVar"b'13"),
51918                                                               Mop(Not,
51919                                                                   bVar"b'12")))))))))),
51920                           MB(Call
51921                                ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
51922                              Close
51923                                (Var("v",F4),
51924                                 MB(MB(MB(Call
51925                                            ("HaveSecurityExt",
51926                                             ATy(qTy,PTy(bTy,qTy)),LU),
51927                                          Close
51928                                            (bVar"v0",
51929                                             MB(ITE(bVar"v0",
51930                                                    MB(MR(Close
51931                                                            (qVar"s",
51932                                                             Dest
51933                                                               ("Architecture",
51934                                                                CTy"Architecture",
51935                                                                qVar"s"))),
51936                                                       Close
51937                                                         (Var("v",
51938                                                              CTy"Architecture"),
51939                                                          MB(MU(EQ(Var("v",
51940                                                                       CTy"Architecture"),
51941                                                                   LC("ARMv6K",
51942                                                                      CTy"Architecture")),
51943                                                                qTy),
51944                                                             Close
51945                                                               (bVar"v",
51946                                                                MU(Mop(Not,
51947                                                                       bVar"v"),
51948                                                                   qTy))))),
51949                                                    MU(LF,qTy)),
51950                                                Close
51951                                                  (bVar"v0",
51952                                                   MU(TP[Var("v",F4),
51953                                                         bVar"v0"],qTy))))),
51954                                       Close
51955                                         (Var("v",PTy(F4,bTy)),
51956                                          Call
51957                                            ("Take",ATy(qTy,PTy(bTy,qTy)),
51958                                             Var("v",PTy(F4,bTy))))),
51959                                    Close
51960                                      (bVar"b",
51961                                       ITE(bVar"b",
51962                                           MB(Call
51963                                                ("InITBlock",
51964                                                 ATy(qTy,PTy(bTy,qTy)),LU),
51965                                              Close
51966                                                (bVar"v",
51967                                                 MB(MB(ITE(bVar"v",
51968                                                           MB(Call
51969                                                                ("LastInITBlock",
51970                                                                 ATy(qTy,
51971                                                                     PTy(bTy,
51972                                                                         qTy)),
51973                                                                 LU),
51974                                                              Close
51975                                                                (bVar"v",
51976                                                                 MU(Mop(Not,
51977                                                                        bVar"v"),
51978                                                                    qTy))),
51979                                                           MU(LF,qTy)),
51980                                                       Close
51981                                                         (bVar"b",
51982                                                          ITE(bVar"b",
51983                                                              Call
51984                                                                ("DECODE_UNPREDICTABLE",
51985                                                                 ATy(qTy,
51986                                                                     PTy(uTy,
51987                                                                         qTy)),
51988                                                                 TP[Var("mc",
51989                                                                        CTy"MachineCode"),
51990                                                                    LS
51991                                                                     "SecureMonitorCall"]),
51992                                                              MU(LU,qTy)))),
51993                                                    Close
51994                                                      (AVar uTy,
51995                                                       MU(Call
51996                                                            ("System",
51997                                                             CTy"instruction",
51998                                                             Call
51999                                                               ("SecureMonitorCall",
52000                                                                CTy"System",
52001                                                                Mop(Cast
52002                                                                      F4,
52003                                                                    LL[bVar"b'19",
52004                                                                       bVar"b'18",
52005                                                                       bVar"b'17",
52006                                                                       bVar"b'16"]))),
52007                                                          qTy))))),
52008                                           Call
52009                                             ("Skip",
52010                                              ATy(qTy,
52011                                                  PTy(CTy"instruction",qTy)),
52012                                              LU))))))),
52013                          (Bop(And,bVar"b'26",
52014                               Bop(And,bVar"b'25",
52015                                   Bop(And,bVar"b'24",
52016                                       Bop(And,bVar"b'23",
52017                                           Bop(And,bVar"b'22",
52018                                               Bop(And,bVar"b'21",
52019                                                   Bop(And,bVar"b'20",
52020                                                       Bop(And,
52021                                                           Mop(Not,
52022                                                               bVar"b'14"),
52023                                                           Bop(And,
52024                                                               bVar"b'13",
52025                                                               Mop(Not,
52026                                                                   bVar"b'12")))))))))),
52027                           MB(Call
52028                                ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
52029                              Close
52030                                (Var("v",F4),
52031                                 MB(MB(MB(Call
52032                                            ("HaveThumb2",
52033                                             ATy(qTy,PTy(bTy,qTy)),LU),
52034                                          Close
52035                                            (bVar"v0",
52036                                             MU(TP[Var("v",F4),bVar"v0"],
52037                                                qTy))),
52038                                       Close
52039                                         (Var("v",PTy(F4,bTy)),
52040                                          Call
52041                                            ("Take",ATy(qTy,PTy(bTy,qTy)),
52042                                             Var("v",PTy(F4,bTy))))),
52043                                    Close
52044                                      (bVar"b",
52045                                       ITE(bVar"b",
52046                                           MU(Call
52047                                                ("Undefined",
52048                                                 CTy"instruction",
52049                                                 Mop(Cast F32,
52050                                                     CC[Mop(Cast F4,
52051                                                            LL[bVar"b'19",
52052                                                               bVar"b'18",
52053                                                               bVar"b'17",
52054                                                               bVar"b'16"]),
52055                                                        Mop(Cast(FTy 12),
52056                                                            LL[bVar"b'11",
52057                                                               bVar"b'10",
52058                                                               bVar"b'9",
52059                                                               bVar"b'8",
52060                                                               bVar"b'7",
52061                                                               bVar"b'6",
52062                                                               bVar"b'5",
52063                                                               bVar"b'4",
52064                                                               bVar"b'3",
52065                                                               bVar"b'2",
52066                                                               bVar"b'1",
52067                                                               bVar"b'0"])])),
52068                                              qTy),
52069                                           Call
52070                                             ("Skip",
52071                                              ATy(qTy,
52072                                                  PTy(CTy"instruction",qTy)),
52073                                              LU))))))),
52074                          (Bop(And,Mop(Not,bVar"b'14"),Mop(Not,bVar"b'12")),
52075                           MB(Call("HaveThumb2",ATy(qTy,PTy(bTy,qTy)),LU),
52076                              Close
52077                                (bVar"v",
52078                                 MB(MB(MU(TP[Mop(Cast F4,
52079                                                 LL[bVar"b'25",bVar"b'24",
52080                                                    bVar"b'23",bVar"b'22"]),
52081                                             bVar"v"],qTy),
52082                                       Close
52083                                         (Var("v",PTy(F4,bTy)),
52084                                          Call
52085                                            ("Take",ATy(qTy,PTy(bTy,qTy)),
52086                                             Var("v",PTy(F4,bTy))))),
52087                                    Close
52088                                      (bVar"b",
52089                                       ITE(bVar"b",
52090                                           MB(Call
52091                                                ("InITBlock",
52092                                                 ATy(qTy,PTy(bTy,qTy)),LU),
52093                                              Close
52094                                                (bVar"v",
52095                                                 MB(ITE(bVar"v",
52096                                                        Call
52097                                                          ("DECODE_UNPREDICTABLE",
52098                                                           ATy(qTy,
52099                                                               PTy(uTy,qTy)),
52100                                                           TP[Var("mc",
52101                                                                  CTy"MachineCode"),
52102                                                              LS
52103                                                               "BranchTarget"]),
52104                                                        MU(LU,qTy)),
52105                                                    Close
52106                                                      (AVar uTy,
52107                                                       MU(Call
52108                                                            ("Branch",
52109                                                             CTy"instruction",
52110                                                             Call
52111                                                               ("BranchTarget",
52112                                                                CTy"Branch",
52113                                                                Mop(SE F32,
52114                                                                    CC[Mop(Cast
52115                                                                             F1,
52116                                                                           LL[bVar"b'26"]),
52117                                                                       Mop(Cast
52118                                                                             F1,
52119                                                                           LL[bVar"b'11"]),
52120                                                                       Mop(Cast
52121                                                                             F1,
52122                                                                           LL[bVar"b'13"]),
52123                                                                       Mop(Cast
52124                                                                             (FTy 6),
52125                                                                           LL[bVar"b'21",
52126                                                                              bVar"b'20",
52127                                                                              bVar"b'19",
52128                                                                              bVar"b'18",
52129                                                                              bVar"b'17",
52130                                                                              bVar"b'16"]),
52131                                                                       Mop(Cast
52132                                                                             (FTy 11),
52133                                                                           LL[bVar"b'10",
52134                                                                              bVar"b'9",
52135                                                                              bVar"b'8",
52136                                                                              bVar"b'7",
52137                                                                              bVar"b'6",
52138                                                                              bVar"b'5",
52139                                                                              bVar"b'4",
52140                                                                              bVar"b'3",
52141                                                                              bVar"b'2",
52142                                                                              bVar"b'1",
52143                                                                              bVar"b'0"]),
52144                                                                       LW(0,
52145                                                                          1)]))),
52146                                                          qTy))))),
52147                                           Call
52148                                             ("Skip",
52149                                              ATy(qTy,
52150                                                  PTy(CTy"instruction",qTy)),
52151                                              LU))))))),
52152                          (bVar"b'12",
52153                           Let(Var("S",F1),Mop(Cast F1,LL[bVar"b'26"]),
52154                               Let(Var("J2",F1),
52155                                   Mop(Cast F1,LL[bVar"b'11"]),
52156                                   Let(Var("J1",F1),
52157                                       Mop(Cast F1,LL[bVar"b'13"]),
52158                                       Let(Var("L",F1),
52159                                           Mop(Cast F1,LL[bVar"b'14"]),
52160                                           MB(Call
52161                                                ("ThumbCondition",
52162                                                 ATy(qTy,PTy(F4,qTy)),LU),
52163                                              Close
52164                                                (Var("v",F4),
52165                                                 MB(MB(MB(Call
52166                                                            ("HaveThumb2",
52167                                                             ATy(qTy,
52168                                                                 PTy(bTy,
52169                                                                     qTy)),
52170                                                             LU),
52171                                                          Close
52172                                                            (bVar"v0",
52173                                                             MB(MU(Bop(Or,
52174                                                                       Bop(And,
52175                                                                           Bop(And,
52176                                                                               EQ(Var("L",
52177                                                                                      F1),
52178                                                                                  LW(1,
52179                                                                                     1)),
52180                                                                               EQ(Var("J1",
52181                                                                                      F1),
52182                                                                                  LW(1,
52183                                                                                     1))),
52184                                                                           EQ(Var("J1",
52185                                                                                  F1),
52186                                                                              Var("J2",
52187                                                                                  F1))),
52188                                                                       bVar"v0"),
52189                                                                   qTy),
52190                                                                Close
52191                                                                  (bVar"v0",
52192                                                                   MU(TP[Var("v",
52193                                                                             F4),
52194                                                                         bVar"v0"],
52195                                                                      qTy))))),
52196                                                       Close
52197                                                         (Var("v",
52198                                                              PTy(F4,bTy)),
52199                                                          Call
52200                                                            ("Take",
52201                                                             ATy(qTy,
52202                                                                 PTy(bTy,
52203                                                                     qTy)),
52204                                                             Var("v",
52205                                                                 PTy(F4,
52206                                                                     bTy))))),
52207                                                    Close
52208                                                      (bVar"b",
52209                                                       ITE(bVar"b",
52210                                                           MB(Call
52211                                                                ("InITBlock",
52212                                                                 ATy(qTy,
52213                                                                     PTy(bTy,
52214                                                                         qTy)),
52215                                                                 LU),
52216                                                              Close
52217                                                                (bVar"v",
52218                                                                 MB(MB(ITE(bVar"v",
52219                                                                           MB(Call
52220                                                                                ("LastInITBlock",
52221                                                                                 ATy(qTy,
52222                                                                                     PTy(bTy,
52223                                                                                         qTy)),
52224                                                                                 LU),
52225                                                                              Close
52226                                                                                (bVar"v",
52227                                                                                 MU(Mop(Not,
52228                                                                                        bVar"v"),
52229                                                                                    qTy))),
52230                                                                           MU(LF,
52231                                                                              qTy)),
52232                                                                       Close
52233                                                                         (bVar"b",
52234                                                                          ITE(bVar"b",
52235                                                                              Call
52236                                                                                ("DECODE_UNPREDICTABLE",
52237                                                                                 ATy(qTy,
52238                                                                                     PTy(uTy,
52239                                                                                         qTy)),
52240                                                                                 TP[Var("mc",
52241                                                                                        CTy"MachineCode"),
52242                                                                                    LS
52243                                                                                     "BranchTarget or BranchLinkExchangeImmediate"]),
52244                                                                              MU(LU,
52245                                                                                 qTy)))),
52246                                                                    Close
52247                                                                      (AVar
52248                                                                         uTy,
52249                                                                       MU(Let(Var("imm32",
52250                                                                                  F32),
52251                                                                              Mop(SE F32,
52252                                                                                  CC[Var("S",
52253                                                                                         F1),
52254                                                                                     Mop(BNot,
52255                                                                                         Bop(BXor,
52256                                                                                             Var("J1",
52257                                                                                                 F1),
52258                                                                                             Var("S",
52259                                                                                                 F1))),
52260                                                                                     Mop(BNot,
52261                                                                                         Bop(BXor,
52262                                                                                             Var("J2",
52263                                                                                                 F1),
52264                                                                                             Var("S",
52265                                                                                                 F1))),
52266                                                                                     Mop(Cast
52267                                                                                           (FTy 10),
52268                                                                                         LL[bVar"b'25",
52269                                                                                            bVar"b'24",
52270                                                                                            bVar"b'23",
52271                                                                                            bVar"b'22",
52272                                                                                            bVar"b'21",
52273                                                                                            bVar"b'20",
52274                                                                                            bVar"b'19",
52275                                                                                            bVar"b'18",
52276                                                                                            bVar"b'17",
52277                                                                                            bVar"b'16"]),
52278                                                                                     Mop(Cast
52279                                                                                           (FTy 11),
52280                                                                                         LL[bVar"b'10",
52281                                                                                            bVar"b'9",
52282                                                                                            bVar"b'8",
52283                                                                                            bVar"b'7",
52284                                                                                            bVar"b'6",
52285                                                                                            bVar"b'5",
52286                                                                                            bVar"b'4",
52287                                                                                            bVar"b'3",
52288                                                                                            bVar"b'2",
52289                                                                                            bVar"b'1",
52290                                                                                            bVar"b'0"]),
52291                                                                                     LW(0,
52292                                                                                        1)]),
52293                                                                              ITE(EQ(Var("L",
52294                                                                                         F1),
52295                                                                                     LW(1,
52296                                                                                        1)),
52297                                                                                  Call
52298                                                                                    ("Branch",
52299                                                                                     CTy"instruction",
52300                                                                                     Call
52301                                                                                       ("BranchLinkExchangeImmediate",
52302                                                                                        CTy"Branch",
52303                                                                                        TP[LC("InstrSet_Thumb",
52304                                                                                              CTy"InstrSet"),
52305                                                                                           Var("imm32",
52306                                                                                               F32)])),
52307                                                                                  Call
52308                                                                                    ("Branch",
52309                                                                                     CTy"instruction",
52310                                                                                     Call
52311                                                                                       ("BranchTarget",
52312                                                                                        CTy"Branch",
52313                                                                                        Var("imm32",
52314                                                                                            F32))))),
52315                                                                          qTy))))),
52316                                                           Call
52317                                                             ("Skip",
52318                                                              ATy(qTy,
52319                                                                  PTy(CTy"instruction",
52320                                                                      qTy)),
52321                                                              LU))))))))))),
52322                          (Bop(And,bVar"b'14",Mop(Not,bVar"b'12")),
52323                           Let(Var("S",F1),Mop(Cast F1,LL[bVar"b'26"]),
52324                               Let(Var("J2",F1),
52325                                   Mop(Cast F1,LL[bVar"b'11"]),
52326                                   Let(Var("J1",F1),
52327                                       Mop(Cast F1,LL[bVar"b'13"]),
52328                                       MB(Call
52329                                            ("ThumbCondition",
52330                                             ATy(qTy,PTy(F4,qTy)),LU),
52331                                          Close
52332                                            (Var("v",F4),
52333                                             MB(MB(MB(Call
52334                                                        ("CurrentInstrSet",
52335                                                         ATy(qTy,
52336                                                             PTy(CTy"InstrSet",
52337                                                                 qTy)),LU),
52338                                                      Close
52339                                                        (Var("v0",
52340                                                             CTy"InstrSet"),
52341                                                         MB(MB(MB(MB(MU(EQ(Var("v0",
52342                                                                               CTy"InstrSet"),
52343                                                                           LC("InstrSet_ThumbEE",
52344                                                                              CTy"InstrSet")),
52345                                                                        qTy),
52346                                                                     Close
52347                                                                       (bVar"b",
52348                                                                        MU(Bop(Or,
52349                                                                               bVar"b",
52350                                                                               EQ(Mop(Cast
52351                                                                                        F1,
52352                                                                                      LL[bVar"b'0"]),
52353                                                                                  LW(1,
52354                                                                                     1))),
52355                                                                           qTy))),
52356                                                                  Close
52357                                                                    (bVar"v",
52358                                                                     MU(Mop(Not,
52359                                                                            bVar"v"),
52360                                                                        qTy))),
52361                                                               Close
52362                                                                 (bVar"b",
52363                                                                  ITE(bVar"b",
52364                                                                      ITE(Bop(And,
52365                                                                              EQ(Var("J1",
52366                                                                                     F1),
52367                                                                                 LW(1,
52368                                                                                    1)),
52369                                                                              EQ(Var("J1",
52370                                                                                     F1),
52371                                                                                 Var("J2",
52372                                                                                     F1))),
52373                                                                          MB(Call
52374                                                                               ("ArchVersion",
52375                                                                                ATy(qTy,
52376                                                                                    PTy(nTy,
52377                                                                                        qTy)),
52378                                                                                LU),
52379                                                                             Close
52380                                                                               (nVar"v",
52381                                                                                MU(Bop(Ge,
52382                                                                                       nVar"v",
52383                                                                                       LN
52384                                                                                        5),
52385                                                                                   qTy))),
52386                                                                          Call
52387                                                                            ("HaveThumb2",
52388                                                                             ATy(qTy,
52389                                                                                 PTy(bTy,
52390                                                                                     qTy)),
52391                                                                             LU)),
52392                                                                      MU(LF,
52393                                                                         qTy)))),
52394                                                            Close
52395                                                              (bVar"v0",
52396                                                               MU(TP[Var("v",
52397                                                                         F4),
52398                                                                     bVar"v0"],
52399                                                                  qTy))))),
52400                                                   Close
52401                                                     (Var("v",PTy(F4,bTy)),
52402                                                      Call
52403                                                        ("Take",
52404                                                         ATy(qTy,
52405                                                             PTy(bTy,qTy)),
52406                                                         Var("v",
52407                                                             PTy(F4,bTy))))),
52408                                                Close
52409                                                  (bVar"b",
52410                                                   ITE(bVar"b",
52411                                                       MB(Call
52412                                                            ("InITBlock",
52413                                                             ATy(qTy,
52414                                                                 PTy(bTy,
52415                                                                     qTy)),
52416                                                             LU),
52417                                                          Close
52418                                                            (bVar"v",
52419                                                             MB(MB(ITE(bVar"v",
52420                                                                       MB(Call
52421                                                                            ("LastInITBlock",
52422                                                                             ATy(qTy,
52423                                                                                 PTy(bTy,
52424                                                                                     qTy)),
52425                                                                             LU),
52426                                                                          Close
52427                                                                            (bVar"v",
52428                                                                             MU(Mop(Not,
52429                                                                                    bVar"v"),
52430                                                                                qTy))),
52431                                                                       MU(LF,
52432                                                                          qTy)),
52433                                                                   Close
52434                                                                     (bVar"b",
52435                                                                      ITE(bVar"b",
52436                                                                          Call
52437                                                                            ("DECODE_UNPREDICTABLE",
52438                                                                             ATy(qTy,
52439                                                                                 PTy(uTy,
52440                                                                                     qTy)),
52441                                                                             TP[Var("mc",
52442                                                                                    CTy"MachineCode"),
52443                                                                                LS
52444                                                                                 "BranchLinkExchangeImmediate"]),
52445                                                                          MU(LU,
52446                                                                             qTy)))),
52447                                                                Close
52448                                                                  (AVar
52449                                                                     uTy,
52450                                                                   MU(Call
52451                                                                        ("Branch",
52452                                                                         CTy"instruction",
52453                                                                         Call
52454                                                                           ("BranchLinkExchangeImmediate",
52455                                                                            CTy"Branch",
52456                                                                            TP[LC("InstrSet_ARM",
52457                                                                                  CTy"InstrSet"),
52458                                                                               Mop(SE F32,
52459                                                                                   CC[Var("S",
52460                                                                                          F1),
52461                                                                                      Mop(BNot,
52462                                                                                          Bop(BXor,
52463                                                                                              Var("J1",
52464                                                                                                  F1),
52465                                                                                              Var("S",
52466                                                                                                  F1))),
52467                                                                                      Mop(BNot,
52468                                                                                          Bop(BXor,
52469                                                                                              Var("J2",
52470                                                                                                  F1),
52471                                                                                              Var("S",
52472                                                                                                  F1))),
52473                                                                                      Mop(Cast
52474                                                                                            (FTy 10),
52475                                                                                          LL[bVar"b'25",
52476                                                                                             bVar"b'24",
52477                                                                                             bVar"b'23",
52478                                                                                             bVar"b'22",
52479                                                                                             bVar"b'21",
52480                                                                                             bVar"b'20",
52481                                                                                             bVar"b'19",
52482                                                                                             bVar"b'18",
52483                                                                                             bVar"b'17",
52484                                                                                             bVar"b'16"]),
52485                                                                                      Mop(Cast
52486                                                                                            (FTy 10),
52487                                                                                          LL[bVar"b'10",
52488                                                                                             bVar"b'9",
52489                                                                                             bVar"b'8",
52490                                                                                             bVar"b'7",
52491                                                                                             bVar"b'6",
52492                                                                                             bVar"b'5",
52493                                                                                             bVar"b'4",
52494                                                                                             bVar"b'3",
52495                                                                                             bVar"b'2",
52496                                                                                             bVar"b'1"]),
52497                                                                                      LW(0,
52498                                                                                         2)])])),
52499                                                                      qTy))))),
52500                                                       Call
52501                                                         ("Skip",
52502                                                          ATy(qTy,
52503                                                              PTy(CTy"instruction",
52504                                                                  qTy)),LU))))))))))],
52505                         Call
52506                           ("UndefinedThumb",
52507                            ATy(qTy,PTy(CTy"instruction",qTy)),LU)),
52508                     Call
52509                       ("UndefinedThumb",
52510                        ATy(qTy,PTy(CTy"instruction",qTy)),LU))),
52511                (Bop(And,bVar"b'31",
52512                     Bop(And,bVar"b'30",Bop(And,bVar"b'29",bVar"b'28"))),
52513                 ITB([(Mop(Not,bVar"b'25"),
52514                       Let(Var("Rn",F4),
52515                           Mop(Cast F4,
52516                               LL[bVar"b'19",bVar"b'18",bVar"b'17",
52517                                  bVar"b'16"]),
52518                           Let(Var("S",F1),Mop(Cast F1,LL[bVar"b'20"]),
52519                               Let(Var("Rd",F4),
52520                                   Mop(Cast F4,
52521                                       LL[bVar"b'11",bVar"b'10",bVar"b'9",
52522                                          bVar"b'8"]),
52523                                   MB(Call
52524                                        ("ThumbCondition",
52525                                         ATy(qTy,PTy(F4,qTy)),LU),
52526                                      Close
52527                                        (Var("v",F4),
52528                                         MB(MB(MB(Call
52529                                                    ("HaveThumb2",
52530                                                     ATy(qTy,PTy(bTy,qTy)),
52531                                                     LU),
52532                                                  Close
52533                                                    (bVar"v0",
52534                                                     MU(TP[Var("v",F4),
52535                                                           bVar"v0"],qTy))),
52536                                               Close
52537                                                 (Var("v",PTy(F4,bTy)),
52538                                                  Call
52539                                                    ("Take",
52540                                                     ATy(qTy,PTy(bTy,qTy)),
52541                                                     Var("v",PTy(F4,bTy))))),
52542                                            Close
52543                                              (bVar"b",
52544                                               ITE(bVar"b",
52545                                                   Let(Var("imm12",FTy 12),
52546                                                       CC[Mop(Cast F1,
52547                                                              LL[bVar"b'26"]),
52548                                                          Mop(Cast(FTy 3),
52549                                                              LL[bVar"b'14",
52550                                                                 bVar"b'13",
52551                                                                 bVar"b'12"]),
52552                                                          Mop(Cast F8,
52553                                                              LL[bVar"b'7",
52554                                                                 bVar"b'6",
52555                                                                 bVar"b'5",
52556                                                                 bVar"b'4",
52557                                                                 bVar"b'3",
52558                                                                 bVar"b'2",
52559                                                                 bVar"b'1",
52560                                                                 bVar"b'0"])],
52561                                                       MB(MR(Close
52562                                                               (qVar"s",
52563                                                                Dest
52564                                                                  ("CPSR",
52565                                                                   CTy"PSR",
52566                                                                   qVar"s"))),
52567                                                          Close
52568                                                            (Var("v",
52569                                                                 CTy"PSR"),
52570                                                             MB(MB(MB(MU(Dest
52571                                                                           ("C",
52572                                                                            bTy,
52573                                                                            Var("v",
52574                                                                                CTy"PSR")),
52575                                                                         qTy),
52576                                                                      Close
52577                                                                        (bVar"v",
52578                                                                         MU(TP[Var("imm12",
52579                                                                                   FTy 12),
52580                                                                               bVar"v"],
52581                                                                            qTy))),
52582                                                                   Close
52583                                                                     (Var("v",
52584                                                                          PTy(FTy 12,
52585                                                                              bTy)),
52586                                                                      Call
52587                                                                        ("ThumbExpandImm_C",
52588                                                                         ATy(qTy,
52589                                                                             PTy(PTy(F32,
52590                                                                                     bTy),
52591                                                                                 qTy)),
52592                                                                         Var("v",
52593                                                                             PTy(FTy 12,
52594                                                                                 bTy))))),
52595                                                                Close
52596                                                                  (Var("x",
52597                                                                       PTy(F32,
52598                                                                           bTy)),
52599                                                                   Let(bVar"setflags",
52600                                                                       EQ(Var("S",
52601                                                                              F1),
52602                                                                          LW(1,
52603                                                                             1)),
52604                                                                       CS(TP[Mop(Cast
52605                                                                                   F4,
52606                                                                                 LL[bVar"b'24",
52607                                                                                    bVar"b'23",
52608                                                                                    bVar"b'22",
52609                                                                                    bVar"b'21"]),
52610                                                                             Var("Rn",
52611                                                                                 F4),
52612                                                                             Var("Rd",
52613                                                                                 F4),
52614                                                                             Var("S",
52615                                                                                 F1)],
52616                                                                          [(TP[LW(0,
52617                                                                                  4),
52618                                                                               AVar
52619                                                                                 F4,
52620                                                                               LW(15,
52621                                                                                  4),
52622                                                                               LW(1,
52623                                                                                  1)],
52624                                                                            MB(ITE(Bop(In,
52625                                                                                       Var("Rn",
52626                                                                                           F4),
52627                                                                                       SL[LW(13,
52628                                                                                             4),
52629                                                                                          LW(15,
52630                                                                                             4)]),
52631                                                                                   Call
52632                                                                                     ("DECODE_UNPREDICTABLE",
52633                                                                                      ATy(qTy,
52634                                                                                          PTy(uTy,
52635                                                                                              qTy)),
52636                                                                                      TP[Var("mc",
52637                                                                                             CTy"MachineCode"),
52638                                                                                         LS
52639                                                                                          "TST (immediate)"]),
52640                                                                                   MU(LU,
52641                                                                                      qTy)),
52642                                                                               Close
52643                                                                                 (AVar
52644                                                                                    uTy,
52645                                                                                  MU(Call
52646                                                                                       ("Data",
52647                                                                                        CTy"instruction",
52648                                                                                        Call
52649                                                                                          ("TestCompareImmediate",
52650                                                                                           CTy"Data",
52651                                                                                           TP[LW(0,
52652                                                                                                 2),
52653                                                                                              Var("Rn",
52654                                                                                                  F4),
52655                                                                                              Var("imm12",
52656                                                                                                  FTy 12)])),
52657                                                                                     qTy)))),
52658                                                                           (TP[LW(0,
52659                                                                                  4),
52660                                                                               AVar
52661                                                                                 (PTy(F4,
52662                                                                                      PTy(F4,
52663                                                                                          F1)))],
52664                                                                            MB(ITE(Bop(Or,
52665                                                                                       Bop(Or,
52666                                                                                           EQ(Var("Rd",
52667                                                                                                  F4),
52668                                                                                              LW(13,
52669                                                                                                 4)),
52670                                                                                           Bop(And,
52671                                                                                               EQ(Var("Rd",
52672                                                                                                      F4),
52673                                                                                                  LW(15,
52674                                                                                                     4)),
52675                                                                                               Mop(Not,
52676                                                                                                   bVar"setflags"))),
52677                                                                                       Bop(In,
52678                                                                                           Var("Rn",
52679                                                                                               F4),
52680                                                                                           SL[LW(13,
52681                                                                                                 4),
52682                                                                                              LW(15,
52683                                                                                                 4)])),
52684                                                                                   Call
52685                                                                                     ("DECODE_UNPREDICTABLE",
52686                                                                                      ATy(qTy,
52687                                                                                          PTy(uTy,
52688                                                                                              qTy)),
52689                                                                                      TP[Var("mc",
52690                                                                                             CTy"MachineCode"),
52691                                                                                         LS
52692                                                                                          "AND (immediate)"]),
52693                                                                                   MU(LU,
52694                                                                                      qTy)),
52695                                                                               Close
52696                                                                                 (AVar
52697                                                                                    uTy,
52698                                                                                  MU(Call
52699                                                                                       ("Data",
52700                                                                                        CTy"instruction",
52701                                                                                        Call
52702                                                                                          ("ArithLogicImmediate",
52703                                                                                           CTy"Data",
52704                                                                                           TP[LW(0,
52705                                                                                                 4),
52706                                                                                              bVar"setflags",
52707                                                                                              Var("Rd",
52708                                                                                                  F4),
52709                                                                                              Var("Rn",
52710                                                                                                  F4),
52711                                                                                              Var("imm12",
52712                                                                                                  FTy 12)])),
52713                                                                                     qTy)))),
52714                                                                           (TP[LW(1,
52715                                                                                  4),
52716                                                                               AVar
52717                                                                                 (PTy(F4,
52718                                                                                      PTy(F4,
52719                                                                                          F1)))],
52720                                                                            MB(ITE(Bop(Or,
52721                                                                                       Bop(In,
52722                                                                                           Var("Rd",
52723                                                                                               F4),
52724                                                                                           SL[LW(13,
52725                                                                                                 4),
52726                                                                                              LW(15,
52727                                                                                                 4)]),
52728                                                                                       Bop(In,
52729                                                                                           Var("Rn",
52730                                                                                               F4),
52731                                                                                           SL[LW(13,
52732                                                                                                 4),
52733                                                                                              LW(15,
52734                                                                                                 4)])),
52735                                                                                   Call
52736                                                                                     ("DECODE_UNPREDICTABLE",
52737                                                                                      ATy(qTy,
52738                                                                                          PTy(uTy,
52739                                                                                              qTy)),
52740                                                                                      TP[Var("mc",
52741                                                                                             CTy"MachineCode"),
52742                                                                                         LS
52743                                                                                          "BIC (immediate)"]),
52744                                                                                   MU(LU,
52745                                                                                      qTy)),
52746                                                                               Close
52747                                                                                 (AVar
52748                                                                                    uTy,
52749                                                                                  MU(Call
52750                                                                                       ("Data",
52751                                                                                        CTy"instruction",
52752                                                                                        Call
52753                                                                                          ("ArithLogicImmediate",
52754                                                                                           CTy"Data",
52755                                                                                           TP[LW(14,
52756                                                                                                 4),
52757                                                                                              bVar"setflags",
52758                                                                                              Var("Rd",
52759                                                                                                  F4),
52760                                                                                              Var("Rn",
52761                                                                                                  F4),
52762                                                                                              Var("imm12",
52763                                                                                                  FTy 12)])),
52764                                                                                     qTy)))),
52765                                                                           (TP[LW(2,
52766                                                                                  4),
52767                                                                               LW(15,
52768                                                                                  4),
52769                                                                               AVar
52770                                                                                 (PTy(F4,
52771                                                                                      F1))],
52772                                                                            MB(ITE(Bop(In,
52773                                                                                       Var("Rd",
52774                                                                                           F4),
52775                                                                                       SL[LW(13,
52776                                                                                             4),
52777                                                                                          LW(15,
52778                                                                                             4)]),
52779                                                                                   Call
52780                                                                                     ("DECODE_UNPREDICTABLE",
52781                                                                                      ATy(qTy,
52782                                                                                          PTy(uTy,
52783                                                                                              qTy)),
52784                                                                                      TP[Var("mc",
52785                                                                                             CTy"MachineCode"),
52786                                                                                         LS
52787                                                                                          "MOV (immediate)"]),
52788                                                                                   MU(LU,
52789                                                                                      qTy)),
52790                                                                               Close
52791                                                                                 (AVar
52792                                                                                    uTy,
52793                                                                                  MU(Call
52794                                                                                       ("Data",
52795                                                                                        CTy"instruction",
52796                                                                                        Call
52797                                                                                          ("Move",
52798                                                                                           CTy"Data",
52799                                                                                           TP[bVar"setflags",
52800                                                                                              LF,
52801                                                                                              Var("Rd",
52802                                                                                                  F4),
52803                                                                                              Var("imm12",
52804                                                                                                  FTy 12)])),
52805                                                                                     qTy)))),
52806                                                                           (TP[LW(2,
52807                                                                                  4),
52808                                                                               AVar
52809                                                                                 (PTy(F4,
52810                                                                                      PTy(F4,
52811                                                                                          F1)))],
52812                                                                            MB(ITE(Bop(Or,
52813                                                                                       Bop(In,
52814                                                                                           Var("Rd",
52815                                                                                               F4),
52816                                                                                           SL[LW(13,
52817                                                                                                 4),
52818                                                                                              LW(15,
52819                                                                                                 4)]),
52820                                                                                       EQ(Var("Rn",
52821                                                                                              F4),
52822                                                                                          LW(13,
52823                                                                                             4))),
52824                                                                                   Call
52825                                                                                     ("DECODE_UNPREDICTABLE",
52826                                                                                      ATy(qTy,
52827                                                                                          PTy(uTy,
52828                                                                                              qTy)),
52829                                                                                      TP[Var("mc",
52830                                                                                             CTy"MachineCode"),
52831                                                                                         LS
52832                                                                                          "ORR (immediate)"]),
52833                                                                                   MU(LU,
52834                                                                                      qTy)),
52835                                                                               Close
52836                                                                                 (AVar
52837                                                                                    uTy,
52838                                                                                  MU(Call
52839                                                                                       ("Data",
52840                                                                                        CTy"instruction",
52841                                                                                        Call
52842                                                                                          ("ArithLogicImmediate",
52843                                                                                           CTy"Data",
52844                                                                                           TP[LW(12,
52845                                                                                                 4),
52846                                                                                              bVar"setflags",
52847                                                                                              Var("Rd",
52848                                                                                                  F4),
52849                                                                                              Var("Rn",
52850                                                                                                  F4),
52851                                                                                              Var("imm12",
52852                                                                                                  FTy 12)])),
52853                                                                                     qTy)))),
52854                                                                           (TP[LW(3,
52855                                                                                  4),
52856                                                                               LW(15,
52857                                                                                  4),
52858                                                                               AVar
52859                                                                                 (PTy(F4,
52860                                                                                      F1))],
52861                                                                            MB(ITE(Bop(In,
52862                                                                                       Var("Rd",
52863                                                                                           F4),
52864                                                                                       SL[LW(13,
52865                                                                                             4),
52866                                                                                          LW(15,
52867                                                                                             4)]),
52868                                                                                   Call
52869                                                                                     ("DECODE_UNPREDICTABLE",
52870                                                                                      ATy(qTy,
52871                                                                                          PTy(uTy,
52872                                                                                              qTy)),
52873                                                                                      TP[Var("mc",
52874                                                                                             CTy"MachineCode"),
52875                                                                                         LS
52876                                                                                          "MVN (immediate)"]),
52877                                                                                   MU(LU,
52878                                                                                      qTy)),
52879                                                                               Close
52880                                                                                 (AVar
52881                                                                                    uTy,
52882                                                                                  MU(Call
52883                                                                                       ("Data",
52884                                                                                        CTy"instruction",
52885                                                                                        Call
52886                                                                                          ("Move",
52887                                                                                           CTy"Data",
52888                                                                                           TP[bVar"setflags",
52889                                                                                              LT,
52890                                                                                              Var("Rd",
52891                                                                                                  F4),
52892                                                                                              Var("imm12",
52893                                                                                                  FTy 12)])),
52894                                                                                     qTy)))),
52895                                                                           (TP[LW(3,
52896                                                                                  4),
52897                                                                               AVar
52898                                                                                 (PTy(F4,
52899                                                                                      PTy(F4,
52900                                                                                          F1)))],
52901                                                                            MB(ITE(Bop(Or,
52902                                                                                       Bop(In,
52903                                                                                           Var("Rd",
52904                                                                                               F4),
52905                                                                                           SL[LW(13,
52906                                                                                                 4),
52907                                                                                              LW(15,
52908                                                                                                 4)]),
52909                                                                                       EQ(Var("Rn",
52910                                                                                              F4),
52911                                                                                          LW(13,
52912                                                                                             4))),
52913                                                                                   Call
52914                                                                                     ("DECODE_UNPREDICTABLE",
52915                                                                                      ATy(qTy,
52916                                                                                          PTy(uTy,
52917                                                                                              qTy)),
52918                                                                                      TP[Var("mc",
52919                                                                                             CTy"MachineCode"),
52920                                                                                         LS
52921                                                                                          "ORN (immediate)"]),
52922                                                                                   MU(LU,
52923                                                                                      qTy)),
52924                                                                               Close
52925                                                                                 (AVar
52926                                                                                    uTy,
52927                                                                                  MU(Call
52928                                                                                       ("Data",
52929                                                                                        CTy"instruction",
52930                                                                                        Call
52931                                                                                          ("ArithLogicImmediate",
52932                                                                                           CTy"Data",
52933                                                                                           TP[LW(15,
52934                                                                                                 4),
52935                                                                                              bVar"setflags",
52936                                                                                              Var("Rd",
52937                                                                                                  F4),
52938                                                                                              Var("Rn",
52939                                                                                                  F4),
52940                                                                                              Var("imm12",
52941                                                                                                  FTy 12)])),
52942                                                                                     qTy)))),
52943                                                                           (TP[LW(4,
52944                                                                                  4),
52945                                                                               AVar
52946                                                                                 F4,
52947                                                                               LW(15,
52948                                                                                  4),
52949                                                                               LW(1,
52950                                                                                  1)],
52951                                                                            MB(ITE(Bop(In,
52952                                                                                       Var("Rn",
52953                                                                                           F4),
52954                                                                                       SL[LW(13,
52955                                                                                             4),
52956                                                                                          LW(15,
52957                                                                                             4)]),
52958                                                                                   Call
52959                                                                                     ("DECODE_UNPREDICTABLE",
52960                                                                                      ATy(qTy,
52961                                                                                          PTy(uTy,
52962                                                                                              qTy)),
52963                                                                                      TP[Var("mc",
52964                                                                                             CTy"MachineCode"),
52965                                                                                         LS
52966                                                                                          "TEQ (immediate)"]),
52967                                                                                   MU(LU,
52968                                                                                      qTy)),
52969                                                                               Close
52970                                                                                 (AVar
52971                                                                                    uTy,
52972                                                                                  MU(Call
52973                                                                                       ("Data",
52974                                                                                        CTy"instruction",
52975                                                                                        Call
52976                                                                                          ("TestCompareImmediate",
52977                                                                                           CTy"Data",
52978                                                                                           TP[LW(1,
52979                                                                                                 2),
52980                                                                                              Var("Rn",
52981                                                                                                  F4),
52982                                                                                              Var("imm12",
52983                                                                                                  FTy 12)])),
52984                                                                                     qTy)))),
52985                                                                           (TP[LW(4,
52986                                                                                  4),
52987                                                                               AVar
52988                                                                                 (PTy(F4,
52989                                                                                      PTy(F4,
52990                                                                                          F1)))],
52991                                                                            MB(ITE(Bop(Or,
52992                                                                                       Bop(Or,
52993                                                                                           EQ(Var("Rd",
52994                                                                                                  F4),
52995                                                                                              LW(13,
52996                                                                                                 4)),
52997                                                                                           Bop(And,
52998                                                                                               EQ(Var("Rd",
52999                                                                                                      F4),
53000                                                                                                  LW(15,
53001                                                                                                     4)),
53002                                                                                               Mop(Not,
53003                                                                                                   bVar"setflags"))),
53004                                                                                       Bop(In,
53005                                                                                           Var("Rn",
53006                                                                                               F4),
53007                                                                                           SL[LW(13,
53008                                                                                                 4),
53009                                                                                              LW(15,
53010                                                                                                 4)])),
53011                                                                                   Call
53012                                                                                     ("DECODE_UNPREDICTABLE",
53013                                                                                      ATy(qTy,
53014                                                                                          PTy(uTy,
53015                                                                                              qTy)),
53016                                                                                      TP[Var("mc",
53017                                                                                             CTy"MachineCode"),
53018                                                                                         LS
53019                                                                                          "EOR (immediate)"]),
53020                                                                                   MU(LU,
53021                                                                                      qTy)),
53022                                                                               Close
53023                                                                                 (AVar
53024                                                                                    uTy,
53025                                                                                  MU(Call
53026                                                                                       ("Data",
53027                                                                                        CTy"instruction",
53028                                                                                        Call
53029                                                                                          ("ArithLogicImmediate",
53030                                                                                           CTy"Data",
53031                                                                                           TP[LW(1,
53032                                                                                                 4),
53033                                                                                              bVar"setflags",
53034                                                                                              Var("Rd",
53035                                                                                                  F4),
53036                                                                                              Var("Rn",
53037                                                                                                  F4),
53038                                                                                              Var("imm12",
53039                                                                                                  FTy 12)])),
53040                                                                                     qTy)))),
53041                                                                           (TP[LW(8,
53042                                                                                  4),
53043                                                                               AVar
53044                                                                                 F4,
53045                                                                               LW(15,
53046                                                                                  4),
53047                                                                               LW(1,
53048                                                                                  1)],
53049                                                                            MB(ITE(EQ(Var("Rn",
53050                                                                                          F4),
53051                                                                                      LW(15,
53052                                                                                         4)),
53053                                                                                   Call
53054                                                                                     ("DECODE_UNPREDICTABLE",
53055                                                                                      ATy(qTy,
53056                                                                                          PTy(uTy,
53057                                                                                              qTy)),
53058                                                                                      TP[Var("mc",
53059                                                                                             CTy"MachineCode"),
53060                                                                                         LS
53061                                                                                          "CMN (immediate)"]),
53062                                                                                   MU(LU,
53063                                                                                      qTy)),
53064                                                                               Close
53065                                                                                 (AVar
53066                                                                                    uTy,
53067                                                                                  MU(Call
53068                                                                                       ("Data",
53069                                                                                        CTy"instruction",
53070                                                                                        Call
53071                                                                                          ("TestCompareImmediate",
53072                                                                                           CTy"Data",
53073                                                                                           TP[LW(3,
53074                                                                                                 2),
53075                                                                                              Var("Rn",
53076                                                                                                  F4),
53077                                                                                              Var("imm12",
53078                                                                                                  FTy 12)])),
53079                                                                                     qTy)))),
53080                                                                           (TP[LW(8,
53081                                                                                  4),
53082                                                                               AVar
53083                                                                                 (PTy(F4,
53084                                                                                      PTy(F4,
53085                                                                                          F1)))],
53086                                                                            MB(ITE(Bop(Or,
53087                                                                                       Bop(Or,
53088                                                                                           EQ(Var("Rd",
53089                                                                                                  F4),
53090                                                                                              LW(13,
53091                                                                                                 4)),
53092                                                                                           Bop(And,
53093                                                                                               EQ(Var("Rd",
53094                                                                                                      F4),
53095                                                                                                  LW(15,
53096                                                                                                     4)),
53097                                                                                               Mop(Not,
53098                                                                                                   bVar"setflags"))),
53099                                                                                       EQ(Var("Rn",
53100                                                                                              F4),
53101                                                                                          LW(15,
53102                                                                                             4))),
53103                                                                                   Call
53104                                                                                     ("DECODE_UNPREDICTABLE",
53105                                                                                      ATy(qTy,
53106                                                                                          PTy(uTy,
53107                                                                                              qTy)),
53108                                                                                      TP[Var("mc",
53109                                                                                             CTy"MachineCode"),
53110                                                                                         LS
53111                                                                                          "ADD (immediate)"]),
53112                                                                                   MU(LU,
53113                                                                                      qTy)),
53114                                                                               Close
53115                                                                                 (AVar
53116                                                                                    uTy,
53117                                                                                  MU(Call
53118                                                                                       ("Data",
53119                                                                                        CTy"instruction",
53120                                                                                        Call
53121                                                                                          ("ArithLogicImmediate",
53122                                                                                           CTy"Data",
53123                                                                                           TP[LW(4,
53124                                                                                                 4),
53125                                                                                              bVar"setflags",
53126                                                                                              Var("Rd",
53127                                                                                                  F4),
53128                                                                                              Var("Rn",
53129                                                                                                  F4),
53130                                                                                              Var("imm12",
53131                                                                                                  FTy 12)])),
53132                                                                                     qTy)))),
53133                                                                           (TP[LW(10,
53134                                                                                  4),
53135                                                                               AVar
53136                                                                                 (PTy(F4,
53137                                                                                      PTy(F4,
53138                                                                                          F1)))],
53139                                                                            MB(ITE(Bop(Or,
53140                                                                                       Bop(In,
53141                                                                                           Var("Rd",
53142                                                                                               F4),
53143                                                                                           SL[LW(13,
53144                                                                                                 4),
53145                                                                                              LW(15,
53146                                                                                                 4)]),
53147                                                                                       Bop(In,
53148                                                                                           Var("Rn",
53149                                                                                               F4),
53150                                                                                           SL[LW(13,
53151                                                                                                 4),
53152                                                                                              LW(15,
53153                                                                                                 4)])),
53154                                                                                   Call
53155                                                                                     ("DECODE_UNPREDICTABLE",
53156                                                                                      ATy(qTy,
53157                                                                                          PTy(uTy,
53158                                                                                              qTy)),
53159                                                                                      TP[Var("mc",
53160                                                                                             CTy"MachineCode"),
53161                                                                                         LS
53162                                                                                          "ADC (immediate)"]),
53163                                                                                   MU(LU,
53164                                                                                      qTy)),
53165                                                                               Close
53166                                                                                 (AVar
53167                                                                                    uTy,
53168                                                                                  MU(Call
53169                                                                                       ("Data",
53170                                                                                        CTy"instruction",
53171                                                                                        Call
53172                                                                                          ("ArithLogicImmediate",
53173                                                                                           CTy"Data",
53174                                                                                           TP[LW(5,
53175                                                                                                 4),
53176                                                                                              bVar"setflags",
53177                                                                                              Var("Rd",
53178                                                                                                  F4),
53179                                                                                              Var("Rn",
53180                                                                                                  F4),
53181                                                                                              Var("imm12",
53182                                                                                                  FTy 12)])),
53183                                                                                     qTy)))),
53184                                                                           (TP[LW(11,
53185                                                                                  4),
53186                                                                               AVar
53187                                                                                 (PTy(F4,
53188                                                                                      PTy(F4,
53189                                                                                          F1)))],
53190                                                                            MB(ITE(Bop(Or,
53191                                                                                       Bop(In,
53192                                                                                           Var("Rd",
53193                                                                                               F4),
53194                                                                                           SL[LW(13,
53195                                                                                                 4),
53196                                                                                              LW(15,
53197                                                                                                 4)]),
53198                                                                                       Bop(In,
53199                                                                                           Var("Rn",
53200                                                                                               F4),
53201                                                                                           SL[LW(13,
53202                                                                                                 4),
53203                                                                                              LW(15,
53204                                                                                                 4)])),
53205                                                                                   Call
53206                                                                                     ("DECODE_UNPREDICTABLE",
53207                                                                                      ATy(qTy,
53208                                                                                          PTy(uTy,
53209                                                                                              qTy)),
53210                                                                                      TP[Var("mc",
53211                                                                                             CTy"MachineCode"),
53212                                                                                         LS
53213                                                                                          "SBC (immediate)"]),
53214                                                                                   MU(LU,
53215                                                                                      qTy)),
53216                                                                               Close
53217                                                                                 (AVar
53218                                                                                    uTy,
53219                                                                                  MU(Call
53220                                                                                       ("Data",
53221                                                                                        CTy"instruction",
53222                                                                                        Call
53223                                                                                          ("ArithLogicImmediate",
53224                                                                                           CTy"Data",
53225                                                                                           TP[LW(6,
53226                                                                                                 4),
53227                                                                                              bVar"setflags",
53228                                                                                              Var("Rd",
53229                                                                                                  F4),
53230                                                                                              Var("Rn",
53231                                                                                                  F4),
53232                                                                                              Var("imm12",
53233                                                                                                  FTy 12)])),
53234                                                                                     qTy)))),
53235                                                                           (TP[LW(13,
53236                                                                                  4),
53237                                                                               AVar
53238                                                                                 F4,
53239                                                                               LW(15,
53240                                                                                  4),
53241                                                                               LW(1,
53242                                                                                  1)],
53243                                                                            MB(ITE(EQ(Var("Rn",
53244                                                                                          F4),
53245                                                                                      LW(15,
53246                                                                                         4)),
53247                                                                                   Call
53248                                                                                     ("DECODE_UNPREDICTABLE",
53249                                                                                      ATy(qTy,
53250                                                                                          PTy(uTy,
53251                                                                                              qTy)),
53252                                                                                      TP[Var("mc",
53253                                                                                             CTy"MachineCode"),
53254                                                                                         LS
53255                                                                                          "CMP (immediate)"]),
53256                                                                                   MU(LU,
53257                                                                                      qTy)),
53258                                                                               Close
53259                                                                                 (AVar
53260                                                                                    uTy,
53261                                                                                  MU(Call
53262                                                                                       ("Data",
53263                                                                                        CTy"instruction",
53264                                                                                        Call
53265                                                                                          ("TestCompareImmediate",
53266                                                                                           CTy"Data",
53267                                                                                           TP[LW(2,
53268                                                                                                 2),
53269                                                                                              Var("Rn",
53270                                                                                                  F4),
53271                                                                                              Var("imm12",
53272                                                                                                  FTy 12)])),
53273                                                                                     qTy)))),
53274                                                                           (TP[LW(13,
53275                                                                                  4),
53276                                                                               AVar
53277                                                                                 (PTy(F4,
53278                                                                                      PTy(F4,
53279                                                                                          F1)))],
53280                                                                            MB(ITE(Bop(Or,
53281                                                                                       Bop(Or,
53282                                                                                           EQ(Var("Rd",
53283                                                                                                  F4),
53284                                                                                              LW(13,
53285                                                                                                 4)),
53286                                                                                           Bop(And,
53287                                                                                               EQ(Var("Rd",
53288                                                                                                      F4),
53289                                                                                                  LW(15,
53290                                                                                                     4)),
53291                                                                                               Mop(Not,
53292                                                                                                   bVar"setflags"))),
53293                                                                                       EQ(Var("Rn",
53294                                                                                              F4),
53295                                                                                          LW(15,
53296                                                                                             4))),
53297                                                                                   Call
53298                                                                                     ("DECODE_UNPREDICTABLE",
53299                                                                                      ATy(qTy,
53300                                                                                          PTy(uTy,
53301                                                                                              qTy)),
53302                                                                                      TP[Var("mc",
53303                                                                                             CTy"MachineCode"),
53304                                                                                         LS
53305                                                                                          "SUB (immediate)"]),
53306                                                                                   MU(LU,
53307                                                                                      qTy)),
53308                                                                               Close
53309                                                                                 (AVar
53310                                                                                    uTy,
53311                                                                                  MU(Call
53312                                                                                       ("Data",
53313                                                                                        CTy"instruction",
53314                                                                                        Call
53315                                                                                          ("ArithLogicImmediate",
53316                                                                                           CTy"Data",
53317                                                                                           TP[LW(2,
53318                                                                                                 4),
53319                                                                                              bVar"setflags",
53320                                                                                              Var("Rd",
53321                                                                                                  F4),
53322                                                                                              Var("Rn",
53323                                                                                                  F4),
53324                                                                                              Var("imm12",
53325                                                                                                  FTy 12)])),
53326                                                                                     qTy)))),
53327                                                                           (TP[LW(14,
53328                                                                                  4),
53329                                                                               AVar
53330                                                                                 (PTy(F4,
53331                                                                                      PTy(F4,
53332                                                                                          F1)))],
53333                                                                            MB(ITE(Bop(Or,
53334                                                                                       Bop(In,
53335                                                                                           Var("Rd",
53336                                                                                               F4),
53337                                                                                           SL[LW(13,
53338                                                                                                 4),
53339                                                                                              LW(15,
53340                                                                                                 4)]),
53341                                                                                       Bop(In,
53342                                                                                           Var("Rn",
53343                                                                                               F4),
53344                                                                                           SL[LW(13,
53345                                                                                                 4),
53346                                                                                              LW(15,
53347                                                                                                 4)])),
53348                                                                                   Call
53349                                                                                     ("DECODE_UNPREDICTABLE",
53350                                                                                      ATy(qTy,
53351                                                                                          PTy(uTy,
53352                                                                                              qTy)),
53353                                                                                      TP[Var("mc",
53354                                                                                             CTy"MachineCode"),
53355                                                                                         LS
53356                                                                                          "RSB (immediate)"]),
53357                                                                                   MU(LU,
53358                                                                                      qTy)),
53359                                                                               Close
53360                                                                                 (AVar
53361                                                                                    uTy,
53362                                                                                  MU(Call
53363                                                                                       ("Data",
53364                                                                                        CTy"instruction",
53365                                                                                        Call
53366                                                                                          ("ArithLogicImmediate",
53367                                                                                           CTy"Data",
53368                                                                                           TP[LW(3,
53369                                                                                                 4),
53370                                                                                              bVar"setflags",
53371                                                                                              Var("Rd",
53372                                                                                                  F4),
53373                                                                                              Var("Rn",
53374                                                                                                  F4),
53375                                                                                              Var("imm12",
53376                                                                                                  FTy 12)])),
53377                                                                                     qTy)))),
53378                                                                           (AVar
53379                                                                              (PTy(F4,
53380                                                                                   PTy(F4,
53381                                                                                       PTy(F4,
53382                                                                                           F1)))),
53383                                                                            MU(Call
53384                                                                                 ("Undefined",
53385                                                                                  CTy"instruction",
53386                                                                                  LW(0,
53387                                                                                     32)),
53388                                                                               qTy))]))))))),
53389                                                   Call
53390                                                     ("Skip",
53391                                                      ATy(qTy,
53392                                                          PTy(CTy"instruction",
53393                                                              qTy)),LU)))))))))),
53394                      (Bop(And,bVar"b'25",
53395                           Bop(And,Mop(Not,bVar"b'24"),
53396                               Bop(And,Mop(Not,bVar"b'23"),
53397                                   Bop(And,Mop(Not,bVar"b'22"),
53398                                       Bop(And,Mop(Not,bVar"b'21"),
53399                                           Mop(Not,bVar"b'20")))))),
53400                       Let(Var("Rd",F4),
53401                           Mop(Cast F4,
53402                               LL[bVar"b'11",bVar"b'10",bVar"b'9",
53403                                  bVar"b'8"]),
53404                           MB(Call
53405                                ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
53406                              Close
53407                                (Var("v",F4),
53408                                 MB(MB(MB(Call
53409                                            ("HaveThumb2",
53410                                             ATy(qTy,PTy(bTy,qTy)),LU),
53411                                          Close
53412                                            (bVar"v0",
53413                                             MU(TP[Var("v",F4),bVar"v0"],
53414                                                qTy))),
53415                                       Close
53416                                         (Var("v",PTy(F4,bTy)),
53417                                          Call
53418                                            ("Take",ATy(qTy,PTy(bTy,qTy)),
53419                                             Var("v",PTy(F4,bTy))))),
53420                                    Close
53421                                      (bVar"b",
53422                                       ITE(bVar"b",
53423                                           MB(ITE(Bop(In,Var("Rd",F4),
53424                                                      SL[LW(13,4),LW(15,4)]),
53425                                                  Call
53426                                                    ("DECODE_UNPREDICTABLE",
53427                                                     ATy(qTy,PTy(uTy,qTy)),
53428                                                     TP[Var("mc",
53429                                                            CTy"MachineCode"),
53430                                                        LS
53431                                                         "ADDW (immediate)"]),
53432                                                  MU(LU,qTy)),
53433                                              Close
53434                                                (AVar uTy,
53435                                                 MU(Call
53436                                                      ("Data",
53437                                                       CTy"instruction",
53438                                                       Call
53439                                                         ("AddSub",
53440                                                          CTy"Data",
53441                                                          TP[LF,
53442                                                             Var("Rd",F4),
53443                                                             Mop(Cast F4,
53444                                                                 LL[bVar"b'19",
53445                                                                    bVar"b'18",
53446                                                                    bVar"b'17",
53447                                                                    bVar"b'16"]),
53448                                                             CC[Mop(Cast
53449                                                                      F1,
53450                                                                    LL[bVar"b'26"]),
53451                                                                Mop(Cast
53452                                                                      (FTy 3),
53453                                                                    LL[bVar"b'14",
53454                                                                       bVar"b'13",
53455                                                                       bVar"b'12"]),
53456                                                                Mop(Cast
53457                                                                      F8,
53458                                                                    LL[bVar"b'7",
53459                                                                       bVar"b'6",
53460                                                                       bVar"b'5",
53461                                                                       bVar"b'4",
53462                                                                       bVar"b'3",
53463                                                                       bVar"b'2",
53464                                                                       bVar"b'1",
53465                                                                       bVar"b'0"])]])),
53466                                                    qTy))),
53467                                           Call
53468                                             ("Skip",
53469                                              ATy(qTy,
53470                                                  PTy(CTy"instruction",qTy)),
53471                                              LU)))))))),
53472                      (Bop(And,bVar"b'25",
53473                           Bop(And,Mop(Not,bVar"b'24"),
53474                               Bop(And,bVar"b'23",
53475                                   Bop(And,Mop(Not,bVar"b'22"),
53476                                       Bop(And,bVar"b'21",
53477                                           Mop(Not,bVar"b'20")))))),
53478                       Let(Var("Rd",F4),
53479                           Mop(Cast F4,
53480                               LL[bVar"b'11",bVar"b'10",bVar"b'9",
53481                                  bVar"b'8"]),
53482                           MB(Call
53483                                ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
53484                              Close
53485                                (Var("v",F4),
53486                                 MB(MB(MB(Call
53487                                            ("HaveThumb2",
53488                                             ATy(qTy,PTy(bTy,qTy)),LU),
53489                                          Close
53490                                            (bVar"v0",
53491                                             MU(TP[Var("v",F4),bVar"v0"],
53492                                                qTy))),
53493                                       Close
53494                                         (Var("v",PTy(F4,bTy)),
53495                                          Call
53496                                            ("Take",ATy(qTy,PTy(bTy,qTy)),
53497                                             Var("v",PTy(F4,bTy))))),
53498                                    Close
53499                                      (bVar"b",
53500                                       ITE(bVar"b",
53501                                           MB(ITE(Bop(In,Var("Rd",F4),
53502                                                      SL[LW(13,4),LW(15,4)]),
53503                                                  Call
53504                                                    ("DECODE_UNPREDICTABLE",
53505                                                     ATy(qTy,PTy(uTy,qTy)),
53506                                                     TP[Var("mc",
53507                                                            CTy"MachineCode"),
53508                                                        LS
53509                                                         "SUBW (immediate)"]),
53510                                                  MU(LU,qTy)),
53511                                              Close
53512                                                (AVar uTy,
53513                                                 MU(Call
53514                                                      ("Data",
53515                                                       CTy"instruction",
53516                                                       Call
53517                                                         ("AddSub",
53518                                                          CTy"Data",
53519                                                          TP[LT,
53520                                                             Var("Rd",F4),
53521                                                             Mop(Cast F4,
53522                                                                 LL[bVar"b'19",
53523                                                                    bVar"b'18",
53524                                                                    bVar"b'17",
53525                                                                    bVar"b'16"]),
53526                                                             CC[Mop(Cast
53527                                                                      F1,
53528                                                                    LL[bVar"b'26"]),
53529                                                                Mop(Cast
53530                                                                      (FTy 3),
53531                                                                    LL[bVar"b'14",
53532                                                                       bVar"b'13",
53533                                                                       bVar"b'12"]),
53534                                                                Mop(Cast
53535                                                                      F8,
53536                                                                    LL[bVar"b'7",
53537                                                                       bVar"b'6",
53538                                                                       bVar"b'5",
53539                                                                       bVar"b'4",
53540                                                                       bVar"b'3",
53541                                                                       bVar"b'2",
53542                                                                       bVar"b'1",
53543                                                                       bVar"b'0"])]])),
53544                                                    qTy))),
53545                                           Call
53546                                             ("Skip",
53547                                              ATy(qTy,
53548                                                  PTy(CTy"instruction",qTy)),
53549                                              LU)))))))),
53550                      (Bop(And,bVar"b'25",
53551                           Bop(And,Mop(Not,bVar"b'24"),
53552                               Bop(And,bVar"b'22",
53553                                   Bop(And,Mop(Not,bVar"b'21"),
53554                                       Mop(Not,bVar"b'20"))))),
53555                       Let(Var("Rd",F4),
53556                           Mop(Cast F4,
53557                               LL[bVar"b'11",bVar"b'10",bVar"b'9",
53558                                  bVar"b'8"]),
53559                           MB(Call
53560                                ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
53561                              Close
53562                                (Var("v",F4),
53563                                 MB(MB(MB(Call
53564                                            ("HaveThumb2",
53565                                             ATy(qTy,PTy(bTy,qTy)),LU),
53566                                          Close
53567                                            (bVar"v0",
53568                                             MU(TP[Var("v",F4),bVar"v0"],
53569                                                qTy))),
53570                                       Close
53571                                         (Var("v",PTy(F4,bTy)),
53572                                          Call
53573                                            ("Take",ATy(qTy,PTy(bTy,qTy)),
53574                                             Var("v",PTy(F4,bTy))))),
53575                                    Close
53576                                      (bVar"b",
53577                                       ITE(bVar"b",
53578                                           MB(ITE(Bop(In,Var("Rd",F4),
53579                                                      SL[LW(13,4),LW(15,4)]),
53580                                                  Call
53581                                                    ("DECODE_UNPREDICTABLE",
53582                                                     ATy(qTy,PTy(uTy,qTy)),
53583                                                     TP[Var("mc",
53584                                                            CTy"MachineCode"),
53585                                                        LS
53586                                                         "MOVT or MOVW (immediate)"]),
53587                                                  MU(LU,qTy)),
53588                                              Close
53589                                                (AVar uTy,
53590                                                 MU(Call
53591                                                      ("Data",
53592                                                       CTy"instruction",
53593                                                       Call
53594                                                         ("MoveHalfword",
53595                                                          CTy"Data",
53596                                                          TP[EQ(Mop(Cast
53597                                                                      F1,
53598                                                                    LL[bVar"b'23"]),
53599                                                                LW(1,1)),
53600                                                             Var("Rd",F4),
53601                                                             CC[Mop(Cast
53602                                                                      F4,
53603                                                                    LL[bVar"b'19",
53604                                                                       bVar"b'18",
53605                                                                       bVar"b'17",
53606                                                                       bVar"b'16"]),
53607                                                                Mop(Cast
53608                                                                      F1,
53609                                                                    LL[bVar"b'26"]),
53610                                                                Mop(Cast
53611                                                                      (FTy 3),
53612                                                                    LL[bVar"b'14",
53613                                                                       bVar"b'13",
53614                                                                       bVar"b'12"]),
53615                                                                Mop(Cast
53616                                                                      F8,
53617                                                                    LL[bVar"b'7",
53618                                                                       bVar"b'6",
53619                                                                       bVar"b'5",
53620                                                                       bVar"b'4",
53621                                                                       bVar"b'3",
53622                                                                       bVar"b'2",
53623                                                                       bVar"b'1",
53624                                                                       bVar"b'0"])]])),
53625                                                    qTy))),
53626                                           Call
53627                                             ("Skip",
53628                                              ATy(qTy,
53629                                                  PTy(CTy"instruction",qTy)),
53630                                              LU)))))))),
53631                      (Bop(And,bVar"b'25",
53632                           Bop(And,bVar"b'24",
53633                               Bop(And,Mop(Not,bVar"b'22"),
53634                                   Bop(And,bVar"b'21",
53635                                       Bop(And,Mop(Not,bVar"b'20"),
53636                                           Bop(And,Mop(Not,bVar"b'14"),
53637                                               Bop(And,
53638                                                   Mop(Not,bVar"b'13"),
53639                                                   Bop(And,
53640                                                       Mop(Not,bVar"b'12"),
53641                                                       Bop(And,
53642                                                           Mop(Not,
53643                                                               bVar"b'7"),
53644                                                           Mop(Not,
53645                                                               bVar"b'6")))))))))),
53646                       Let(Var("Rn",F4),
53647                           Mop(Cast F4,
53648                               LL[bVar"b'19",bVar"b'18",bVar"b'17",
53649                                  bVar"b'16"]),
53650                           Let(Var("sat_imm",F4),
53651                               Mop(Cast F4,
53652                                   LL[bVar"b'3",bVar"b'2",bVar"b'1",
53653                                      bVar"b'0"]),
53654                               Let(Var("Rd",F4),
53655                                   Mop(Cast F4,
53656                                       LL[bVar"b'11",bVar"b'10",bVar"b'9",
53657                                          bVar"b'8"]),
53658                                   MB(Call
53659                                        ("ThumbCondition",
53660                                         ATy(qTy,PTy(F4,qTy)),LU),
53661                                      Close
53662                                        (Var("v",F4),
53663                                         MB(MB(MB(Call
53664                                                    ("HaveThumb2",
53665                                                     ATy(qTy,PTy(bTy,qTy)),
53666                                                     LU),
53667                                                  Close
53668                                                    (bVar"v0",
53669                                                     MU(TP[Var("v",F4),
53670                                                           bVar"v0"],qTy))),
53671                                               Close
53672                                                 (Var("v",PTy(F4,bTy)),
53673                                                  Call
53674                                                    ("Take",
53675                                                     ATy(qTy,PTy(bTy,qTy)),
53676                                                     Var("v",PTy(F4,bTy))))),
53677                                            Close
53678                                              (bVar"b",
53679                                               ITE(bVar"b",
53680                                                   MB(ITE(Bop(Or,
53681                                                              Bop(In,
53682                                                                  Var("Rd",
53683                                                                      F4),
53684                                                                  SL[LW(13,
53685                                                                        4),
53686                                                                     LW(15,
53687                                                                        4)]),
53688                                                              Bop(In,
53689                                                                  Var("Rn",
53690                                                                      F4),
53691                                                                  SL[LW(13,
53692                                                                        4),
53693                                                                     LW(15,
53694                                                                        4)])),
53695                                                          Call
53696                                                            ("DECODE_UNPREDICTABLE",
53697                                                             ATy(qTy,
53698                                                                 PTy(uTy,
53699                                                                     qTy)),
53700                                                             TP[Var("mc",
53701                                                                    CTy"MachineCode"),
53702                                                                LS
53703                                                                 "Saturate16"]),
53704                                                          MU(LU,qTy)),
53705                                                      Close
53706                                                        (AVar uTy,
53707                                                         MU(Let(bVar"unsigned",
53708                                                                EQ(Mop(Cast
53709                                                                         F1,
53710                                                                       LL[bVar"b'23"]),
53711                                                                   LW(1,1)),
53712                                                                Call
53713                                                                  ("Media",
53714                                                                   CTy"instruction",
53715                                                                   Call
53716                                                                     ("Saturate16",
53717                                                                      CTy"Media",
53718                                                                      TP[ITE(bVar"unsigned",
53719                                                                             Mop(Cast
53720                                                                                   nTy,
53721                                                                                 Var("sat_imm",
53722                                                                                     F4)),
53723                                                                             Bop(Add,
53724                                                                                 Mop(Cast
53725                                                                                       nTy,
53726                                                                                     Var("sat_imm",
53727                                                                                         F4)),
53728                                                                                 LN
53729                                                                                  1)),
53730                                                                         bVar"unsigned",
53731                                                                         Var("Rd",
53732                                                                             F4),
53733                                                                         Var("Rn",
53734                                                                             F4)]))),
53735                                                            qTy))),
53736                                                   Call
53737                                                     ("Skip",
53738                                                      ATy(qTy,
53739                                                          PTy(CTy"instruction",
53740                                                              qTy)),LU)))))))))),
53741                      (Bop(And,bVar"b'25",
53742                           Bop(And,bVar"b'24",
53743                               Bop(And,Mop(Not,bVar"b'22"),
53744                                   Mop(Not,bVar"b'20")))),
53745                       Let(Var("Rn",F4),
53746                           Mop(Cast F4,
53747                               LL[bVar"b'19",bVar"b'18",bVar"b'17",
53748                                  bVar"b'16"]),
53749                           Let(Var("sat_imm",FTy 5),
53750                               Mop(Cast(FTy 5),
53751                                   LL[bVar"b'4",bVar"b'3",bVar"b'2",
53752                                      bVar"b'1",bVar"b'0"]),
53753                               Let(Var("Rd",F4),
53754                                   Mop(Cast F4,
53755                                       LL[bVar"b'11",bVar"b'10",bVar"b'9",
53756                                          bVar"b'8"]),
53757                                   MB(Call
53758                                        ("ThumbCondition",
53759                                         ATy(qTy,PTy(F4,qTy)),LU),
53760                                      Close
53761                                        (Var("v",F4),
53762                                         MB(MB(MB(Call
53763                                                    ("HaveThumb2",
53764                                                     ATy(qTy,PTy(bTy,qTy)),
53765                                                     LU),
53766                                                  Close
53767                                                    (bVar"v0",
53768                                                     MU(TP[Var("v",F4),
53769                                                           bVar"v0"],qTy))),
53770                                               Close
53771                                                 (Var("v",PTy(F4,bTy)),
53772                                                  Call
53773                                                    ("Take",
53774                                                     ATy(qTy,PTy(bTy,qTy)),
53775                                                     Var("v",PTy(F4,bTy))))),
53776                                            Close
53777                                              (bVar"b",
53778                                               ITE(bVar"b",
53779                                                   MB(ITE(Bop(Or,
53780                                                              Bop(In,
53781                                                                  Var("Rd",
53782                                                                      F4),
53783                                                                  SL[LW(13,
53784                                                                        4),
53785                                                                     LW(15,
53786                                                                        4)]),
53787                                                              Bop(In,
53788                                                                  Var("Rn",
53789                                                                      F4),
53790                                                                  SL[LW(13,
53791                                                                        4),
53792                                                                     LW(15,
53793                                                                        4)])),
53794                                                          Call
53795                                                            ("DECODE_UNPREDICTABLE",
53796                                                             ATy(qTy,
53797                                                                 PTy(uTy,
53798                                                                     qTy)),
53799                                                             TP[Var("mc",
53800                                                                    CTy"MachineCode"),
53801                                                                LS
53802                                                                 "Saturate"]),
53803                                                          MU(LU,qTy)),
53804                                                      Close
53805                                                        (AVar uTy,
53806                                                         MU(Let(bVar"unsigned",
53807                                                                EQ(Mop(Cast
53808                                                                         F1,
53809                                                                       LL[bVar"b'23"]),
53810                                                                   LW(1,1)),
53811                                                                Let(TP[Var("shift_t",
53812                                                                           CTy"SRType"),
53813                                                                       nVar"shift_n"],
53814                                                                    Call
53815                                                                      ("DecodeImmShift",
53816                                                                       PTy(CTy"SRType",
53817                                                                           nTy),
53818                                                                       TP[CC[Mop(Cast
53819                                                                                   F1,
53820                                                                                 LL[bVar"b'21"]),
53821                                                                             LW(0,
53822                                                                                1)],
53823                                                                          CC[Mop(Cast
53824                                                                                   (FTy 3),
53825                                                                                 LL[bVar"b'14",
53826                                                                                    bVar"b'13",
53827                                                                                    bVar"b'12"]),
53828                                                                             Mop(Cast
53829                                                                                   (FTy 2),
53830                                                                                 LL[bVar"b'7",
53831                                                                                    bVar"b'6"])]]),
53832                                                                    Call
53833                                                                      ("Media",
53834                                                                       CTy"instruction",
53835                                                                       Call
53836                                                                         ("Saturate",
53837                                                                          CTy"Media",
53838                                                                          TP[Var("shift_t",
53839                                                                                 CTy"SRType"),
53840                                                                             nVar"shift_n",
53841                                                                             ITE(bVar"unsigned",
53842                                                                                 Mop(Cast
53843                                                                                       nTy,
53844                                                                                     Var("sat_imm",
53845                                                                                         FTy 5)),
53846                                                                                 Bop(Add,
53847                                                                                     Mop(Cast
53848                                                                                           nTy,
53849                                                                                         Var("sat_imm",
53850                                                                                             FTy 5)),
53851                                                                                     LN
53852                                                                                      1)),
53853                                                                             bVar"unsigned",
53854                                                                             Var("Rd",
53855                                                                                 F4),
53856                                                                             Var("Rn",
53857                                                                                 F4)])))),
53858                                                            qTy))),
53859                                                   Call
53860                                                     ("Skip",
53861                                                      ATy(qTy,
53862                                                          PTy(CTy"instruction",
53863                                                              qTy)),LU)))))))))),
53864                      (Bop(And,bVar"b'25",
53865                           Bop(And,bVar"b'24",
53866                               Bop(And,bVar"b'22",
53867                                   Bop(And,Mop(Not,bVar"b'21"),
53868                                       Mop(Not,bVar"b'20"))))),
53869                       Let(Var("Rn",F4),
53870                           Mop(Cast F4,
53871                               LL[bVar"b'19",bVar"b'18",bVar"b'17",
53872                                  bVar"b'16"]),
53873                           Let(Var("Rd",F4),
53874                               Mop(Cast F4,
53875                                   LL[bVar"b'11",bVar"b'10",bVar"b'9",
53876                                      bVar"b'8"]),
53877                               MB(Call
53878                                    ("ThumbCondition",
53879                                     ATy(qTy,PTy(F4,qTy)),LU),
53880                                  Close
53881                                    (Var("v",F4),
53882                                     MB(MB(MB(Call
53883                                                ("HaveThumb2",
53884                                                 ATy(qTy,PTy(bTy,qTy)),LU),
53885                                              Close
53886                                                (bVar"v0",
53887                                                 MU(TP[Var("v",F4),
53888                                                       bVar"v0"],qTy))),
53889                                           Close
53890                                             (Var("v",PTy(F4,bTy)),
53891                                              Call
53892                                                ("Take",
53893                                                 ATy(qTy,PTy(bTy,qTy)),
53894                                                 Var("v",PTy(F4,bTy))))),
53895                                        Close
53896                                          (bVar"b",
53897                                           ITE(bVar"b",
53898                                               Let(nVar"widthminus1",
53899                                                   Mop(Cast nTy,
53900                                                       Mop(Cast(FTy 5),
53901                                                           LL[bVar"b'4",
53902                                                              bVar"b'3",
53903                                                              bVar"b'2",
53904                                                              bVar"b'1",
53905                                                              bVar"b'0"])),
53906                                                   Let(nVar"lsbit",
53907                                                       Mop(Cast nTy,
53908                                                           CC[Mop(Cast
53909                                                                    (FTy 3),
53910                                                                  LL[bVar"b'14",
53911                                                                     bVar"b'13",
53912                                                                     bVar"b'12"]),
53913                                                              Mop(Cast
53914                                                                    (FTy 2),
53915                                                                  LL[bVar"b'7",
53916                                                                     bVar"b'6"])]),
53917                                                       MB(ITE(Bop(Or,
53918                                                                  Bop(Or,
53919                                                                      Bop(In,
53920                                                                          Var("Rd",
53921                                                                              F4),
53922                                                                          SL[LW(13,
53923                                                                                4),
53924                                                                             LW(15,
53925                                                                                4)]),
53926                                                                      Bop(In,
53927                                                                          Var("Rn",
53928                                                                              F4),
53929                                                                          SL[LW(13,
53930                                                                                4),
53931                                                                             LW(15,
53932                                                                                4)])),
53933                                                                  Bop(Lt,
53934                                                                      LN
53935                                                                       31,
53936                                                                      Bop(Add,
53937                                                                          nVar"lsbit",
53938                                                                          nVar"widthminus1"))),
53939                                                              Call
53940                                                                ("DECODE_UNPREDICTABLE",
53941                                                                 ATy(qTy,
53942                                                                     PTy(uTy,
53943                                                                         qTy)),
53944                                                                 TP[Var("mc",
53945                                                                        CTy"MachineCode"),
53946                                                                    LS
53947                                                                     "BitFieldExtract"]),
53948                                                              MU(LU,qTy)),
53949                                                          Close
53950                                                            (AVar uTy,
53951                                                             MU(Call
53952                                                                  ("Media",
53953                                                                   CTy"instruction",
53954                                                                   Call
53955                                                                     ("BitFieldExtract",
53956                                                                      CTy"Media",
53957                                                                      TP[EQ(Mop(Cast
53958                                                                                  F1,
53959                                                                                LL[bVar"b'23"]),
53960                                                                            LW(1,
53961                                                                               1)),
53962                                                                         Var("Rd",
53963                                                                             F4),
53964                                                                         Var("Rn",
53965                                                                             F4),
53966                                                                         nVar"lsbit",
53967                                                                         nVar"widthminus1"])),
53968                                                                qTy))))),
53969                                               Call
53970                                                 ("Skip",
53971                                                  ATy(qTy,
53972                                                      PTy(CTy"instruction",
53973                                                          qTy)),LU))))))))),
53974                      (Bop(And,bVar"b'25",
53975                           Bop(And,bVar"b'24",
53976                               Bop(And,Mop(Not,bVar"b'23"),
53977                                   Bop(And,bVar"b'22",
53978                                       Bop(And,bVar"b'21",
53979                                           Mop(Not,bVar"b'20")))))),
53980                       Let(Var("Rn",F4),
53981                           Mop(Cast F4,
53982                               LL[bVar"b'19",bVar"b'18",bVar"b'17",
53983                                  bVar"b'16"]),
53984                           Let(Var("Rd",F4),
53985                               Mop(Cast F4,
53986                                   LL[bVar"b'11",bVar"b'10",bVar"b'9",
53987                                      bVar"b'8"]),
53988                               MB(Call
53989                                    ("ThumbCondition",
53990                                     ATy(qTy,PTy(F4,qTy)),LU),
53991                                  Close
53992                                    (Var("v",F4),
53993                                     MB(MB(MB(Call
53994                                                ("HaveThumb2",
53995                                                 ATy(qTy,PTy(bTy,qTy)),LU),
53996                                              Close
53997                                                (bVar"v0",
53998                                                 MU(TP[Var("v",F4),
53999                                                       bVar"v0"],qTy))),
54000                                           Close
54001                                             (Var("v",PTy(F4,bTy)),
54002                                              Call
54003                                                ("Take",
54004                                                 ATy(qTy,PTy(bTy,qTy)),
54005                                                 Var("v",PTy(F4,bTy))))),
54006                                        Close
54007                                          (bVar"b",
54008                                           ITE(bVar"b",
54009                                               Let(nVar"msbit",
54010                                                   Mop(Cast nTy,
54011                                                       Mop(Cast(FTy 5),
54012                                                           LL[bVar"b'4",
54013                                                              bVar"b'3",
54014                                                              bVar"b'2",
54015                                                              bVar"b'1",
54016                                                              bVar"b'0"])),
54017                                                   Let(nVar"lsbit",
54018                                                       Mop(Cast nTy,
54019                                                           CC[Mop(Cast
54020                                                                    (FTy 3),
54021                                                                  LL[bVar"b'14",
54022                                                                     bVar"b'13",
54023                                                                     bVar"b'12"]),
54024                                                              Mop(Cast
54025                                                                    (FTy 2),
54026                                                                  LL[bVar"b'7",
54027                                                                     bVar"b'6"])]),
54028                                                       MB(ITE(Bop(Or,
54029                                                                  Bop(Or,
54030                                                                      Bop(In,
54031                                                                          Var("Rd",
54032                                                                              F4),
54033                                                                          SL[LW(13,
54034                                                                                4),
54035                                                                             LW(15,
54036                                                                                4)]),
54037                                                                      EQ(Var("Rn",
54038                                                                             F4),
54039                                                                         LW(13,
54040                                                                            4))),
54041                                                                  Bop(Lt,
54042                                                                      nVar"msbit",
54043                                                                      nVar"lsbit")),
54044                                                              Call
54045                                                                ("DECODE_UNPREDICTABLE",
54046                                                                 ATy(qTy,
54047                                                                     PTy(uTy,
54048                                                                         qTy)),
54049                                                                 TP[Var("mc",
54050                                                                        CTy"MachineCode"),
54051                                                                    LS
54052                                                                     "BitFieldClearOrInsert"]),
54053                                                              MU(LU,qTy)),
54054                                                          Close
54055                                                            (AVar uTy,
54056                                                             MU(Call
54057                                                                  ("Media",
54058                                                                   CTy"instruction",
54059                                                                   Call
54060                                                                     ("BitFieldClearOrInsert",
54061                                                                      CTy"Media",
54062                                                                      TP[Var("Rd",
54063                                                                             F4),
54064                                                                         Var("Rn",
54065                                                                             F4),
54066                                                                         nVar"lsbit",
54067                                                                         nVar"msbit"])),
54068                                                                qTy))))),
54069                                               Call
54070                                                 ("Skip",
54071                                                  ATy(qTy,
54072                                                      PTy(CTy"instruction",
54073                                                          qTy)),LU)))))))))],
54074                     Call
54075                       ("UndefinedThumb",
54076                        ATy(qTy,PTy(CTy"instruction",qTy)),LU)))],
54077               Call
54078                 ("UndefinedThumb",ATy(qTy,PTy(CTy"instruction",qTy)),LU)))))
54079;
54080val Decode_def = Def
54081  ("Decode",Var("mc",CTy"MachineCode"),
54082   CS(Var("mc",CTy"MachineCode"),
54083      [(Call("ARM",CTy"MachineCode",Var("w",F32)),
54084        Call("DecodeARM",ATy(qTy,PTy(CTy"instruction",qTy)),Var("w",F32))),
54085       (Call("Thumb",CTy"MachineCode",Var("h",F16)),
54086        Call
54087          ("DecodeThumb",ATy(qTy,PTy(CTy"instruction",qTy)),Var("h",F16))),
54088       (Call("ThumbEE",CTy"MachineCode",Var("h",F16)),
54089        Call
54090          ("DecodeThumbEE",ATy(qTy,PTy(CTy"instruction",qTy)),Var("h",F16))),
54091       (Call("Thumb2",CTy"MachineCode",Var("hs",PTy(F16,F16))),
54092        Call
54093          ("DecodeThumb2",ATy(qTy,PTy(CTy"instruction",qTy)),
54094           Var("hs",PTy(F16,F16))))]))
54095;
54096val Next_def = Def0
54097  ("Next",
54098   MB(MW(Close(qVar"s",Rupd("isfetch",TP[qVar"s",LT]))),
54099      Close
54100        (AVar uTy,
54101         MB(MW(Close(qVar"s",Rupd("data_abort",TP[qVar"s",LF]))),
54102            Close
54103              (AVar uTy,
54104               MB(MW(Close
54105                       (qVar"s",Rupd("transfer_unknown",TP[qVar"s",LF]))),
54106                  Close
54107                    (AVar uTy,
54108                     MB(Const("Fetch",ATy(qTy,PTy(CTy"MachineCode",qTy))),
54109                        Close
54110                          (Var("i",CTy"MachineCode"),
54111                           MB(MW(Close
54112                                   (qVar"s",Rupd("isfetch",TP[qVar"s",LF]))),
54113                              Close
54114                                (AVar uTy,
54115                                 MB(MR(Close
54116                                         (qVar"s",
54117                                          Dest("data_abort",bTy,qVar"s"))),
54118                                    Close
54119                                      (bVar"b",
54120                                       ITE(bVar"b",
54121                                           Call
54122                                             ("TakePrefetchAbortException",
54123                                              ATy(qTy,PTy(uTy,qTy)),LU),
54124                                           MB(Call
54125                                                ("Decode",
54126                                                 ATy(qTy,
54127                                                     PTy(CTy"instruction",
54128                                                         qTy)),
54129                                                 Var("i",CTy"MachineCode")),
54130                                              Close
54131                                                (Var("v",CTy"instruction"),
54132                                                 MB(Call
54133                                                      ("Run",
54134                                                       ATy(qTy,
54135                                                           PTy(uTy,qTy)),
54136                                                       Var("v",
54137                                                           CTy"instruction")),
54138                                                    Close
54139                                                      (AVar uTy,
54140                                                       Call
54141                                                         ("ITAdvance",
54142                                                          ATy(qTy,
54143                                                              PTy(uTy,qTy)),
54144                                                          LU)))))))))))))))))))
54145
54146val () = Import.finish 0