1(* arm8Script.sml - generated by L3 - Wed Oct 11 10:50:19 2017 *)
2open HolKernel boolLib bossLib Import
3
4val () = Import.start "arm8"
5
6val () = ieee_underflow_before := true
7
8val _ = Record
9  ("ProcState",
10   [("C",bTy),("EL",FTy 2),("N",bTy),("SPS",bTy),("V",bTy),("Z",bTy)])
11;
12val _ = Record
13  ("TCR_EL1",[("TBI0",bTy),("TBI1",bTy),("tcr_el1'rst",FTy 62)])
14;
15val _ = Record ("TCR_EL2_EL3",[("TBI",bTy),("tcr_el2_el3'rst",FTy 31)])
16;
17val _ = Record
18  ("SCTLRType",
19   [("A",bTy),("E0E",bTy),("EE",bTy),("SA",bTy),("SA0",bTy),
20    ("sctlrtype'rst",FTy 27)])
21;
22val _ = Construct
23  [("BranchType",
24    [("BranchType_CALL",[]),("BranchType_ERET",[]),
25     ("BranchType_DBGEXIT",[]),("BranchType_RET",[]),
26     ("BranchType_JMP",[]),("BranchType_EXCEPTION",[]),
27     ("BranchType_UNKNOWN",[])])]
28;
29val _ = Construct
30  [("AccType",
31    [("AccType_NORMAL",[]),("AccType_VEC",[]),("AccType_STREAM",[]),
32     ("AccType_VECSTREAM",[]),("AccType_ATOMIC",[]),
33     ("AccType_ORDERED",[]),("AccType_UNPRIV",[]),("AccType_IFETCH",[]),
34     ("AccType_PTW",[]),("AccType_DC",[]),("AccType_IC",[]),
35     ("AccType_AT",[])])]
36;
37val _ = Construct
38  [("ShiftType",
39    [("ShiftType_LSL",[]),("ShiftType_LSR",[]),("ShiftType_ASR",[]),
40     ("ShiftType_ROR",[])])]
41;
42val _ = Construct
43  [("ExtendType",
44    [("ExtendType_UXTB",[]),("ExtendType_UXTH",[]),("ExtendType_UXTW",[]),
45     ("ExtendType_UXTX",[]),("ExtendType_SXTB",[]),("ExtendType_SXTH",[]),
46     ("ExtendType_SXTW",[]),("ExtendType_SXTX",[])])]
47;
48val _ = Construct
49  [("LogicalOp",
50    [("LogicalOp_AND",[]),("LogicalOp_ORR",[]),("LogicalOp_EOR",[])])]
51;
52val _ = Construct
53  [("MemOp",[("MemOp_LOAD",[]),("MemOp_STORE",[]),("MemOp_PREFETCH",[])])]
54;
55val _ = Construct
56  [("MemBarrierOp",
57    [("MemBarrierOp_DSB",[]),("MemBarrierOp_DMB",[]),
58     ("MemBarrierOp_ISB",[])])]
59;
60val _ = Construct
61  [("MoveWideOp",
62    [("MoveWideOp_N",[]),("MoveWideOp_Z",[]),("MoveWideOp_K",[])])]
63;
64val _ = Construct
65  [("RevOp",
66    [("RevOp_RBIT",[]),("RevOp_REV16",[]),("RevOp_REV32",[]),
67     ("RevOp_REV64",[])])]
68;
69val _ = Construct
70  [("SystemHintOp",
71    [("SystemHintOp_NOP",[]),("SystemHintOp_YIELD",[]),
72     ("SystemHintOp_WFE",[]),("SystemHintOp_WFI",[]),
73     ("SystemHintOp_SEV",[]),("SystemHintOp_SEVL",[])])]
74;
75val _ = Construct
76  [("PSTATEField",
77    [("PSTATEField_DAIFSet",[]),("PSTATEField_DAIFClr",[]),
78     ("PSTATEField_SP",[])])]
79;
80val _ = Construct
81  [("System",
82    [("ExceptionReturn",[]),("HypervisorCall",[F16]),
83     ("MoveImmediateProcState",[PTy(CTy"PSTATEField",F4)]),
84     ("MoveSystemRegister",
85      [PTy(bTy,PTy(FTy 3,PTy(FTy 3,PTy(FTy 3,PTy(F4,PTy(F4,FTy 5))))))]),
86     ("SecureMonitorCall",[F16]),("SupervisorCall",[F16]),
87     ("SystemInstruction",
88      [PTy(FTy 3,PTy(FTy 3,PTy(F4,PTy(F4,PTy(bTy,FTy 5)))))])])]
89;
90val _ = Construct
91  [("Debug",
92    [("Breakpoint",[F16]),("DebugRestore",[]),("DebugSwitch",[FTy 2]),
93     ("Halt",[F16])])]
94;
95val _ = Construct
96  [("LoadStore",
97    [("LoadLiteral@32",[PTy(F32,PTy(CTy"MemOp",PTy(bTy,PTy(F64,FTy 5))))]),
98     ("LoadLiteral@64",[PTy(F64,PTy(CTy"MemOp",PTy(bTy,PTy(F64,FTy 5))))]),
99     ("LoadStoreAcquire@16",
100      [PTy(F16,
101           PTy(CTy"MemOp",
102               PTy(CTy"AccType",
103                   PTy(bTy,PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))))))]),
104     ("LoadStoreAcquire@32",
105      [PTy(F32,
106           PTy(CTy"MemOp",
107               PTy(CTy"AccType",
108                   PTy(bTy,PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))))))]),
109     ("LoadStoreAcquire@64",
110      [PTy(F64,
111           PTy(CTy"MemOp",
112               PTy(CTy"AccType",
113                   PTy(bTy,PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))))))]),
114     ("LoadStoreAcquire@8",
115      [PTy(F8,
116           PTy(CTy"MemOp",
117               PTy(CTy"AccType",
118                   PTy(bTy,PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))))))]),
119     ("LoadStoreAcquirePair@128",
120      [PTy(FTy 128,
121           PTy(CTy"MemOp",
122               PTy(CTy"AccType",
123                   PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 5))))))))]),
124     ("LoadStoreAcquirePair@64",
125      [PTy(F64,
126           PTy(CTy"MemOp",
127               PTy(CTy"AccType",
128                   PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 5))))))))]),
129     ("LoadStoreImmediate@16",
130      [PTy(F16,
131           PTy(bTy,
132               PTy(CTy"MemOp",
133                   PTy(CTy"AccType",
134                       PTy(bTy,
135                           PTy(bTy,
136                               PTy(bTy,
137                                   PTy(bTy,
138                                       PTy(bTy,
139                                           PTy(bTy,
140                                               PTy(F64,PTy(FTy 5,FTy 5))))))))))))]),
141     ("LoadStoreImmediate@32",
142      [PTy(F32,
143           PTy(bTy,
144               PTy(CTy"MemOp",
145                   PTy(CTy"AccType",
146                       PTy(bTy,
147                           PTy(bTy,
148                               PTy(bTy,
149                                   PTy(bTy,
150                                       PTy(bTy,
151                                           PTy(bTy,
152                                               PTy(F64,PTy(FTy 5,FTy 5))))))))))))]),
153     ("LoadStoreImmediate@64",
154      [PTy(F64,
155           PTy(bTy,
156               PTy(CTy"MemOp",
157                   PTy(CTy"AccType",
158                       PTy(bTy,
159                           PTy(bTy,
160                               PTy(bTy,
161                                   PTy(bTy,
162                                       PTy(bTy,
163                                           PTy(bTy,
164                                               PTy(F64,PTy(FTy 5,FTy 5))))))))))))]),
165     ("LoadStoreImmediate@8",
166      [PTy(F8,
167           PTy(bTy,
168               PTy(CTy"MemOp",
169                   PTy(CTy"AccType",
170                       PTy(bTy,
171                           PTy(bTy,
172                               PTy(bTy,
173                                   PTy(bTy,
174                                       PTy(bTy,
175                                           PTy(bTy,
176                                               PTy(F64,PTy(FTy 5,FTy 5))))))))))))]),
177     ("LoadStorePair@32",
178      [PTy(F32,
179           PTy(CTy"MemOp",
180               PTy(CTy"AccType",
181                   PTy(bTy,
182                       PTy(bTy,
183                           PTy(bTy,
184                               PTy(bTy,
185                                   PTy(bTy,
186                                       PTy(F64,PTy(FTy 5,PTy(FTy 5,FTy 5)))))))))))]),
187     ("LoadStorePair@64",
188      [PTy(F64,
189           PTy(CTy"MemOp",
190               PTy(CTy"AccType",
191                   PTy(bTy,
192                       PTy(bTy,
193                           PTy(bTy,
194                               PTy(bTy,
195                                   PTy(bTy,
196                                       PTy(F64,PTy(FTy 5,PTy(FTy 5,FTy 5)))))))))))]),
197     ("LoadStoreRegister@16",
198      [PTy(F16,
199           PTy(bTy,
200               PTy(CTy"MemOp",
201                   PTy(bTy,
202                       PTy(FTy 5,
203                           PTy(CTy"ExtendType",PTy(nTy,PTy(FTy 5,FTy 5))))))))]),
204     ("LoadStoreRegister@32",
205      [PTy(F32,
206           PTy(bTy,
207               PTy(CTy"MemOp",
208                   PTy(bTy,
209                       PTy(FTy 5,
210                           PTy(CTy"ExtendType",PTy(nTy,PTy(FTy 5,FTy 5))))))))]),
211     ("LoadStoreRegister@64",
212      [PTy(F64,
213           PTy(bTy,
214               PTy(CTy"MemOp",
215                   PTy(bTy,
216                       PTy(FTy 5,
217                           PTy(CTy"ExtendType",PTy(nTy,PTy(FTy 5,FTy 5))))))))]),
218     ("LoadStoreRegister@8",
219      [PTy(F8,
220           PTy(bTy,
221               PTy(CTy"MemOp",
222                   PTy(bTy,
223                       PTy(FTy 5,
224                           PTy(CTy"ExtendType",PTy(nTy,PTy(FTy 5,FTy 5))))))))])])]
225;
226val _ = Construct
227  [("Branch",
228    [("BranchConditional",[PTy(F64,F4)]),
229     ("BranchImmediate",[PTy(F64,CTy"BranchType")]),
230     ("BranchRegister",[PTy(FTy 5,CTy"BranchType")]),
231     ("CompareAndBranch@32",[PTy(F32,PTy(bTy,PTy(F64,FTy 5)))]),
232     ("CompareAndBranch@64",[PTy(F64,PTy(bTy,PTy(F64,FTy 5)))]),
233     ("TestBitAndBranch@32",[PTy(F32,PTy(FTy 6,PTy(bTy,PTy(F64,FTy 5))))]),
234     ("TestBitAndBranch@64",[PTy(F64,PTy(FTy 6,PTy(bTy,PTy(F64,FTy 5))))])])]
235;
236val _ = Construct
237  [("CRCExt",
238    [("CRC@16",[PTy(F16,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
239     ("CRC@32",[PTy(F32,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
240     ("CRC@64",[PTy(F64,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
241     ("CRC@8",[PTy(F8,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))])])]
242;
243val _ = Construct
244  [("Data",
245    [("AddSubCarry@32",
246      [PTy(F32,PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))]),
247     ("AddSubCarry@64",
248      [PTy(F64,PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))]),
249     ("AddSubExtendRegister@32",
250      [PTy(F32,
251           PTy(bTy,
252               PTy(bTy,
253                   PTy(FTy 5,
254                       PTy(CTy"ExtendType",PTy(FTy 3,PTy(FTy 5,FTy 5)))))))]),
255     ("AddSubExtendRegister@64",
256      [PTy(F64,
257           PTy(bTy,
258               PTy(bTy,
259                   PTy(FTy 5,
260                       PTy(CTy"ExtendType",PTy(FTy 3,PTy(FTy 5,FTy 5)))))))]),
261     ("AddSubImmediate@32",
262      [PTy(F32,PTy(bTy,PTy(bTy,PTy(F32,PTy(FTy 5,FTy 5)))))]),
263     ("AddSubImmediate@64",
264      [PTy(F64,PTy(bTy,PTy(bTy,PTy(F64,PTy(FTy 5,FTy 5)))))]),
265     ("AddSubShiftedRegister@32",
266      [PTy(F32,
267           PTy(bTy,
268               PTy(bTy,
269                   PTy(CTy"ShiftType",
270                       PTy(FTy 5,PTy(FTy 6,PTy(FTy 5,FTy 5)))))))]),
271     ("AddSubShiftedRegister@64",
272      [PTy(F64,
273           PTy(bTy,
274               PTy(bTy,
275                   PTy(CTy"ShiftType",
276                       PTy(FTy 5,PTy(FTy 6,PTy(FTy 5,FTy 5)))))))]),
277     ("BitfieldMove@32",
278      [PTy(F32,
279           PTy(bTy,
280               PTy(bTy,
281                   PTy(F32,PTy(F32,PTy(nTy,PTy(nTy,PTy(FTy 5,FTy 5))))))))]),
282     ("BitfieldMove@64",
283      [PTy(F64,
284           PTy(bTy,
285               PTy(bTy,
286                   PTy(F64,PTy(F64,PTy(nTy,PTy(nTy,PTy(FTy 5,FTy 5))))))))]),
287     ("ConditionalCompareImmediate@32",
288      [PTy(F32,
289           PTy(bTy,
290               PTy(F32,PTy(F4,PTy(PTy(bTy,PTy(bTy,PTy(bTy,bTy))),FTy 5)))))]),
291     ("ConditionalCompareImmediate@64",
292      [PTy(F64,
293           PTy(bTy,
294               PTy(F64,PTy(F4,PTy(PTy(bTy,PTy(bTy,PTy(bTy,bTy))),FTy 5)))))]),
295     ("ConditionalCompareRegister@32",
296      [PTy(F32,
297           PTy(bTy,
298               PTy(F4,PTy(PTy(bTy,PTy(bTy,PTy(bTy,bTy))),PTy(FTy 5,FTy 5)))))]),
299     ("ConditionalCompareRegister@64",
300      [PTy(F64,
301           PTy(bTy,
302               PTy(F4,PTy(PTy(bTy,PTy(bTy,PTy(bTy,bTy))),PTy(FTy 5,FTy 5)))))]),
303     ("ConditionalSelect@32",
304      [PTy(F32,PTy(bTy,PTy(bTy,PTy(F4,PTy(FTy 5,PTy(FTy 5,FTy 5))))))]),
305     ("ConditionalSelect@64",
306      [PTy(F64,PTy(bTy,PTy(bTy,PTy(F4,PTy(FTy 5,PTy(FTy 5,FTy 5))))))]),
307     ("CountLeading@32",[PTy(F32,PTy(bTy,PTy(FTy 5,FTy 5)))]),
308     ("CountLeading@64",[PTy(F64,PTy(bTy,PTy(FTy 5,FTy 5)))]),
309     ("Division@32",[PTy(F32,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
310     ("Division@64",[PTy(F64,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
311     ("ExtractRegister@32",
312      [PTy(F32,PTy(FTy 6,PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
313     ("ExtractRegister@64",
314      [PTy(F64,PTy(FTy 6,PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
315     ("LogicalImmediate@32",
316      [PTy(F32,PTy(CTy"LogicalOp",PTy(bTy,PTy(F32,PTy(FTy 5,FTy 5)))))]),
317     ("LogicalImmediate@64",
318      [PTy(F64,PTy(CTy"LogicalOp",PTy(bTy,PTy(F64,PTy(FTy 5,FTy 5)))))]),
319     ("LogicalShiftedRegister@32",
320      [PTy(F32,
321           PTy(CTy"LogicalOp",
322               PTy(bTy,
323                   PTy(bTy,
324                       PTy(CTy"ShiftType",
325                           PTy(nTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))))))]),
326     ("LogicalShiftedRegister@64",
327      [PTy(F64,
328           PTy(CTy"LogicalOp",
329               PTy(bTy,
330                   PTy(bTy,
331                       PTy(CTy"ShiftType",
332                           PTy(nTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))))))]),
333     ("MoveWide@32",
334      [PTy(F32,PTy(CTy"MoveWideOp",PTy(FTy 2,PTy(F16,FTy 5))))]),
335     ("MoveWide@64",
336      [PTy(F64,PTy(CTy"MoveWideOp",PTy(FTy 2,PTy(F16,FTy 5))))]),
337     ("MultiplyAddSub@32",
338      [PTy(F32,PTy(bTy,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 5)))))]),
339     ("MultiplyAddSub@64",
340      [PTy(F64,PTy(bTy,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 5)))))]),
341     ("MultiplyAddSubLong",
342      [PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 5)))))]),
343     ("MultiplyHigh",[PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))]),
344     ("Reverse@32",[PTy(F32,PTy(CTy"RevOp",PTy(FTy 5,FTy 5)))]),
345     ("Reverse@64",[PTy(F64,PTy(CTy"RevOp",PTy(FTy 5,FTy 5)))]),
346     ("Shift@32",
347      [PTy(F32,PTy(CTy"ShiftType",PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
348     ("Shift@64",
349      [PTy(F64,PTy(CTy"ShiftType",PTy(FTy 5,PTy(FTy 5,FTy 5))))])])]
350;
351val _ = Construct
352  [("instruction",
353    [("Address",[PTy(bTy,PTy(F64,FTy 5))]),("Branch",[CTy"Branch"]),
354     ("CRCExt",[CTy"CRCExt"]),("ClearExclusive",[F4]),
355     ("Data",[CTy"Data"]),("Debug",[CTy"Debug"]),
356     ("Hint",[CTy"SystemHintOp"]),("LoadStore",[CTy"LoadStore"]),
357     ("MemoryBarrier",[PTy(CTy"MemBarrierOp",F4)]),("Reserved",[]),
358     ("System",[CTy"System"]),("Unallocated",[])])]
359;
360val _ = Construct [("MachineCode",[("ARM8",[F32]),("BadCode",[sTy])])]
361;
362val _ = Construct
363  [("exception",
364    [("ALIGNMENT_FAULT",[]),("ASSERT",[sTy]),("NoException",[]),
365     ("UNDEFINED_FAULT",[sTy])])]
366;
367val _ = Record
368  ("arm8_state",
369   [("MEM",ATy(F64,F8)),("PC",F64),("PSTATE",CTy"ProcState"),
370    ("REG",ATy(FTy 5,F64)),("SCTLR_EL1",CTy"SCTLRType"),
371    ("SCTLR_EL2",CTy"SCTLRType"),("SCTLR_EL3",CTy"SCTLRType"),
372    ("SP_EL0",F64),("SP_EL1",F64),("SP_EL2",F64),("SP_EL3",F64),
373    ("TCR_EL1",CTy"TCR_EL1"),("TCR_EL2",CTy"TCR_EL2_EL3"),
374    ("TCR_EL3",CTy"TCR_EL2_EL3"),("branch_hint",OTy(CTy"BranchType")),
375    ("exception",CTy"exception")])
376;
377val qTy = CTy "arm8_state";
378fun qVar v = Term.mk_var (v, ParseDatatype.pretypeToType qTy);
379val raise'exception_def = Def
380  ("raise'exception",Var("e",CTy"exception"),
381   Close
382     (qVar"state",
383      TP[LX(VTy"a"),
384         ITE(EQ(Dest("exception",CTy"exception",qVar"state"),
385                Const("NoException",CTy"exception")),
386             Rupd("exception",TP[qVar"state",Var("e",CTy"exception")]),
387             qVar"state")]))
388;
389val rec'TCR_EL1_def = Def
390  ("rec'TCR_EL1",Var("x",F64),
391   Rec(CTy"TCR_EL1",
392       [Bop(Bit,Var("x",F64),LN 37),Bop(Bit,Var("x",F64),LN 38),
393        CC[EX(Var("x",F64),LN 36,LN 0,FTy 37),
394           EX(Var("x",F64),LN 63,LN 39,FTy 25)]]))
395;
396val reg'TCR_EL1_def = Def
397  ("reg'TCR_EL1",Var("x",CTy"TCR_EL1"),
398   CS(Var("x",CTy"TCR_EL1"),
399      [(Rec(CTy"TCR_EL1",[bVar"TBI0",bVar"TBI1",Var("tcr_el1'rst",FTy 62)]),
400        CC[EX(Var("tcr_el1'rst",FTy 62),LN 24,LN 0,FTy 25),
401           Mop(Cast F1,bVar"TBI1"),Mop(Cast F1,bVar"TBI0"),
402           EX(Var("tcr_el1'rst",FTy 62),LN 61,LN 25,FTy 37)])]))
403;
404val write'rec'TCR_EL1_def = Def
405  ("write'rec'TCR_EL1",TP[AVar F64,Var("x",CTy"TCR_EL1")],
406   Call("reg'TCR_EL1",F64,Var("x",CTy"TCR_EL1")))
407;
408val write'reg'TCR_EL1_def = Def
409  ("write'reg'TCR_EL1",TP[AVar(CTy"TCR_EL1"),Var("x",F64)],
410   Call("rec'TCR_EL1",CTy"TCR_EL1",Var("x",F64)))
411;
412val rec'TCR_EL2_EL3_def = Def
413  ("rec'TCR_EL2_EL3",Var("x",F32),
414   Rec(CTy"TCR_EL2_EL3",
415       [Bop(Bit,Var("x",F32),LN 20),
416        CC[EX(Var("x",F32),LN 19,LN 0,FTy 20),
417           EX(Var("x",F32),LN 31,LN 21,FTy 11)]]))
418;
419val reg'TCR_EL2_EL3_def = Def
420  ("reg'TCR_EL2_EL3",Var("x",CTy"TCR_EL2_EL3"),
421   CS(Var("x",CTy"TCR_EL2_EL3"),
422      [(Rec(CTy"TCR_EL2_EL3",[bVar"TBI",Var("tcr_el2_el3'rst",FTy 31)]),
423        CC[EX(Var("tcr_el2_el3'rst",FTy 31),LN 10,LN 0,FTy 11),
424           Mop(Cast F1,bVar"TBI"),
425           EX(Var("tcr_el2_el3'rst",FTy 31),LN 30,LN 11,FTy 20)])]))
426;
427val write'rec'TCR_EL2_EL3_def = Def
428  ("write'rec'TCR_EL2_EL3",TP[AVar F32,Var("x",CTy"TCR_EL2_EL3")],
429   Call("reg'TCR_EL2_EL3",F32,Var("x",CTy"TCR_EL2_EL3")))
430;
431val write'reg'TCR_EL2_EL3_def = Def
432  ("write'reg'TCR_EL2_EL3",TP[AVar(CTy"TCR_EL2_EL3"),Var("x",F32)],
433   Call("rec'TCR_EL2_EL3",CTy"TCR_EL2_EL3",Var("x",F32)))
434;
435val rec'SCTLRType_def = Def
436  ("rec'SCTLRType",Var("x",F32),
437   Rec(CTy"SCTLRType",
438       [Bop(Bit,Var("x",F32),LN 1),Bop(Bit,Var("x",F32),LN 24),
439        Bop(Bit,Var("x",F32),LN 25),Bop(Bit,Var("x",F32),LN 3),
440        Bop(Bit,Var("x",F32),LN 4),
441        CC[EX(Var("x",F32),LN 0,LN 0,F1),EX(Var("x",F32),LN 2,LN 2,F1),
442           EX(Var("x",F32),LN 23,LN 5,FTy 19),
443           EX(Var("x",F32),LN 31,LN 26,FTy 6)]]))
444;
445val reg'SCTLRType_def = Def
446  ("reg'SCTLRType",Var("x",CTy"SCTLRType"),
447   CS(Var("x",CTy"SCTLRType"),
448      [(Rec(CTy"SCTLRType",
449            [bVar"A",bVar"E0E",bVar"EE",bVar"SA",bVar"SA0",
450             Var("sctlrtype'rst",FTy 27)]),
451        CC[EX(Var("sctlrtype'rst",FTy 27),LN 5,LN 0,FTy 6),
452           Mop(Cast F1,bVar"EE"),Mop(Cast F1,bVar"E0E"),
453           EX(Var("sctlrtype'rst",FTy 27),LN 24,LN 6,FTy 19),
454           Mop(Cast F1,bVar"SA0"),Mop(Cast F1,bVar"SA"),
455           EX(Var("sctlrtype'rst",FTy 27),LN 25,LN 25,F1),
456           Mop(Cast F1,bVar"A"),
457           EX(Var("sctlrtype'rst",FTy 27),LN 26,LN 26,F1)])]))
458;
459val write'rec'SCTLRType_def = Def
460  ("write'rec'SCTLRType",TP[AVar F32,Var("x",CTy"SCTLRType")],
461   Call("reg'SCTLRType",F32,Var("x",CTy"SCTLRType")))
462;
463val write'reg'SCTLRType_def = Def
464  ("write'reg'SCTLRType",TP[AVar(CTy"SCTLRType"),Var("x",F32)],
465   Call("rec'SCTLRType",CTy"SCTLRType",Var("x",F32)))
466;
467val X_def = Def
468  ("X",Var("n",FTy 5),
469   Close
470     (qVar"state",
471      ITE(EQ(Var("n",FTy 5),LW(31,5)),LY(0,"N"),
472          Mop(Cast(BTy"N"),
473              Apply(Dest("REG",ATy(FTy 5,F64),qVar"state"),Var("n",FTy 5))))))
474;
475val write'X_def = Def
476  ("write'X",TP[Var("value",BTy"N"),Var("n",FTy 5)],
477   Close
478     (qVar"state",
479      ITE(Mop(Not,EQ(Var("n",FTy 5),LW(31,5))),
480          Rupd
481            ("REG",
482             TP[qVar"state",
483                Fupd
484                  (Dest("REG",ATy(FTy 5,F64),qVar"state"),Var("n",FTy 5),
485                   Mop(Cast F64,Var("value",BTy"N")))]),qVar"state")))
486;
487val SP_def = Def
488  ("SP",qVar"state",
489   Mop(Cast(BTy"N"),
490       ITE(Mop(Not,
491               Dest("SPS",bTy,Dest("PSTATE",CTy"ProcState",qVar"state"))),
492           Dest("SP_EL0",F64,qVar"state"),
493           CS(Dest("EL",FTy 2,Dest("PSTATE",CTy"ProcState",qVar"state")),
494              [(LW(0,2),Dest("SP_EL0",F64,qVar"state")),
495               (LW(1,2),Dest("SP_EL1",F64,qVar"state")),
496               (LW(2,2),Dest("SP_EL2",F64,qVar"state")),
497               (LW(3,2),Dest("SP_EL3",F64,qVar"state"))]))))
498;
499val write'SP_def = Def
500  ("write'SP",Var("value",BTy"N"),
501   Close
502     (qVar"state",
503      Let(Var("v",F64),Mop(Cast F64,Var("value",BTy"N")),
504          ITE(Mop(Not,
505                  Dest
506                    ("SPS",bTy,Dest("PSTATE",CTy"ProcState",qVar"state"))),
507              Rupd("SP_EL0",TP[qVar"state",Var("v",F64)]),
508              CS(Dest
509                   ("EL",FTy 2,Dest("PSTATE",CTy"ProcState",qVar"state")),
510                 [(LW(0,2),Rupd("SP_EL0",TP[qVar"state",Var("v",F64)])),
511                  (LW(1,2),Rupd("SP_EL1",TP[qVar"state",Var("v",F64)])),
512                  (LW(2,2),Rupd("SP_EL2",TP[qVar"state",Var("v",F64)])),
513                  (LW(3,2),Rupd("SP_EL3",TP[qVar"state",Var("v",F64)]))])))))
514;
515val TranslationRegime_def = Def
516  ("TranslationRegime",qVar"state",
517   ITE(Mop(Not,
518           EQ(Dest("EL",FTy 2,Dest("PSTATE",CTy"ProcState",qVar"state")),
519              LW(0,2))),
520       Dest("EL",FTy 2,Dest("PSTATE",CTy"ProcState",qVar"state")),LW(1,2)))
521;
522val SCTLR_def = Def
523  ("SCTLR",qVar"state",
524   CS(Apply(Const("TranslationRegime",ATy(qTy,FTy 2)),qVar"state"),
525      [(LW(1,2),Dest("SCTLR_EL1",CTy"SCTLRType",qVar"state")),
526       (LW(2,2),Dest("SCTLR_EL2",CTy"SCTLRType",qVar"state")),
527       (LW(3,2),Dest("SCTLR_EL3",CTy"SCTLRType",qVar"state")),
528       (LW(0,2),LX(CTy"SCTLRType"))]))
529;
530val Hint_Branch_def = Def
531  ("Hint_Branch",Var("branch_type",CTy"BranchType"),
532   Close
533     (qVar"state",
534      Rupd
535        ("branch_hint",
536         TP[qVar"state",Mop(Some,Var("branch_type",CTy"BranchType"))])))
537;
538val BranchTo_def = Def
539  ("BranchTo",TP[Var("target0",F64),Var("branch_type",CTy"BranchType")],
540   Close
541     (qVar"state",
542      Let(qVar"s1",
543          Apply
544            (Call
545               ("Hint_Branch",ATy(qTy,qTy),
546                Var("branch_type",CTy"BranchType")),qVar"state"),
547          Let(Var("s",PTy(F64,qTy)),
548              CS(Dest("EL",FTy 2,Dest("PSTATE",CTy"ProcState",qVar"s1")),
549                 [(LW(0,2),
550                   Let(Var("s0",F64),
551                       ITE(Bop(And,Bop(Bit,Var("target0",F64),LN 55),
552                               Dest
553                                 ("TBI1",bTy,
554                                  Dest("TCR_EL1",CTy"TCR_EL1",qVar"s1"))),
555                           BFI(LN 63,LN 56,LW(255,8),Var("target0",F64)),
556                           Var("target0",F64)),
557                       TP[ITE(Bop(And,
558                                  Mop(Not,Bop(Bit,Var("s0",F64),LN 55)),
559                                  Dest
560                                    ("TBI0",bTy,
561                                     Dest("TCR_EL1",CTy"TCR_EL1",qVar"s1"))),
562                              BFI(LN 63,LN 56,LW(0,8),Var("s0",F64)),
563                              Var("s0",F64)),qVar"s1"])),
564                  (LW(1,2),
565                   Let(Var("s0",F64),
566                       ITE(Bop(And,Bop(Bit,Var("target0",F64),LN 55),
567                               Dest
568                                 ("TBI1",bTy,
569                                  Dest("TCR_EL1",CTy"TCR_EL1",qVar"s1"))),
570                           BFI(LN 63,LN 56,LW(255,8),Var("target0",F64)),
571                           Var("target0",F64)),
572                       TP[ITE(Bop(And,
573                                  Mop(Not,Bop(Bit,Var("s0",F64),LN 55)),
574                                  Dest
575                                    ("TBI0",bTy,
576                                     Dest("TCR_EL1",CTy"TCR_EL1",qVar"s1"))),
577                              BFI(LN 63,LN 56,LW(0,8),Var("s0",F64)),
578                              Var("s0",F64)),qVar"s1"])),
579                  (LW(2,2),
580                   TP[ITE(Dest
581                            ("TBI",bTy,
582                             Dest("TCR_EL2",CTy"TCR_EL2_EL3",qVar"s1")),
583                          BFI(LN 63,LN 56,LW(0,8),Var("target0",F64)),
584                          Var("target0",F64)),qVar"s1"]),
585                  (LW(3,2),
586                   TP[ITE(Dest
587                            ("TBI",bTy,
588                             Dest("TCR_EL3",CTy"TCR_EL2_EL3",qVar"s1")),
589                          BFI(LN 63,LN 56,LW(0,8),Var("target0",F64)),
590                          Var("target0",F64)),qVar"s1"])]),
591              Rupd
592                ("PC",
593                 TP[Mop(Snd,Var("s",PTy(F64,qTy))),
594                    Mop(Fst,Var("s",PTy(F64,qTy)))])))))
595;
596val Align_def = Def
597  ("Align",TP[Var("w",BTy"N"),nVar"n"],
598   Mop(Cast(BTy"N"),
599       Bop(Mul,nVar"n",Bop(Div,Mop(Cast nTy,Var("w",BTy"N")),nVar"n"))))
600;
601val Aligned_def = Def
602  ("Aligned",TP[Var("w",BTy"N"),nVar"n"],
603   EQ(Var("w",BTy"N"),Call("Align",BTy"N",TP[Var("w",BTy"N"),nVar"n"])))
604;
605val CheckSPAlignment_def = Def
606  ("CheckSPAlignment",qVar"state",
607   ITE(Bop(And,
608           ITE(EQ(Dest
609                    ("EL",FTy 2,Dest("PSTATE",CTy"ProcState",qVar"state")),
610                  LW(0,2)),
611               Dest
612                 ("SA0",bTy,Dest("SCTLR_EL1",CTy"SCTLRType",qVar"state")),
613               Dest
614                 ("SA",bTy,
615                  Apply
616                    (Const("SCTLR",ATy(qTy,CTy"SCTLRType")),qVar"state"))),
617           Mop(Not,
618               Call
619                 ("Aligned",bTy,
620                  TP[Apply(Const("SP",ATy(qTy,F64)),qVar"state"),LN 16]))),
621       Mop(Snd,
622           Apply
623             (Call
624                ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
625                 Const("ALIGNMENT_FAULT",CTy"exception")),qVar"state")),
626       qVar"state"))
627;
628val CheckAlignment_def = Def
629  ("CheckAlignment",
630   TP[Var("address",F64),nVar"size",Var("acctype",CTy"AccType"),
631      bVar"iswrite"],
632   Close
633     (qVar"state",
634      ITE(Bop(And,
635              Mop(Not,
636                  Call("Aligned",bTy,TP[Var("address",F64),nVar"size"])),
637              Bop(Or,
638                  EQ(Var("acctype",CTy"AccType"),
639                     LC("AccType_ATOMIC",CTy"AccType")),
640                  Bop(Or,
641                      EQ(Var("acctype",CTy"AccType"),
642                         LC("AccType_ORDERED",CTy"AccType")),
643                      Dest
644                        ("A",bTy,
645                         Apply
646                           (Const("SCTLR",ATy(qTy,CTy"SCTLRType")),
647                            qVar"state"))))),
648          Mop(Snd,
649              Apply
650                (Call
651                   ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
652                    Const("ALIGNMENT_FAULT",CTy"exception")),qVar"state")),
653          qVar"state")))
654;
655val BigEndian_def = Def
656  ("BigEndian",qVar"state",
657   ITE(EQ(Dest("EL",FTy 2,Dest("PSTATE",CTy"ProcState",qVar"state")),
658          LW(0,2)),
659       Dest("E0E",bTy,Dest("SCTLR_EL1",CTy"SCTLRType",qVar"state")),
660       Dest
661         ("EE",bTy,
662          Apply(Const("SCTLR",ATy(qTy,CTy"SCTLRType")),qVar"state"))))
663;
664val ByteList_def = Def
665  ("ByteList",vVar"l",
666   CS(vVar"l",
667      [(LNL bTy,LNL vTy),
668       (LLC([bVar"b0",bVar"b1",bVar"b2",bVar"b3",bVar"b4",bVar"b5",
669             bVar"b6",bVar"v7"],vVar"rest"),
670        LLC([LL[bVar"b0",bVar"b1",bVar"b2",bVar"b3",bVar"b4",bVar"b5",
671                bVar"b6",bVar"v7"]],Call("ByteList",LTy vTy,vVar"rest"))),
672       (vVar"rest",LL[vVar"rest"])]))
673;
674val BigEndianReverse_def = Def
675  ("BigEndianReverse",vVar"l",
676   Mop(Flat,Mop(Rev,Call("ByteList",LTy vTy,vVar"l"))))
677;
678val Mem_def = Def
679  ("Mem",TP[Var("address",F64),nVar"size",Var("acctype",CTy"AccType")],
680   Close
681     (qVar"state",
682      Let(TP[Var("r",BTy"N"),Var("s1",PTy(vTy,qTy))],
683          Let(Var("s",PTy(vTy,qTy)),
684              Mop(Snd,
685                  Apply
686                    (For(TP[LN 0,Bop(Sub,nVar"size",LN 1),
687                            Close
688                              (nVar"i",
689                               Close
690                                 (Var("state",PTy(vTy,qTy)),
691                                  TP[LU,
692                                     CC[Mop(Cast vTy,
693                                            Apply
694                                              (Dest
695                                                 ("MEM",ATy(F64,F8),
696                                                  Mop(Snd,
697                                                      Var("state",
698                                                          PTy(vTy,qTy)))),
699                                               Bop(Add,Var("address",F64),
700                                                   Mop(Cast F64,nVar"i")))),
701                                        Mop(Fst,Var("state",PTy(vTy,qTy)))],
702                                     Mop(Snd,Var("state",PTy(vTy,qTy)))]))]),
703                     TP[LNL bTy,
704                        Apply
705                          (Call
706                             ("CheckAlignment",ATy(qTy,qTy),
707                              TP[Var("address",F64),nVar"size",
708                                 Var("acctype",CTy"AccType"),LF]),
709                           qVar"state")])),
710              TP[Mop(Cast(BTy"N"),
711                     ITE(Apply
712                           (Const("BigEndian",ATy(qTy,bTy)),
713                            Mop(Snd,Var("s",PTy(vTy,qTy)))),
714                         Call
715                           ("BigEndianReverse",vTy,
716                            Mop(Fst,Var("s",PTy(vTy,qTy)))),
717                         Mop(Fst,Var("s",PTy(vTy,qTy))))),
718                 Var("s",PTy(vTy,qTy))]),
719          TP[Var("r",BTy"N"),Mop(Snd,Var("s1",PTy(vTy,qTy)))])))
720;
721val write'Mem_def = Def
722  ("write'Mem",
723   TP[Var("value",BTy"N"),Var("address",F64),nVar"size",
724      Var("acctype",CTy"AccType")],
725   Close
726     (qVar"state",
727      Let(TP[bVar"v",qVar"s"],
728          Let(qVar"s",
729              Apply
730                (Call
731                   ("CheckAlignment",ATy(qTy,qTy),
732                    TP[Var("address",F64),nVar"size",
733                       Var("acctype",CTy"AccType"),LT]),qVar"state"),
734              TP[Apply(Const("BigEndian",ATy(qTy,bTy)),qVar"s"),qVar"s"]),
735          Mop(Snd,
736              Apply
737                (For(TP[LN 0,Bop(Sub,nVar"size",LN 1),
738                        Close
739                          (nVar"i",
740                           Close
741                             (qVar"state",
742                              TP[LU,
743                                 Rupd
744                                   ("MEM",
745                                    TP[qVar"state",
746                                       Fupd
747                                         (Dest
748                                            ("MEM",ATy(F64,F8),qVar"state"),
749                                          Bop(Add,Var("address",F64),
750                                              Mop(Cast F64,nVar"i")),
751                                          Mop(Cast F8,
752                                              EX(ITE(bVar"v",
753                                                     Call
754                                                       ("BigEndianReverse",
755                                                        vTy,
756                                                        Mop(Cast vTy,
757                                                            Var("value",
758                                                                BTy"N"))),
759                                                     Mop(Cast vTy,
760                                                         Var("value",
761                                                             BTy"N"))),
762                                                 Bop(Add,
763                                                     Bop(Mul,LN 8,nVar"i"),
764                                                     LN 7),
765                                                 Bop(Mul,LN 8,nVar"i"),vTy)))])]))]),
766                 qVar"s")))))
767;
768val ConditionTest_def = Def
769  ("ConditionTest",TP[Var("cond",F4),bVar"N",bVar"Z",bVar"C",bVar"V"],
770   Let(bVar"result",
771       CS(EX(Var("cond",F4),LN 3,LN 1,FTy 3),
772          [(LW(0,3),bVar"Z"),(LW(1,3),bVar"C"),(LW(2,3),bVar"N"),
773           (LW(3,3),bVar"V"),(LW(4,3),Bop(And,bVar"C",Mop(Not,bVar"Z"))),
774           (LW(5,3),EQ(bVar"N",bVar"V")),
775           (LW(6,3),Bop(And,EQ(bVar"N",bVar"V"),Mop(Not,bVar"Z"))),
776           (LW(7,3),LT)]),
777       ITE(Bop(And,Bop(Bit,Var("cond",F4),LN 0),
778               Mop(Not,EQ(Var("cond",F4),LW(15,4)))),
779           Mop(Not,bVar"result"),bVar"result")))
780;
781val ConditionHolds_def = Def
782  ("ConditionHolds",Var("cond",F4),
783   Close
784     (qVar"state",
785      Call
786        ("ConditionTest",bTy,
787         TP[Var("cond",F4),
788            Dest("N",bTy,Dest("PSTATE",CTy"ProcState",qVar"state")),
789            Dest("Z",bTy,Dest("PSTATE",CTy"ProcState",qVar"state")),
790            Dest("C",bTy,Dest("PSTATE",CTy"ProcState",qVar"state")),
791            Dest("V",bTy,Dest("PSTATE",CTy"ProcState",qVar"state"))])))
792;
793val Ones_def = Def ("Ones",nVar"n",Mop(PadLeft,TP[LT,nVar"n",LNL bTy]))
794;
795val Zeros_def = Def ("Zeros",nVar"n",Mop(PadLeft,TP[LF,nVar"n",LNL bTy]))
796;
797val Replicate_def = Def
798  ("Replicate",vVar"l",
799   Mop(Cast(BTy"N"),
800       Bop(Rep,vVar"l",Bop(Div,Mop(Size,LY(0,"N")),Mop(Length,vVar"l")))))
801;
802val HighestSetBit_def = Def
803  ("HighestSetBit",Var("w",BTy"N"),
804   ITE(EQ(Var("w",BTy"N"),LY(0,"N")),Mop(Neg,LI 1),
805       Mop(Cast iTy,Mop(Log,Var("w",BTy"N")))))
806;
807val CountLeadingZeroBits_def = Def
808  ("CountLeadingZeroBits",Var("w",BTy"N"),
809   Mop(Cast nTy,
810       Bop(Sub,Bop(Sub,Mop(Cast iTy,Mop(Size,LY(0,"N"))),LI 1),
811           Call("HighestSetBit",iTy,Var("w",BTy"N")))))
812;
813val CountLeadingSignBits_def = Def
814  ("CountLeadingSignBits",Var("w",BTy"N"),
815   Bop(Sub,
816       Call
817         ("CountLeadingZeroBits",nTy,
818          Bop(BXor,Bop(Lsr,Var("w",BTy"N"),LN 1),
819              Bop(BAnd,Var("w",BTy"N"),Mop(BNot,Bop(Ror,LY(1,"N"),LN 1))))),
820       LN 1))
821;
822val Poly32Mod2_loop_def = Def
823  ("Poly32Mod2_loop",TP[nVar"i",vVar"data",vVar"poly"],
824   ITE(Bop(Lt,nVar"i",LN 32),vVar"data",
825       Call
826         ("Poly32Mod2_loop",vTy,
827          TP[Bop(Sub,nVar"i",LN 1),
828             ITE(Bop(Bit,vVar"data",nVar"i"),
829                 CC[EX(vVar"data",Bop(Sub,Mop(Length,vVar"data"),LN 1),
830                       nVar"i",vTy),
831                    Bop(BXor,
832                        EX(vVar"data",Bop(Sub,nVar"i",LN 1),LN 0,vTy),
833                        Mop(PadRight,TP[LF,nVar"i",vVar"poly"]))],
834                 vVar"data"),vVar"poly"])))
835;
836val Poly32Mod2_def = Def
837  ("Poly32Mod2",TP[vVar"data",Var("poly",F32)],
838   Mop(Cast F32,
839       EX(Call
840            ("Poly32Mod2_loop",vTy,
841             TP[Bop(Sub,Mop(Length,vVar"data"),LN 1),vVar"data",
842                Mop(Cast vTy,Var("poly",F32))]),LN 31,LN 0,vTy)))
843;
844val AddWithCarry_def = Def
845  ("AddWithCarry",TP[Var("x",BTy"N"),Var("y",BTy"N"),bVar"carry_in"],
846   Let(nVar"unsigned_sum",
847       Bop(Add,
848           Bop(Add,Mop(Cast nTy,Var("x",BTy"N")),
849               Mop(Cast nTy,Var("y",BTy"N"))),Mop(Cast nTy,bVar"carry_in")),
850       Let(Var("result",BTy"N"),Mop(Cast(BTy"N"),nVar"unsigned_sum"),
851           TP[Var("result",BTy"N"),Mop(Msb,Var("result",BTy"N")),
852              EQ(Var("result",BTy"N"),LY(0,"N")),
853              Mop(Not,
854                  EQ(Mop(Cast nTy,Var("result",BTy"N")),nVar"unsigned_sum")),
855              Mop(Not,
856                  EQ(Mop(Cast iTy,Var("result",BTy"N")),
857                     Bop(Add,
858                         Bop(Add,Mop(Cast iTy,Var("x",BTy"N")),
859                             Mop(Cast iTy,Var("y",BTy"N"))),
860                         Mop(Cast iTy,bVar"carry_in"))))])))
861;
862val SetTheFlags_def = Def
863  ("SetTheFlags",TP[bVar"setflags",bVar"n",bVar"z",bVar"c",bVar"v"],
864   Close
865     (qVar"state",
866      ITE(bVar"setflags",
867          Let(qVar"s",
868              Rupd
869                ("PSTATE",
870                 TP[qVar"state",
871                    Rupd
872                      ("N",
873                       TP[Dest("PSTATE",CTy"ProcState",qVar"state"),
874                          bVar"n"])]),
875              Let(qVar"s",
876                  Rupd
877                    ("PSTATE",
878                     TP[qVar"s",
879                        Rupd
880                          ("Z",
881                           TP[Dest("PSTATE",CTy"ProcState",qVar"s"),
882                              bVar"z"])]),
883                  Let(qVar"s",
884                      Rupd
885                        ("PSTATE",
886                         TP[qVar"s",
887                            Rupd
888                              ("C",
889                               TP[Dest("PSTATE",CTy"ProcState",qVar"s"),
890                                  bVar"c"])]),
891                      Rupd
892                        ("PSTATE",
893                         TP[qVar"s",
894                            Rupd
895                              ("V",
896                               TP[Dest("PSTATE",CTy"ProcState",qVar"s"),
897                                  bVar"v"])])))),qVar"state")))
898;
899val DecodeShift_def = Def
900  ("DecodeShift",Var("sh",FTy 2),Mop(Cast(CTy"ShiftType"),Var("sh",FTy 2)))
901;
902val ShiftValue_def = Def
903  ("ShiftValue",
904   TP[Var("value",BTy"N"),Var("ty",CTy"ShiftType"),nVar"amount"],
905   CS(Var("ty",CTy"ShiftType"),
906      [(LC("ShiftType_LSL",CTy"ShiftType"),
907        Bop(Lsl,Var("value",BTy"N"),nVar"amount")),
908       (LC("ShiftType_LSR",CTy"ShiftType"),
909        Bop(Lsr,Var("value",BTy"N"),nVar"amount")),
910       (LC("ShiftType_ASR",CTy"ShiftType"),
911        Bop(Asr,Var("value",BTy"N"),nVar"amount")),
912       (LC("ShiftType_ROR",CTy"ShiftType"),
913        Bop(Ror,Var("value",BTy"N"),nVar"amount"))]))
914;
915val ShiftReg_def = Def
916  ("ShiftReg",TP[Var("reg",FTy 5),Var("ty",CTy"ShiftType"),nVar"amount"],
917   Close
918     (qVar"state",
919      Call
920        ("ShiftValue",BTy"N",
921         TP[Apply(Call("X",ATy(qTy,BTy"N"),Var("reg",FTy 5)),qVar"state"),
922            Var("ty",CTy"ShiftType"),nVar"amount"])))
923;
924val ExtendWord_def = Def
925  ("ExtendWord",TP[Var("w",BTy"M"),bVar"signed"],
926   ITE(bVar"signed",Mop(SE(BTy"N"),Var("w",BTy"M")),
927       Mop(Cast(BTy"N"),Var("w",BTy"M"))))
928;
929val Extend_def = Def
930  ("Extend",TP[vVar"l",bVar"unsigned"],
931   ITE(Bop(Or,bVar"unsigned",Mop(Not,Mop(Head,vVar"l"))),
932       Mop(Cast(BTy"N"),vVar"l"),
933       Mop(Cast(BTy"N"),Mop(PadLeft,TP[LT,Mop(Size,LY(0,"N")),vVar"l"]))))
934;
935val DecodeRegExtend_def = Def
936  ("DecodeRegExtend",Var("ext",FTy 3),
937   Mop(Cast(CTy"ExtendType"),Var("ext",FTy 3)))
938;
939val ExtendValue_def = Def
940  ("ExtendValue",
941   TP[Var("value",BTy"N"),Var("ty",CTy"ExtendType"),nVar"sh"],
942   Let(TP[bVar"unsigned",nVar"len"],
943       CS(Var("ty",CTy"ExtendType"),
944          [(LC("ExtendType_SXTB",CTy"ExtendType"),TP[LF,LN 8]),
945           (LC("ExtendType_SXTH",CTy"ExtendType"),TP[LF,LN 16]),
946           (LC("ExtendType_SXTW",CTy"ExtendType"),TP[LF,LN 32]),
947           (LC("ExtendType_SXTX",CTy"ExtendType"),TP[LF,LN 64]),
948           (LC("ExtendType_UXTB",CTy"ExtendType"),TP[LT,LN 8]),
949           (LC("ExtendType_UXTH",CTy"ExtendType"),TP[LT,LN 16]),
950           (LC("ExtendType_UXTW",CTy"ExtendType"),TP[LT,LN 32]),
951           (LC("ExtendType_UXTX",CTy"ExtendType"),TP[LT,LN 64])]),
952       Call
953         ("Extend",BTy"N",
954          TP[Bop(Lsl,
955                 EX(Mop(Cast vTy,Var("value",BTy"N")),
956                    Bop(Sub,
957                        Mop(Min,
958                            TP[nVar"len",
959                               Bop(Sub,Mop(Size,LY(0,"N")),nVar"sh")]),
960                        LN 1),LN 0,vTy),nVar"sh"),bVar"unsigned"])))
961;
962val ExtendReg_def = Def
963  ("ExtendReg",TP[Var("reg",FTy 5),Var("ty",CTy"ExtendType"),nVar"sh"],
964   Close
965     (qVar"state",
966      Call
967        ("ExtendValue",BTy"N",
968         TP[Apply(Call("X",ATy(qTy,BTy"N"),Var("reg",FTy 5)),qVar"state"),
969            Var("ty",CTy"ExtendType"),nVar"sh"])))
970;
971val DecodeBitMasks_def = Def
972  ("DecodeBitMasks",
973   TP[Var("immN",F1),Var("imms",FTy 6),Var("immr",FTy 6),bVar"immediate"],
974   Let(iVar"len",
975       Call
976         ("HighestSetBit",iTy,
977          CC[Var("immN",F1),Mop(BNot,Var("imms",FTy 6))]),
978       ITE(Bop(Lt,iVar"len",LI 1),LO(PTy(BTy"M",BTy"M")),
979           Let(nVar"len",Mop(Cast nTy,iVar"len"),
980               Let(Var("levels",FTy 6),
981                   Mop(Cast(FTy 6),Call("Ones",vTy,nVar"len")),
982                   Let(Var("S",FTy 6),
983                       Bop(BAnd,Var("imms",FTy 6),Var("levels",FTy 6)),
984                       Let(Var("R",FTy 6),
985                           Bop(BAnd,Var("immr",FTy 6),Var("levels",FTy 6)),
986                           ITE(Bop(And,bVar"immediate",
987                                   EQ(Var("S",FTy 6),Var("levels",FTy 6))),
988                               LO(PTy(BTy"M",BTy"M")),
989                               Let(nVar"esize",Bop(Exp,LN 2,nVar"len"),
990                                   Mop(Some,
991                                       TP[Call
992                                            ("Replicate",BTy"M",
993                                             Bop(Ror,
994                                                 Mop(PadLeft,
995                                                     TP[LF,nVar"esize",
996                                                        Call
997                                                          ("Ones",vTy,
998                                                           Bop(Add,
999                                                               Mop(Cast
1000                                                                     nTy,
1001                                                                   Var("S",
1002                                                                       FTy 6)),
1003                                                               LN 1))]),
1004                                                 Mop(Cast nTy,
1005                                                     Var("R",FTy 6)))),
1006                                          Call
1007                                            ("Replicate",BTy"M",
1008                                             Mop(PadLeft,
1009                                                 TP[LF,nVar"esize",
1010                                                    Call
1011                                                      ("Ones",vTy,
1012                                                       Bop(Add,
1013                                                           Mop(Cast nTy,
1014                                                               EX(Mop(Cast
1015                                                                        vTy,
1016                                                                      Bop(Sub,
1017                                                                          Var("S",
1018                                                                              FTy 6),
1019                                                                          Var("R",
1020                                                                              FTy 6))),
1021                                                                  Bop(Sub,
1022                                                                      nVar"len",
1023                                                                      LN 1),
1024                                                                  LN 0,vTy)),
1025                                                           LN 1))]))]))))))))))
1026;
1027val dfn'Address_def = Def
1028  ("dfn'Address",TP[bVar"page",Var("imm",F64),Var("d",FTy 5)],
1029   Close
1030     (qVar"state",
1031      Let(Var("v",F64),Dest("PC",F64,qVar"state"),
1032          Apply
1033            (Call
1034               ("write'X",ATy(qTy,qTy),
1035                TP[Bop(Add,
1036                       ITE(bVar"page",
1037                           BFI(LN 11,LN 0,LW(0,12),Var("v",F64)),
1038                           Var("v",F64)),Var("imm",F64)),Var("d",FTy 5)]),
1039             qVar"state"))))
1040;
1041val dfn'AddSubCarry_def = Def
1042  ("dfn'AddSubCarry",
1043   TP[Var("sf",BTy"N"),bVar"sub_op",bVar"setflags",Var("m",FTy 5),
1044      Var("n",FTy 5),Var("d",FTy 5)],
1045   Close
1046     (qVar"state",
1047      Let(Var("v0",BTy"N"),
1048          Apply(Call("X",ATy(qTy,BTy"N"),Var("m",FTy 5)),qVar"state"),
1049          Let(TP[Var("result",BTy"N"),
1050                 Var("nzcv",PTy(bTy,PTy(bTy,PTy(bTy,bTy))))],
1051              Call
1052                ("AddWithCarry",
1053                 PTy(BTy"N",PTy(bTy,PTy(bTy,PTy(bTy,bTy)))),
1054                 TP[Apply
1055                      (Call("X",ATy(qTy,BTy"N"),Var("n",FTy 5)),
1056                       qVar"state"),
1057                    ITE(bVar"sub_op",Mop(BNot,Var("v0",BTy"N")),
1058                        Var("v0",BTy"N")),
1059                    Dest
1060                      ("C",bTy,Dest("PSTATE",CTy"ProcState",qVar"state"))]),
1061              Apply
1062                (Call
1063                   ("write'X",ATy(qTy,qTy),
1064                    TP[Var("result",BTy"N"),Var("d",FTy 5)]),
1065                 Apply
1066                   (Call
1067                      ("SetTheFlags",ATy(qTy,qTy),
1068                       TP[bVar"setflags",
1069                          Var("nzcv",PTy(bTy,PTy(bTy,PTy(bTy,bTy))))]),
1070                    qVar"state"))))))
1071;
1072val dfn'AddSubExtendRegister_def = Def
1073  ("dfn'AddSubExtendRegister",
1074   TP[Var("sf",BTy"N"),bVar"sub_op",bVar"setflags",Var("m",FTy 5),
1075      Var("extend_type",CTy"ExtendType"),Var("imm3",FTy 3),Var("n",FTy 5),
1076      Var("d",FTy 5)],
1077   Close
1078     (qVar"state",
1079      Let(Var("v0",BTy"N"),
1080          Apply
1081            (Call
1082               ("ExtendReg",ATy(qTy,BTy"N"),
1083                TP[Var("m",FTy 5),Var("extend_type",CTy"ExtendType"),
1084                   Mop(Cast nTy,Var("imm3",FTy 3))]),qVar"state"),
1085          Let(TP[Var("operand2",BTy"N"),bVar"carry_in"],
1086              ITE(bVar"sub_op",TP[Mop(BNot,Var("v0",BTy"N")),LT],
1087                  TP[Var("v0",BTy"N"),LF]),
1088              Let(TP[Var("result",BTy"N"),
1089                     Var("nzcv",PTy(bTy,PTy(bTy,PTy(bTy,bTy))))],
1090                  Call
1091                    ("AddWithCarry",
1092                     PTy(BTy"N",PTy(bTy,PTy(bTy,PTy(bTy,bTy)))),
1093                     TP[ITE(EQ(Var("n",FTy 5),LW(31,5)),
1094                            Apply(Const("SP",ATy(qTy,BTy"N")),qVar"state"),
1095                            Apply
1096                              (Call("X",ATy(qTy,BTy"N"),Var("n",FTy 5)),
1097                               qVar"state")),Var("operand2",BTy"N"),
1098                        bVar"carry_in"]),
1099                  Let(qVar"s",
1100                      Apply
1101                        (Call
1102                           ("SetTheFlags",ATy(qTy,qTy),
1103                            TP[bVar"setflags",
1104                               Var("nzcv",PTy(bTy,PTy(bTy,PTy(bTy,bTy))))]),
1105                         qVar"state"),
1106                      ITE(Bop(And,EQ(Var("d",FTy 5),LW(31,5)),
1107                              Mop(Not,bVar"setflags")),
1108                          Apply
1109                            (Call
1110                               ("write'SP",ATy(qTy,qTy),
1111                                Var("result",BTy"N")),qVar"s"),
1112                          Apply
1113                            (Call
1114                               ("write'X",ATy(qTy,qTy),
1115                                TP[Var("result",BTy"N"),Var("d",FTy 5)]),
1116                             qVar"s"))))))))
1117;
1118val dfn'AddSubImmediate_def = Def
1119  ("dfn'AddSubImmediate",
1120   TP[Var("sf",BTy"N"),bVar"sub_op",bVar"setflags",Var("imm",BTy"N"),
1121      Var("n",FTy 5),Var("d",FTy 5)],
1122   Close
1123     (qVar"state",
1124      Let(TP[Var("operand2",BTy"N"),bVar"carry_in"],
1125          ITE(bVar"sub_op",TP[Mop(BNot,Var("imm",BTy"N")),LT],
1126              TP[Var("imm",BTy"N"),LF]),
1127          Let(TP[Var("result",BTy"N"),
1128                 Var("nzcv",PTy(bTy,PTy(bTy,PTy(bTy,bTy))))],
1129              Call
1130                ("AddWithCarry",
1131                 PTy(BTy"N",PTy(bTy,PTy(bTy,PTy(bTy,bTy)))),
1132                 TP[ITE(EQ(Var("n",FTy 5),LW(31,5)),
1133                        Apply(Const("SP",ATy(qTy,BTy"N")),qVar"state"),
1134                        Apply
1135                          (Call("X",ATy(qTy,BTy"N"),Var("n",FTy 5)),
1136                           qVar"state")),Var("operand2",BTy"N"),
1137                    bVar"carry_in"]),
1138              Let(qVar"s",
1139                  Apply
1140                    (Call
1141                       ("SetTheFlags",ATy(qTy,qTy),
1142                        TP[bVar"setflags",
1143                           Var("nzcv",PTy(bTy,PTy(bTy,PTy(bTy,bTy))))]),
1144                     qVar"state"),
1145                  ITE(Bop(And,EQ(Var("d",FTy 5),LW(31,5)),
1146                          Mop(Not,bVar"setflags")),
1147                      Apply
1148                        (Call
1149                           ("write'SP",ATy(qTy,qTy),Var("result",BTy"N")),
1150                         qVar"s"),
1151                      Apply
1152                        (Call
1153                           ("write'X",ATy(qTy,qTy),
1154                            TP[Var("result",BTy"N"),Var("d",FTy 5)]),
1155                         qVar"s")))))))
1156;
1157val dfn'AddSubShiftedRegister_def = Def
1158  ("dfn'AddSubShiftedRegister",
1159   TP[Var("sf",BTy"N"),bVar"sub_op",bVar"setflags",
1160      Var("shift_type",CTy"ShiftType"),Var("m",FTy 5),Var("imm",FTy 6),
1161      Var("n",FTy 5),Var("d",FTy 5)],
1162   Close
1163     (qVar"state",
1164      Let(Var("v0",BTy"N"),
1165          Apply
1166            (Call
1167               ("ShiftReg",ATy(qTy,BTy"N"),
1168                TP[Var("m",FTy 5),Var("shift_type",CTy"ShiftType"),
1169                   Mop(Cast nTy,Var("imm",FTy 6))]),qVar"state"),
1170          Let(TP[Var("operand2",BTy"N"),bVar"carry_in"],
1171              ITE(bVar"sub_op",TP[Mop(BNot,Var("v0",BTy"N")),LT],
1172                  TP[Var("v0",BTy"N"),LF]),
1173              Let(TP[Var("result",BTy"N"),
1174                     Var("nzcv",PTy(bTy,PTy(bTy,PTy(bTy,bTy))))],
1175                  Call
1176                    ("AddWithCarry",
1177                     PTy(BTy"N",PTy(bTy,PTy(bTy,PTy(bTy,bTy)))),
1178                     TP[Apply
1179                          (Call("X",ATy(qTy,BTy"N"),Var("n",FTy 5)),
1180                           qVar"state"),Var("operand2",BTy"N"),
1181                        bVar"carry_in"]),
1182                  Apply
1183                    (Call
1184                       ("write'X",ATy(qTy,qTy),
1185                        TP[Var("result",BTy"N"),Var("d",FTy 5)]),
1186                     Apply
1187                       (Call
1188                          ("SetTheFlags",ATy(qTy,qTy),
1189                           TP[bVar"setflags",
1190                              Var("nzcv",PTy(bTy,PTy(bTy,PTy(bTy,bTy))))]),
1191                        qVar"state")))))))
1192;
1193val dfn'LogicalImmediate_def = Def
1194  ("dfn'LogicalImmediate",
1195   TP[Var("sf",BTy"N"),Var("opc",CTy"LogicalOp"),bVar"setflags",
1196      Var("imm",BTy"N"),Var("n",FTy 5),Var("d",FTy 5)],
1197   Close
1198     (qVar"state",
1199      Let(Var("v",BTy"N"),
1200          Apply(Call("X",ATy(qTy,BTy"N"),Var("n",FTy 5)),qVar"state"),
1201          Let(Var("result",BTy"N"),
1202              CS(Var("opc",CTy"LogicalOp"),
1203                 [(LC("LogicalOp_AND",CTy"LogicalOp"),
1204                   Bop(BAnd,Var("v",BTy"N"),Var("imm",BTy"N"))),
1205                  (LC("LogicalOp_ORR",CTy"LogicalOp"),
1206                   Bop(BOr,Var("v",BTy"N"),Var("imm",BTy"N"))),
1207                  (LC("LogicalOp_EOR",CTy"LogicalOp"),
1208                   Bop(BXor,Var("v",BTy"N"),Var("imm",BTy"N")))]),
1209              Let(qVar"s",
1210                  Apply
1211                    (Call
1212                       ("SetTheFlags",ATy(qTy,qTy),
1213                        TP[bVar"setflags",Mop(Msb,Var("result",BTy"N")),
1214                           EQ(Var("result",BTy"N"),LY(0,"N")),LF,LF]),
1215                     qVar"state"),
1216                  ITE(Bop(And,EQ(Var("d",FTy 5),LW(31,5)),
1217                          Mop(Not,bVar"setflags")),
1218                      Apply
1219                        (Call
1220                           ("write'SP",ATy(qTy,qTy),Var("result",BTy"N")),
1221                         qVar"s"),
1222                      Apply
1223                        (Call
1224                           ("write'X",ATy(qTy,qTy),
1225                            TP[Var("result",BTy"N"),Var("d",FTy 5)]),
1226                         qVar"s")))))))
1227;
1228val dfn'LogicalShiftedRegister_def = Def
1229  ("dfn'LogicalShiftedRegister",
1230   TP[Var("sf",BTy"N"),Var("opc",CTy"LogicalOp"),bVar"invert",
1231      bVar"setflags",Var("shift_type",CTy"ShiftType"),nVar"shift_amount",
1232      Var("m",FTy 5),Var("n",FTy 5),Var("d",FTy 5)],
1233   Close
1234     (qVar"state",
1235      Let(Var("v",BTy"N"),
1236          Apply(Call("X",ATy(qTy,BTy"N"),Var("n",FTy 5)),qVar"state"),
1237          Let(Var("v0",BTy"N"),
1238              Apply
1239                (Call
1240                   ("ShiftReg",ATy(qTy,BTy"N"),
1241                    TP[Var("m",FTy 5),Var("shift_type",CTy"ShiftType"),
1242                       nVar"shift_amount"]),qVar"state"),
1243              Let(Var("operand2",BTy"N"),
1244                  ITE(bVar"invert",Mop(BNot,Var("v0",BTy"N")),
1245                      Var("v0",BTy"N")),
1246                  Let(Var("result",BTy"N"),
1247                      CS(Var("opc",CTy"LogicalOp"),
1248                         [(LC("LogicalOp_AND",CTy"LogicalOp"),
1249                           Bop(BAnd,Var("v",BTy"N"),Var("operand2",BTy"N"))),
1250                          (LC("LogicalOp_ORR",CTy"LogicalOp"),
1251                           Bop(BOr,Var("v",BTy"N"),Var("operand2",BTy"N"))),
1252                          (LC("LogicalOp_EOR",CTy"LogicalOp"),
1253                           Bop(BXor,Var("v",BTy"N"),Var("operand2",BTy"N")))]),
1254                      Apply
1255                        (Call
1256                           ("write'X",ATy(qTy,qTy),
1257                            TP[Var("result",BTy"N"),Var("d",FTy 5)]),
1258                         Apply
1259                           (Call
1260                              ("SetTheFlags",ATy(qTy,qTy),
1261                               TP[bVar"setflags",
1262                                  Mop(Msb,Var("result",BTy"N")),
1263                                  EQ(Var("result",BTy"N"),LY(0,"N")),LF,LF]),
1264                            qVar"state"))))))))
1265;
1266val dfn'Shift_def = Def
1267  ("dfn'Shift",
1268   TP[Var("sf",BTy"N"),Var("shift_type",CTy"ShiftType"),Var("m",FTy 5),
1269      Var("n",FTy 5),Var("d",FTy 5)],
1270   Close
1271     (qVar"state",
1272      Apply
1273        (Call
1274           ("write'X",ATy(qTy,qTy),
1275            TP[Apply
1276                 (Call
1277                    ("ShiftReg",ATy(qTy,BTy"N"),
1278                     TP[Var("n",FTy 5),Var("shift_type",CTy"ShiftType"),
1279                        Bop(Mod,
1280                            Mop(Cast nTy,
1281                                Apply
1282                                  (Call
1283                                     ("X",ATy(qTy,BTy"N"),Var("m",FTy 5)),
1284                                   qVar"state")),Mop(Size,LY(0,"N")))]),
1285                  qVar"state"),Var("d",FTy 5)]),qVar"state")))
1286;
1287val dfn'MoveWide_def = Def
1288  ("dfn'MoveWide",
1289   TP[Var("sf",BTy"N"),Var("opcode",CTy"MoveWideOp"),Var("hw",FTy 2),
1290      Var("imm",F16),Var("d",FTy 5)],
1291   Close
1292     (qVar"state",
1293      Let(nVar"pos",Mop(Cast nTy,CC[Var("hw",FTy 2),LW(0,4)]),
1294          Let(Var("s0",BTy"N"),
1295              BFI(Bop(Add,nVar"pos",LN 15),nVar"pos",Var("imm",F16),
1296                  ITE(EQ(Var("opcode",CTy"MoveWideOp"),
1297                         LC("MoveWideOp_K",CTy"MoveWideOp")),
1298                      Apply
1299                        (Call("X",ATy(qTy,BTy"N"),Var("d",FTy 5)),
1300                         qVar"state"),LY(0,"N"))),
1301              Apply
1302                (Call
1303                   ("write'X",ATy(qTy,qTy),
1304                    TP[ITE(EQ(Var("opcode",CTy"MoveWideOp"),
1305                              LC("MoveWideOp_N",CTy"MoveWideOp")),
1306                           Mop(BNot,Var("s0",BTy"N")),Var("s0",BTy"N")),
1307                       Var("d",FTy 5)]),qVar"state")))))
1308;
1309val dfn'BitfieldMove_def = Def
1310  ("dfn'BitfieldMove",
1311   TP[Var("sf",BTy"N"),bVar"inzero",bVar"extend",Var("wmask",BTy"N"),
1312      Var("tmask",BTy"N"),nVar"R",nVar"S",Var("n",FTy 5),Var("d",FTy 5)],
1313   Close
1314     (qVar"state",
1315      Let(Var("v",BTy"N"),
1316          ITE(bVar"inzero",LY(0,"N"),
1317              Apply(Call("X",ATy(qTy,BTy"N"),Var("d",FTy 5)),qVar"state")),
1318          Let(Var("v0",BTy"N"),
1319              Apply(Call("X",ATy(qTy,BTy"N"),Var("n",FTy 5)),qVar"state"),
1320              Apply
1321                (Call
1322                   ("write'X",ATy(qTy,qTy),
1323                    TP[Bop(BOr,
1324                           Bop(BAnd,
1325                               ITE(bVar"extend",
1326                                   Call
1327                                     ("Replicate",BTy"N",
1328                                      Mop(Cast vTy,
1329                                          Bop(Bit,Var("v0",BTy"N"),nVar"S"))),
1330                                   Var("v",BTy"N")),
1331                               Mop(BNot,Var("tmask",BTy"N"))),
1332                           Bop(BAnd,
1333                               Bop(BOr,
1334                                   Bop(BAnd,Var("v",BTy"N"),
1335                                       Mop(BNot,Var("wmask",BTy"N"))),
1336                                   Bop(BAnd,
1337                                       Bop(Ror,Var("v0",BTy"N"),nVar"R"),
1338                                       Var("wmask",BTy"N"))),
1339                               Var("tmask",BTy"N"))),Var("d",FTy 5)]),
1340                 qVar"state")))))
1341;
1342val dfn'ConditionalCompareImmediate_def = Def
1343  ("dfn'ConditionalCompareImmediate",
1344   TP[Var("sf",BTy"N"),bVar"sub_op",Var("imm",BTy"N"),Var("cond",F4),
1345      Var("nzcv",PTy(bTy,PTy(bTy,PTy(bTy,bTy)))),Var("n",FTy 5)],
1346   Close
1347     (qVar"state",
1348      ITE(Apply
1349            (Call("ConditionHolds",ATy(qTy,bTy),Var("cond",F4)),
1350             qVar"state"),
1351          Let(TP[Var("operand2",BTy"N"),bVar"carry_in"],
1352              ITE(bVar"sub_op",TP[Mop(BNot,Var("imm",BTy"N")),LT],
1353                  TP[Var("imm",BTy"N"),LF]),
1354              Let(TP[AVar(BTy"N"),
1355                     Var("flags",PTy(bTy,PTy(bTy,PTy(bTy,bTy))))],
1356                  Call
1357                    ("AddWithCarry",
1358                     PTy(BTy"N",PTy(bTy,PTy(bTy,PTy(bTy,bTy)))),
1359                     TP[Apply
1360                          (Call("X",ATy(qTy,BTy"N"),Var("n",FTy 5)),
1361                           qVar"state"),Var("operand2",BTy"N"),
1362                        bVar"carry_in"]),
1363                  Apply
1364                    (Call
1365                       ("SetTheFlags",ATy(qTy,qTy),
1366                        TP[LT,Var("flags",PTy(bTy,PTy(bTy,PTy(bTy,bTy))))]),
1367                     qVar"state"))),
1368          Apply
1369            (Call
1370               ("SetTheFlags",ATy(qTy,qTy),
1371                TP[LT,Var("nzcv",PTy(bTy,PTy(bTy,PTy(bTy,bTy))))]),
1372             qVar"state"))))
1373;
1374val dfn'ConditionalCompareRegister_def = Def
1375  ("dfn'ConditionalCompareRegister",
1376   TP[Var("sf",BTy"N"),bVar"sub_op",Var("cond",F4),
1377      Var("nzcv",PTy(bTy,PTy(bTy,PTy(bTy,bTy)))),Var("m",FTy 5),
1378      Var("n",FTy 5)],
1379   Close
1380     (qVar"state",
1381      Let(Var("v0",BTy"N"),
1382          Apply(Call("X",ATy(qTy,BTy"N"),Var("m",FTy 5)),qVar"state"),
1383          ITE(Apply
1384                (Call("ConditionHolds",ATy(qTy,bTy),Var("cond",F4)),
1385                 qVar"state"),
1386              Let(TP[Var("operand2",BTy"N"),bVar"carry_in"],
1387                  ITE(bVar"sub_op",TP[Mop(BNot,Var("v0",BTy"N")),LT],
1388                      TP[Var("v0",BTy"N"),LF]),
1389                  Let(TP[AVar(BTy"N"),
1390                         Var("flags",PTy(bTy,PTy(bTy,PTy(bTy,bTy))))],
1391                      Call
1392                        ("AddWithCarry",
1393                         PTy(BTy"N",PTy(bTy,PTy(bTy,PTy(bTy,bTy)))),
1394                         TP[Apply
1395                              (Call("X",ATy(qTy,BTy"N"),Var("n",FTy 5)),
1396                               qVar"state"),Var("operand2",BTy"N"),
1397                            bVar"carry_in"]),
1398                      Apply
1399                        (Call
1400                           ("SetTheFlags",ATy(qTy,qTy),
1401                            TP[LT,
1402                               Var("flags",PTy(bTy,PTy(bTy,PTy(bTy,bTy))))]),
1403                         qVar"state"))),
1404              Apply
1405                (Call
1406                   ("SetTheFlags",ATy(qTy,qTy),
1407                    TP[LT,Var("nzcv",PTy(bTy,PTy(bTy,PTy(bTy,bTy))))]),
1408                 qVar"state")))))
1409;
1410val dfn'ConditionalSelect_def = Def
1411  ("dfn'ConditionalSelect",
1412   TP[Var("sf",BTy"N"),bVar"else_inv",bVar"else_inc",Var("cond",F4),
1413      Var("m",FTy 5),Var("n",FTy 5),Var("d",FTy 5)],
1414   Close
1415     (qVar"state",
1416      Let(Var("s",PTy(BTy"N",qTy)),
1417          ITE(Apply
1418                (Call("ConditionHolds",ATy(qTy,bTy),Var("cond",F4)),
1419                 qVar"state"),
1420              TP[Apply
1421                   (Call("X",ATy(qTy,BTy"N"),Var("n",FTy 5)),qVar"state"),
1422                 qVar"state"],
1423              Let(Var("s3",BTy"N"),
1424                  Apply
1425                    (Call("X",ATy(qTy,BTy"N"),Var("m",FTy 5)),qVar"state"),
1426                  Let(Var("s0",BTy"N"),
1427                      ITE(bVar"else_inv",Mop(BNot,Var("s3",BTy"N")),
1428                          Var("s3",BTy"N")),
1429                      TP[ITE(bVar"else_inc",
1430                             Bop(Add,Var("s0",BTy"N"),LY(1,"N")),
1431                             Var("s0",BTy"N")),qVar"state"]))),
1432          Apply
1433            (Call
1434               ("write'X",ATy(qTy,qTy),
1435                TP[Mop(Fst,Var("s",PTy(BTy"N",qTy))),Var("d",FTy 5)]),
1436             Mop(Snd,Var("s",PTy(BTy"N",qTy)))))))
1437;
1438val dfn'CountLeading_def = Def
1439  ("dfn'CountLeading",
1440   TP[Var("sf",BTy"N"),bVar"count_clz",Var("n",FTy 5),Var("d",FTy 5)],
1441   Close
1442     (qVar"state",
1443      Let(Var("v",BTy"N"),
1444          Apply(Call("X",ATy(qTy,BTy"N"),Var("n",FTy 5)),qVar"state"),
1445          Apply
1446            (Call
1447               ("write'X",ATy(qTy,qTy),
1448                TP[Mop(Cast(BTy"N"),
1449                       ITE(bVar"count_clz",
1450                           Call
1451                             ("CountLeadingZeroBits",nTy,Var("v",BTy"N")),
1452                           Call
1453                             ("CountLeadingSignBits",nTy,Var("v",BTy"N")))),
1454                   Var("d",FTy 5)]),qVar"state"))))
1455;
1456val dfn'ExtractRegister_def = Def
1457  ("dfn'ExtractRegister",
1458   TP[Var("sf",BTy"N"),Var("imms",FTy 6),Var("m",FTy 5),Var("n",FTy 5),
1459      Var("d",FTy 5)],
1460   Close
1461     (qVar"state",
1462      Apply
1463        (Call
1464           ("write'X",ATy(qTy,qTy),
1465            TP[Mop(Cast(BTy"N"),
1466                   Bop(Lsr,
1467                       CC[Mop(Cast vTy,
1468                              Apply
1469                                (Call("X",ATy(qTy,BTy"N"),Var("n",FTy 5)),
1470                                 qVar"state")),
1471                          Mop(Cast vTy,
1472                              Apply
1473                                (Call("X",ATy(qTy,BTy"N"),Var("m",FTy 5)),
1474                                 qVar"state"))],
1475                       Mop(Cast nTy,Var("imms",FTy 6)))),Var("d",FTy 5)]),
1476         qVar"state")))
1477;
1478val dfn'Division_def = Def
1479  ("dfn'Division",
1480   TP[Var("sf",BTy"N"),bVar"unsigned",Var("m",FTy 5),Var("n",FTy 5),
1481      Var("d",FTy 5)],
1482   Close
1483     (qVar"state",
1484      Let(Var("v",BTy"N"),
1485          Apply(Call("X",ATy(qTy,BTy"N"),Var("n",FTy 5)),qVar"state"),
1486          Let(Var("v0",BTy"N"),
1487              Apply(Call("X",ATy(qTy,BTy"N"),Var("m",FTy 5)),qVar"state"),
1488              Apply
1489                (Call
1490                   ("write'X",ATy(qTy,qTy),
1491                    TP[ITB([(EQ(Var("v0",BTy"N"),LY(0,"N")),LY(0,"N")),
1492                            (bVar"unsigned",
1493                             Bop(Div,Var("v",BTy"N"),Var("v0",BTy"N")))],
1494                           Bop(Quot,Var("v",BTy"N"),Var("v0",BTy"N"))),
1495                       Var("d",FTy 5)]),qVar"state")))))
1496;
1497val dfn'MultiplyAddSub_def = Def
1498  ("dfn'MultiplyAddSub",
1499   TP[Var("sf",BTy"N"),bVar"sub_op",Var("m",FTy 5),Var("a",FTy 5),
1500      Var("n",FTy 5),Var("d",FTy 5)],
1501   Close
1502     (qVar"state",
1503      Let(Var("v",BTy"N"),
1504          Apply(Call("X",ATy(qTy,BTy"N"),Var("n",FTy 5)),qVar"state"),
1505          Let(Var("v0",BTy"N"),
1506              Apply(Call("X",ATy(qTy,BTy"N"),Var("m",FTy 5)),qVar"state"),
1507              Let(Var("v1",BTy"N"),
1508                  Apply
1509                    (Call("X",ATy(qTy,BTy"N"),Var("a",FTy 5)),qVar"state"),
1510                  Apply
1511                    (Call
1512                       ("write'X",ATy(qTy,qTy),
1513                        TP[ITE(bVar"sub_op",
1514                               Bop(Sub,Var("v1",BTy"N"),
1515                                   Bop(Mul,Var("v",BTy"N"),
1516                                       Var("v0",BTy"N"))),
1517                               Bop(Add,Var("v1",BTy"N"),
1518                                   Bop(Mul,Var("v",BTy"N"),
1519                                       Var("v0",BTy"N")))),Var("d",FTy 5)]),
1520                     qVar"state"))))))
1521;
1522val dfn'MultiplyAddSubLong_def = Def
1523  ("dfn'MultiplyAddSubLong",
1524   TP[bVar"sub_op",bVar"signed",Var("m",FTy 5),Var("a",FTy 5),
1525      Var("n",FTy 5),Var("d",FTy 5)],
1526   Close
1527     (qVar"state",
1528      Let(Var("v1",F64),
1529          Apply(Call("X",ATy(qTy,F64),Var("a",FTy 5)),qVar"state"),
1530          Let(Var("product",F64),
1531              Bop(Mul,
1532                  Call
1533                    ("ExtendWord",F64,
1534                     TP[Apply
1535                          (Call("X",ATy(qTy,F32),Var("n",FTy 5)),
1536                           qVar"state"),bVar"signed"]),
1537                  Call
1538                    ("ExtendWord",F64,
1539                     TP[Apply
1540                          (Call("X",ATy(qTy,F32),Var("m",FTy 5)),
1541                           qVar"state"),bVar"signed"])),
1542              Apply
1543                (Call
1544                   ("write'X",ATy(qTy,qTy),
1545                    TP[ITE(bVar"sub_op",
1546                           Bop(Sub,Var("v1",F64),Var("product",F64)),
1547                           Bop(Add,Var("v1",F64),Var("product",F64))),
1548                       Var("d",FTy 5)]),qVar"state")))))
1549;
1550val dfn'MultiplyHigh_def = Def
1551  ("dfn'MultiplyHigh",
1552   TP[bVar"signed",Var("m",FTy 5),Var("n",FTy 5),Var("d",FTy 5)],
1553   Close
1554     (qVar"state",
1555      Apply
1556        (Call
1557           ("write'X",ATy(qTy,qTy),
1558            TP[EX(Bop(Mul,
1559                      Call
1560                        ("ExtendWord",FTy 128,
1561                         TP[Apply
1562                              (Call("X",ATy(qTy,F64),Var("n",FTy 5)),
1563                               qVar"state"),bVar"signed"]),
1564                      Call
1565                        ("ExtendWord",FTy 128,
1566                         TP[Apply
1567                              (Call("X",ATy(qTy,F64),Var("m",FTy 5)),
1568                               qVar"state"),bVar"signed"])),LN 127,LN 64,
1569                  F64),Var("d",FTy 5)]),qVar"state")))
1570;
1571val dfn'Reverse_def = Def
1572  ("dfn'Reverse",
1573   TP[Var("sf",BTy"N"),Var("op",CTy"RevOp"),Var("n",FTy 5),Var("d",FTy 5)],
1574   Close
1575     (qVar"state",
1576      ITE(EQ(Mop(Size,LY(0,"N")),LN 32),
1577          Let(Var("v",F32),
1578              Apply(Call("X",ATy(qTy,F32),Var("n",FTy 5)),qVar"state"),
1579              Apply
1580                (Call
1581                   ("write'X",ATy(qTy,qTy),
1582                    TP[CS(Var("op",CTy"RevOp"),
1583                          [(LC("RevOp_RBIT",CTy"RevOp"),
1584                            Mop(Rev,Var("v",F32))),
1585                           (LC("RevOp_REV16",CTy"RevOp"),
1586                            CC[EX(Var("v",F32),LN 23,LN 16,F8),
1587                               EX(Var("v",F32),LN 31,LN 24,F8),
1588                               EX(Var("v",F32),LN 7,LN 0,F8),
1589                               EX(Var("v",F32),LN 15,LN 8,F8)]),
1590                           (LC("RevOp_REV32",CTy"RevOp"),
1591                            CC[EX(Var("v",F32),LN 7,LN 0,F8),
1592                               EX(Var("v",F32),LN 15,LN 8,F8),
1593                               EX(Var("v",F32),LN 23,LN 16,F8),
1594                               EX(Var("v",F32),LN 31,LN 24,F8)]),
1595                           (LC("RevOp_REV64",CTy"RevOp"),LX F32)]),
1596                       Var("d",FTy 5)]),qVar"state")),
1597          Let(Var("v",F64),
1598              Apply(Call("X",ATy(qTy,F64),Var("n",FTy 5)),qVar"state"),
1599              Apply
1600                (Call
1601                   ("write'X",ATy(qTy,qTy),
1602                    TP[CS(Var("op",CTy"RevOp"),
1603                          [(LC("RevOp_RBIT",CTy"RevOp"),
1604                            Mop(Rev,Var("v",F64))),
1605                           (LC("RevOp_REV16",CTy"RevOp"),
1606                            CC[EX(Var("v",F64),LN 55,LN 48,F8),
1607                               EX(Var("v",F64),LN 63,LN 56,F8),
1608                               EX(Var("v",F64),LN 39,LN 32,F8),
1609                               EX(Var("v",F64),LN 47,LN 40,F8),
1610                               EX(Var("v",F64),LN 23,LN 16,F8),
1611                               EX(Var("v",F64),LN 31,LN 24,F8),
1612                               EX(Var("v",F64),LN 7,LN 0,F8),
1613                               EX(Var("v",F64),LN 15,LN 8,F8)]),
1614                           (LC("RevOp_REV32",CTy"RevOp"),
1615                            CC[EX(Var("v",F64),LN 39,LN 32,F8),
1616                               EX(Var("v",F64),LN 47,LN 40,F8),
1617                               EX(Var("v",F64),LN 55,LN 48,F8),
1618                               EX(Var("v",F64),LN 63,LN 56,F8),
1619                               EX(Var("v",F64),LN 7,LN 0,F8),
1620                               EX(Var("v",F64),LN 15,LN 8,F8),
1621                               EX(Var("v",F64),LN 23,LN 16,F8),
1622                               EX(Var("v",F64),LN 31,LN 24,F8)]),
1623                           (LC("RevOp_REV64",CTy"RevOp"),
1624                            CC[EX(Var("v",F64),LN 7,LN 0,F8),
1625                               EX(Var("v",F64),LN 15,LN 8,F8),
1626                               EX(Var("v",F64),LN 23,LN 16,F8),
1627                               EX(Var("v",F64),LN 31,LN 24,F8),
1628                               EX(Var("v",F64),LN 39,LN 32,F8),
1629                               EX(Var("v",F64),LN 47,LN 40,F8),
1630                               EX(Var("v",F64),LN 55,LN 48,F8),
1631                               EX(Var("v",F64),LN 63,LN 56,F8)])]),
1632                       Var("d",FTy 5)]),qVar"state")))))
1633;
1634val dfn'CRC_def = Def
1635  ("dfn'CRC",
1636   TP[Var("sz",BTy"N"),bVar"crc32c",Var("m",FTy 5),Var("n",FTy 5),
1637      Var("d",FTy 5)],
1638   Close
1639     (qVar"state",
1640      Apply
1641        (Call
1642           ("write'X",ATy(qTy,qTy),
1643            TP[Mop(Rev,
1644                   Call
1645                     ("Poly32Mod2",F32,
1646                      TP[Bop(BXor,
1647                             CC[Mop(Rev,
1648                                    Mop(Cast vTy,
1649                                        Apply
1650                                          (Call
1651                                             ("X",ATy(qTy,F32),
1652                                              Var("n",FTy 5)),qVar"state"))),
1653                                Call("Zeros",vTy,Mop(Size,LY(0,"N")))],
1654                             CC[Mop(Rev,
1655                                    Mop(Cast vTy,
1656                                        Apply
1657                                          (Call
1658                                             ("X",ATy(qTy,BTy"N"),
1659                                              Var("m",FTy 5)),qVar"state"))),
1660                                Call("Zeros",vTy,LN 32)]),
1661                         ITE(bVar"crc32c",LW(517762881,32),LW(79764919,32))])),
1662               Var("d",FTy 5)]),qVar"state")))
1663;
1664val dfn'BranchConditional_def = Def
1665  ("dfn'BranchConditional",TP[Var("offset",F64),Var("cond",F4)],
1666   Close
1667     (qVar"state",
1668      ITE(Apply
1669            (Call("ConditionHolds",ATy(qTy,bTy),Var("cond",F4)),
1670             qVar"state"),
1671          Apply
1672            (Call
1673               ("BranchTo",ATy(qTy,qTy),
1674                TP[Bop(Add,Dest("PC",F64,qVar"state"),Var("offset",F64)),
1675                   LC("BranchType_JMP",CTy"BranchType")]),qVar"state"),
1676          qVar"state")))
1677;
1678val dfn'BranchImmediate_def = Def
1679  ("dfn'BranchImmediate",
1680   TP[Var("offset",F64),Var("branch_type",CTy"BranchType")],
1681   Close
1682     (qVar"state",
1683      Let(qVar"s",
1684          ITE(EQ(Var("branch_type",CTy"BranchType"),
1685                 LC("BranchType_CALL",CTy"BranchType")),
1686              Apply
1687                (Call
1688                   ("write'X",ATy(qTy,qTy),
1689                    TP[Bop(Add,Dest("PC",F64,qVar"state"),LW(4,64)),
1690                       LW(30,5)]),qVar"state"),qVar"state"),
1691          Apply
1692            (Call
1693               ("BranchTo",ATy(qTy,qTy),
1694                TP[Bop(Add,Dest("PC",F64,qVar"s"),Var("offset",F64)),
1695                   Var("branch_type",CTy"BranchType")]),qVar"s"))))
1696;
1697val dfn'BranchRegister_def = Def
1698  ("dfn'BranchRegister",
1699   TP[Var("n",FTy 5),Var("branch_type",CTy"BranchType")],
1700   Close
1701     (qVar"state",
1702      Apply
1703        (Call
1704           ("BranchTo",ATy(qTy,qTy),
1705            TP[Apply(Call("X",ATy(qTy,F64),Var("n",FTy 5)),qVar"state"),
1706               Var("branch_type",CTy"BranchType")]),
1707         ITE(EQ(Var("branch_type",CTy"BranchType"),
1708                LC("BranchType_CALL",CTy"BranchType")),
1709             Apply
1710               (Call
1711                  ("write'X",ATy(qTy,qTy),
1712                   TP[Bop(Add,Dest("PC",F64,qVar"state"),LW(4,64)),
1713                      LW(30,5)]),qVar"state"),qVar"state"))))
1714;
1715val dfn'CompareAndBranch_def = Def
1716  ("dfn'CompareAndBranch",
1717   TP[Var("sf",BTy"N"),bVar"iszero",Var("offset",F64),Var("t",FTy 5)],
1718   Close
1719     (qVar"state",
1720      ITE(EQ(Apply(Call("X",ATy(qTy,BTy"N"),Var("t",FTy 5)),qVar"state"),
1721             LY(0,"N")),
1722          Apply
1723            (Call
1724               ("BranchTo",ATy(qTy,qTy),
1725                TP[Bop(Add,Dest("PC",F64,qVar"state"),Var("offset",F64)),
1726                   LC("BranchType_JMP",CTy"BranchType")]),qVar"state"),
1727          qVar"state")))
1728;
1729val dfn'TestBitAndBranch_def = Def
1730  ("dfn'TestBitAndBranch",
1731   TP[Var("sf",BTy"N"),Var("bit_pos",FTy 6),bVar"bit_val",
1732      Var("offset",F64),Var("t",FTy 5)],
1733   Close
1734     (qVar"state",
1735      ITE(EQ(Bop(Bit,
1736                 Apply
1737                   (Call("X",ATy(qTy,BTy"N"),Var("t",FTy 5)),qVar"state"),
1738                 Mop(Cast nTy,Var("bit_pos",FTy 6))),bVar"bit_val"),
1739          Apply
1740            (Call
1741               ("BranchTo",ATy(qTy,qTy),
1742                TP[Bop(Add,Dest("PC",F64,qVar"state"),Var("offset",F64)),
1743                   LC("BranchType_JMP",CTy"BranchType")]),qVar"state"),
1744          qVar"state")))
1745;
1746val LoadStoreSingle_def = Def
1747  ("LoadStoreSingle",
1748   TP[Var("size",BTy"N"),bVar"regsize_word",Var("memop",CTy"MemOp"),
1749      Var("acctype",CTy"AccType"),bVar"signed",bVar"wb_unknown",
1750      bVar"rt_unknown",bVar"wback",bVar"postindex",Var("offset",F64),
1751      Var("n",FTy 5),Var("t",FTy 5)],
1752   Close
1753     (qVar"state",
1754      Let(qVar"s",
1755          ITE(Bop(And,EQ(Var("n",FTy 5),LW(31,5)),
1756                  Mop(Not,
1757                      EQ(Var("memop",CTy"MemOp"),
1758                         LC("MemOp_PREFETCH",CTy"MemOp")))),
1759              Apply(Const("CheckSPAlignment",ATy(qTy,qTy)),qVar"state"),
1760              qVar"state"),
1761          Let(Var("v",F64),
1762              ITE(EQ(Var("n",FTy 5),LW(31,5)),
1763                  Apply(Const("SP",ATy(qTy,F64)),qVar"s"),
1764                  Apply(Call("X",ATy(qTy,F64),Var("n",FTy 5)),qVar"s")),
1765              Let(Var("address",F64),
1766                  ITE(bVar"postindex",Var("v",F64),
1767                      Bop(Add,Var("v",F64),Var("offset",F64))),
1768                  Let(qVar"s",
1769                      CS(Var("memop",CTy"MemOp"),
1770                         [(LC("MemOp_STORE",CTy"MemOp"),
1771                           Apply
1772                             (Call
1773                                ("write'Mem",ATy(qTy,qTy),
1774                                 TP[ITE(bVar"rt_unknown",LX(BTy"N"),
1775                                        Apply
1776                                          (Call
1777                                             ("X",ATy(qTy,BTy"N"),
1778                                              Var("t",FTy 5)),qVar"s")),
1779                                    Var("address",F64),
1780                                    Bop(Div,Mop(Size,LY(0,"N")),LN 8),
1781                                    Var("acctype",CTy"AccType")]),qVar"s")),
1782                          (LC("MemOp_LOAD",CTy"MemOp"),
1783                           Let(TP[Var("v",BTy"N"),qVar"s"],
1784                               Apply
1785                                 (Call
1786                                    ("Mem",ATy(qTy,PTy(BTy"N",qTy)),
1787                                     TP[Var("address",F64),
1788                                        Bop(Div,Mop(Size,LY(0,"N")),LN 8),
1789                                        Var("acctype",CTy"AccType")]),
1790                                  qVar"s"),
1791                               ITE(bVar"regsize_word",
1792                                   Apply
1793                                     (Call
1794                                        ("write'X",ATy(qTy,qTy),
1795                                         TP[Call
1796                                              ("ExtendWord",F32,
1797                                               TP[Var("v",BTy"N"),
1798                                                  bVar"signed"]),
1799                                            Var("t",FTy 5)]),qVar"s"),
1800                                   Apply
1801                                     (Call
1802                                        ("write'X",ATy(qTy,qTy),
1803                                         TP[Call
1804                                              ("ExtendWord",F64,
1805                                               TP[Var("v",BTy"N"),
1806                                                  bVar"signed"]),
1807                                            Var("t",FTy 5)]),qVar"s")))),
1808                          (LC("MemOp_PREFETCH",CTy"MemOp"),qVar"s")]),
1809                      ITE(bVar"wback",
1810                          Let(Var("address",F64),
1811                              ITB([(bVar"wb_unknown",LX F64),
1812                                   (bVar"postindex",
1813                                    Bop(Add,Var("address",F64),
1814                                        Var("offset",F64)))],
1815                                  Var("address",F64)),
1816                              ITE(EQ(Var("n",FTy 5),LW(31,5)),
1817                                  Apply
1818                                    (Call
1819                                       ("write'SP",ATy(qTy,qTy),
1820                                        Var("address",F64)),qVar"s"),
1821                                  Apply
1822                                    (Call
1823                                       ("write'X",ATy(qTy,qTy),
1824                                        TP[Var("address",F64),
1825                                           Var("n",FTy 5)]),qVar"s"))),
1826                          qVar"s")))))))
1827;
1828val dfn'LoadStoreImmediate_def = Def
1829  ("dfn'LoadStoreImmediate",
1830   TP[Var("size",BTy"N"),bVar"regsize_word",Var("memop",CTy"MemOp"),
1831      Var("acctype",CTy"AccType"),bVar"signed",bVar"wb_unknown",
1832      bVar"rt_unknown",bVar"wback",bVar"postindex",bVar"unsigned_offset",
1833      Var("offset",F64),Var("n",FTy 5),Var("t",FTy 5)],
1834   Close
1835     (qVar"state",
1836      Apply
1837        (Call
1838           ("LoadStoreSingle",ATy(qTy,qTy),
1839            TP[Var("size",BTy"N"),bVar"regsize_word",
1840               Var("memop",CTy"MemOp"),Var("acctype",CTy"AccType"),
1841               bVar"signed",bVar"wb_unknown",bVar"rt_unknown",bVar"wback",
1842               bVar"postindex",Var("offset",F64),Var("n",FTy 5),
1843               Var("t",FTy 5)]),qVar"state")))
1844;
1845val dfn'LoadStoreRegister_def = Def
1846  ("dfn'LoadStoreRegister",
1847   TP[Var("size",BTy"N"),bVar"regsize_word",Var("memop",CTy"MemOp"),
1848      bVar"signed",Var("m",FTy 5),Var("extend_type",CTy"ExtendType"),
1849      nVar"shift",Var("n",FTy 5),Var("t",FTy 5)],
1850   Close
1851     (qVar"state",
1852      Apply
1853        (Call
1854           ("LoadStoreSingle",ATy(qTy,qTy),
1855            TP[Var("size",BTy"N"),bVar"regsize_word",
1856               Var("memop",CTy"MemOp"),LC("AccType_NORMAL",CTy"AccType"),
1857               bVar"signed",LF,LF,LF,LF,
1858               Apply
1859                 (Call
1860                    ("ExtendReg",ATy(qTy,F64),
1861                     TP[Var("m",FTy 5),Var("extend_type",CTy"ExtendType"),
1862                        nVar"shift"]),qVar"state"),Var("n",FTy 5),
1863               Var("t",FTy 5)]),qVar"state")))
1864;
1865val dfn'LoadStorePair_def = Def
1866  ("dfn'LoadStorePair",
1867   TP[Var("size",BTy"N"),Var("memop",CTy"MemOp"),
1868      Var("acctype",CTy"AccType"),bVar"signed",bVar"wb_unknown",
1869      bVar"rt_unknown",bVar"wback",bVar"postindex",Var("offset",F64),
1870      Var("n",FTy 5),Var("t",FTy 5),Var("t2",FTy 5)],
1871   Close
1872     (qVar"state",
1873      Let(nVar"dbytes",Bop(Div,Mop(Size,LY(0,"N")),LN 8),
1874          Let(qVar"s",
1875              ITE(EQ(Var("n",FTy 5),LW(31,5)),
1876                  Apply
1877                    (Const("CheckSPAlignment",ATy(qTy,qTy)),qVar"state"),
1878                  qVar"state"),
1879              Let(Var("v",F64),
1880                  ITE(EQ(Var("n",FTy 5),LW(31,5)),
1881                      Apply(Const("SP",ATy(qTy,F64)),qVar"s"),
1882                      Apply(Call("X",ATy(qTy,F64),Var("n",FTy 5)),qVar"s")),
1883                  Let(Var("address",F64),
1884                      ITE(bVar"postindex",Var("v",F64),
1885                          Bop(Add,Var("v",F64),Var("offset",F64))),
1886                      Let(qVar"s",
1887                          CS(Var("memop",CTy"MemOp"),
1888                             [(LC("MemOp_STORE",CTy"MemOp"),
1889                               Apply
1890                                 (Call
1891                                    ("write'Mem",ATy(qTy,qTy),
1892                                     TP[ITE(Bop(And,bVar"rt_unknown",
1893                                                EQ(Var("t2",FTy 5),
1894                                                   Var("n",FTy 5))),
1895                                            LX(BTy"N"),
1896                                            Apply
1897                                              (Call
1898                                                 ("X",ATy(qTy,BTy"N"),
1899                                                  Var("t2",FTy 5)),qVar"s")),
1900                                        Bop(Add,Var("address",F64),
1901                                            Mop(Cast F64,nVar"dbytes")),
1902                                        nVar"dbytes",
1903                                        Var("acctype",CTy"AccType")]),
1904                                  Apply
1905                                    (Call
1906                                       ("write'Mem",ATy(qTy,qTy),
1907                                        TP[ITE(Bop(And,bVar"rt_unknown",
1908                                                   EQ(Var("t",FTy 5),
1909                                                      Var("n",FTy 5))),
1910                                               LX(BTy"N"),
1911                                               Apply
1912                                                 (Call
1913                                                    ("X",ATy(qTy,BTy"N"),
1914                                                     Var("t",FTy 5)),
1915                                                  qVar"s")),
1916                                           Var("address",F64),
1917                                           nVar"dbytes",
1918                                           Var("acctype",CTy"AccType")]),
1919                                     qVar"s"))),
1920                              (LC("MemOp_LOAD",CTy"MemOp"),
1921                               Let(TP[Var("v",PTy(BTy"N",BTy"N")),qVar"s"],
1922                                   ITE(bVar"rt_unknown",
1923                                       TP[LX(PTy(BTy"N",BTy"N")),qVar"s"],
1924                                       Let(TP[Var("v",BTy"N"),qVar"s"],
1925                                           Apply
1926                                             (Call
1927                                                ("Mem",
1928                                                 ATy(qTy,PTy(BTy"N",qTy)),
1929                                                 TP[Var("address",F64),
1930                                                    nVar"dbytes",
1931                                                    Var("acctype",
1932                                                        CTy"AccType")]),
1933                                              qVar"s"),
1934                                           Let(TP[Var("v0",BTy"N"),qVar"s"],
1935                                               Apply
1936                                                 (Call
1937                                                    ("Mem",
1938                                                     ATy(qTy,
1939                                                         PTy(BTy"N",qTy)),
1940                                                     TP[Bop(Add,
1941                                                            Var("address",
1942                                                                F64),
1943                                                            Mop(Cast F64,
1944                                                                nVar"dbytes")),
1945                                                        nVar"dbytes",
1946                                                        Var("acctype",
1947                                                            CTy"AccType")]),
1948                                                  qVar"s"),
1949                                               TP[TP[Var("v",BTy"N"),
1950                                                     Var("v0",BTy"N")],
1951                                                  qVar"s"]))),
1952                                   Let(TP[Var("data1",BTy"N"),
1953                                          Var("data2",BTy"N")],
1954                                       Var("v",PTy(BTy"N",BTy"N")),
1955                                       ITE(bVar"signed",
1956                                           Apply
1957                                             (Call
1958                                                ("write'X",ATy(qTy,qTy),
1959                                                 TP[Call
1960                                                      ("ExtendWord",F64,
1961                                                       TP[Var("data2",
1962                                                              BTy"N"),
1963                                                          bVar"signed"]),
1964                                                    Var("t2",FTy 5)]),
1965                                              Apply
1966                                                (Call
1967                                                   ("write'X",
1968                                                    ATy(qTy,qTy),
1969                                                    TP[Call
1970                                                         ("ExtendWord",
1971                                                          F64,
1972                                                          TP[Var("data1",
1973                                                                 BTy"N"),
1974                                                             bVar"signed"]),
1975                                                       Var("t",FTy 5)]),
1976                                                 qVar"s")),
1977                                           Apply
1978                                             (Call
1979                                                ("write'X",ATy(qTy,qTy),
1980                                                 TP[Var("data2",BTy"N"),
1981                                                    Var("t2",FTy 5)]),
1982                                              Apply
1983                                                (Call
1984                                                   ("write'X",
1985                                                    ATy(qTy,qTy),
1986                                                    TP[Var("data1",BTy"N"),
1987                                                       Var("t",FTy 5)]),
1988                                                 qVar"s")))))),
1989                              (AVar(CTy"MemOp"),qVar"s")]),
1990                          ITE(bVar"wback",
1991                              Let(Var("address",F64),
1992                                  ITB([(bVar"wb_unknown",LX F64),
1993                                       (bVar"postindex",
1994                                        Bop(Add,Var("address",F64),
1995                                            Var("offset",F64)))],
1996                                      Var("address",F64)),
1997                                  ITE(EQ(Var("n",FTy 5),LW(31,5)),
1998                                      Apply
1999                                        (Call
2000                                           ("write'SP",ATy(qTy,qTy),
2001                                            Var("address",F64)),qVar"s"),
2002                                      Apply
2003                                        (Call
2004                                           ("write'X",ATy(qTy,qTy),
2005                                            TP[Var("address",F64),
2006                                               Var("n",FTy 5)]),qVar"s"))),
2007                              qVar"s"))))))))
2008;
2009val ExclusiveMonitorPass_def = Def
2010  ("ExclusiveMonitorPass",TP[Var("address",F64),nVar"n"],LX bTy)
2011;
2012val SetExclusiveMonitors_def = Def
2013  ("SetExclusiveMonitors",TP[Var("address",F64),nVar"n"],LU)
2014;
2015val ExclusiveMonitorStatus_def = Def0 ("ExclusiveMonitorStatus",LX F1)
2016;
2017val dfn'LoadStoreAcquire_def = Def
2018  ("dfn'LoadStoreAcquire",
2019   TP[Var("size",BTy"N"),Var("memop",CTy"MemOp"),
2020      Var("acctype",CTy"AccType"),bVar"excl",bVar"rn_unknown",
2021      bVar"rt_unknown",Var("s",FTy 5),Var("n",FTy 5),Var("t",FTy 5)],
2022   Close
2023     (qVar"state",
2024      Let(nVar"dbytes",Bop(Div,Mop(Size,LY(0,"N")),LN 8),
2025          Let(qVar"s0",
2026              ITE(EQ(Var("n",FTy 5),LW(31,5)),
2027                  Apply
2028                    (Const("CheckSPAlignment",ATy(qTy,qTy)),qVar"state"),
2029                  qVar"state"),
2030              Let(Var("v",F64),
2031                  ITB([(EQ(Var("n",FTy 5),LW(31,5)),
2032                        Apply(Const("SP",ATy(qTy,F64)),qVar"s0")),
2033                       (bVar"rn_unknown",LX F64)],
2034                      Apply
2035                        (Call("X",ATy(qTy,F64),Var("n",FTy 5)),qVar"s0")),
2036                  CS(Var("memop",CTy"MemOp"),
2037                     [(LC("MemOp_STORE",CTy"MemOp"),
2038                       Let(Var("v0",BTy"N"),
2039                           ITE(bVar"rt_unknown",LX(BTy"N"),
2040                               Apply
2041                                 (Call("X",ATy(qTy,BTy"N"),Var("t",FTy 5)),
2042                                  qVar"s0")),
2043                           ITE(bVar"excl",
2044                               ITE(Call
2045                                     ("ExclusiveMonitorPass",bTy,
2046                                      TP[Var("v",F64),nVar"dbytes"]),
2047                                   Apply
2048                                     (Call
2049                                        ("write'X",ATy(qTy,qTy),
2050                                         TP[Mop(Cast F32,
2051                                                Const
2052                                                  ("ExclusiveMonitorStatus",
2053                                                   F1)),Var("s",FTy 5)]),
2054                                      Apply
2055                                        (Call
2056                                           ("write'Mem",ATy(qTy,qTy),
2057                                            TP[Var("v0",BTy"N"),
2058                                               Var("v",F64),nVar"dbytes",
2059                                               Var("acctype",CTy"AccType")]),
2060                                         qVar"s0")),
2061                                   Apply
2062                                     (Call
2063                                        ("write'X",ATy(qTy,qTy),
2064                                         TP[LW(1,32),Var("s",FTy 5)]),
2065                                      qVar"s0")),
2066                               Apply
2067                                 (Call
2068                                    ("write'Mem",ATy(qTy,qTy),
2069                                     TP[Var("v0",BTy"N"),Var("v",F64),
2070                                        nVar"dbytes",
2071                                        Var("acctype",CTy"AccType")]),
2072                                  qVar"s0")))),
2073                      (LC("MemOp_LOAD",CTy"MemOp"),
2074                       Let(TP[Var("v",BTy"N"),qVar"s"],
2075                           Apply
2076                             (Call
2077                                ("Mem",ATy(qTy,PTy(BTy"N",qTy)),
2078                                 TP[Var("v",F64),nVar"dbytes",
2079                                    Var("acctype",CTy"AccType")]),qVar"s0"),
2080                           ITE(EQ(Mop(Size,LY(0,"N")),LN 64),
2081                               Apply
2082                                 (Call
2083                                    ("write'X",ATy(qTy,qTy),
2084                                     TP[Var("v",BTy"N"),Var("t",FTy 5)]),
2085                                  qVar"s"),
2086                               Apply
2087                                 (Call
2088                                    ("write'X",ATy(qTy,qTy),
2089                                     TP[Mop(Cast F32,Var("v",BTy"N")),
2090                                        Var("t",FTy 5)]),qVar"s")))),
2091                      (AVar(CTy"MemOp"),qVar"s0")]))))))
2092;
2093val dfn'LoadStoreAcquirePair_def = Def
2094  ("dfn'LoadStoreAcquirePair",
2095   TP[Var("size",BTy"N"),Var("memop",CTy"MemOp"),
2096      Var("acctype",CTy"AccType"),bVar"rn_unknown",bVar"rt_unknown",
2097      Var("s",FTy 5),Var("n",FTy 5),Var("t",FTy 5),Var("t2",FTy 5)],
2098   Close
2099     (qVar"state",
2100      Let(nVar"dbytes",Bop(Div,Mop(Size,LY(0,"N")),LN 8),
2101          Let(qVar"s0",
2102              ITE(EQ(Var("n",FTy 5),LW(31,5)),
2103                  Apply
2104                    (Const("CheckSPAlignment",ATy(qTy,qTy)),qVar"state"),
2105                  qVar"state"),
2106              Let(Var("v",F64),
2107                  ITB([(EQ(Var("n",FTy 5),LW(31,5)),
2108                        Apply(Const("SP",ATy(qTy,F64)),qVar"s0")),
2109                       (bVar"rn_unknown",LX F64)],
2110                      Apply
2111                        (Call("X",ATy(qTy,F64),Var("n",FTy 5)),qVar"s0")),
2112                  CS(Var("memop",CTy"MemOp"),
2113                     [(LC("MemOp_STORE",CTy"MemOp"),
2114                       ITE(Call
2115                             ("ExclusiveMonitorPass",bTy,
2116                              TP[Var("v",F64),nVar"dbytes"]),
2117                           Apply
2118                             (Call
2119                                ("write'X",ATy(qTy,qTy),
2120                                 TP[Mop(Cast F32,
2121                                        Const("ExclusiveMonitorStatus",F1)),
2122                                    Var("s",FTy 5)]),
2123                              Apply
2124                                (Call
2125                                   ("write'Mem",ATy(qTy,qTy),
2126                                    TP[ITB([(bVar"rt_unknown",LX(BTy"N")),
2127                                            (EQ(Mop(Size,LY(0,"N")),LN 64),
2128                                             ITE(Apply
2129                                                   (Const
2130                                                      ("BigEndian",
2131                                                       ATy(qTy,bTy)),
2132                                                    qVar"s0"),
2133                                                 Mop(Cast(BTy"N"),
2134                                                     CC[Apply
2135                                                          (Call
2136                                                             ("X",
2137                                                              ATy(qTy,F32),
2138                                                              Var("t",
2139                                                                  FTy 5)),
2140                                                           qVar"s0"),
2141                                                        Apply
2142                                                          (Call
2143                                                             ("X",
2144                                                              ATy(qTy,F32),
2145                                                              Var("t2",
2146                                                                  FTy 5)),
2147                                                           qVar"s0")]),
2148                                                 Mop(Cast(BTy"N"),
2149                                                     CC[Apply
2150                                                          (Call
2151                                                             ("X",
2152                                                              ATy(qTy,F32),
2153                                                              Var("t2",
2154                                                                  FTy 5)),
2155                                                           qVar"s0"),
2156                                                        Apply
2157                                                          (Call
2158                                                             ("X",
2159                                                              ATy(qTy,F32),
2160                                                              Var("t",
2161                                                                  FTy 5)),
2162                                                           qVar"s0")]))),
2163                                            (Apply
2164                                               (Const
2165                                                  ("BigEndian",
2166                                                   ATy(qTy,bTy)),qVar"s0"),
2167                                             Mop(Cast(BTy"N"),
2168                                                 CC[Apply
2169                                                      (Call
2170                                                         ("X",
2171                                                          ATy(qTy,F64),
2172                                                          Var("t",FTy 5)),
2173                                                       qVar"s0"),
2174                                                    Apply
2175                                                      (Call
2176                                                         ("X",
2177                                                          ATy(qTy,F64),
2178                                                          Var("t2",FTy 5)),
2179                                                       qVar"s0")]))],
2180                                           Mop(Cast(BTy"N"),
2181                                               CC[Apply
2182                                                    (Call
2183                                                       ("X",ATy(qTy,F64),
2184                                                        Var("t2",FTy 5)),
2185                                                     qVar"s0"),
2186                                                  Apply
2187                                                    (Call
2188                                                       ("X",ATy(qTy,F64),
2189                                                        Var("t",FTy 5)),
2190                                                     qVar"s0")])),
2191                                       Var("v",F64),nVar"dbytes",
2192                                       Var("acctype",CTy"AccType")]),
2193                                 qVar"s0")),
2194                           Apply
2195                             (Call
2196                                ("write'X",ATy(qTy,qTy),
2197                                 TP[LW(1,32),Var("s",FTy 5)]),qVar"s0"))),
2198                      (LC("MemOp_LOAD",CTy"MemOp"),
2199                       ITB([(bVar"rt_unknown",
2200                             ITE(EQ(Mop(Size,LY(0,"N")),LN 64),
2201                                 Apply
2202                                   (Call
2203                                      ("write'X",ATy(qTy,qTy),
2204                                       TP[LX F32,Var("t",FTy 5)]),qVar"s0"),
2205                                 Apply
2206                                   (Call
2207                                      ("write'X",ATy(qTy,qTy),
2208                                       TP[LX F64,Var("t",FTy 5)]),qVar"s0"))),
2209                            (EQ(Mop(Size,LY(0,"N")),LN 64),
2210                             Let(TP[Var("v",BTy"N"),qVar"s"],
2211                                 Apply
2212                                   (Call
2213                                      ("Mem",ATy(qTy,PTy(BTy"N",qTy)),
2214                                       TP[Var("v",F64),nVar"dbytes",
2215                                          Var("acctype",CTy"AccType")]),
2216                                    qVar"s0"),
2217                                 ITE(Apply
2218                                       (Const("BigEndian",ATy(qTy,bTy)),
2219                                        qVar"s"),
2220                                     Apply
2221                                       (Call
2222                                          ("write'X",ATy(qTy,qTy),
2223                                           TP[EX(Var("v",BTy"N"),LN 31,
2224                                                 LN 0,F32),Var("t2",FTy 5)]),
2225                                        Apply
2226                                          (Call
2227                                             ("write'X",ATy(qTy,qTy),
2228                                              TP[EX(Var("v",BTy"N"),LN 63,
2229                                                    LN 32,F32),
2230                                                 Var("t",FTy 5)]),qVar"s")),
2231                                     Apply
2232                                       (Call
2233                                          ("write'X",ATy(qTy,qTy),
2234                                           TP[EX(Var("v",BTy"N"),LN 63,
2235                                                 LN 32,F32),
2236                                              Var("t2",FTy 5)]),
2237                                        Apply
2238                                          (Call
2239                                             ("write'X",ATy(qTy,qTy),
2240                                              TP[EX(Var("v",BTy"N"),LN 31,
2241                                                    LN 0,F32),
2242                                                 Var("t",FTy 5)]),qVar"s")))))],
2243                           Let(TP[Var("v0",F64),qVar"s"],
2244                               Apply
2245                                 (Call
2246                                    ("Mem",ATy(qTy,PTy(F64,qTy)),
2247                                     TP[Var("v",F64),LN 8,
2248                                        Var("acctype",CTy"AccType")]),
2249                                  ITE(Mop(Not,
2250                                          Call
2251                                            ("Aligned",bTy,
2252                                             TP[Var("v",F64),nVar"dbytes"])),
2253                                      Mop(Snd,
2254                                          Apply
2255                                            (Call
2256                                               ("raise'exception",
2257                                                ATy(qTy,PTy(uTy,qTy)),
2258                                                Const
2259                                                  ("ALIGNMENT_FAULT",
2260                                                   CTy"exception")),
2261                                             qVar"s0")),qVar"s0")),
2262                               Let(TP[Var("v",F64),qVar"s"],
2263                                   Apply
2264                                     (Call
2265                                        ("Mem",ATy(qTy,PTy(F64,qTy)),
2266                                         TP[Bop(Add,Var("v",F64),LW(8,64)),
2267                                            LN 8,
2268                                            Var("acctype",CTy"AccType")]),
2269                                      Apply
2270                                        (Call
2271                                           ("write'X",ATy(qTy,qTy),
2272                                            TP[Var("v0",F64),
2273                                               Var("t",FTy 5)]),qVar"s")),
2274                                   Apply
2275                                     (Call
2276                                        ("write'X",ATy(qTy,qTy),
2277                                         TP[Var("v",F64),Var("t2",FTy 5)]),
2278                                      qVar"s"))))),
2279                      (AVar(CTy"MemOp"),qVar"s0")]))))))
2280;
2281val dfn'LoadLiteral_def = Def
2282  ("dfn'LoadLiteral",
2283   TP[Var("size",BTy"N"),Var("memop",CTy"MemOp"),bVar"signed",
2284      Var("offset",F64),Var("t",FTy 5)],
2285   Close
2286     (qVar"state",
2287      CS(Var("memop",CTy"MemOp"),
2288         [(LC("MemOp_LOAD",CTy"MemOp"),
2289           Let(TP[Var("v",BTy"N"),qVar"s"],
2290               Apply
2291                 (Call
2292                    ("Mem",ATy(qTy,PTy(BTy"N",qTy)),
2293                     TP[Bop(Add,Dest("PC",F64,qVar"state"),
2294                            Var("offset",F64)),
2295                        Bop(Div,Mop(Size,LY(0,"N")),LN 8),
2296                        LC("AccType_NORMAL",CTy"AccType")]),qVar"state"),
2297               Apply
2298                 (Call
2299                    ("write'X",ATy(qTy,qTy),
2300                     TP[Call
2301                          ("ExtendWord",F64,
2302                           TP[Var("v",BTy"N"),bVar"signed"]),
2303                        Var("t",FTy 5)]),qVar"s"))),
2304          (AVar(CTy"MemOp"),qVar"state")])))
2305;
2306val dfn'MemoryBarrier_def = Def
2307  ("dfn'MemoryBarrier",TP[Var("op",CTy"MemBarrierOp"),Var("crm",F4)],
2308   Close
2309     (qVar"state",
2310      Mop(Snd,
2311          Apply
2312            (Call
2313               ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
2314                Call("UNDEFINED_FAULT",CTy"exception",LS"MemoryBarrier")),
2315             qVar"state"))))
2316;
2317val dfn'ClearExclusive_def = Def
2318  ("dfn'ClearExclusive",Var("imm",F4),
2319   Close
2320     (qVar"state",
2321      Mop(Snd,
2322          Apply
2323            (Call
2324               ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
2325                Call("UNDEFINED_FAULT",CTy"exception",LS"ClearExclusive")),
2326             qVar"state"))))
2327;
2328val dfn'Hint_def = Def
2329  ("dfn'Hint",Var("op",CTy"SystemHintOp"),
2330   Close
2331     (qVar"state",
2332      ITE(EQ(Var("op",CTy"SystemHintOp"),
2333             LC("SystemHintOp_NOP",CTy"SystemHintOp")),qVar"state",
2334          Mop(Snd,
2335              Apply
2336                (Call
2337                   ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
2338                    Call("UNDEFINED_FAULT",CTy"exception",LS"Hint")),
2339                 qVar"state")))))
2340;
2341val dfn'Breakpoint_def = Def
2342  ("dfn'Breakpoint",Var("imm",F16),
2343   Close
2344     (qVar"state",
2345      Mop(Snd,
2346          Apply
2347            (Call
2348               ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
2349                Call("UNDEFINED_FAULT",CTy"exception",LS"Breakpoint")),
2350             qVar"state"))))
2351;
2352val dfn'DebugSwitch_def = Def
2353  ("dfn'DebugSwitch",Var("target_level",FTy 2),
2354   Close
2355     (qVar"state",
2356      Mop(Snd,
2357          Apply
2358            (Call
2359               ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
2360                Call("UNDEFINED_FAULT",CTy"exception",LS"DebugSwitch")),
2361             qVar"state"))))
2362;
2363val dfn'DebugRestore_def = Def
2364  ("dfn'DebugRestore",qVar"state",
2365   Mop(Snd,
2366       Apply
2367         (Call
2368            ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
2369             Call("UNDEFINED_FAULT",CTy"exception",LS"DebugRestore")),
2370          qVar"state")))
2371;
2372val dfn'Halt_def = Def
2373  ("dfn'Halt",Var("imm16",F16),
2374   Close
2375     (qVar"state",
2376      Mop(Snd,
2377          Apply
2378            (Call
2379               ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
2380                Call("UNDEFINED_FAULT",CTy"exception",LS"Halt")),
2381             qVar"state"))))
2382;
2383val dfn'SystemInstruction_def = Def
2384  ("dfn'SystemInstruction",
2385   TP[Var("sys_op1",FTy 3),Var("sys_op2",FTy 3),Var("sys_crn",F4),
2386      Var("sys_crm",F4),bVar"has_result",Var("t",FTy 5)],
2387   Close
2388     (qVar"state",
2389      Mop(Snd,
2390          Apply
2391            (Call
2392               ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
2393                Call("UNDEFINED_FAULT",CTy"exception",LS"System")),
2394             qVar"state"))))
2395;
2396val dfn'MoveSystemRegister_def = Def
2397  ("dfn'MoveSystemRegister",
2398   TP[bVar"read",Var("sys_op0",FTy 3),Var("sys_op1",FTy 3),
2399      Var("sys_op2",FTy 3),Var("sys_crn",F4),Var("sys_crm",F4),
2400      Var("t",FTy 5)],
2401   Close
2402     (qVar"state",
2403      Mop(Snd,
2404          Apply
2405            (Call
2406               ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
2407                Call
2408                  ("UNDEFINED_FAULT",CTy"exception",LS"MoveSystemRegister")),
2409             qVar"state"))))
2410;
2411val dfn'MoveImmediateProcState_def = Def
2412  ("dfn'MoveImmediateProcState",
2413   TP[Var("field",CTy"PSTATEField"),Var("operand",F4)],
2414   Close
2415     (qVar"state",
2416      Mop(Snd,
2417          Apply
2418            (Call
2419               ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
2420                Call
2421                  ("UNDEFINED_FAULT",CTy"exception",
2422                   LS"MoveImmediateProcState")),qVar"state"))))
2423;
2424val dfn'SupervisorCall_def = Def
2425  ("dfn'SupervisorCall",Var("imm16",F16),
2426   Close
2427     (qVar"state",
2428      Mop(Snd,
2429          Apply
2430            (Call
2431               ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
2432                Call("UNDEFINED_FAULT",CTy"exception",LS"SupervisorCall")),
2433             qVar"state"))))
2434;
2435val dfn'HypervisorCall_def = Def
2436  ("dfn'HypervisorCall",Var("imm16",F16),
2437   Close
2438     (qVar"state",
2439      Mop(Snd,
2440          Apply
2441            (Call
2442               ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
2443                Call("UNDEFINED_FAULT",CTy"exception",LS"HypervisorCall")),
2444             qVar"state"))))
2445;
2446val dfn'SecureMonitorCall_def = Def
2447  ("dfn'SecureMonitorCall",Var("imm16",F16),
2448   Close
2449     (qVar"state",
2450      Mop(Snd,
2451          Apply
2452            (Call
2453               ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
2454                Call
2455                  ("UNDEFINED_FAULT",CTy"exception",LS"SecureMonitorCall")),
2456             qVar"state"))))
2457;
2458val dfn'ExceptionReturn_def = Def
2459  ("dfn'ExceptionReturn",qVar"state",
2460   Mop(Snd,
2461       Apply
2462         (Call
2463            ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
2464             Call("UNDEFINED_FAULT",CTy"exception",LS"ExceptionReturn")),
2465          qVar"state")))
2466;
2467val dfn'Unallocated_def = Def
2468  ("dfn'Unallocated",qVar"state",
2469   Mop(Snd,
2470       Apply
2471         (Call
2472            ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
2473             Call("UNDEFINED_FAULT",CTy"exception",LS"Unallocated")),
2474          qVar"state")))
2475;
2476val dfn'Reserved_def = Def
2477  ("dfn'Reserved",qVar"state",
2478   Mop(Snd,
2479       Apply
2480         (Call
2481            ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
2482             Call("UNDEFINED_FAULT",CTy"exception",LS"Reserved")),
2483          qVar"state")))
2484;
2485val Run_def = Def
2486  ("Run",Var("v0",CTy"instruction"),
2487   Close
2488     (qVar"state",
2489      CS(Var("v0",CTy"instruction"),
2490         [(Const("Reserved",CTy"instruction"),
2491           Apply(Const("dfn'Reserved",ATy(qTy,qTy)),qVar"state")),
2492          (Const("Unallocated",CTy"instruction"),
2493           Apply(Const("dfn'Unallocated",ATy(qTy,qTy)),qVar"state")),
2494          (Call
2495             ("Address",CTy"instruction",
2496              Var("v81",PTy(bTy,PTy(F64,FTy 5)))),
2497           Apply
2498             (Call
2499                ("dfn'Address",ATy(qTy,qTy),
2500                 Var("v81",PTy(bTy,PTy(F64,FTy 5)))),qVar"state")),
2501          (Call("ClearExclusive",CTy"instruction",Var("v82",F4)),
2502           Apply
2503             (Call("dfn'ClearExclusive",ATy(qTy,qTy),Var("v82",F4)),
2504              qVar"state")),
2505          (Call("Hint",CTy"instruction",Var("v83",CTy"SystemHintOp")),
2506           Apply
2507             (Call("dfn'Hint",ATy(qTy,qTy),Var("v83",CTy"SystemHintOp")),
2508              qVar"state")),
2509          (Call
2510             ("MemoryBarrier",CTy"instruction",
2511              Var("v84",PTy(CTy"MemBarrierOp",F4))),
2512           Apply
2513             (Call
2514                ("dfn'MemoryBarrier",ATy(qTy,qTy),
2515                 Var("v84",PTy(CTy"MemBarrierOp",F4))),qVar"state")),
2516          (Call("Branch",CTy"instruction",Var("v1",CTy"Branch")),
2517           CS(Var("v1",CTy"Branch"),
2518              [(Call
2519                  ("BranchConditional",CTy"Branch",Var("v2",PTy(F64,F4))),
2520                Apply
2521                  (Call
2522                     ("dfn'BranchConditional",ATy(qTy,qTy),
2523                      Var("v2",PTy(F64,F4))),qVar"state")),
2524               (Call
2525                  ("BranchImmediate",CTy"Branch",
2526                   Var("v3",PTy(F64,CTy"BranchType"))),
2527                Apply
2528                  (Call
2529                     ("dfn'BranchImmediate",ATy(qTy,qTy),
2530                      Var("v3",PTy(F64,CTy"BranchType"))),qVar"state")),
2531               (Call
2532                  ("BranchRegister",CTy"Branch",
2533                   Var("v4",PTy(FTy 5,CTy"BranchType"))),
2534                Apply
2535                  (Call
2536                     ("dfn'BranchRegister",ATy(qTy,qTy),
2537                      Var("v4",PTy(FTy 5,CTy"BranchType"))),qVar"state")),
2538               (Call
2539                  ("CompareAndBranch@32",CTy"Branch",
2540                   Var("v5",PTy(F32,PTy(bTy,PTy(F64,FTy 5))))),
2541                Apply
2542                  (Call
2543                     ("dfn'CompareAndBranch",ATy(qTy,qTy),
2544                      Var("v5",PTy(F32,PTy(bTy,PTy(F64,FTy 5))))),
2545                   qVar"state")),
2546               (Call
2547                  ("CompareAndBranch@64",CTy"Branch",
2548                   Var("v6",PTy(F64,PTy(bTy,PTy(F64,FTy 5))))),
2549                Apply
2550                  (Call
2551                     ("dfn'CompareAndBranch",ATy(qTy,qTy),
2552                      Var("v6",PTy(F64,PTy(bTy,PTy(F64,FTy 5))))),
2553                   qVar"state")),
2554               (Call
2555                  ("TestBitAndBranch@32",CTy"Branch",
2556                   Var("v7",PTy(F32,PTy(FTy 6,PTy(bTy,PTy(F64,FTy 5)))))),
2557                Apply
2558                  (Call
2559                     ("dfn'TestBitAndBranch",ATy(qTy,qTy),
2560                      Var("v7",PTy(F32,PTy(FTy 6,PTy(bTy,PTy(F64,FTy 5)))))),
2561                   qVar"state")),
2562               (Call
2563                  ("TestBitAndBranch@64",CTy"Branch",
2564                   Var("v8",PTy(F64,PTy(FTy 6,PTy(bTy,PTy(F64,FTy 5)))))),
2565                Apply
2566                  (Call
2567                     ("dfn'TestBitAndBranch",ATy(qTy,qTy),
2568                      Var("v8",PTy(F64,PTy(FTy 6,PTy(bTy,PTy(F64,FTy 5)))))),
2569                   qVar"state"))])),
2570          (Call("CRCExt",CTy"instruction",Var("v9",CTy"CRCExt")),
2571           CS(Var("v9",CTy"CRCExt"),
2572              [(Call
2573                  ("CRC@16",CTy"CRCExt",
2574                   Var("v10",PTy(F16,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
2575                Apply
2576                  (Call
2577                     ("dfn'CRC",ATy(qTy,qTy),
2578                      Var("v10",
2579                          PTy(F16,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
2580                   qVar"state")),
2581               (Call
2582                  ("CRC@32",CTy"CRCExt",
2583                   Var("v11",PTy(F32,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
2584                Apply
2585                  (Call
2586                     ("dfn'CRC",ATy(qTy,qTy),
2587                      Var("v11",
2588                          PTy(F32,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
2589                   qVar"state")),
2590               (Call
2591                  ("CRC@64",CTy"CRCExt",
2592                   Var("v12",PTy(F64,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
2593                Apply
2594                  (Call
2595                     ("dfn'CRC",ATy(qTy,qTy),
2596                      Var("v12",
2597                          PTy(F64,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
2598                   qVar"state")),
2599               (Call
2600                  ("CRC@8",CTy"CRCExt",
2601                   Var("v13",PTy(F8,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
2602                Apply
2603                  (Call
2604                     ("dfn'CRC",ATy(qTy,qTy),
2605                      Var("v13",
2606                          PTy(F8,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
2607                   qVar"state"))])),
2608          (Call("Data",CTy"instruction",Var("v14",CTy"Data")),
2609           CS(Var("v14",CTy"Data"),
2610              [(Call
2611                  ("AddSubCarry@32",CTy"Data",
2612                   Var("v15",
2613                       PTy(F32,
2614                           PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))))),
2615                Apply
2616                  (Call
2617                     ("dfn'AddSubCarry",ATy(qTy,qTy),
2618                      Var("v15",
2619                          PTy(F32,
2620                              PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))))),
2621                   qVar"state")),
2622               (Call
2623                  ("AddSubCarry@64",CTy"Data",
2624                   Var("v16",
2625                       PTy(F64,
2626                           PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))))),
2627                Apply
2628                  (Call
2629                     ("dfn'AddSubCarry",ATy(qTy,qTy),
2630                      Var("v16",
2631                          PTy(F64,
2632                              PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))))),
2633                   qVar"state")),
2634               (Call
2635                  ("AddSubExtendRegister@32",CTy"Data",
2636                   Var("v17",
2637                       PTy(F32,
2638                           PTy(bTy,
2639                               PTy(bTy,
2640                                   PTy(FTy 5,
2641                                       PTy(CTy"ExtendType",
2642                                           PTy(FTy 3,PTy(FTy 5,FTy 5))))))))),
2643                Apply
2644                  (Call
2645                     ("dfn'AddSubExtendRegister",ATy(qTy,qTy),
2646                      Var("v17",
2647                          PTy(F32,
2648                              PTy(bTy,
2649                                  PTy(bTy,
2650                                      PTy(FTy 5,
2651                                          PTy(CTy"ExtendType",
2652                                              PTy(FTy 3,PTy(FTy 5,FTy 5))))))))),
2653                   qVar"state")),
2654               (Call
2655                  ("AddSubExtendRegister@64",CTy"Data",
2656                   Var("v18",
2657                       PTy(F64,
2658                           PTy(bTy,
2659                               PTy(bTy,
2660                                   PTy(FTy 5,
2661                                       PTy(CTy"ExtendType",
2662                                           PTy(FTy 3,PTy(FTy 5,FTy 5))))))))),
2663                Apply
2664                  (Call
2665                     ("dfn'AddSubExtendRegister",ATy(qTy,qTy),
2666                      Var("v18",
2667                          PTy(F64,
2668                              PTy(bTy,
2669                                  PTy(bTy,
2670                                      PTy(FTy 5,
2671                                          PTy(CTy"ExtendType",
2672                                              PTy(FTy 3,PTy(FTy 5,FTy 5))))))))),
2673                   qVar"state")),
2674               (Call
2675                  ("AddSubImmediate@32",CTy"Data",
2676                   Var("v19",
2677                       PTy(F32,PTy(bTy,PTy(bTy,PTy(F32,PTy(FTy 5,FTy 5))))))),
2678                Apply
2679                  (Call
2680                     ("dfn'AddSubImmediate",ATy(qTy,qTy),
2681                      Var("v19",
2682                          PTy(F32,
2683                              PTy(bTy,PTy(bTy,PTy(F32,PTy(FTy 5,FTy 5))))))),
2684                   qVar"state")),
2685               (Call
2686                  ("AddSubImmediate@64",CTy"Data",
2687                   Var("v20",
2688                       PTy(F64,PTy(bTy,PTy(bTy,PTy(F64,PTy(FTy 5,FTy 5))))))),
2689                Apply
2690                  (Call
2691                     ("dfn'AddSubImmediate",ATy(qTy,qTy),
2692                      Var("v20",
2693                          PTy(F64,
2694                              PTy(bTy,PTy(bTy,PTy(F64,PTy(FTy 5,FTy 5))))))),
2695                   qVar"state")),
2696               (Call
2697                  ("AddSubShiftedRegister@32",CTy"Data",
2698                   Var("v21",
2699                       PTy(F32,
2700                           PTy(bTy,
2701                               PTy(bTy,
2702                                   PTy(CTy"ShiftType",
2703                                       PTy(FTy 5,
2704                                           PTy(FTy 6,PTy(FTy 5,FTy 5))))))))),
2705                Apply
2706                  (Call
2707                     ("dfn'AddSubShiftedRegister",ATy(qTy,qTy),
2708                      Var("v21",
2709                          PTy(F32,
2710                              PTy(bTy,
2711                                  PTy(bTy,
2712                                      PTy(CTy"ShiftType",
2713                                          PTy(FTy 5,
2714                                              PTy(FTy 6,PTy(FTy 5,FTy 5))))))))),
2715                   qVar"state")),
2716               (Call
2717                  ("AddSubShiftedRegister@64",CTy"Data",
2718                   Var("v22",
2719                       PTy(F64,
2720                           PTy(bTy,
2721                               PTy(bTy,
2722                                   PTy(CTy"ShiftType",
2723                                       PTy(FTy 5,
2724                                           PTy(FTy 6,PTy(FTy 5,FTy 5))))))))),
2725                Apply
2726                  (Call
2727                     ("dfn'AddSubShiftedRegister",ATy(qTy,qTy),
2728                      Var("v22",
2729                          PTy(F64,
2730                              PTy(bTy,
2731                                  PTy(bTy,
2732                                      PTy(CTy"ShiftType",
2733                                          PTy(FTy 5,
2734                                              PTy(FTy 6,PTy(FTy 5,FTy 5))))))))),
2735                   qVar"state")),
2736               (Call
2737                  ("BitfieldMove@32",CTy"Data",
2738                   Var("v23",
2739                       PTy(F32,
2740                           PTy(bTy,
2741                               PTy(bTy,
2742                                   PTy(F32,
2743                                       PTy(F32,
2744                                           PTy(nTy,
2745                                               PTy(nTy,PTy(FTy 5,FTy 5)))))))))),
2746                Apply
2747                  (Call
2748                     ("dfn'BitfieldMove",ATy(qTy,qTy),
2749                      Var("v23",
2750                          PTy(F32,
2751                              PTy(bTy,
2752                                  PTy(bTy,
2753                                      PTy(F32,
2754                                          PTy(F32,
2755                                              PTy(nTy,
2756                                                  PTy(nTy,PTy(FTy 5,FTy 5)))))))))),
2757                   qVar"state")),
2758               (Call
2759                  ("BitfieldMove@64",CTy"Data",
2760                   Var("v24",
2761                       PTy(F64,
2762                           PTy(bTy,
2763                               PTy(bTy,
2764                                   PTy(F64,
2765                                       PTy(F64,
2766                                           PTy(nTy,
2767                                               PTy(nTy,PTy(FTy 5,FTy 5)))))))))),
2768                Apply
2769                  (Call
2770                     ("dfn'BitfieldMove",ATy(qTy,qTy),
2771                      Var("v24",
2772                          PTy(F64,
2773                              PTy(bTy,
2774                                  PTy(bTy,
2775                                      PTy(F64,
2776                                          PTy(F64,
2777                                              PTy(nTy,
2778                                                  PTy(nTy,PTy(FTy 5,FTy 5)))))))))),
2779                   qVar"state")),
2780               (Call
2781                  ("ConditionalCompareImmediate@32",CTy"Data",
2782                   Var("v25",
2783                       PTy(F32,
2784                           PTy(bTy,
2785                               PTy(F32,
2786                                   PTy(F4,
2787                                       PTy(PTy(bTy,PTy(bTy,PTy(bTy,bTy))),
2788                                           FTy 5))))))),
2789                Apply
2790                  (Call
2791                     ("dfn'ConditionalCompareImmediate",ATy(qTy,qTy),
2792                      Var("v25",
2793                          PTy(F32,
2794                              PTy(bTy,
2795                                  PTy(F32,
2796                                      PTy(F4,
2797                                          PTy(PTy(bTy,
2798                                                  PTy(bTy,PTy(bTy,bTy))),
2799                                              FTy 5))))))),qVar"state")),
2800               (Call
2801                  ("ConditionalCompareImmediate@64",CTy"Data",
2802                   Var("v26",
2803                       PTy(F64,
2804                           PTy(bTy,
2805                               PTy(F64,
2806                                   PTy(F4,
2807                                       PTy(PTy(bTy,PTy(bTy,PTy(bTy,bTy))),
2808                                           FTy 5))))))),
2809                Apply
2810                  (Call
2811                     ("dfn'ConditionalCompareImmediate",ATy(qTy,qTy),
2812                      Var("v26",
2813                          PTy(F64,
2814                              PTy(bTy,
2815                                  PTy(F64,
2816                                      PTy(F4,
2817                                          PTy(PTy(bTy,
2818                                                  PTy(bTy,PTy(bTy,bTy))),
2819                                              FTy 5))))))),qVar"state")),
2820               (Call
2821                  ("ConditionalCompareRegister@32",CTy"Data",
2822                   Var("v27",
2823                       PTy(F32,
2824                           PTy(bTy,
2825                               PTy(F4,
2826                                   PTy(PTy(bTy,PTy(bTy,PTy(bTy,bTy))),
2827                                       PTy(FTy 5,FTy 5))))))),
2828                Apply
2829                  (Call
2830                     ("dfn'ConditionalCompareRegister",ATy(qTy,qTy),
2831                      Var("v27",
2832                          PTy(F32,
2833                              PTy(bTy,
2834                                  PTy(F4,
2835                                      PTy(PTy(bTy,PTy(bTy,PTy(bTy,bTy))),
2836                                          PTy(FTy 5,FTy 5))))))),
2837                   qVar"state")),
2838               (Call
2839                  ("ConditionalCompareRegister@64",CTy"Data",
2840                   Var("v28",
2841                       PTy(F64,
2842                           PTy(bTy,
2843                               PTy(F4,
2844                                   PTy(PTy(bTy,PTy(bTy,PTy(bTy,bTy))),
2845                                       PTy(FTy 5,FTy 5))))))),
2846                Apply
2847                  (Call
2848                     ("dfn'ConditionalCompareRegister",ATy(qTy,qTy),
2849                      Var("v28",
2850                          PTy(F64,
2851                              PTy(bTy,
2852                                  PTy(F4,
2853                                      PTy(PTy(bTy,PTy(bTy,PTy(bTy,bTy))),
2854                                          PTy(FTy 5,FTy 5))))))),
2855                   qVar"state")),
2856               (Call
2857                  ("ConditionalSelect@32",CTy"Data",
2858                   Var("v29",
2859                       PTy(F32,
2860                           PTy(bTy,
2861                               PTy(bTy,PTy(F4,PTy(FTy 5,PTy(FTy 5,FTy 5)))))))),
2862                Apply
2863                  (Call
2864                     ("dfn'ConditionalSelect",ATy(qTy,qTy),
2865                      Var("v29",
2866                          PTy(F32,
2867                              PTy(bTy,
2868                                  PTy(bTy,
2869                                      PTy(F4,PTy(FTy 5,PTy(FTy 5,FTy 5)))))))),
2870                   qVar"state")),
2871               (Call
2872                  ("ConditionalSelect@64",CTy"Data",
2873                   Var("v30",
2874                       PTy(F64,
2875                           PTy(bTy,
2876                               PTy(bTy,PTy(F4,PTy(FTy 5,PTy(FTy 5,FTy 5)))))))),
2877                Apply
2878                  (Call
2879                     ("dfn'ConditionalSelect",ATy(qTy,qTy),
2880                      Var("v30",
2881                          PTy(F64,
2882                              PTy(bTy,
2883                                  PTy(bTy,
2884                                      PTy(F4,PTy(FTy 5,PTy(FTy 5,FTy 5)))))))),
2885                   qVar"state")),
2886               (Call
2887                  ("CountLeading@32",CTy"Data",
2888                   Var("v31",PTy(F32,PTy(bTy,PTy(FTy 5,FTy 5))))),
2889                Apply
2890                  (Call
2891                     ("dfn'CountLeading",ATy(qTy,qTy),
2892                      Var("v31",PTy(F32,PTy(bTy,PTy(FTy 5,FTy 5))))),
2893                   qVar"state")),
2894               (Call
2895                  ("CountLeading@64",CTy"Data",
2896                   Var("v32",PTy(F64,PTy(bTy,PTy(FTy 5,FTy 5))))),
2897                Apply
2898                  (Call
2899                     ("dfn'CountLeading",ATy(qTy,qTy),
2900                      Var("v32",PTy(F64,PTy(bTy,PTy(FTy 5,FTy 5))))),
2901                   qVar"state")),
2902               (Call
2903                  ("Division@32",CTy"Data",
2904                   Var("v33",PTy(F32,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
2905                Apply
2906                  (Call
2907                     ("dfn'Division",ATy(qTy,qTy),
2908                      Var("v33",
2909                          PTy(F32,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
2910                   qVar"state")),
2911               (Call
2912                  ("Division@64",CTy"Data",
2913                   Var("v34",PTy(F64,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
2914                Apply
2915                  (Call
2916                     ("dfn'Division",ATy(qTy,qTy),
2917                      Var("v34",
2918                          PTy(F64,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
2919                   qVar"state")),
2920               (Call
2921                  ("ExtractRegister@32",CTy"Data",
2922                   Var("v35",
2923                       PTy(F32,PTy(FTy 6,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
2924                Apply
2925                  (Call
2926                     ("dfn'ExtractRegister",ATy(qTy,qTy),
2927                      Var("v35",
2928                          PTy(F32,PTy(FTy 6,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
2929                   qVar"state")),
2930               (Call
2931                  ("ExtractRegister@64",CTy"Data",
2932                   Var("v36",
2933                       PTy(F64,PTy(FTy 6,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
2934                Apply
2935                  (Call
2936                     ("dfn'ExtractRegister",ATy(qTy,qTy),
2937                      Var("v36",
2938                          PTy(F64,PTy(FTy 6,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
2939                   qVar"state")),
2940               (Call
2941                  ("LogicalImmediate@32",CTy"Data",
2942                   Var("v37",
2943                       PTy(F32,
2944                           PTy(CTy"LogicalOp",
2945                               PTy(bTy,PTy(F32,PTy(FTy 5,FTy 5))))))),
2946                Apply
2947                  (Call
2948                     ("dfn'LogicalImmediate",ATy(qTy,qTy),
2949                      Var("v37",
2950                          PTy(F32,
2951                              PTy(CTy"LogicalOp",
2952                                  PTy(bTy,PTy(F32,PTy(FTy 5,FTy 5))))))),
2953                   qVar"state")),
2954               (Call
2955                  ("LogicalImmediate@64",CTy"Data",
2956                   Var("v38",
2957                       PTy(F64,
2958                           PTy(CTy"LogicalOp",
2959                               PTy(bTy,PTy(F64,PTy(FTy 5,FTy 5))))))),
2960                Apply
2961                  (Call
2962                     ("dfn'LogicalImmediate",ATy(qTy,qTy),
2963                      Var("v38",
2964                          PTy(F64,
2965                              PTy(CTy"LogicalOp",
2966                                  PTy(bTy,PTy(F64,PTy(FTy 5,FTy 5))))))),
2967                   qVar"state")),
2968               (Call
2969                  ("LogicalShiftedRegister@32",CTy"Data",
2970                   Var("v39",
2971                       PTy(F32,
2972                           PTy(CTy"LogicalOp",
2973                               PTy(bTy,
2974                                   PTy(bTy,
2975                                       PTy(CTy"ShiftType",
2976                                           PTy(nTy,
2977                                               PTy(FTy 5,PTy(FTy 5,FTy 5)))))))))),
2978                Apply
2979                  (Call
2980                     ("dfn'LogicalShiftedRegister",ATy(qTy,qTy),
2981                      Var("v39",
2982                          PTy(F32,
2983                              PTy(CTy"LogicalOp",
2984                                  PTy(bTy,
2985                                      PTy(bTy,
2986                                          PTy(CTy"ShiftType",
2987                                              PTy(nTy,
2988                                                  PTy(FTy 5,
2989                                                      PTy(FTy 5,FTy 5)))))))))),
2990                   qVar"state")),
2991               (Call
2992                  ("LogicalShiftedRegister@64",CTy"Data",
2993                   Var("v40",
2994                       PTy(F64,
2995                           PTy(CTy"LogicalOp",
2996                               PTy(bTy,
2997                                   PTy(bTy,
2998                                       PTy(CTy"ShiftType",
2999                                           PTy(nTy,
3000                                               PTy(FTy 5,PTy(FTy 5,FTy 5)))))))))),
3001                Apply
3002                  (Call
3003                     ("dfn'LogicalShiftedRegister",ATy(qTy,qTy),
3004                      Var("v40",
3005                          PTy(F64,
3006                              PTy(CTy"LogicalOp",
3007                                  PTy(bTy,
3008                                      PTy(bTy,
3009                                          PTy(CTy"ShiftType",
3010                                              PTy(nTy,
3011                                                  PTy(FTy 5,
3012                                                      PTy(FTy 5,FTy 5)))))))))),
3013                   qVar"state")),
3014               (Call
3015                  ("MoveWide@32",CTy"Data",
3016                   Var("v41",
3017                       PTy(F32,
3018                           PTy(CTy"MoveWideOp",PTy(FTy 2,PTy(F16,FTy 5)))))),
3019                Apply
3020                  (Call
3021                     ("dfn'MoveWide",ATy(qTy,qTy),
3022                      Var("v41",
3023                          PTy(F32,
3024                              PTy(CTy"MoveWideOp",
3025                                  PTy(FTy 2,PTy(F16,FTy 5)))))),
3026                   qVar"state")),
3027               (Call
3028                  ("MoveWide@64",CTy"Data",
3029                   Var("v42",
3030                       PTy(F64,
3031                           PTy(CTy"MoveWideOp",PTy(FTy 2,PTy(F16,FTy 5)))))),
3032                Apply
3033                  (Call
3034                     ("dfn'MoveWide",ATy(qTy,qTy),
3035                      Var("v42",
3036                          PTy(F64,
3037                              PTy(CTy"MoveWideOp",
3038                                  PTy(FTy 2,PTy(F16,FTy 5)))))),
3039                   qVar"state")),
3040               (Call
3041                  ("MultiplyAddSub@32",CTy"Data",
3042                   Var("v43",
3043                       PTy(F32,
3044                           PTy(bTy,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 5))))))),
3045                Apply
3046                  (Call
3047                     ("dfn'MultiplyAddSub",ATy(qTy,qTy),
3048                      Var("v43",
3049                          PTy(F32,
3050                              PTy(bTy,
3051                                  PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 5))))))),
3052                   qVar"state")),
3053               (Call
3054                  ("MultiplyAddSub@64",CTy"Data",
3055                   Var("v44",
3056                       PTy(F64,
3057                           PTy(bTy,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 5))))))),
3058                Apply
3059                  (Call
3060                     ("dfn'MultiplyAddSub",ATy(qTy,qTy),
3061                      Var("v44",
3062                          PTy(F64,
3063                              PTy(bTy,
3064                                  PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 5))))))),
3065                   qVar"state")),
3066               (Call
3067                  ("MultiplyAddSubLong",CTy"Data",
3068                   Var("v45",
3069                       PTy(bTy,
3070                           PTy(bTy,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 5))))))),
3071                Apply
3072                  (Call
3073                     ("dfn'MultiplyAddSubLong",ATy(qTy,qTy),
3074                      Var("v45",
3075                          PTy(bTy,
3076                              PTy(bTy,
3077                                  PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 5))))))),
3078                   qVar"state")),
3079               (Call
3080                  ("MultiplyHigh",CTy"Data",
3081                   Var("v46",PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))),
3082                Apply
3083                  (Call
3084                     ("dfn'MultiplyHigh",ATy(qTy,qTy),
3085                      Var("v46",PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))),
3086                   qVar"state")),
3087               (Call
3088                  ("Reverse@32",CTy"Data",
3089                   Var("v47",PTy(F32,PTy(CTy"RevOp",PTy(FTy 5,FTy 5))))),
3090                Apply
3091                  (Call
3092                     ("dfn'Reverse",ATy(qTy,qTy),
3093                      Var("v47",PTy(F32,PTy(CTy"RevOp",PTy(FTy 5,FTy 5))))),
3094                   qVar"state")),
3095               (Call
3096                  ("Reverse@64",CTy"Data",
3097                   Var("v48",PTy(F64,PTy(CTy"RevOp",PTy(FTy 5,FTy 5))))),
3098                Apply
3099                  (Call
3100                     ("dfn'Reverse",ATy(qTy,qTy),
3101                      Var("v48",PTy(F64,PTy(CTy"RevOp",PTy(FTy 5,FTy 5))))),
3102                   qVar"state")),
3103               (Call
3104                  ("Shift@32",CTy"Data",
3105                   Var("v49",
3106                       PTy(F32,
3107                           PTy(CTy"ShiftType",PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
3108                Apply
3109                  (Call
3110                     ("dfn'Shift",ATy(qTy,qTy),
3111                      Var("v49",
3112                          PTy(F32,
3113                              PTy(CTy"ShiftType",
3114                                  PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
3115                   qVar"state")),
3116               (Call
3117                  ("Shift@64",CTy"Data",
3118                   Var("v50",
3119                       PTy(F64,
3120                           PTy(CTy"ShiftType",PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
3121                Apply
3122                  (Call
3123                     ("dfn'Shift",ATy(qTy,qTy),
3124                      Var("v50",
3125                          PTy(F64,
3126                              PTy(CTy"ShiftType",
3127                                  PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
3128                   qVar"state"))])),
3129          (Call("Debug",CTy"instruction",Var("v51",CTy"Debug")),
3130           CS(Var("v51",CTy"Debug"),
3131              [(Const("DebugRestore",CTy"Debug"),
3132                Apply(Const("dfn'DebugRestore",ATy(qTy,qTy)),qVar"state")),
3133               (Call("Breakpoint",CTy"Debug",Var("v52",F16)),
3134                Apply
3135                  (Call("dfn'Breakpoint",ATy(qTy,qTy),Var("v52",F16)),
3136                   qVar"state")),
3137               (Call("DebugSwitch",CTy"Debug",Var("v53",FTy 2)),
3138                Apply
3139                  (Call("dfn'DebugSwitch",ATy(qTy,qTy),Var("v53",FTy 2)),
3140                   qVar"state")),
3141               (Call("Halt",CTy"Debug",Var("v54",F16)),
3142                Apply
3143                  (Call("dfn'Halt",ATy(qTy,qTy),Var("v54",F16)),
3144                   qVar"state"))])),
3145          (Call("LoadStore",CTy"instruction",Var("v55",CTy"LoadStore")),
3146           CS(Var("v55",CTy"LoadStore"),
3147              [(Call
3148                  ("LoadLiteral@32",CTy"LoadStore",
3149                   Var("v56",
3150                       PTy(F32,PTy(CTy"MemOp",PTy(bTy,PTy(F64,FTy 5)))))),
3151                Apply
3152                  (Call
3153                     ("dfn'LoadLiteral",ATy(qTy,qTy),
3154                      Var("v56",
3155                          PTy(F32,PTy(CTy"MemOp",PTy(bTy,PTy(F64,FTy 5)))))),
3156                   qVar"state")),
3157               (Call
3158                  ("LoadLiteral@64",CTy"LoadStore",
3159                   Var("v57",
3160                       PTy(F64,PTy(CTy"MemOp",PTy(bTy,PTy(F64,FTy 5)))))),
3161                Apply
3162                  (Call
3163                     ("dfn'LoadLiteral",ATy(qTy,qTy),
3164                      Var("v57",
3165                          PTy(F64,PTy(CTy"MemOp",PTy(bTy,PTy(F64,FTy 5)))))),
3166                   qVar"state")),
3167               (Call
3168                  ("LoadStoreAcquire@16",CTy"LoadStore",
3169                   Var("v58",
3170                       PTy(F16,
3171                           PTy(CTy"MemOp",
3172                               PTy(CTy"AccType",
3173                                   PTy(bTy,
3174                                       PTy(bTy,
3175                                           PTy(bTy,
3176                                               PTy(FTy 5,PTy(FTy 5,FTy 5)))))))))),
3177                Apply
3178                  (Call
3179                     ("dfn'LoadStoreAcquire",ATy(qTy,qTy),
3180                      Var("v58",
3181                          PTy(F16,
3182                              PTy(CTy"MemOp",
3183                                  PTy(CTy"AccType",
3184                                      PTy(bTy,
3185                                          PTy(bTy,
3186                                              PTy(bTy,
3187                                                  PTy(FTy 5,
3188                                                      PTy(FTy 5,FTy 5)))))))))),
3189                   qVar"state")),
3190               (Call
3191                  ("LoadStoreAcquire@32",CTy"LoadStore",
3192                   Var("v59",
3193                       PTy(F32,
3194                           PTy(CTy"MemOp",
3195                               PTy(CTy"AccType",
3196                                   PTy(bTy,
3197                                       PTy(bTy,
3198                                           PTy(bTy,
3199                                               PTy(FTy 5,PTy(FTy 5,FTy 5)))))))))),
3200                Apply
3201                  (Call
3202                     ("dfn'LoadStoreAcquire",ATy(qTy,qTy),
3203                      Var("v59",
3204                          PTy(F32,
3205                              PTy(CTy"MemOp",
3206                                  PTy(CTy"AccType",
3207                                      PTy(bTy,
3208                                          PTy(bTy,
3209                                              PTy(bTy,
3210                                                  PTy(FTy 5,
3211                                                      PTy(FTy 5,FTy 5)))))))))),
3212                   qVar"state")),
3213               (Call
3214                  ("LoadStoreAcquire@64",CTy"LoadStore",
3215                   Var("v60",
3216                       PTy(F64,
3217                           PTy(CTy"MemOp",
3218                               PTy(CTy"AccType",
3219                                   PTy(bTy,
3220                                       PTy(bTy,
3221                                           PTy(bTy,
3222                                               PTy(FTy 5,PTy(FTy 5,FTy 5)))))))))),
3223                Apply
3224                  (Call
3225                     ("dfn'LoadStoreAcquire",ATy(qTy,qTy),
3226                      Var("v60",
3227                          PTy(F64,
3228                              PTy(CTy"MemOp",
3229                                  PTy(CTy"AccType",
3230                                      PTy(bTy,
3231                                          PTy(bTy,
3232                                              PTy(bTy,
3233                                                  PTy(FTy 5,
3234                                                      PTy(FTy 5,FTy 5)))))))))),
3235                   qVar"state")),
3236               (Call
3237                  ("LoadStoreAcquire@8",CTy"LoadStore",
3238                   Var("v61",
3239                       PTy(F8,
3240                           PTy(CTy"MemOp",
3241                               PTy(CTy"AccType",
3242                                   PTy(bTy,
3243                                       PTy(bTy,
3244                                           PTy(bTy,
3245                                               PTy(FTy 5,PTy(FTy 5,FTy 5)))))))))),
3246                Apply
3247                  (Call
3248                     ("dfn'LoadStoreAcquire",ATy(qTy,qTy),
3249                      Var("v61",
3250                          PTy(F8,
3251                              PTy(CTy"MemOp",
3252                                  PTy(CTy"AccType",
3253                                      PTy(bTy,
3254                                          PTy(bTy,
3255                                              PTy(bTy,
3256                                                  PTy(FTy 5,
3257                                                      PTy(FTy 5,FTy 5)))))))))),
3258                   qVar"state")),
3259               (Call
3260                  ("LoadStoreAcquirePair@128",CTy"LoadStore",
3261                   Var("v62",
3262                       PTy(FTy 128,
3263                           PTy(CTy"MemOp",
3264                               PTy(CTy"AccType",
3265                                   PTy(bTy,
3266                                       PTy(bTy,
3267                                           PTy(FTy 5,
3268                                               PTy(FTy 5,PTy(FTy 5,FTy 5)))))))))),
3269                Apply
3270                  (Call
3271                     ("dfn'LoadStoreAcquirePair",ATy(qTy,qTy),
3272                      Var("v62",
3273                          PTy(FTy 128,
3274                              PTy(CTy"MemOp",
3275                                  PTy(CTy"AccType",
3276                                      PTy(bTy,
3277                                          PTy(bTy,
3278                                              PTy(FTy 5,
3279                                                  PTy(FTy 5,
3280                                                      PTy(FTy 5,FTy 5)))))))))),
3281                   qVar"state")),
3282               (Call
3283                  ("LoadStoreAcquirePair@64",CTy"LoadStore",
3284                   Var("v63",
3285                       PTy(F64,
3286                           PTy(CTy"MemOp",
3287                               PTy(CTy"AccType",
3288                                   PTy(bTy,
3289                                       PTy(bTy,
3290                                           PTy(FTy 5,
3291                                               PTy(FTy 5,PTy(FTy 5,FTy 5)))))))))),
3292                Apply
3293                  (Call
3294                     ("dfn'LoadStoreAcquirePair",ATy(qTy,qTy),
3295                      Var("v63",
3296                          PTy(F64,
3297                              PTy(CTy"MemOp",
3298                                  PTy(CTy"AccType",
3299                                      PTy(bTy,
3300                                          PTy(bTy,
3301                                              PTy(FTy 5,
3302                                                  PTy(FTy 5,
3303                                                      PTy(FTy 5,FTy 5)))))))))),
3304                   qVar"state")),
3305               (Call
3306                  ("LoadStoreImmediate@16",CTy"LoadStore",
3307                   Var("v64",
3308                       PTy(F16,
3309                           PTy(bTy,
3310                               PTy(CTy"MemOp",
3311                                   PTy(CTy"AccType",
3312                                       PTy(bTy,
3313                                           PTy(bTy,
3314                                               PTy(bTy,
3315                                                   PTy(bTy,
3316                                                       PTy(bTy,
3317                                                           PTy(bTy,
3318                                                               PTy(F64,
3319                                                                   PTy(FTy 5,
3320                                                                       FTy 5)))))))))))))),
3321                Apply
3322                  (Call
3323                     ("dfn'LoadStoreImmediate",ATy(qTy,qTy),
3324                      Var("v64",
3325                          PTy(F16,
3326                              PTy(bTy,
3327                                  PTy(CTy"MemOp",
3328                                      PTy(CTy"AccType",
3329                                          PTy(bTy,
3330                                              PTy(bTy,
3331                                                  PTy(bTy,
3332                                                      PTy(bTy,
3333                                                          PTy(bTy,
3334                                                              PTy(bTy,
3335                                                                  PTy(F64,
3336                                                                      PTy(FTy 5,
3337                                                                          FTy 5)))))))))))))),
3338                   qVar"state")),
3339               (Call
3340                  ("LoadStoreImmediate@32",CTy"LoadStore",
3341                   Var("v65",
3342                       PTy(F32,
3343                           PTy(bTy,
3344                               PTy(CTy"MemOp",
3345                                   PTy(CTy"AccType",
3346                                       PTy(bTy,
3347                                           PTy(bTy,
3348                                               PTy(bTy,
3349                                                   PTy(bTy,
3350                                                       PTy(bTy,
3351                                                           PTy(bTy,
3352                                                               PTy(F64,
3353                                                                   PTy(FTy 5,
3354                                                                       FTy 5)))))))))))))),
3355                Apply
3356                  (Call
3357                     ("dfn'LoadStoreImmediate",ATy(qTy,qTy),
3358                      Var("v65",
3359                          PTy(F32,
3360                              PTy(bTy,
3361                                  PTy(CTy"MemOp",
3362                                      PTy(CTy"AccType",
3363                                          PTy(bTy,
3364                                              PTy(bTy,
3365                                                  PTy(bTy,
3366                                                      PTy(bTy,
3367                                                          PTy(bTy,
3368                                                              PTy(bTy,
3369                                                                  PTy(F64,
3370                                                                      PTy(FTy 5,
3371                                                                          FTy 5)))))))))))))),
3372                   qVar"state")),
3373               (Call
3374                  ("LoadStoreImmediate@64",CTy"LoadStore",
3375                   Var("v66",
3376                       PTy(F64,
3377                           PTy(bTy,
3378                               PTy(CTy"MemOp",
3379                                   PTy(CTy"AccType",
3380                                       PTy(bTy,
3381                                           PTy(bTy,
3382                                               PTy(bTy,
3383                                                   PTy(bTy,
3384                                                       PTy(bTy,
3385                                                           PTy(bTy,
3386                                                               PTy(F64,
3387                                                                   PTy(FTy 5,
3388                                                                       FTy 5)))))))))))))),
3389                Apply
3390                  (Call
3391                     ("dfn'LoadStoreImmediate",ATy(qTy,qTy),
3392                      Var("v66",
3393                          PTy(F64,
3394                              PTy(bTy,
3395                                  PTy(CTy"MemOp",
3396                                      PTy(CTy"AccType",
3397                                          PTy(bTy,
3398                                              PTy(bTy,
3399                                                  PTy(bTy,
3400                                                      PTy(bTy,
3401                                                          PTy(bTy,
3402                                                              PTy(bTy,
3403                                                                  PTy(F64,
3404                                                                      PTy(FTy 5,
3405                                                                          FTy 5)))))))))))))),
3406                   qVar"state")),
3407               (Call
3408                  ("LoadStoreImmediate@8",CTy"LoadStore",
3409                   Var("v67",
3410                       PTy(F8,
3411                           PTy(bTy,
3412                               PTy(CTy"MemOp",
3413                                   PTy(CTy"AccType",
3414                                       PTy(bTy,
3415                                           PTy(bTy,
3416                                               PTy(bTy,
3417                                                   PTy(bTy,
3418                                                       PTy(bTy,
3419                                                           PTy(bTy,
3420                                                               PTy(F64,
3421                                                                   PTy(FTy 5,
3422                                                                       FTy 5)))))))))))))),
3423                Apply
3424                  (Call
3425                     ("dfn'LoadStoreImmediate",ATy(qTy,qTy),
3426                      Var("v67",
3427                          PTy(F8,
3428                              PTy(bTy,
3429                                  PTy(CTy"MemOp",
3430                                      PTy(CTy"AccType",
3431                                          PTy(bTy,
3432                                              PTy(bTy,
3433                                                  PTy(bTy,
3434                                                      PTy(bTy,
3435                                                          PTy(bTy,
3436                                                              PTy(bTy,
3437                                                                  PTy(F64,
3438                                                                      PTy(FTy 5,
3439                                                                          FTy 5)))))))))))))),
3440                   qVar"state")),
3441               (Call
3442                  ("LoadStorePair@32",CTy"LoadStore",
3443                   Var("v68",
3444                       PTy(F32,
3445                           PTy(CTy"MemOp",
3446                               PTy(CTy"AccType",
3447                                   PTy(bTy,
3448                                       PTy(bTy,
3449                                           PTy(bTy,
3450                                               PTy(bTy,
3451                                                   PTy(bTy,
3452                                                       PTy(F64,
3453                                                           PTy(FTy 5,
3454                                                               PTy(FTy 5,
3455                                                                   FTy 5))))))))))))),
3456                Apply
3457                  (Call
3458                     ("dfn'LoadStorePair",ATy(qTy,qTy),
3459                      Var("v68",
3460                          PTy(F32,
3461                              PTy(CTy"MemOp",
3462                                  PTy(CTy"AccType",
3463                                      PTy(bTy,
3464                                          PTy(bTy,
3465                                              PTy(bTy,
3466                                                  PTy(bTy,
3467                                                      PTy(bTy,
3468                                                          PTy(F64,
3469                                                              PTy(FTy 5,
3470                                                                  PTy(FTy 5,
3471                                                                      FTy 5))))))))))))),
3472                   qVar"state")),
3473               (Call
3474                  ("LoadStorePair@64",CTy"LoadStore",
3475                   Var("v69",
3476                       PTy(F64,
3477                           PTy(CTy"MemOp",
3478                               PTy(CTy"AccType",
3479                                   PTy(bTy,
3480                                       PTy(bTy,
3481                                           PTy(bTy,
3482                                               PTy(bTy,
3483                                                   PTy(bTy,
3484                                                       PTy(F64,
3485                                                           PTy(FTy 5,
3486                                                               PTy(FTy 5,
3487                                                                   FTy 5))))))))))))),
3488                Apply
3489                  (Call
3490                     ("dfn'LoadStorePair",ATy(qTy,qTy),
3491                      Var("v69",
3492                          PTy(F64,
3493                              PTy(CTy"MemOp",
3494                                  PTy(CTy"AccType",
3495                                      PTy(bTy,
3496                                          PTy(bTy,
3497                                              PTy(bTy,
3498                                                  PTy(bTy,
3499                                                      PTy(bTy,
3500                                                          PTy(F64,
3501                                                              PTy(FTy 5,
3502                                                                  PTy(FTy 5,
3503                                                                      FTy 5))))))))))))),
3504                   qVar"state")),
3505               (Call
3506                  ("LoadStoreRegister@16",CTy"LoadStore",
3507                   Var("v70",
3508                       PTy(F16,
3509                           PTy(bTy,
3510                               PTy(CTy"MemOp",
3511                                   PTy(bTy,
3512                                       PTy(FTy 5,
3513                                           PTy(CTy"ExtendType",
3514                                               PTy(nTy,PTy(FTy 5,FTy 5)))))))))),
3515                Apply
3516                  (Call
3517                     ("dfn'LoadStoreRegister",ATy(qTy,qTy),
3518                      Var("v70",
3519                          PTy(F16,
3520                              PTy(bTy,
3521                                  PTy(CTy"MemOp",
3522                                      PTy(bTy,
3523                                          PTy(FTy 5,
3524                                              PTy(CTy"ExtendType",
3525                                                  PTy(nTy,PTy(FTy 5,FTy 5)))))))))),
3526                   qVar"state")),
3527               (Call
3528                  ("LoadStoreRegister@32",CTy"LoadStore",
3529                   Var("v71",
3530                       PTy(F32,
3531                           PTy(bTy,
3532                               PTy(CTy"MemOp",
3533                                   PTy(bTy,
3534                                       PTy(FTy 5,
3535                                           PTy(CTy"ExtendType",
3536                                               PTy(nTy,PTy(FTy 5,FTy 5)))))))))),
3537                Apply
3538                  (Call
3539                     ("dfn'LoadStoreRegister",ATy(qTy,qTy),
3540                      Var("v71",
3541                          PTy(F32,
3542                              PTy(bTy,
3543                                  PTy(CTy"MemOp",
3544                                      PTy(bTy,
3545                                          PTy(FTy 5,
3546                                              PTy(CTy"ExtendType",
3547                                                  PTy(nTy,PTy(FTy 5,FTy 5)))))))))),
3548                   qVar"state")),
3549               (Call
3550                  ("LoadStoreRegister@64",CTy"LoadStore",
3551                   Var("v72",
3552                       PTy(F64,
3553                           PTy(bTy,
3554                               PTy(CTy"MemOp",
3555                                   PTy(bTy,
3556                                       PTy(FTy 5,
3557                                           PTy(CTy"ExtendType",
3558                                               PTy(nTy,PTy(FTy 5,FTy 5)))))))))),
3559                Apply
3560                  (Call
3561                     ("dfn'LoadStoreRegister",ATy(qTy,qTy),
3562                      Var("v72",
3563                          PTy(F64,
3564                              PTy(bTy,
3565                                  PTy(CTy"MemOp",
3566                                      PTy(bTy,
3567                                          PTy(FTy 5,
3568                                              PTy(CTy"ExtendType",
3569                                                  PTy(nTy,PTy(FTy 5,FTy 5)))))))))),
3570                   qVar"state")),
3571               (Call
3572                  ("LoadStoreRegister@8",CTy"LoadStore",
3573                   Var("v73",
3574                       PTy(F8,
3575                           PTy(bTy,
3576                               PTy(CTy"MemOp",
3577                                   PTy(bTy,
3578                                       PTy(FTy 5,
3579                                           PTy(CTy"ExtendType",
3580                                               PTy(nTy,PTy(FTy 5,FTy 5)))))))))),
3581                Apply
3582                  (Call
3583                     ("dfn'LoadStoreRegister",ATy(qTy,qTy),
3584                      Var("v73",
3585                          PTy(F8,
3586                              PTy(bTy,
3587                                  PTy(CTy"MemOp",
3588                                      PTy(bTy,
3589                                          PTy(FTy 5,
3590                                              PTy(CTy"ExtendType",
3591                                                  PTy(nTy,PTy(FTy 5,FTy 5)))))))))),
3592                   qVar"state"))])),
3593          (Call("System",CTy"instruction",Var("v74",CTy"System")),
3594           CS(Var("v74",CTy"System"),
3595              [(Const("ExceptionReturn",CTy"System"),
3596                Apply
3597                  (Const("dfn'ExceptionReturn",ATy(qTy,qTy)),qVar"state")),
3598               (Call("HypervisorCall",CTy"System",Var("v75",F16)),
3599                Apply
3600                  (Call("dfn'HypervisorCall",ATy(qTy,qTy),Var("v75",F16)),
3601                   qVar"state")),
3602               (Call
3603                  ("MoveImmediateProcState",CTy"System",
3604                   Var("v76",PTy(CTy"PSTATEField",F4))),
3605                Apply
3606                  (Call
3607                     ("dfn'MoveImmediateProcState",ATy(qTy,qTy),
3608                      Var("v76",PTy(CTy"PSTATEField",F4))),qVar"state")),
3609               (Call
3610                  ("MoveSystemRegister",CTy"System",
3611                   Var("v77",
3612                       PTy(bTy,
3613                           PTy(FTy 3,
3614                               PTy(FTy 3,PTy(FTy 3,PTy(F4,PTy(F4,FTy 5)))))))),
3615                Apply
3616                  (Call
3617                     ("dfn'MoveSystemRegister",ATy(qTy,qTy),
3618                      Var("v77",
3619                          PTy(bTy,
3620                              PTy(FTy 3,
3621                                  PTy(FTy 3,
3622                                      PTy(FTy 3,PTy(F4,PTy(F4,FTy 5)))))))),
3623                   qVar"state")),
3624               (Call("SecureMonitorCall",CTy"System",Var("v78",F16)),
3625                Apply
3626                  (Call
3627                     ("dfn'SecureMonitorCall",ATy(qTy,qTy),Var("v78",F16)),
3628                   qVar"state")),
3629               (Call("SupervisorCall",CTy"System",Var("v79",F16)),
3630                Apply
3631                  (Call("dfn'SupervisorCall",ATy(qTy,qTy),Var("v79",F16)),
3632                   qVar"state")),
3633               (Call
3634                  ("SystemInstruction",CTy"System",
3635                   Var("v80",
3636                       PTy(FTy 3,PTy(FTy 3,PTy(F4,PTy(F4,PTy(bTy,FTy 5))))))),
3637                Apply
3638                  (Call
3639                     ("dfn'SystemInstruction",ATy(qTy,qTy),
3640                      Var("v80",
3641                          PTy(FTy 3,
3642                              PTy(FTy 3,PTy(F4,PTy(F4,PTy(bTy,FTy 5))))))),
3643                   qVar"state"))]))])))
3644;
3645val DecodeLogicalOp_def = Def
3646  ("DecodeLogicalOp",Var("opc",FTy 2),
3647   CS(Var("opc",FTy 2),
3648      [(LW(0,2),TP[LC("LogicalOp_AND",CTy"LogicalOp"),LF]),
3649       (LW(1,2),TP[LC("LogicalOp_ORR",CTy"LogicalOp"),LF]),
3650       (LW(2,2),TP[LC("LogicalOp_EOR",CTy"LogicalOp"),LF]),
3651       (LW(3,2),TP[LC("LogicalOp_AND",CTy"LogicalOp"),LT])]))
3652;
3653val NoOperation_def = Def0
3654  ("NoOperation",
3655   Call("Hint",CTy"instruction",LC("SystemHintOp_NOP",CTy"SystemHintOp")))
3656;
3657val LoadStoreRegister_def = Def
3658  ("LoadStoreRegister",
3659   TP[Var("size",FTy 2),bVar"regsize_word",Var("memop",CTy"MemOp"),
3660      bVar"signed",Var("m",FTy 5),Var("extend_type",CTy"ExtendType"),
3661      nVar"shift",Var("n",FTy 5),Var("t",FTy 5)],
3662   CS(Var("size",FTy 2),
3663      [(LW(0,2),
3664        Call
3665          ("LoadStore",CTy"instruction",
3666           Call
3667             ("LoadStoreRegister@8",CTy"LoadStore",
3668              TP[LW(0,8),bVar"regsize_word",Var("memop",CTy"MemOp"),
3669                 bVar"signed",Var("m",FTy 5),
3670                 Var("extend_type",CTy"ExtendType"),nVar"shift",
3671                 Var("n",FTy 5),Var("t",FTy 5)]))),
3672       (LW(1,2),
3673        Call
3674          ("LoadStore",CTy"instruction",
3675           Call
3676             ("LoadStoreRegister@16",CTy"LoadStore",
3677              TP[LW(1,16),bVar"regsize_word",Var("memop",CTy"MemOp"),
3678                 bVar"signed",Var("m",FTy 5),
3679                 Var("extend_type",CTy"ExtendType"),nVar"shift",
3680                 Var("n",FTy 5),Var("t",FTy 5)]))),
3681       (LW(2,2),
3682        Call
3683          ("LoadStore",CTy"instruction",
3684           Call
3685             ("LoadStoreRegister@32",CTy"LoadStore",
3686              TP[LW(2,32),bVar"regsize_word",Var("memop",CTy"MemOp"),
3687                 bVar"signed",Var("m",FTy 5),
3688                 Var("extend_type",CTy"ExtendType"),nVar"shift",
3689                 Var("n",FTy 5),Var("t",FTy 5)]))),
3690       (LW(3,2),
3691        Call
3692          ("LoadStore",CTy"instruction",
3693           Call
3694             ("LoadStoreRegister@64",CTy"LoadStore",
3695              TP[LW(3,64),bVar"regsize_word",Var("memop",CTy"MemOp"),
3696                 bVar"signed",Var("m",FTy 5),
3697                 Var("extend_type",CTy"ExtendType"),nVar"shift",
3698                 Var("n",FTy 5),Var("t",FTy 5)])))]))
3699;
3700val LoadStoreImmediateN_def = Def
3701  ("LoadStoreImmediateN",
3702   TP[Var("size",FTy 2),bVar"regsize_word",Var("memop",CTy"MemOp"),
3703      Var("acctype",CTy"AccType"),bVar"signed",bVar"wb_unknown",
3704      bVar"rt_unknown",bVar"wback",bVar"postindex",bVar"unsigned_offset",
3705      Var("offset",F64),Var("n",FTy 5),Var("t",FTy 5)],
3706   CS(Var("size",FTy 2),
3707      [(LW(0,2),
3708        Call
3709          ("LoadStore",CTy"instruction",
3710           Call
3711             ("LoadStoreImmediate@8",CTy"LoadStore",
3712              TP[LW(0,8),bVar"regsize_word",Var("memop",CTy"MemOp"),
3713                 Var("acctype",CTy"AccType"),bVar"signed",
3714                 bVar"wb_unknown",bVar"rt_unknown",bVar"wback",
3715                 bVar"postindex",bVar"unsigned_offset",Var("offset",F64),
3716                 Var("n",FTy 5),Var("t",FTy 5)]))),
3717       (LW(1,2),
3718        Call
3719          ("LoadStore",CTy"instruction",
3720           Call
3721             ("LoadStoreImmediate@16",CTy"LoadStore",
3722              TP[LW(1,16),bVar"regsize_word",Var("memop",CTy"MemOp"),
3723                 Var("acctype",CTy"AccType"),bVar"signed",
3724                 bVar"wb_unknown",bVar"rt_unknown",bVar"wback",
3725                 bVar"postindex",bVar"unsigned_offset",Var("offset",F64),
3726                 Var("n",FTy 5),Var("t",FTy 5)]))),
3727       (LW(2,2),
3728        Call
3729          ("LoadStore",CTy"instruction",
3730           Call
3731             ("LoadStoreImmediate@32",CTy"LoadStore",
3732              TP[LW(2,32),bVar"regsize_word",Var("memop",CTy"MemOp"),
3733                 Var("acctype",CTy"AccType"),bVar"signed",
3734                 bVar"wb_unknown",bVar"rt_unknown",bVar"wback",
3735                 bVar"postindex",bVar"unsigned_offset",Var("offset",F64),
3736                 Var("n",FTy 5),Var("t",FTy 5)]))),
3737       (LW(3,2),
3738        Call
3739          ("LoadStore",CTy"instruction",
3740           Call
3741             ("LoadStoreImmediate@64",CTy"LoadStore",
3742              TP[LW(3,64),bVar"regsize_word",Var("memop",CTy"MemOp"),
3743                 Var("acctype",CTy"AccType"),bVar"signed",
3744                 bVar"wb_unknown",bVar"rt_unknown",bVar"wback",
3745                 bVar"postindex",bVar"unsigned_offset",Var("offset",F64),
3746                 Var("n",FTy 5),Var("t",FTy 5)])))]))
3747;
3748val LoadStoreImmediate_def = Def
3749  ("LoadStoreImmediate",
3750   TP[Var("size",FTy 2),Var("opc",FTy 2),Var("acctype",CTy"AccType"),
3751      bVar"wback",bVar"postindex",bVar"unsigned_offset",Var("offset",F64),
3752      Var("Rn",FTy 5),Var("Rt",FTy 5)],
3753   Let(TP[Var("memop",CTy"MemOp"),bVar"regsize_word",bVar"signed"],
3754       ITB([(Mop(Not,Bop(Bit,Var("opc",FTy 2),LN 1)),
3755             TP[ITE(Bop(Bit,Var("opc",FTy 2),LN 0),
3756                    LC("MemOp_LOAD",CTy"MemOp"),
3757                    LC("MemOp_STORE",CTy"MemOp")),
3758                Mop(Not,EQ(Var("size",FTy 2),LW(3,2))),LF]),
3759            (EQ(Var("size",FTy 2),LW(3,2)),
3760             TP[LC("MemOp_PREFETCH",CTy"MemOp"),LX bTy,LX bTy])],
3761           TP[LC("MemOp_LOAD",CTy"MemOp"),Bop(Bit,Var("opc",FTy 2),LN 0),
3762              LT]),
3763       ITB([(Bop(And,
3764                 EQ(Var("memop",CTy"MemOp"),LC("MemOp_LOAD",CTy"MemOp")),
3765                 Bop(And,bVar"wback",
3766                     Bop(And,EQ(Var("Rn",FTy 5),Var("Rt",FTy 5)),
3767                         Mop(Not,EQ(Var("Rn",FTy 5),LW(31,5)))))),
3768             CS(Apply(LX(ATy(sTy,FTy 2)),LS"LoadImmediate unpredictable"),
3769                [(LW(0,2),
3770                  Call
3771                    ("LoadStoreImmediateN",CTy"instruction",
3772                     TP[Var("size",FTy 2),bVar"regsize_word",
3773                        Var("memop",CTy"MemOp"),
3774                        Var("acctype",CTy"AccType"),bVar"signed",LF,LF,LF,
3775                        bVar"postindex",bVar"unsigned_offset",
3776                        Var("offset",F64),Var("Rn",FTy 5),Var("Rt",FTy 5)])),
3777                 (LW(1,2),
3778                  Call
3779                    ("LoadStoreImmediateN",CTy"instruction",
3780                     TP[Var("size",FTy 2),bVar"regsize_word",
3781                        Var("memop",CTy"MemOp"),
3782                        Var("acctype",CTy"AccType"),bVar"signed",LT,LF,
3783                        bVar"wback",bVar"postindex",bVar"unsigned_offset",
3784                        Var("offset",F64),Var("Rn",FTy 5),Var("Rt",FTy 5)])),
3785                 (LW(2,2),Const("Unallocated",CTy"instruction")),
3786                 (LW(3,2),Const("NoOperation",CTy"instruction"))])),
3787            (Bop(And,
3788                 EQ(Var("memop",CTy"MemOp"),LC("MemOp_STORE",CTy"MemOp")),
3789                 Bop(And,bVar"wback",
3790                     Bop(And,EQ(Var("Rn",FTy 5),Var("Rt",FTy 5)),
3791                         Mop(Not,EQ(Var("Rn",FTy 5),LW(31,5)))))),
3792             CS(Apply(LX(ATy(sTy,FTy 2)),LS"StoreImmediate unpredictable"),
3793                [(LW(0,2),
3794                  Call
3795                    ("LoadStoreImmediateN",CTy"instruction",
3796                     TP[Var("size",FTy 2),bVar"regsize_word",
3797                        Var("memop",CTy"MemOp"),
3798                        Var("acctype",CTy"AccType"),bVar"signed",LF,LF,
3799                        bVar"wback",bVar"postindex",bVar"unsigned_offset",
3800                        Var("offset",F64),Var("Rn",FTy 5),Var("Rt",FTy 5)])),
3801                 (LW(1,2),
3802                  Call
3803                    ("LoadStoreImmediateN",CTy"instruction",
3804                     TP[Var("size",FTy 2),bVar"regsize_word",
3805                        Var("memop",CTy"MemOp"),
3806                        Var("acctype",CTy"AccType"),bVar"signed",LF,LT,
3807                        bVar"wback",bVar"postindex",bVar"unsigned_offset",
3808                        Var("offset",F64),Var("Rn",FTy 5),Var("Rt",FTy 5)])),
3809                 (LW(2,2),Const("Unallocated",CTy"instruction")),
3810                 (LW(3,2),Const("NoOperation",CTy"instruction"))]))],
3811           Call
3812             ("LoadStoreImmediateN",CTy"instruction",
3813              TP[Var("size",FTy 2),bVar"regsize_word",
3814                 Var("memop",CTy"MemOp"),Var("acctype",CTy"AccType"),
3815                 bVar"signed",LF,LF,bVar"wback",bVar"postindex",
3816                 bVar"unsigned_offset",Var("offset",F64),Var("Rn",FTy 5),
3817                 Var("Rt",FTy 5)]))))
3818;
3819val LoadStorePairN_def = Def
3820  ("LoadStorePairN",
3821   TP[Var("sf",F1),Var("memop",CTy"MemOp"),Var("acctype",CTy"AccType"),
3822      bVar"signed",bVar"wb_unknown",bVar"rt_unknown",bVar"wback",
3823      bVar"postindex",Var("offset",F64),Var("n",FTy 5),Var("t",FTy 5),
3824      Var("t2",FTy 5)],
3825   ITE(EQ(Var("sf",F1),LW(1,1)),
3826       Call
3827         ("LoadStore",CTy"instruction",
3828          Call
3829            ("LoadStorePair@64",CTy"LoadStore",
3830             TP[LW(1,64),Var("memop",CTy"MemOp"),
3831                Var("acctype",CTy"AccType"),bVar"signed",bVar"wb_unknown",
3832                bVar"rt_unknown",bVar"wback",bVar"postindex",
3833                Var("offset",F64),Var("n",FTy 5),Var("t",FTy 5),
3834                Var("t2",FTy 5)])),
3835       Call
3836         ("LoadStore",CTy"instruction",
3837          Call
3838            ("LoadStorePair@32",CTy"LoadStore",
3839             TP[LW(0,32),Var("memop",CTy"MemOp"),
3840                Var("acctype",CTy"AccType"),bVar"signed",bVar"wb_unknown",
3841                bVar"rt_unknown",bVar"wback",bVar"postindex",
3842                Var("offset",F64),Var("n",FTy 5),Var("t",FTy 5),
3843                Var("t2",FTy 5)]))))
3844;
3845val LoadStorePair_def = Def
3846  ("LoadStorePair",
3847   TP[Var("sf",F1),Var("memop",CTy"MemOp"),Var("acctype",CTy"AccType"),
3848      bVar"signed",bVar"wback",bVar"postindex",Var("offset",F64),
3849      Var("Rn",FTy 5),Var("Rt",FTy 5),Var("Rt2",FTy 5)],
3850   ITB([(Bop(And,EQ(Var("memop",CTy"MemOp"),LC("MemOp_LOAD",CTy"MemOp")),
3851             Bop(And,bVar"wback",
3852                 Bop(And,
3853                     Bop(Or,EQ(Var("Rn",FTy 5),Var("Rt",FTy 5)),
3854                         EQ(Var("Rn",FTy 5),Var("Rt2",FTy 5))),
3855                     Mop(Not,EQ(Var("Rn",FTy 5),LW(31,5)))))),
3856         CS(Apply(LX(ATy(sTy,FTy 2)),LS"LoadPair unpredictable"),
3857            [(LW(0,2),
3858              Call
3859                ("LoadStorePairN",CTy"instruction",
3860                 TP[Var("sf",F1),Var("memop",CTy"MemOp"),
3861                    Var("acctype",CTy"AccType"),bVar"signed",LF,LF,LF,
3862                    bVar"postindex",Var("offset",F64),Var("Rn",FTy 5),
3863                    Var("Rt",FTy 5),Var("Rt2",FTy 5)])),
3864             (LW(1,2),
3865              Call
3866                ("LoadStorePairN",CTy"instruction",
3867                 TP[Var("sf",F1),Var("memop",CTy"MemOp"),
3868                    Var("acctype",CTy"AccType"),bVar"signed",LT,LF,
3869                    bVar"wback",bVar"postindex",Var("offset",F64),
3870                    Var("Rn",FTy 5),Var("Rt",FTy 5),Var("Rt2",FTy 5)])),
3871             (LW(2,2),Const("Unallocated",CTy"instruction")),
3872             (LW(3,2),Const("NoOperation",CTy"instruction"))])),
3873        (Bop(And,EQ(Var("memop",CTy"MemOp"),LC("MemOp_STORE",CTy"MemOp")),
3874             Bop(And,bVar"wback",
3875                 Bop(And,
3876                     Bop(Or,EQ(Var("Rn",FTy 5),Var("Rt",FTy 5)),
3877                         EQ(Var("Rn",FTy 5),Var("Rt2",FTy 5))),
3878                     Mop(Not,EQ(Var("Rn",FTy 5),LW(31,5)))))),
3879         CS(Apply(LX(ATy(sTy,FTy 2)),LS"StorePair unpredictable"),
3880            [(LW(0,2),
3881              Call
3882                ("LoadStorePairN",CTy"instruction",
3883                 TP[Var("sf",F1),Var("memop",CTy"MemOp"),
3884                    Var("acctype",CTy"AccType"),bVar"signed",LF,LF,
3885                    bVar"wback",bVar"postindex",Var("offset",F64),
3886                    Var("Rn",FTy 5),Var("Rt",FTy 5),Var("Rt2",FTy 5)])),
3887             (LW(1,2),
3888              Call
3889                ("LoadStorePairN",CTy"instruction",
3890                 TP[Var("sf",F1),Var("memop",CTy"MemOp"),
3891                    Var("acctype",CTy"AccType"),bVar"signed",LF,LT,
3892                    bVar"wback",bVar"postindex",Var("offset",F64),
3893                    Var("Rn",FTy 5),Var("Rt",FTy 5),Var("Rt2",FTy 5)])),
3894             (LW(2,2),Const("Unallocated",CTy"instruction")),
3895             (LW(3,2),Const("NoOperation",CTy"instruction"))])),
3896        (Bop(And,EQ(Var("memop",CTy"MemOp"),LC("MemOp_LOAD",CTy"MemOp")),
3897             EQ(Var("Rt",FTy 5),Var("Rt2",FTy 5))),
3898         CS(Apply(LX(ATy(sTy,FTy 2)),LS"LoadPair Rt = Rt2 unpredictable"),
3899            [(LW(0,2),
3900              Call
3901                ("LoadStorePairN",CTy"instruction",
3902                 TP[Var("sf",F1),Var("memop",CTy"MemOp"),
3903                    Var("acctype",CTy"AccType"),bVar"signed",LF,LT,
3904                    bVar"wback",bVar"postindex",Var("offset",F64),
3905                    Var("Rn",FTy 5),Var("Rt",FTy 5),Var("Rt2",FTy 5)])),
3906             (LW(1,2),Const("Unallocated",CTy"instruction")),
3907             (AVar(FTy 2),Const("NoOperation",CTy"instruction"))]))],
3908       Call
3909         ("LoadStorePairN",CTy"instruction",
3910          TP[Var("sf",F1),Var("memop",CTy"MemOp"),
3911             Var("acctype",CTy"AccType"),bVar"signed",LF,LF,bVar"wback",
3912             bVar"postindex",Var("offset",F64),Var("Rn",FTy 5),
3913             Var("Rt",FTy 5),Var("Rt2",FTy 5)])))
3914;
3915val LoadStoreAcquireN_def = Def
3916  ("LoadStoreAcquireN",
3917   TP[Var("size",FTy 2),Var("memop",CTy"MemOp"),
3918      Var("acctype",CTy"AccType"),bVar"excl",bVar"pair",bVar"rn_unknown",
3919      bVar"rt_unknown",Var("s",FTy 5),Var("n",FTy 5),Var("t",FTy 5),
3920      Var("t2",FTy 5)],
3921   ITE(bVar"pair",
3922       ITE(EQ(Var("size",FTy 2),LW(2,2)),
3923           Call
3924             ("LoadStore",CTy"instruction",
3925              Call
3926                ("LoadStoreAcquirePair@64",CTy"LoadStore",
3927                 TP[LW(2,64),Var("memop",CTy"MemOp"),
3928                    Var("acctype",CTy"AccType"),bVar"rn_unknown",
3929                    bVar"rt_unknown",Var("s",FTy 5),Var("n",FTy 5),
3930                    Var("t",FTy 5),Var("t2",FTy 5)])),
3931           Call
3932             ("LoadStore",CTy"instruction",
3933              Call
3934                ("LoadStoreAcquirePair@128",CTy"LoadStore",
3935                 TP[LW(3,128),Var("memop",CTy"MemOp"),
3936                    Var("acctype",CTy"AccType"),bVar"rn_unknown",
3937                    bVar"rt_unknown",Var("s",FTy 5),Var("n",FTy 5),
3938                    Var("t",FTy 5),Var("t2",FTy 5)]))),
3939       CS(Var("size",FTy 2),
3940          [(LW(0,2),
3941            Call
3942              ("LoadStore",CTy"instruction",
3943               Call
3944                 ("LoadStoreAcquire@8",CTy"LoadStore",
3945                  TP[LW(0,8),Var("memop",CTy"MemOp"),
3946                     Var("acctype",CTy"AccType"),bVar"excl",
3947                     bVar"rn_unknown",bVar"rt_unknown",Var("s",FTy 5),
3948                     Var("n",FTy 5),Var("t",FTy 5)]))),
3949           (LW(1,2),
3950            Call
3951              ("LoadStore",CTy"instruction",
3952               Call
3953                 ("LoadStoreAcquire@16",CTy"LoadStore",
3954                  TP[LW(1,16),Var("memop",CTy"MemOp"),
3955                     Var("acctype",CTy"AccType"),bVar"excl",
3956                     bVar"rn_unknown",bVar"rt_unknown",Var("s",FTy 5),
3957                     Var("n",FTy 5),Var("t",FTy 5)]))),
3958           (LW(2,2),
3959            Call
3960              ("LoadStore",CTy"instruction",
3961               Call
3962                 ("LoadStoreAcquire@32",CTy"LoadStore",
3963                  TP[LW(2,32),Var("memop",CTy"MemOp"),
3964                     Var("acctype",CTy"AccType"),bVar"excl",
3965                     bVar"rn_unknown",bVar"rt_unknown",Var("s",FTy 5),
3966                     Var("n",FTy 5),Var("t",FTy 5)]))),
3967           (LW(3,2),
3968            Call
3969              ("LoadStore",CTy"instruction",
3970               Call
3971                 ("LoadStoreAcquire@64",CTy"LoadStore",
3972                  TP[LW(3,64),Var("memop",CTy"MemOp"),
3973                     Var("acctype",CTy"AccType"),bVar"excl",
3974                     bVar"rn_unknown",bVar"rt_unknown",Var("s",FTy 5),
3975                     Var("n",FTy 5),Var("t",FTy 5)])))])))
3976;
3977val LoadStoreAcquire_def = Def
3978  ("LoadStoreAcquire",
3979   TP[Var("size",FTy 2),Var("memop",CTy"MemOp"),
3980      Var("acctype",CTy"AccType"),bVar"excl",bVar"pair",Var("Rs",FTy 5),
3981      Var("Rn",FTy 5),Var("Rt",FTy 5),Var("Rt2",FTy 5)],
3982   Let(TP[bVar"rt_unknown",bVar"rn_unknown",
3983          Var("ast",OTy(CTy"instruction"))],
3984       ITE(Bop(And,
3985               EQ(Var("memop",CTy"MemOp"),LC("MemOp_LOAD",CTy"MemOp")),
3986               Bop(And,bVar"pair",EQ(Var("Rt",FTy 5),Var("Rt2",FTy 5)))),
3987           CS(Apply(LX(ATy(sTy,FTy 2)),LS"LoadAcquire unpredictable"),
3988              [(LW(0,2),TP[LT,LF,LO(CTy"instruction")]),
3989               (LW(1,2),
3990                TP[LF,LF,Mop(Some,Const("Unallocated",CTy"instruction"))]),
3991               (AVar(FTy 2),
3992                TP[LF,LF,Mop(Some,Const("NoOperation",CTy"instruction"))])]),
3993           TP[LF,LF,LO(CTy"instruction")]),
3994       Let(TP[bVar"rt_unknown",bVar"rn_unknown",
3995              Var("ast",OTy(CTy"instruction"))],
3996           ITE(Bop(Or,
3997                   Bop(And,
3998                       EQ(Var("memop",CTy"MemOp"),
3999                          LC("MemOp_STORE",CTy"MemOp")),
4000                       Bop(And,bVar"excl",
4001                           EQ(Var("Rs",FTy 5),Var("Rt",FTy 5)))),
4002                   Bop(And,bVar"pair",EQ(Var("Rs",FTy 5),Var("Rt2",FTy 5)))),
4003               CS(Apply
4004                    (LX(ATy(sTy,FTy 2)),
4005                     LS"StoreAcquire Rs = Rt unpredictable"),
4006                  [(LW(0,2),
4007                    TP[LT,bVar"rn_unknown",
4008                       Var("ast",OTy(CTy"instruction"))]),
4009                   (LW(1,2),
4010                    TP[bVar"rt_unknown",bVar"rn_unknown",
4011                       Var("ast",OTy(CTy"instruction"))]),
4012                   (LW(2,2),
4013                    TP[bVar"rt_unknown",bVar"rn_unknown",
4014                       Mop(Some,Const("Unallocated",CTy"instruction"))]),
4015                   (LW(3,2),
4016                    TP[bVar"rt_unknown",bVar"rn_unknown",
4017                       Mop(Some,Const("NoOperation",CTy"instruction"))])]),
4018               TP[bVar"rt_unknown",bVar"rn_unknown",
4019                  Var("ast",OTy(CTy"instruction"))]),
4020           Let(TP[bVar"rt_unknown",bVar"rn_unknown",
4021                  Var("ast",OTy(CTy"instruction"))],
4022               ITE(Bop(And,
4023                       EQ(Var("memop",CTy"MemOp"),
4024                          LC("MemOp_STORE",CTy"MemOp")),
4025                       Bop(And,bVar"excl",
4026                           Bop(And,EQ(Var("Rs",FTy 5),Var("Rn",FTy 5)),
4027                               Mop(Not,EQ(Var("Rn",FTy 5),LW(31,5)))))),
4028                   CS(Apply
4029                        (LX(ATy(sTy,FTy 2)),
4030                         LS"StoreAcquire Rs = Rn unpredictable"),
4031                      [(LW(0,2),
4032                        TP[bVar"rt_unknown",LT,
4033                           Var("ast",OTy(CTy"instruction"))]),
4034                       (LW(1,2),
4035                        TP[bVar"rt_unknown",bVar"rn_unknown",
4036                           Var("ast",OTy(CTy"instruction"))]),
4037                       (LW(2,2),
4038                        TP[bVar"rt_unknown",bVar"rn_unknown",
4039                           Mop(Some,Const("Unallocated",CTy"instruction"))]),
4040                       (LW(3,2),
4041                        TP[bVar"rt_unknown",bVar"rn_unknown",
4042                           Mop(Some,Const("NoOperation",CTy"instruction"))])]),
4043                   TP[bVar"rt_unknown",bVar"rn_unknown",
4044                      Var("ast",OTy(CTy"instruction"))]),
4045               CS(Var("ast",OTy(CTy"instruction")),
4046                  [(Mop(Some,Var("i",CTy"instruction")),
4047                    Var("i",CTy"instruction")),
4048                   (LO(CTy"instruction"),
4049                    Call
4050                      ("LoadStoreAcquireN",CTy"instruction",
4051                       TP[Var("size",FTy 2),Var("memop",CTy"MemOp"),
4052                          Var("acctype",CTy"AccType"),bVar"excl",
4053                          bVar"pair",bVar"rn_unknown",bVar"rt_unknown",
4054                          Var("Rs",FTy 5),Var("Rn",FTy 5),Var("Rt",FTy 5),
4055                          Var("Rt2",FTy 5)]))])))))
4056;
4057val Decode_def = Def
4058  ("Decode",Var("w",F32),
4059   Let(TP[bVar"b'31",bVar"b'30",bVar"b'29",bVar"b'28",bVar"b'27",
4060          bVar"b'26",bVar"b'25",bVar"b'24",bVar"b'23",bVar"b'22",
4061          bVar"b'21",bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
4062          bVar"b'16",bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12",
4063          bVar"b'11",bVar"b'10",bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
4064          bVar"b'5",bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",bVar"b'0"],
4065       BL(32,Var("w",F32)),
4066       ITB([(Bop(And,bVar"b'28",
4067                 Bop(And,Mop(Not,bVar"b'27"),
4068                     Bop(And,Mop(Not,bVar"b'26"),
4069                         Bop(And,Mop(Not,bVar"b'25"),Mop(Not,bVar"b'24"))))),
4070             Let(Var("immhi",FTy 19),
4071                 Mop(Cast(FTy 19),
4072                     LL[bVar"b'23",bVar"b'22",bVar"b'21",bVar"b'20",
4073                        bVar"b'19",bVar"b'18",bVar"b'17",bVar"b'16",
4074                        bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12",
4075                        bVar"b'11",bVar"b'10",bVar"b'9",bVar"b'8",
4076                        bVar"b'7",bVar"b'6",bVar"b'5"]),
4077                 Let(Var("immlo",FTy 2),
4078                     Mop(Cast(FTy 2),LL[bVar"b'30",bVar"b'29"]),
4079                     Let(bVar"page",
4080                         Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'31"])),
4081                         Call
4082                           ("Address",CTy"instruction",
4083                            TP[bVar"page",
4084                               ITE(bVar"page",
4085                                   Mop(SE F64,
4086                                       CC[Var("immhi",FTy 19),
4087                                          Var("immlo",FTy 2),LW(0,12)]),
4088                                   Mop(SE F64,
4089                                       CC[Var("immhi",FTy 19),
4090                                          Var("immlo",FTy 2)])),
4091                               Mop(Cast(FTy 5),
4092                                   LL[bVar"b'4",bVar"b'3",bVar"b'2",
4093                                      bVar"b'1",bVar"b'0"])]))))),
4094            (Bop(And,Mop(Not,bVar"b'28"),
4095                 Bop(And,bVar"b'27",
4096                     Bop(And,Mop(Not,bVar"b'26"),
4097                         Bop(And,bVar"b'25",
4098                             Bop(And,bVar"b'24",
4099                                 Bop(And,bVar"b'23",
4100                                     Bop(And,bVar"b'22",
4101                                         Mop(Not,bVar"b'21")))))))),
4102             Const("Reserved",CTy"instruction")),
4103            (Bop(And,Mop(Not,bVar"b'31"),
4104                 Bop(And,Mop(Not,bVar"b'28"),
4105                     Bop(And,bVar"b'27",
4106                         Bop(And,Mop(Not,bVar"b'26"),
4107                             Bop(And,bVar"b'25",
4108                                 Bop(And,bVar"b'24",Mop(Not,bVar"b'21"))))))),
4109             Let(Var("imm6",FTy 6),
4110                 Mop(Cast(FTy 6),
4111                     LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12",
4112                        bVar"b'11",bVar"b'10"]),
4113                 ITE(Bop(Bit,Var("imm6",FTy 6),LN 5),
4114                     Const("Reserved",CTy"instruction"),
4115                     Call
4116                       ("Data",CTy"instruction",
4117                        Call
4118                          ("AddSubShiftedRegister@32",CTy"Data",
4119                           TP[LW(0,32),
4120                              Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'30"])),
4121                              Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'29"])),
4122                              Call
4123                                ("DecodeShift",CTy"ShiftType",
4124                                 Mop(Cast(FTy 2),LL[bVar"b'23",bVar"b'22"])),
4125                              Mop(Cast(FTy 5),
4126                                  LL[bVar"b'20",bVar"b'19",bVar"b'18",
4127                                     bVar"b'17",bVar"b'16"]),
4128                              Var("imm6",FTy 6),
4129                              Mop(Cast(FTy 5),
4130                                  LL[bVar"b'9",bVar"b'8",bVar"b'7",
4131                                     bVar"b'6",bVar"b'5"]),
4132                              Mop(Cast(FTy 5),
4133                                  LL[bVar"b'4",bVar"b'3",bVar"b'2",
4134                                     bVar"b'1",bVar"b'0"])]))))),
4135            (Bop(And,bVar"b'31",
4136                 Bop(And,Mop(Not,bVar"b'28"),
4137                     Bop(And,bVar"b'27",
4138                         Bop(And,Mop(Not,bVar"b'26"),
4139                             Bop(And,bVar"b'25",
4140                                 Bop(And,bVar"b'24",Mop(Not,bVar"b'21"))))))),
4141             Call
4142               ("Data",CTy"instruction",
4143                Call
4144                  ("AddSubShiftedRegister@64",CTy"Data",
4145                   TP[LW(1,64),Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'30"])),
4146                      Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'29"])),
4147                      Call
4148                        ("DecodeShift",CTy"ShiftType",
4149                         Mop(Cast(FTy 2),LL[bVar"b'23",bVar"b'22"])),
4150                      Mop(Cast(FTy 5),
4151                          LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
4152                             bVar"b'16"]),
4153                      Mop(Cast(FTy 6),
4154                          LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12",
4155                             bVar"b'11",bVar"b'10"]),
4156                      Mop(Cast(FTy 5),
4157                          LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
4158                             bVar"b'5"]),
4159                      Mop(Cast(FTy 5),
4160                          LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
4161                             bVar"b'0"])]))),
4162            (Bop(And,Mop(Not,bVar"b'31"),
4163                 Bop(And,Mop(Not,bVar"b'28"),
4164                     Bop(And,bVar"b'27",
4165                         Bop(And,Mop(Not,bVar"b'26"),
4166                             Bop(And,bVar"b'25",
4167                                 Bop(And,bVar"b'24",
4168                                     Bop(And,Mop(Not,bVar"b'23"),
4169                                         Bop(And,Mop(Not,bVar"b'22"),
4170                                             bVar"b'21")))))))),
4171             Let(Var("imm3",FTy 3),
4172                 Mop(Cast(FTy 3),LL[bVar"b'12",bVar"b'11",bVar"b'10"]),
4173                 ITE(Bop(Ugt,Var("imm3",FTy 3),LW(4,3)),
4174                     Const("Reserved",CTy"instruction"),
4175                     Call
4176                       ("Data",CTy"instruction",
4177                        Call
4178                          ("AddSubExtendRegister@32",CTy"Data",
4179                           TP[LW(0,32),
4180                              Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'30"])),
4181                              Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'29"])),
4182                              Mop(Cast(FTy 5),
4183                                  LL[bVar"b'20",bVar"b'19",bVar"b'18",
4184                                     bVar"b'17",bVar"b'16"]),
4185                              Call
4186                                ("DecodeRegExtend",CTy"ExtendType",
4187                                 Mop(Cast(FTy 3),
4188                                     LL[bVar"b'15",bVar"b'14",bVar"b'13"])),
4189                              Var("imm3",FTy 3),
4190                              Mop(Cast(FTy 5),
4191                                  LL[bVar"b'9",bVar"b'8",bVar"b'7",
4192                                     bVar"b'6",bVar"b'5"]),
4193                              Mop(Cast(FTy 5),
4194                                  LL[bVar"b'4",bVar"b'3",bVar"b'2",
4195                                     bVar"b'1",bVar"b'0"])]))))),
4196            (Bop(And,bVar"b'31",
4197                 Bop(And,Mop(Not,bVar"b'28"),
4198                     Bop(And,bVar"b'27",
4199                         Bop(And,Mop(Not,bVar"b'26"),
4200                             Bop(And,bVar"b'25",
4201                                 Bop(And,bVar"b'24",
4202                                     Bop(And,Mop(Not,bVar"b'23"),
4203                                         Bop(And,Mop(Not,bVar"b'22"),
4204                                             bVar"b'21")))))))),
4205             Let(Var("imm3",FTy 3),
4206                 Mop(Cast(FTy 3),LL[bVar"b'12",bVar"b'11",bVar"b'10"]),
4207                 ITE(Bop(Ugt,Var("imm3",FTy 3),LW(4,3)),
4208                     Const("Reserved",CTy"instruction"),
4209                     Call
4210                       ("Data",CTy"instruction",
4211                        Call
4212                          ("AddSubExtendRegister@64",CTy"Data",
4213                           TP[LW(1,64),
4214                              Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'30"])),
4215                              Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'29"])),
4216                              Mop(Cast(FTy 5),
4217                                  LL[bVar"b'20",bVar"b'19",bVar"b'18",
4218                                     bVar"b'17",bVar"b'16"]),
4219                              Call
4220                                ("DecodeRegExtend",CTy"ExtendType",
4221                                 Mop(Cast(FTy 3),
4222                                     LL[bVar"b'15",bVar"b'14",bVar"b'13"])),
4223                              Var("imm3",FTy 3),
4224                              Mop(Cast(FTy 5),
4225                                  LL[bVar"b'9",bVar"b'8",bVar"b'7",
4226                                     bVar"b'6",bVar"b'5"]),
4227                              Mop(Cast(FTy 5),
4228                                  LL[bVar"b'4",bVar"b'3",bVar"b'2",
4229                                     bVar"b'1",bVar"b'0"])]))))),
4230            (Bop(And,bVar"b'28",
4231                 Bop(And,Mop(Not,bVar"b'27"),
4232                     Bop(And,Mop(Not,bVar"b'26"),
4233                         Bop(And,Mop(Not,bVar"b'25"),
4234                             Bop(And,bVar"b'24",bVar"b'23"))))),
4235             Const("Reserved",CTy"instruction")),
4236            (Bop(And,Mop(Not,bVar"b'31"),
4237                 Bop(And,bVar"b'28",
4238                     Bop(And,Mop(Not,bVar"b'27"),
4239                         Bop(And,Mop(Not,bVar"b'26"),
4240                             Bop(And,Mop(Not,bVar"b'25"),bVar"b'24"))))),
4241             Let(Var("imm12",FTy 12),
4242                 Mop(Cast(FTy 12),
4243                     LL[bVar"b'21",bVar"b'20",bVar"b'19",bVar"b'18",
4244                        bVar"b'17",bVar"b'16",bVar"b'15",bVar"b'14",
4245                        bVar"b'13",bVar"b'12",bVar"b'11",bVar"b'10"]),
4246                 Call
4247                   ("Data",CTy"instruction",
4248                    Call
4249                      ("AddSubImmediate@32",CTy"Data",
4250                       TP[LW(0,32),
4251                          Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'30"])),
4252                          Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'29"])),
4253                          ITE(EQ(Mop(Cast(FTy 2),LL[bVar"b'23",bVar"b'22"]),
4254                                 LW(0,2)),
4255                              Mop(Cast F32,Var("imm12",FTy 12)),
4256                              Bop(Lsl,Mop(Cast F32,Var("imm12",FTy 12)),
4257                                  LN 12)),
4258                          Mop(Cast(FTy 5),
4259                              LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
4260                                 bVar"b'5"]),
4261                          Mop(Cast(FTy 5),
4262                              LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
4263                                 bVar"b'0"])])))),
4264            (Bop(And,bVar"b'31",
4265                 Bop(And,bVar"b'28",
4266                     Bop(And,Mop(Not,bVar"b'27"),
4267                         Bop(And,Mop(Not,bVar"b'26"),
4268                             Bop(And,Mop(Not,bVar"b'25"),bVar"b'24"))))),
4269             Let(Var("imm12",FTy 12),
4270                 Mop(Cast(FTy 12),
4271                     LL[bVar"b'21",bVar"b'20",bVar"b'19",bVar"b'18",
4272                        bVar"b'17",bVar"b'16",bVar"b'15",bVar"b'14",
4273                        bVar"b'13",bVar"b'12",bVar"b'11",bVar"b'10"]),
4274                 Call
4275                   ("Data",CTy"instruction",
4276                    Call
4277                      ("AddSubImmediate@64",CTy"Data",
4278                       TP[LW(1,64),
4279                          Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'30"])),
4280                          Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'29"])),
4281                          ITE(EQ(Mop(Cast(FTy 2),LL[bVar"b'23",bVar"b'22"]),
4282                                 LW(0,2)),
4283                              Mop(Cast F64,Var("imm12",FTy 12)),
4284                              Bop(Lsl,Mop(Cast F64,Var("imm12",FTy 12)),
4285                                  LN 12)),
4286                          Mop(Cast(FTy 5),
4287                              LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
4288                                 bVar"b'5"]),
4289                          Mop(Cast(FTy 5),
4290                              LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
4291                                 bVar"b'0"])])))),
4292            (Bop(And,Mop(Not,bVar"b'31"),
4293                 Bop(And,bVar"b'28",
4294                     Bop(And,bVar"b'27",
4295                         Bop(And,Mop(Not,bVar"b'26"),
4296                             Bop(And,bVar"b'25",
4297                                 Bop(And,Mop(Not,bVar"b'24"),
4298                                     Bop(And,Mop(Not,bVar"b'23"),
4299                                         Bop(And,Mop(Not,bVar"b'22"),
4300                                             Bop(And,Mop(Not,bVar"b'21"),
4301                                                 Bop(And,
4302                                                     Mop(Not,bVar"b'15"),
4303                                                     Bop(And,
4304                                                         Mop(Not,
4305                                                             bVar"b'14"),
4306                                                         Bop(And,
4307                                                             Mop(Not,
4308                                                                 bVar"b'13"),
4309                                                             Bop(And,
4310                                                                 Mop(Not,
4311                                                                     bVar"b'12"),
4312                                                                 Bop(And,
4313                                                                     Mop(Not,
4314                                                                         bVar"b'11"),
4315                                                                     Mop(Not,
4316                                                                         bVar"b'10"))))))))))))))),
4317             Call
4318               ("Data",CTy"instruction",
4319                Call
4320                  ("AddSubCarry@32",CTy"Data",
4321                   TP[LW(0,32),Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'30"])),
4322                      Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'29"])),
4323                      Mop(Cast(FTy 5),
4324                          LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
4325                             bVar"b'16"]),
4326                      Mop(Cast(FTy 5),
4327                          LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
4328                             bVar"b'5"]),
4329                      Mop(Cast(FTy 5),
4330                          LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
4331                             bVar"b'0"])]))),
4332            (Bop(And,bVar"b'31",
4333                 Bop(And,bVar"b'28",
4334                     Bop(And,bVar"b'27",
4335                         Bop(And,Mop(Not,bVar"b'26"),
4336                             Bop(And,bVar"b'25",
4337                                 Bop(And,Mop(Not,bVar"b'24"),
4338                                     Bop(And,Mop(Not,bVar"b'23"),
4339                                         Bop(And,Mop(Not,bVar"b'22"),
4340                                             Bop(And,Mop(Not,bVar"b'21"),
4341                                                 Bop(And,
4342                                                     Mop(Not,bVar"b'15"),
4343                                                     Bop(And,
4344                                                         Mop(Not,
4345                                                             bVar"b'14"),
4346                                                         Bop(And,
4347                                                             Mop(Not,
4348                                                                 bVar"b'13"),
4349                                                             Bop(And,
4350                                                                 Mop(Not,
4351                                                                     bVar"b'12"),
4352                                                                 Bop(And,
4353                                                                     Mop(Not,
4354                                                                         bVar"b'11"),
4355                                                                     Mop(Not,
4356                                                                         bVar"b'10"))))))))))))))),
4357             Call
4358               ("Data",CTy"instruction",
4359                Call
4360                  ("AddSubCarry@64",CTy"Data",
4361                   TP[LW(1,64),Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'30"])),
4362                      Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'29"])),
4363                      Mop(Cast(FTy 5),
4364                          LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
4365                             bVar"b'16"]),
4366                      Mop(Cast(FTy 5),
4367                          LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
4368                             bVar"b'5"]),
4369                      Mop(Cast(FTy 5),
4370                          LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
4371                             bVar"b'0"])]))),
4372            (Bop(And,Mop(Not,bVar"b'31"),
4373                 Bop(And,Mop(Not,bVar"b'28"),
4374                     Bop(And,bVar"b'27",
4375                         Bop(And,Mop(Not,bVar"b'26"),
4376                             Bop(And,bVar"b'25",Mop(Not,bVar"b'24")))))),
4377             Let(Var("imm6",FTy 6),
4378                 Mop(Cast(FTy 6),
4379                     LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12",
4380                        bVar"b'11",bVar"b'10"]),
4381                 ITE(Bop(Bit,Var("imm6",FTy 6),LN 5),
4382                     Const("Reserved",CTy"instruction"),
4383                     Let(TP[Var("opc",CTy"LogicalOp"),bVar"setflags"],
4384                         Call
4385                           ("DecodeLogicalOp",PTy(CTy"LogicalOp",bTy),
4386                            Mop(Cast(FTy 2),LL[bVar"b'30",bVar"b'29"])),
4387                         Call
4388                           ("Data",CTy"instruction",
4389                            Call
4390                              ("LogicalShiftedRegister@32",CTy"Data",
4391                               TP[LW(0,32),Var("opc",CTy"LogicalOp"),
4392                                  EQ(Mop(Cast F1,LL[bVar"b'21"]),LW(1,1)),
4393                                  bVar"setflags",
4394                                  Call
4395                                    ("DecodeShift",CTy"ShiftType",
4396                                     Mop(Cast(FTy 2),
4397                                         LL[bVar"b'23",bVar"b'22"])),
4398                                  Mop(Cast nTy,Var("imm6",FTy 6)),
4399                                  Mop(Cast(FTy 5),
4400                                      LL[bVar"b'20",bVar"b'19",bVar"b'18",
4401                                         bVar"b'17",bVar"b'16"]),
4402                                  Mop(Cast(FTy 5),
4403                                      LL[bVar"b'9",bVar"b'8",bVar"b'7",
4404                                         bVar"b'6",bVar"b'5"]),
4405                                  Mop(Cast(FTy 5),
4406                                      LL[bVar"b'4",bVar"b'3",bVar"b'2",
4407                                         bVar"b'1",bVar"b'0"])])))))),
4408            (Bop(And,bVar"b'31",
4409                 Bop(And,Mop(Not,bVar"b'28"),
4410                     Bop(And,bVar"b'27",
4411                         Bop(And,Mop(Not,bVar"b'26"),
4412                             Bop(And,bVar"b'25",Mop(Not,bVar"b'24")))))),
4413             Let(TP[Var("opc",CTy"LogicalOp"),bVar"setflags"],
4414                 Call
4415                   ("DecodeLogicalOp",PTy(CTy"LogicalOp",bTy),
4416                    Mop(Cast(FTy 2),LL[bVar"b'30",bVar"b'29"])),
4417                 Call
4418                   ("Data",CTy"instruction",
4419                    Call
4420                      ("LogicalShiftedRegister@64",CTy"Data",
4421                       TP[LW(1,64),Var("opc",CTy"LogicalOp"),
4422                          EQ(Mop(Cast F1,LL[bVar"b'21"]),LW(1,1)),
4423                          bVar"setflags",
4424                          Call
4425                            ("DecodeShift",CTy"ShiftType",
4426                             Mop(Cast(FTy 2),LL[bVar"b'23",bVar"b'22"])),
4427                          Mop(Cast nTy,
4428                              Mop(Cast(FTy 6),
4429                                  LL[bVar"b'15",bVar"b'14",bVar"b'13",
4430                                     bVar"b'12",bVar"b'11",bVar"b'10"])),
4431                          Mop(Cast(FTy 5),
4432                              LL[bVar"b'20",bVar"b'19",bVar"b'18",
4433                                 bVar"b'17",bVar"b'16"]),
4434                          Mop(Cast(FTy 5),
4435                              LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
4436                                 bVar"b'5"]),
4437                          Mop(Cast(FTy 5),
4438                              LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
4439                                 bVar"b'0"])])))),
4440            (Bop(And,Mop(Not,bVar"b'31"),
4441                 Bop(And,bVar"b'28",
4442                     Bop(And,Mop(Not,bVar"b'27"),
4443                         Bop(And,Mop(Not,bVar"b'26"),
4444                             Bop(And,bVar"b'25",
4445                                 Bop(And,Mop(Not,bVar"b'24"),
4446                                     Bop(And,Mop(Not,bVar"b'23"),
4447                                         bVar"b'22"))))))),
4448             Const("Reserved",CTy"instruction")),
4449            (Bop(And,Mop(Not,bVar"b'31"),
4450                 Bop(And,bVar"b'28",
4451                     Bop(And,Mop(Not,bVar"b'27"),
4452                         Bop(And,Mop(Not,bVar"b'26"),
4453                             Bop(And,bVar"b'25",
4454                                 Bop(And,Mop(Not,bVar"b'24"),
4455                                     Mop(Not,bVar"b'23"))))))),
4456             CS(Call
4457                  ("DecodeBitMasks",OTy(PTy(F32,F32)),
4458                   TP[Mop(Cast F1,LL[bVar"b'22"]),
4459                      Mop(Cast(FTy 6),
4460                          LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12",
4461                             bVar"b'11",bVar"b'10"]),
4462                      Mop(Cast(FTy 6),
4463                          LL[bVar"b'21",bVar"b'20",bVar"b'19",bVar"b'18",
4464                             bVar"b'17",bVar"b'16"]),LT]),
4465                [(Mop(Some,TP[Var("imm",F32),AVar F32]),
4466                  Let(TP[Var("opc",CTy"LogicalOp"),bVar"setflags"],
4467                      Call
4468                        ("DecodeLogicalOp",PTy(CTy"LogicalOp",bTy),
4469                         Mop(Cast(FTy 2),LL[bVar"b'30",bVar"b'29"])),
4470                      Call
4471                        ("Data",CTy"instruction",
4472                         Call
4473                           ("LogicalImmediate@32",CTy"Data",
4474                            TP[LW(0,32),Var("opc",CTy"LogicalOp"),
4475                               bVar"setflags",Var("imm",F32),
4476                               Mop(Cast(FTy 5),
4477                                   LL[bVar"b'9",bVar"b'8",bVar"b'7",
4478                                      bVar"b'6",bVar"b'5"]),
4479                               Mop(Cast(FTy 5),
4480                                   LL[bVar"b'4",bVar"b'3",bVar"b'2",
4481                                      bVar"b'1",bVar"b'0"])])))),
4482                 (LO(PTy(F32,F32)),Const("Reserved",CTy"instruction"))])),
4483            (Bop(And,bVar"b'31",
4484                 Bop(And,bVar"b'28",
4485                     Bop(And,Mop(Not,bVar"b'27"),
4486                         Bop(And,Mop(Not,bVar"b'26"),
4487                             Bop(And,bVar"b'25",
4488                                 Bop(And,Mop(Not,bVar"b'24"),
4489                                     Mop(Not,bVar"b'23"))))))),
4490             CS(Call
4491                  ("DecodeBitMasks",OTy(PTy(F64,F64)),
4492                   TP[Mop(Cast F1,LL[bVar"b'22"]),
4493                      Mop(Cast(FTy 6),
4494                          LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12",
4495                             bVar"b'11",bVar"b'10"]),
4496                      Mop(Cast(FTy 6),
4497                          LL[bVar"b'21",bVar"b'20",bVar"b'19",bVar"b'18",
4498                             bVar"b'17",bVar"b'16"]),LT]),
4499                [(Mop(Some,TP[Var("imm",F64),AVar F64]),
4500                  Let(TP[Var("opc",CTy"LogicalOp"),bVar"setflags"],
4501                      Call
4502                        ("DecodeLogicalOp",PTy(CTy"LogicalOp",bTy),
4503                         Mop(Cast(FTy 2),LL[bVar"b'30",bVar"b'29"])),
4504                      Call
4505                        ("Data",CTy"instruction",
4506                         Call
4507                           ("LogicalImmediate@64",CTy"Data",
4508                            TP[LW(1,64),Var("opc",CTy"LogicalOp"),
4509                               bVar"setflags",Var("imm",F64),
4510                               Mop(Cast(FTy 5),
4511                                   LL[bVar"b'9",bVar"b'8",bVar"b'7",
4512                                      bVar"b'6",bVar"b'5"]),
4513                               Mop(Cast(FTy 5),
4514                                   LL[bVar"b'4",bVar"b'3",bVar"b'2",
4515                                      bVar"b'1",bVar"b'0"])])))),
4516                 (LO(PTy(F64,F64)),Const("Reserved",CTy"instruction"))])),
4517            (Bop(And,Mop(Not,bVar"b'31"),
4518                 Bop(And,Mop(Not,bVar"b'30"),
4519                     Bop(And,Mop(Not,bVar"b'29"),
4520                         Bop(And,bVar"b'28",
4521                             Bop(And,bVar"b'27",
4522                                 Bop(And,Mop(Not,bVar"b'26"),
4523                                     Bop(And,bVar"b'25",
4524                                         Bop(And,Mop(Not,bVar"b'24"),
4525                                             Bop(And,bVar"b'23",
4526                                                 Bop(And,bVar"b'22",
4527                                                     Bop(And,
4528                                                         Mop(Not,
4529                                                             bVar"b'21"),
4530                                                         Bop(And,
4531                                                             Mop(Not,
4532                                                                 bVar"b'15"),
4533                                                             Bop(And,
4534                                                                 Mop(Not,
4535                                                                     bVar"b'14"),
4536                                                                 Bop(And,
4537                                                                     bVar"b'13",
4538                                                                     Mop(Not,
4539                                                                         bVar"b'12"))))))))))))))),
4540             Call
4541               ("Data",CTy"instruction",
4542                Call
4543                  ("Shift@32",CTy"Data",
4544                   TP[LW(0,32),
4545                      Call
4546                        ("DecodeShift",CTy"ShiftType",
4547                         Mop(Cast(FTy 2),LL[bVar"b'11",bVar"b'10"])),
4548                      Mop(Cast(FTy 5),
4549                          LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
4550                             bVar"b'16"]),
4551                      Mop(Cast(FTy 5),
4552                          LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
4553                             bVar"b'5"]),
4554                      Mop(Cast(FTy 5),
4555                          LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
4556                             bVar"b'0"])]))),
4557            (Bop(And,bVar"b'31",
4558                 Bop(And,Mop(Not,bVar"b'30"),
4559                     Bop(And,Mop(Not,bVar"b'29"),
4560                         Bop(And,bVar"b'28",
4561                             Bop(And,bVar"b'27",
4562                                 Bop(And,Mop(Not,bVar"b'26"),
4563                                     Bop(And,bVar"b'25",
4564                                         Bop(And,Mop(Not,bVar"b'24"),
4565                                             Bop(And,bVar"b'23",
4566                                                 Bop(And,bVar"b'22",
4567                                                     Bop(And,
4568                                                         Mop(Not,
4569                                                             bVar"b'21"),
4570                                                         Bop(And,
4571                                                             Mop(Not,
4572                                                                 bVar"b'15"),
4573                                                             Bop(And,
4574                                                                 Mop(Not,
4575                                                                     bVar"b'14"),
4576                                                                 Bop(And,
4577                                                                     bVar"b'13",
4578                                                                     Mop(Not,
4579                                                                         bVar"b'12"))))))))))))))),
4580             Call
4581               ("Data",CTy"instruction",
4582                Call
4583                  ("Shift@64",CTy"Data",
4584                   TP[LW(1,64),
4585                      Call
4586                        ("DecodeShift",CTy"ShiftType",
4587                         Mop(Cast(FTy 2),LL[bVar"b'11",bVar"b'10"])),
4588                      Mop(Cast(FTy 5),
4589                          LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
4590                             bVar"b'16"]),
4591                      Mop(Cast(FTy 5),
4592                          LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
4593                             bVar"b'5"]),
4594                      Mop(Cast(FTy 5),
4595                          LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
4596                             bVar"b'0"])]))),
4597            (Bop(And,Mop(Not,bVar"b'31"),
4598                 Bop(And,bVar"b'28",
4599                     Bop(And,Mop(Not,bVar"b'27"),
4600                         Bop(And,Mop(Not,bVar"b'26"),
4601                             Bop(And,bVar"b'25",
4602                                 Bop(And,Mop(Not,bVar"b'24"),
4603                                     Bop(And,bVar"b'23",bVar"b'22"))))))),
4604             Const("Unallocated",CTy"instruction")),
4605            (Bop(And,Mop(Not,bVar"b'30"),
4606                 Bop(And,bVar"b'29",
4607                     Bop(And,bVar"b'28",
4608                         Bop(And,Mop(Not,bVar"b'27"),
4609                             Bop(And,Mop(Not,bVar"b'26"),
4610                                 Bop(And,bVar"b'25",
4611                                     Bop(And,Mop(Not,bVar"b'24"),
4612                                         bVar"b'23"))))))),
4613             Const("Unallocated",CTy"instruction")),
4614            (Bop(And,bVar"b'28",
4615                 Bop(And,Mop(Not,bVar"b'27"),
4616                     Bop(And,Mop(Not,bVar"b'26"),
4617                         Bop(And,bVar"b'25",
4618                             Bop(And,Mop(Not,bVar"b'24"),bVar"b'23"))))),
4619             Let(Var("Rd",FTy 5),
4620                 Mop(Cast(FTy 5),
4621                     LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",bVar"b'0"]),
4622                 Let(Var("imm16",F16),
4623                     Mop(Cast F16,
4624                         LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
4625                            bVar"b'16",bVar"b'15",bVar"b'14",bVar"b'13",
4626                            bVar"b'12",bVar"b'11",bVar"b'10",bVar"b'9",
4627                            bVar"b'8",bVar"b'7",bVar"b'6",bVar"b'5"]),
4628                     Let(Var("hw",FTy 2),
4629                         Mop(Cast(FTy 2),LL[bVar"b'22",bVar"b'21"]),
4630                         Let(Var("opcode",CTy"MoveWideOp"),
4631                             CS(Mop(Cast(FTy 2),LL[bVar"b'30",bVar"b'29"]),
4632                                [(LW(0,2),
4633                                  LC("MoveWideOp_N",CTy"MoveWideOp")),
4634                                 (LW(2,2),
4635                                  LC("MoveWideOp_Z",CTy"MoveWideOp")),
4636                                 (LW(3,2),
4637                                  LC("MoveWideOp_K",CTy"MoveWideOp")),
4638                                 (LW(1,2),LX(CTy"MoveWideOp"))]),
4639                             ITE(EQ(Mop(Cast F1,LL[bVar"b'31"]),LW(1,1)),
4640                                 Call
4641                                   ("Data",CTy"instruction",
4642                                    Call
4643                                      ("MoveWide@64",CTy"Data",
4644                                       TP[LW(1,64),
4645                                          Var("opcode",CTy"MoveWideOp"),
4646                                          Var("hw",FTy 2),
4647                                          Var("imm16",F16),Var("Rd",FTy 5)])),
4648                                 Call
4649                                   ("Data",CTy"instruction",
4650                                    Call
4651                                      ("MoveWide@32",CTy"Data",
4652                                       TP[LW(0,32),
4653                                          Var("opcode",CTy"MoveWideOp"),
4654                                          Var("hw",FTy 2),
4655                                          Var("imm16",F16),Var("Rd",FTy 5)])))))))),
4656            (Bop(And,bVar"b'30",
4657                 Bop(And,bVar"b'29",
4658                     Bop(And,bVar"b'28",
4659                         Bop(And,Mop(Not,bVar"b'27"),
4660                             Bop(And,Mop(Not,bVar"b'26"),
4661                                 Bop(And,bVar"b'25",
4662                                     Bop(And,bVar"b'24",
4663                                         Mop(Not,bVar"b'23")))))))),
4664             Const("Unallocated",CTy"instruction")),
4665            (Bop(And,Mop(Not,bVar"b'31"),
4666                 Bop(And,bVar"b'28",
4667                     Bop(And,Mop(Not,bVar"b'27"),
4668                         Bop(And,Mop(Not,bVar"b'26"),
4669                             Bop(And,bVar"b'25",
4670                                 Bop(And,bVar"b'24",Mop(Not,bVar"b'23"))))))),
4671             Let(Var("imms",FTy 6),
4672                 Mop(Cast(FTy 6),
4673                     LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12",
4674                        bVar"b'11",bVar"b'10"]),
4675                 Let(Var("immr",FTy 6),
4676                     Mop(Cast(FTy 6),
4677                         LL[bVar"b'21",bVar"b'20",bVar"b'19",bVar"b'18",
4678                            bVar"b'17",bVar"b'16"]),
4679                     Let(Var("N",F1),Mop(Cast F1,LL[bVar"b'22"]),
4680                         ITE(Bop(Or,EQ(Var("N",F1),LW(1,1)),
4681                                 Bop(Or,Bop(Bit,Var("immr",FTy 6),LN 5),
4682                                     Bop(Bit,Var("imms",FTy 6),LN 5))),
4683                             Const("Reserved",CTy"instruction"),
4684                             Let(TP[bVar"inzero",bVar"extend"],
4685                                 CS(Mop(Cast(FTy 2),
4686                                        LL[bVar"b'30",bVar"b'29"]),
4687                                    [(LW(0,2),TP[LT,LT]),
4688                                     (LW(1,2),TP[LF,LF]),
4689                                     (LW(2,2),TP[LT,LF]),
4690                                     (AVar(FTy 2),LX(PTy(bTy,bTy)))]),
4691                                 CS(Call
4692                                      ("DecodeBitMasks",OTy(PTy(F32,F32)),
4693                                       TP[Var("N",F1),Var("imms",FTy 6),
4694                                          Var("immr",FTy 6),LF]),
4695                                    [(Mop(Some,
4696                                          TP[Var("wmask",F32),
4697                                             Var("tmask",F32)]),
4698                                      Call
4699                                        ("Data",CTy"instruction",
4700                                         Call
4701                                           ("BitfieldMove@32",CTy"Data",
4702                                            TP[LW(0,32),bVar"inzero",
4703                                               bVar"extend",
4704                                               Var("wmask",F32),
4705                                               Var("tmask",F32),
4706                                               Mop(Cast nTy,
4707                                                   Var("immr",FTy 6)),
4708                                               Mop(Cast nTy,
4709                                                   Var("imms",FTy 6)),
4710                                               Mop(Cast(FTy 5),
4711                                                   LL[bVar"b'9",bVar"b'8",
4712                                                      bVar"b'7",bVar"b'6",
4713                                                      bVar"b'5"]),
4714                                               Mop(Cast(FTy 5),
4715                                                   LL[bVar"b'4",bVar"b'3",
4716                                                      bVar"b'2",bVar"b'1",
4717                                                      bVar"b'0"])]))),
4718                                     (LO(PTy(F32,F32)),
4719                                      Const("Reserved",CTy"instruction"))]))))))),
4720            (Bop(And,bVar"b'31",
4721                 Bop(And,bVar"b'28",
4722                     Bop(And,Mop(Not,bVar"b'27"),
4723                         Bop(And,Mop(Not,bVar"b'26"),
4724                             Bop(And,bVar"b'25",
4725                                 Bop(And,bVar"b'24",Mop(Not,bVar"b'23"))))))),
4726             Let(Var("imms",FTy 6),
4727                 Mop(Cast(FTy 6),
4728                     LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12",
4729                        bVar"b'11",bVar"b'10"]),
4730                 Let(Var("immr",FTy 6),
4731                     Mop(Cast(FTy 6),
4732                         LL[bVar"b'21",bVar"b'20",bVar"b'19",bVar"b'18",
4733                            bVar"b'17",bVar"b'16"]),
4734                     Let(Var("N",F1),Mop(Cast F1,LL[bVar"b'22"]),
4735                         ITE(EQ(Var("N",F1),LW(0,1)),
4736                             Const("Reserved",CTy"instruction"),
4737                             Let(TP[bVar"inzero",bVar"extend"],
4738                                 CS(Mop(Cast(FTy 2),
4739                                        LL[bVar"b'30",bVar"b'29"]),
4740                                    [(LW(0,2),TP[LT,LT]),
4741                                     (LW(1,2),TP[LF,LF]),
4742                                     (LW(2,2),TP[LT,LF]),
4743                                     (AVar(FTy 2),LX(PTy(bTy,bTy)))]),
4744                                 CS(Call
4745                                      ("DecodeBitMasks",OTy(PTy(F64,F64)),
4746                                       TP[Var("N",F1),Var("imms",FTy 6),
4747                                          Var("immr",FTy 6),LF]),
4748                                    [(Mop(Some,
4749                                          TP[Var("wmask",F64),
4750                                             Var("tmask",F64)]),
4751                                      Call
4752                                        ("Data",CTy"instruction",
4753                                         Call
4754                                           ("BitfieldMove@64",CTy"Data",
4755                                            TP[LW(1,64),bVar"inzero",
4756                                               bVar"extend",
4757                                               Var("wmask",F64),
4758                                               Var("tmask",F64),
4759                                               Mop(Cast nTy,
4760                                                   Var("immr",FTy 6)),
4761                                               Mop(Cast nTy,
4762                                                   Var("imms",FTy 6)),
4763                                               Mop(Cast(FTy 5),
4764                                                   LL[bVar"b'9",bVar"b'8",
4765                                                      bVar"b'7",bVar"b'6",
4766                                                      bVar"b'5"]),
4767                                               Mop(Cast(FTy 5),
4768                                                   LL[bVar"b'4",bVar"b'3",
4769                                                      bVar"b'2",bVar"b'1",
4770                                                      bVar"b'0"])]))),
4771                                     (LO(PTy(F64,F64)),
4772                                      Const("Reserved",CTy"instruction"))]))))))),
4773            (Bop(And,Mop(Not,bVar"b'31"),
4774                 Bop(And,bVar"b'29",
4775                     Bop(And,bVar"b'28",
4776                         Bop(And,bVar"b'27",
4777                             Bop(And,Mop(Not,bVar"b'26"),
4778                                 Bop(And,bVar"b'25",
4779                                     Bop(And,Mop(Not,bVar"b'24"),
4780                                         Bop(And,Mop(Not,bVar"b'23"),
4781                                             Bop(And,bVar"b'22",
4782                                                 Bop(And,
4783                                                     Mop(Not,bVar"b'21"),
4784                                                     Bop(And,bVar"b'11",
4785                                                         Bop(And,
4786                                                             Mop(Not,
4787                                                                 bVar"b'10"),
4788                                                             Mop(Not,
4789                                                                 bVar"b'4"))))))))))))),
4790             Call
4791               ("Data",CTy"instruction",
4792                Call
4793                  ("ConditionalCompareImmediate@32",CTy"Data",
4794                   TP[LW(0,32),Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'30"])),
4795                      Mop(Cast F32,
4796                          Mop(Cast(FTy 5),
4797                              LL[bVar"b'20",bVar"b'19",bVar"b'18",
4798                                 bVar"b'17",bVar"b'16"])),
4799                      Mop(Cast F4,
4800                          LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12"]),
4801                      TP[Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'3"])),
4802                         Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'2"])),
4803                         Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'1"])),
4804                         Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'0"]))],
4805                      Mop(Cast(FTy 5),
4806                          LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
4807                             bVar"b'5"])]))),
4808            (Bop(And,bVar"b'31",
4809                 Bop(And,bVar"b'29",
4810                     Bop(And,bVar"b'28",
4811                         Bop(And,bVar"b'27",
4812                             Bop(And,Mop(Not,bVar"b'26"),
4813                                 Bop(And,bVar"b'25",
4814                                     Bop(And,Mop(Not,bVar"b'24"),
4815                                         Bop(And,Mop(Not,bVar"b'23"),
4816                                             Bop(And,bVar"b'22",
4817                                                 Bop(And,
4818                                                     Mop(Not,bVar"b'21"),
4819                                                     Bop(And,bVar"b'11",
4820                                                         Bop(And,
4821                                                             Mop(Not,
4822                                                                 bVar"b'10"),
4823                                                             Mop(Not,
4824                                                                 bVar"b'4"))))))))))))),
4825             Call
4826               ("Data",CTy"instruction",
4827                Call
4828                  ("ConditionalCompareImmediate@64",CTy"Data",
4829                   TP[LW(1,64),Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'30"])),
4830                      Mop(Cast F64,
4831                          Mop(Cast(FTy 5),
4832                              LL[bVar"b'20",bVar"b'19",bVar"b'18",
4833                                 bVar"b'17",bVar"b'16"])),
4834                      Mop(Cast F4,
4835                          LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12"]),
4836                      TP[Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'3"])),
4837                         Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'2"])),
4838                         Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'1"])),
4839                         Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'0"]))],
4840                      Mop(Cast(FTy 5),
4841                          LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
4842                             bVar"b'5"])]))),
4843            (Bop(And,Mop(Not,bVar"b'31"),
4844                 Bop(And,bVar"b'29",
4845                     Bop(And,bVar"b'28",
4846                         Bop(And,bVar"b'27",
4847                             Bop(And,Mop(Not,bVar"b'26"),
4848                                 Bop(And,bVar"b'25",
4849                                     Bop(And,Mop(Not,bVar"b'24"),
4850                                         Bop(And,Mop(Not,bVar"b'23"),
4851                                             Bop(And,bVar"b'22",
4852                                                 Bop(And,
4853                                                     Mop(Not,bVar"b'21"),
4854                                                     Bop(And,
4855                                                         Mop(Not,
4856                                                             bVar"b'11"),
4857                                                         Bop(And,
4858                                                             Mop(Not,
4859                                                                 bVar"b'10"),
4860                                                             Mop(Not,
4861                                                                 bVar"b'4"))))))))))))),
4862             Call
4863               ("Data",CTy"instruction",
4864                Call
4865                  ("ConditionalCompareRegister@32",CTy"Data",
4866                   TP[LW(0,32),Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'30"])),
4867                      Mop(Cast F4,
4868                          LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12"]),
4869                      TP[Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'3"])),
4870                         Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'2"])),
4871                         Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'1"])),
4872                         Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'0"]))],
4873                      Mop(Cast(FTy 5),
4874                          LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
4875                             bVar"b'16"]),
4876                      Mop(Cast(FTy 5),
4877                          LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
4878                             bVar"b'5"])]))),
4879            (Bop(And,bVar"b'31",
4880                 Bop(And,bVar"b'29",
4881                     Bop(And,bVar"b'28",
4882                         Bop(And,bVar"b'27",
4883                             Bop(And,Mop(Not,bVar"b'26"),
4884                                 Bop(And,bVar"b'25",
4885                                     Bop(And,Mop(Not,bVar"b'24"),
4886                                         Bop(And,Mop(Not,bVar"b'23"),
4887                                             Bop(And,bVar"b'22",
4888                                                 Bop(And,
4889                                                     Mop(Not,bVar"b'21"),
4890                                                     Bop(And,
4891                                                         Mop(Not,
4892                                                             bVar"b'11"),
4893                                                         Bop(And,
4894                                                             Mop(Not,
4895                                                                 bVar"b'10"),
4896                                                             Mop(Not,
4897                                                                 bVar"b'4"))))))))))))),
4898             Call
4899               ("Data",CTy"instruction",
4900                Call
4901                  ("ConditionalCompareRegister@64",CTy"Data",
4902                   TP[LW(1,64),Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'30"])),
4903                      Mop(Cast F4,
4904                          LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12"]),
4905                      TP[Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'3"])),
4906                         Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'2"])),
4907                         Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'1"])),
4908                         Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'0"]))],
4909                      Mop(Cast(FTy 5),
4910                          LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
4911                             bVar"b'16"]),
4912                      Mop(Cast(FTy 5),
4913                          LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
4914                             bVar"b'5"])]))),
4915            (Bop(And,Mop(Not,bVar"b'31"),
4916                 Bop(And,Mop(Not,bVar"b'29"),
4917                     Bop(And,bVar"b'28",
4918                         Bop(And,bVar"b'27",
4919                             Bop(And,Mop(Not,bVar"b'26"),
4920                                 Bop(And,bVar"b'25",
4921                                     Bop(And,Mop(Not,bVar"b'24"),
4922                                         Bop(And,bVar"b'23",
4923                                             Bop(And,Mop(Not,bVar"b'22"),
4924                                                 Bop(And,
4925                                                     Mop(Not,bVar"b'21"),
4926                                                     Mop(Not,bVar"b'11"))))))))))),
4927             Call
4928               ("Data",CTy"instruction",
4929                Call
4930                  ("ConditionalSelect@32",CTy"Data",
4931                   TP[LW(0,32),Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'30"])),
4932                      Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'10"])),
4933                      Mop(Cast F4,
4934                          LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12"]),
4935                      Mop(Cast(FTy 5),
4936                          LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
4937                             bVar"b'16"]),
4938                      Mop(Cast(FTy 5),
4939                          LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
4940                             bVar"b'5"]),
4941                      Mop(Cast(FTy 5),
4942                          LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
4943                             bVar"b'0"])]))),
4944            (Bop(And,bVar"b'31",
4945                 Bop(And,Mop(Not,bVar"b'29"),
4946                     Bop(And,bVar"b'28",
4947                         Bop(And,bVar"b'27",
4948                             Bop(And,Mop(Not,bVar"b'26"),
4949                                 Bop(And,bVar"b'25",
4950                                     Bop(And,Mop(Not,bVar"b'24"),
4951                                         Bop(And,bVar"b'23",
4952                                             Bop(And,Mop(Not,bVar"b'22"),
4953                                                 Bop(And,
4954                                                     Mop(Not,bVar"b'21"),
4955                                                     Mop(Not,bVar"b'11"))))))))))),
4956             Call
4957               ("Data",CTy"instruction",
4958                Call
4959                  ("ConditionalSelect@64",CTy"Data",
4960                   TP[LW(1,64),Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'30"])),
4961                      Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'10"])),
4962                      Mop(Cast F4,
4963                          LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12"]),
4964                      Mop(Cast(FTy 5),
4965                          LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
4966                             bVar"b'16"]),
4967                      Mop(Cast(FTy 5),
4968                          LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
4969                             bVar"b'5"]),
4970                      Mop(Cast(FTy 5),
4971                          LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
4972                             bVar"b'0"])]))),
4973            (Bop(And,Mop(Not,bVar"b'31"),
4974                 Bop(And,bVar"b'30",
4975                     Bop(And,Mop(Not,bVar"b'29"),
4976                         Bop(And,bVar"b'28",
4977                             Bop(And,bVar"b'27",
4978                                 Bop(And,Mop(Not,bVar"b'26"),
4979                                     Bop(And,bVar"b'25",
4980                                         Bop(And,Mop(Not,bVar"b'24"),
4981                                             Bop(And,bVar"b'23",
4982                                                 Bop(And,bVar"b'22",
4983                                                     Bop(And,
4984                                                         Mop(Not,
4985                                                             bVar"b'21"),
4986                                                         Bop(And,
4987                                                             Mop(Not,
4988                                                                 bVar"b'20"),
4989                                                             Bop(And,
4990                                                                 Mop(Not,
4991                                                                     bVar"b'19"),
4992                                                                 Bop(And,
4993                                                                     Mop(Not,
4994                                                                         bVar"b'18"),
4995                                                                     Bop(And,
4996                                                                         Mop(Not,
4997                                                                             bVar"b'17"),
4998                                                                         Bop(And,
4999                                                                             Mop(Not,
5000                                                                                 bVar"b'16"),
5001                                                                             Bop(And,
5002                                                                                 Mop(Not,
5003                                                                                     bVar"b'15"),
5004                                                                                 Bop(And,
5005                                                                                     Mop(Not,
5006                                                                                         bVar"b'14"),
5007                                                                                     Bop(And,
5008                                                                                         Mop(Not,
5009                                                                                             bVar"b'13"),
5010                                                                                         Bop(And,
5011                                                                                             bVar"b'12",
5012                                                                                             Mop(Not,
5013                                                                                                 bVar"b'11"))))))))))))))))))))),
5014             Call
5015               ("Data",CTy"instruction",
5016                Call
5017                  ("CountLeading@32",CTy"Data",
5018                   TP[LW(0,32),Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'10"])),
5019                      Mop(Cast(FTy 5),
5020                          LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
5021                             bVar"b'5"]),
5022                      Mop(Cast(FTy 5),
5023                          LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
5024                             bVar"b'0"])]))),
5025            (Bop(And,bVar"b'31",
5026                 Bop(And,bVar"b'30",
5027                     Bop(And,Mop(Not,bVar"b'29"),
5028                         Bop(And,bVar"b'28",
5029                             Bop(And,bVar"b'27",
5030                                 Bop(And,Mop(Not,bVar"b'26"),
5031                                     Bop(And,bVar"b'25",
5032                                         Bop(And,Mop(Not,bVar"b'24"),
5033                                             Bop(And,bVar"b'23",
5034                                                 Bop(And,bVar"b'22",
5035                                                     Bop(And,
5036                                                         Mop(Not,
5037                                                             bVar"b'21"),
5038                                                         Bop(And,
5039                                                             Mop(Not,
5040                                                                 bVar"b'20"),
5041                                                             Bop(And,
5042                                                                 Mop(Not,
5043                                                                     bVar"b'19"),
5044                                                                 Bop(And,
5045                                                                     Mop(Not,
5046                                                                         bVar"b'18"),
5047                                                                     Bop(And,
5048                                                                         Mop(Not,
5049                                                                             bVar"b'17"),
5050                                                                         Bop(And,
5051                                                                             Mop(Not,
5052                                                                                 bVar"b'16"),
5053                                                                             Bop(And,
5054                                                                                 Mop(Not,
5055                                                                                     bVar"b'15"),
5056                                                                                 Bop(And,
5057                                                                                     Mop(Not,
5058                                                                                         bVar"b'14"),
5059                                                                                     Bop(And,
5060                                                                                         Mop(Not,
5061                                                                                             bVar"b'13"),
5062                                                                                         Bop(And,
5063                                                                                             bVar"b'12",
5064                                                                                             Mop(Not,
5065                                                                                                 bVar"b'11"))))))))))))))))))))),
5066             Call
5067               ("Data",CTy"instruction",
5068                Call
5069                  ("CountLeading@64",CTy"Data",
5070                   TP[LW(1,64),Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'10"])),
5071                      Mop(Cast(FTy 5),
5072                          LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
5073                             bVar"b'5"]),
5074                      Mop(Cast(FTy 5),
5075                          LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
5076                             bVar"b'0"])]))),
5077            (Bop(And,Mop(Not,bVar"b'31"),
5078                 Bop(And,Mop(Not,bVar"b'30"),
5079                     Bop(And,Mop(Not,bVar"b'29"),
5080                         Bop(And,bVar"b'28",
5081                             Bop(And,Mop(Not,bVar"b'27"),
5082                                 Bop(And,Mop(Not,bVar"b'26"),
5083                                     Bop(And,bVar"b'25",
5084                                         Bop(And,bVar"b'24",
5085                                             Bop(And,bVar"b'23",
5086                                                 Mop(Not,bVar"b'21")))))))))),
5087             Let(Var("imms",FTy 6),
5088                 Mop(Cast(FTy 6),
5089                     LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12",
5090                        bVar"b'11",bVar"b'10"]),
5091                 ITB([(Mop(Not,EQ(Mop(Cast F1,LL[bVar"b'22"]),LW(0,1))),
5092                       Const("Unallocated",CTy"instruction")),
5093                      (Bop(Bit,Var("imms",FTy 6),LN 5),
5094                       Const("Reserved",CTy"instruction"))],
5095                     Call
5096                       ("Data",CTy"instruction",
5097                        Call
5098                          ("ExtractRegister@32",CTy"Data",
5099                           TP[LW(0,32),Var("imms",FTy 6),
5100                              Mop(Cast(FTy 5),
5101                                  LL[bVar"b'20",bVar"b'19",bVar"b'18",
5102                                     bVar"b'17",bVar"b'16"]),
5103                              Mop(Cast(FTy 5),
5104                                  LL[bVar"b'9",bVar"b'8",bVar"b'7",
5105                                     bVar"b'6",bVar"b'5"]),
5106                              Mop(Cast(FTy 5),
5107                                  LL[bVar"b'4",bVar"b'3",bVar"b'2",
5108                                     bVar"b'1",bVar"b'0"])]))))),
5109            (Bop(And,bVar"b'31",
5110                 Bop(And,Mop(Not,bVar"b'30"),
5111                     Bop(And,Mop(Not,bVar"b'29"),
5112                         Bop(And,bVar"b'28",
5113                             Bop(And,Mop(Not,bVar"b'27"),
5114                                 Bop(And,Mop(Not,bVar"b'26"),
5115                                     Bop(And,bVar"b'25",
5116                                         Bop(And,bVar"b'24",
5117                                             Bop(And,bVar"b'23",
5118                                                 Mop(Not,bVar"b'21")))))))))),
5119             ITE(Mop(Not,EQ(Mop(Cast F1,LL[bVar"b'22"]),LW(1,1))),
5120                 Const("Unallocated",CTy"instruction"),
5121                 Call
5122                   ("Data",CTy"instruction",
5123                    Call
5124                      ("ExtractRegister@64",CTy"Data",
5125                       TP[LW(1,64),
5126                          Mop(Cast(FTy 6),
5127                              LL[bVar"b'15",bVar"b'14",bVar"b'13",
5128                                 bVar"b'12",bVar"b'11",bVar"b'10"]),
5129                          Mop(Cast(FTy 5),
5130                              LL[bVar"b'20",bVar"b'19",bVar"b'18",
5131                                 bVar"b'17",bVar"b'16"]),
5132                          Mop(Cast(FTy 5),
5133                              LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
5134                                 bVar"b'5"]),
5135                          Mop(Cast(FTy 5),
5136                              LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
5137                                 bVar"b'0"])])))),
5138            (Bop(And,Mop(Not,bVar"b'31"),
5139                 Bop(And,Mop(Not,bVar"b'30"),
5140                     Bop(And,Mop(Not,bVar"b'29"),
5141                         Bop(And,bVar"b'28",
5142                             Bop(And,bVar"b'27",
5143                                 Bop(And,Mop(Not,bVar"b'26"),
5144                                     Bop(And,bVar"b'25",
5145                                         Bop(And,Mop(Not,bVar"b'24"),
5146                                             Bop(And,bVar"b'23",
5147                                                 Bop(And,bVar"b'22",
5148                                                     Bop(And,
5149                                                         Mop(Not,
5150                                                             bVar"b'21"),
5151                                                         Bop(And,
5152                                                             Mop(Not,
5153                                                                 bVar"b'15"),
5154                                                             Bop(And,
5155                                                                 Mop(Not,
5156                                                                     bVar"b'14"),
5157                                                                 Bop(And,
5158                                                                     Mop(Not,
5159                                                                         bVar"b'13"),
5160                                                                     Bop(And,
5161                                                                         Mop(Not,
5162                                                                             bVar"b'12"),
5163                                                                         bVar"b'11"))))))))))))))),
5164             Call
5165               ("Data",CTy"instruction",
5166                Call
5167                  ("Division@32",CTy"Data",
5168                   TP[LW(0,32),EQ(Mop(Cast F1,LL[bVar"b'10"]),LW(0,1)),
5169                      Mop(Cast(FTy 5),
5170                          LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
5171                             bVar"b'16"]),
5172                      Mop(Cast(FTy 5),
5173                          LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
5174                             bVar"b'5"]),
5175                      Mop(Cast(FTy 5),
5176                          LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
5177                             bVar"b'0"])]))),
5178            (Bop(And,bVar"b'31",
5179                 Bop(And,Mop(Not,bVar"b'30"),
5180                     Bop(And,Mop(Not,bVar"b'29"),
5181                         Bop(And,bVar"b'28",
5182                             Bop(And,bVar"b'27",
5183                                 Bop(And,Mop(Not,bVar"b'26"),
5184                                     Bop(And,bVar"b'25",
5185                                         Bop(And,Mop(Not,bVar"b'24"),
5186                                             Bop(And,bVar"b'23",
5187                                                 Bop(And,bVar"b'22",
5188                                                     Bop(And,
5189                                                         Mop(Not,
5190                                                             bVar"b'21"),
5191                                                         Bop(And,
5192                                                             Mop(Not,
5193                                                                 bVar"b'15"),
5194                                                             Bop(And,
5195                                                                 Mop(Not,
5196                                                                     bVar"b'14"),
5197                                                                 Bop(And,
5198                                                                     Mop(Not,
5199                                                                         bVar"b'13"),
5200                                                                     Bop(And,
5201                                                                         Mop(Not,
5202                                                                             bVar"b'12"),
5203                                                                         bVar"b'11"))))))))))))))),
5204             Call
5205               ("Data",CTy"instruction",
5206                Call
5207                  ("Division@64",CTy"Data",
5208                   TP[LW(1,64),EQ(Mop(Cast F1,LL[bVar"b'10"]),LW(0,1)),
5209                      Mop(Cast(FTy 5),
5210                          LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
5211                             bVar"b'16"]),
5212                      Mop(Cast(FTy 5),
5213                          LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
5214                             bVar"b'5"]),
5215                      Mop(Cast(FTy 5),
5216                          LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
5217                             bVar"b'0"])]))),
5218            (Bop(And,Mop(Not,bVar"b'31"),
5219                 Bop(And,Mop(Not,bVar"b'30"),
5220                     Bop(And,Mop(Not,bVar"b'29"),
5221                         Bop(And,bVar"b'28",
5222                             Bop(And,bVar"b'27",
5223                                 Bop(And,Mop(Not,bVar"b'26"),
5224                                     Bop(And,bVar"b'25",
5225                                         Bop(And,bVar"b'24",
5226                                             Bop(And,Mop(Not,bVar"b'23"),
5227                                                 Bop(And,
5228                                                     Mop(Not,bVar"b'22"),
5229                                                     Mop(Not,bVar"b'21"))))))))))),
5230             Call
5231               ("Data",CTy"instruction",
5232                Call
5233                  ("MultiplyAddSub@32",CTy"Data",
5234                   TP[LW(0,32),EQ(Mop(Cast F1,LL[bVar"b'15"]),LW(1,1)),
5235                      Mop(Cast(FTy 5),
5236                          LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
5237                             bVar"b'16"]),
5238                      Mop(Cast(FTy 5),
5239                          LL[bVar"b'14",bVar"b'13",bVar"b'12",bVar"b'11",
5240                             bVar"b'10"]),
5241                      Mop(Cast(FTy 5),
5242                          LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
5243                             bVar"b'5"]),
5244                      Mop(Cast(FTy 5),
5245                          LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
5246                             bVar"b'0"])]))),
5247            (Bop(And,bVar"b'31",
5248                 Bop(And,Mop(Not,bVar"b'30"),
5249                     Bop(And,Mop(Not,bVar"b'29"),
5250                         Bop(And,bVar"b'28",
5251                             Bop(And,bVar"b'27",
5252                                 Bop(And,Mop(Not,bVar"b'26"),
5253                                     Bop(And,bVar"b'25",
5254                                         Bop(And,bVar"b'24",
5255                                             Bop(And,Mop(Not,bVar"b'23"),
5256                                                 Bop(And,
5257                                                     Mop(Not,bVar"b'22"),
5258                                                     Mop(Not,bVar"b'21"))))))))))),
5259             Call
5260               ("Data",CTy"instruction",
5261                Call
5262                  ("MultiplyAddSub@64",CTy"Data",
5263                   TP[LW(1,64),EQ(Mop(Cast F1,LL[bVar"b'15"]),LW(1,1)),
5264                      Mop(Cast(FTy 5),
5265                          LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
5266                             bVar"b'16"]),
5267                      Mop(Cast(FTy 5),
5268                          LL[bVar"b'14",bVar"b'13",bVar"b'12",bVar"b'11",
5269                             bVar"b'10"]),
5270                      Mop(Cast(FTy 5),
5271                          LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
5272                             bVar"b'5"]),
5273                      Mop(Cast(FTy 5),
5274                          LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
5275                             bVar"b'0"])]))),
5276            (Bop(And,bVar"b'31",
5277                 Bop(And,Mop(Not,bVar"b'30"),
5278                     Bop(And,Mop(Not,bVar"b'29"),
5279                         Bop(And,bVar"b'28",
5280                             Bop(And,bVar"b'27",
5281                                 Bop(And,Mop(Not,bVar"b'26"),
5282                                     Bop(And,bVar"b'25",
5283                                         Bop(And,bVar"b'24",
5284                                             Bop(And,Mop(Not,bVar"b'22"),
5285                                                 bVar"b'21"))))))))),
5286             Call
5287               ("Data",CTy"instruction",
5288                Call
5289                  ("MultiplyAddSubLong",CTy"Data",
5290                   TP[Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'15"])),
5291                      EQ(Mop(Cast F1,LL[bVar"b'23"]),LW(0,1)),
5292                      Mop(Cast(FTy 5),
5293                          LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
5294                             bVar"b'16"]),
5295                      Mop(Cast(FTy 5),
5296                          LL[bVar"b'14",bVar"b'13",bVar"b'12",bVar"b'11",
5297                             bVar"b'10"]),
5298                      Mop(Cast(FTy 5),
5299                          LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
5300                             bVar"b'5"]),
5301                      Mop(Cast(FTy 5),
5302                          LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
5303                             bVar"b'0"])]))),
5304            (Bop(And,bVar"b'31",
5305                 Bop(And,Mop(Not,bVar"b'30"),
5306                     Bop(And,Mop(Not,bVar"b'29"),
5307                         Bop(And,bVar"b'28",
5308                             Bop(And,bVar"b'27",
5309                                 Bop(And,Mop(Not,bVar"b'26"),
5310                                     Bop(And,bVar"b'25",
5311                                         Bop(And,bVar"b'24",
5312                                             Bop(And,bVar"b'22",
5313                                                 Bop(And,
5314                                                     Mop(Not,bVar"b'21"),
5315                                                     Mop(Not,bVar"b'15"))))))))))),
5316             Call
5317               ("Data",CTy"instruction",
5318                Call
5319                  ("MultiplyHigh",CTy"Data",
5320                   TP[EQ(Mop(Cast F1,LL[bVar"b'23"]),LW(0,1)),
5321                      Mop(Cast(FTy 5),
5322                          LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
5323                             bVar"b'16"]),
5324                      Mop(Cast(FTy 5),
5325                          LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
5326                             bVar"b'5"]),
5327                      Mop(Cast(FTy 5),
5328                          LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
5329                             bVar"b'0"])]))),
5330            (Bop(And,Mop(Not,bVar"b'31"),
5331                 Bop(And,bVar"b'30",
5332                     Bop(And,Mop(Not,bVar"b'29"),
5333                         Bop(And,bVar"b'28",
5334                             Bop(And,bVar"b'27",
5335                                 Bop(And,Mop(Not,bVar"b'26"),
5336                                     Bop(And,bVar"b'25",
5337                                         Bop(And,Mop(Not,bVar"b'24"),
5338                                             Bop(And,bVar"b'23",
5339                                                 Bop(And,bVar"b'22",
5340                                                     Bop(And,
5341                                                         Mop(Not,
5342                                                             bVar"b'21"),
5343                                                         Bop(And,
5344                                                             Mop(Not,
5345                                                                 bVar"b'20"),
5346                                                             Bop(And,
5347                                                                 Mop(Not,
5348                                                                     bVar"b'19"),
5349                                                                 Bop(And,
5350                                                                     Mop(Not,
5351                                                                         bVar"b'18"),
5352                                                                     Bop(And,
5353                                                                         Mop(Not,
5354                                                                             bVar"b'17"),
5355                                                                         Bop(And,
5356                                                                             Mop(Not,
5357                                                                                 bVar"b'16"),
5358                                                                             Bop(And,
5359                                                                                 Mop(Not,
5360                                                                                     bVar"b'15"),
5361                                                                                 Bop(And,
5362                                                                                     Mop(Not,
5363                                                                                         bVar"b'14"),
5364                                                                                     Bop(And,
5365                                                                                         Mop(Not,
5366                                                                                             bVar"b'13"),
5367                                                                                         Bop(And,
5368                                                                                             Mop(Not,
5369                                                                                                 bVar"b'12"),
5370                                                                                             Bop(And,
5371                                                                                                 bVar"b'11",
5372                                                                                                 bVar"b'10"))))))))))))))))))))),
5373             Const("Unallocated",CTy"instruction")),
5374            (Bop(And,Mop(Not,bVar"b'31"),
5375                 Bop(And,bVar"b'30",
5376                     Bop(And,Mop(Not,bVar"b'29"),
5377                         Bop(And,bVar"b'28",
5378                             Bop(And,bVar"b'27",
5379                                 Bop(And,Mop(Not,bVar"b'26"),
5380                                     Bop(And,bVar"b'25",
5381                                         Bop(And,Mop(Not,bVar"b'24"),
5382                                             Bop(And,bVar"b'23",
5383                                                 Bop(And,bVar"b'22",
5384                                                     Bop(And,
5385                                                         Mop(Not,
5386                                                             bVar"b'21"),
5387                                                         Bop(And,
5388                                                             Mop(Not,
5389                                                                 bVar"b'20"),
5390                                                             Bop(And,
5391                                                                 Mop(Not,
5392                                                                     bVar"b'19"),
5393                                                                 Bop(And,
5394                                                                     Mop(Not,
5395                                                                         bVar"b'18"),
5396                                                                     Bop(And,
5397                                                                         Mop(Not,
5398                                                                             bVar"b'17"),
5399                                                                         Bop(And,
5400                                                                             Mop(Not,
5401                                                                                 bVar"b'16"),
5402                                                                             Bop(And,
5403                                                                                 Mop(Not,
5404                                                                                     bVar"b'15"),
5405                                                                                 Bop(And,
5406                                                                                     Mop(Not,
5407                                                                                         bVar"b'14"),
5408                                                                                     Bop(And,
5409                                                                                         Mop(Not,
5410                                                                                             bVar"b'13"),
5411                                                                                         Mop(Not,
5412                                                                                             bVar"b'12")))))))))))))))))))),
5413             Call
5414               ("Data",CTy"instruction",
5415                Call
5416                  ("Reverse@32",CTy"Data",
5417                   TP[LW(0,32),
5418                      Mop(Cast(CTy"RevOp"),
5419                          Mop(Cast(FTy 2),LL[bVar"b'11",bVar"b'10"])),
5420                      Mop(Cast(FTy 5),
5421                          LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
5422                             bVar"b'5"]),
5423                      Mop(Cast(FTy 5),
5424                          LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
5425                             bVar"b'0"])]))),
5426            (Bop(And,bVar"b'31",
5427                 Bop(And,bVar"b'30",
5428                     Bop(And,Mop(Not,bVar"b'29"),
5429                         Bop(And,bVar"b'28",
5430                             Bop(And,bVar"b'27",
5431                                 Bop(And,Mop(Not,bVar"b'26"),
5432                                     Bop(And,bVar"b'25",
5433                                         Bop(And,Mop(Not,bVar"b'24"),
5434                                             Bop(And,bVar"b'23",
5435                                                 Bop(And,bVar"b'22",
5436                                                     Bop(And,
5437                                                         Mop(Not,
5438                                                             bVar"b'21"),
5439                                                         Bop(And,
5440                                                             Mop(Not,
5441                                                                 bVar"b'20"),
5442                                                             Bop(And,
5443                                                                 Mop(Not,
5444                                                                     bVar"b'19"),
5445                                                                 Bop(And,
5446                                                                     Mop(Not,
5447                                                                         bVar"b'18"),
5448                                                                     Bop(And,
5449                                                                         Mop(Not,
5450                                                                             bVar"b'17"),
5451                                                                         Bop(And,
5452                                                                             Mop(Not,
5453                                                                                 bVar"b'16"),
5454                                                                             Bop(And,
5455                                                                                 Mop(Not,
5456                                                                                     bVar"b'15"),
5457                                                                                 Bop(And,
5458                                                                                     Mop(Not,
5459                                                                                         bVar"b'14"),
5460                                                                                     Bop(And,
5461                                                                                         Mop(Not,
5462                                                                                             bVar"b'13"),
5463                                                                                         Mop(Not,
5464                                                                                             bVar"b'12")))))))))))))))))))),
5465             Call
5466               ("Data",CTy"instruction",
5467                Call
5468                  ("Reverse@64",CTy"Data",
5469                   TP[LW(1,64),
5470                      Mop(Cast(CTy"RevOp"),
5471                          Mop(Cast(FTy 2),LL[bVar"b'11",bVar"b'10"])),
5472                      Mop(Cast(FTy 5),
5473                          LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
5474                             bVar"b'5"]),
5475                      Mop(Cast(FTy 5),
5476                          LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
5477                             bVar"b'0"])]))),
5478            (Bop(And,Mop(Not,bVar"b'31"),
5479                 Bop(And,Mop(Not,bVar"b'30"),
5480                     Bop(And,Mop(Not,bVar"b'29"),
5481                         Bop(And,bVar"b'28",
5482                             Bop(And,bVar"b'27",
5483                                 Bop(And,Mop(Not,bVar"b'26"),
5484                                     Bop(And,bVar"b'25",
5485                                         Bop(And,Mop(Not,bVar"b'24"),
5486                                             Bop(And,bVar"b'23",
5487                                                 Bop(And,bVar"b'22",
5488                                                     Bop(And,
5489                                                         Mop(Not,
5490                                                             bVar"b'21"),
5491                                                         Bop(And,
5492                                                             Mop(Not,
5493                                                                 bVar"b'15"),
5494                                                             Bop(And,
5495                                                                 bVar"b'14",
5496                                                                 Bop(And,
5497                                                                     Mop(Not,
5498                                                                         bVar"b'13"),
5499                                                                     Bop(And,
5500                                                                         Mop(Not,
5501                                                                             bVar"b'11"),
5502                                                                         Mop(Not,
5503                                                                             bVar"b'10")))))))))))))))),
5504             Call
5505               ("CRCExt",CTy"instruction",
5506                Call
5507                  ("CRC@8",CTy"CRCExt",
5508                   TP[LW(0,8),Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'12"])),
5509                      Mop(Cast(FTy 5),
5510                          LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
5511                             bVar"b'16"]),
5512                      Mop(Cast(FTy 5),
5513                          LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
5514                             bVar"b'5"]),
5515                      Mop(Cast(FTy 5),
5516                          LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
5517                             bVar"b'0"])]))),
5518            (Bop(And,Mop(Not,bVar"b'31"),
5519                 Bop(And,Mop(Not,bVar"b'30"),
5520                     Bop(And,Mop(Not,bVar"b'29"),
5521                         Bop(And,bVar"b'28",
5522                             Bop(And,bVar"b'27",
5523                                 Bop(And,Mop(Not,bVar"b'26"),
5524                                     Bop(And,bVar"b'25",
5525                                         Bop(And,Mop(Not,bVar"b'24"),
5526                                             Bop(And,bVar"b'23",
5527                                                 Bop(And,bVar"b'22",
5528                                                     Bop(And,
5529                                                         Mop(Not,
5530                                                             bVar"b'21"),
5531                                                         Bop(And,
5532                                                             Mop(Not,
5533                                                                 bVar"b'15"),
5534                                                             Bop(And,
5535                                                                 bVar"b'14",
5536                                                                 Bop(And,
5537                                                                     Mop(Not,
5538                                                                         bVar"b'13"),
5539                                                                     Bop(And,
5540                                                                         Mop(Not,
5541                                                                             bVar"b'11"),
5542                                                                         bVar"b'10"))))))))))))))),
5543             Call
5544               ("CRCExt",CTy"instruction",
5545                Call
5546                  ("CRC@16",CTy"CRCExt",
5547                   TP[LW(1,16),Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'12"])),
5548                      Mop(Cast(FTy 5),
5549                          LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
5550                             bVar"b'16"]),
5551                      Mop(Cast(FTy 5),
5552                          LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
5553                             bVar"b'5"]),
5554                      Mop(Cast(FTy 5),
5555                          LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
5556                             bVar"b'0"])]))),
5557            (Bop(And,Mop(Not,bVar"b'31"),
5558                 Bop(And,Mop(Not,bVar"b'30"),
5559                     Bop(And,Mop(Not,bVar"b'29"),
5560                         Bop(And,bVar"b'28",
5561                             Bop(And,bVar"b'27",
5562                                 Bop(And,Mop(Not,bVar"b'26"),
5563                                     Bop(And,bVar"b'25",
5564                                         Bop(And,Mop(Not,bVar"b'24"),
5565                                             Bop(And,bVar"b'23",
5566                                                 Bop(And,bVar"b'22",
5567                                                     Bop(And,
5568                                                         Mop(Not,
5569                                                             bVar"b'21"),
5570                                                         Bop(And,
5571                                                             Mop(Not,
5572                                                                 bVar"b'15"),
5573                                                             Bop(And,
5574                                                                 bVar"b'14",
5575                                                                 Bop(And,
5576                                                                     Mop(Not,
5577                                                                         bVar"b'13"),
5578                                                                     Bop(And,
5579                                                                         bVar"b'11",
5580                                                                         Mop(Not,
5581                                                                             bVar"b'10")))))))))))))))),
5582             Call
5583               ("CRCExt",CTy"instruction",
5584                Call
5585                  ("CRC@32",CTy"CRCExt",
5586                   TP[LW(2,32),Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'12"])),
5587                      Mop(Cast(FTy 5),
5588                          LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
5589                             bVar"b'16"]),
5590                      Mop(Cast(FTy 5),
5591                          LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
5592                             bVar"b'5"]),
5593                      Mop(Cast(FTy 5),
5594                          LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
5595                             bVar"b'0"])]))),
5596            (Bop(And,bVar"b'31",
5597                 Bop(And,Mop(Not,bVar"b'30"),
5598                     Bop(And,Mop(Not,bVar"b'29"),
5599                         Bop(And,bVar"b'28",
5600                             Bop(And,bVar"b'27",
5601                                 Bop(And,Mop(Not,bVar"b'26"),
5602                                     Bop(And,bVar"b'25",
5603                                         Bop(And,Mop(Not,bVar"b'24"),
5604                                             Bop(And,bVar"b'23",
5605                                                 Bop(And,bVar"b'22",
5606                                                     Bop(And,
5607                                                         Mop(Not,
5608                                                             bVar"b'21"),
5609                                                         Bop(And,
5610                                                             Mop(Not,
5611                                                                 bVar"b'15"),
5612                                                             Bop(And,
5613                                                                 bVar"b'14",
5614                                                                 Bop(And,
5615                                                                     Mop(Not,
5616                                                                         bVar"b'13"),
5617                                                                     Bop(And,
5618                                                                         bVar"b'11",
5619                                                                         bVar"b'10"))))))))))))))),
5620             Call
5621               ("CRCExt",CTy"instruction",
5622                Call
5623                  ("CRC@64",CTy"CRCExt",
5624                   TP[LW(3,64),Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'12"])),
5625                      Mop(Cast(FTy 5),
5626                          LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
5627                             bVar"b'16"]),
5628                      Mop(Cast(FTy 5),
5629                          LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
5630                             bVar"b'5"]),
5631                      Mop(Cast(FTy 5),
5632                          LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
5633                             bVar"b'0"])]))),
5634            (Bop(And,Mop(Not,bVar"b'31"),
5635                 Bop(And,bVar"b'30",
5636                     Bop(And,Mop(Not,bVar"b'29"),
5637                         Bop(And,bVar"b'28",
5638                             Bop(And,Mop(Not,bVar"b'27"),
5639                                 Bop(And,bVar"b'26",
5640                                     Bop(And,Mop(Not,bVar"b'25"),
5641                                         Bop(And,Mop(Not,bVar"b'24"),
5642                                             Mop(Not,bVar"b'4"))))))))),
5643             Call
5644               ("Branch",CTy"instruction",
5645                Call
5646                  ("BranchConditional",CTy"Branch",
5647                   TP[Mop(SE F64,
5648                          CC[Mop(Cast(FTy 19),
5649                                 LL[bVar"b'23",bVar"b'22",bVar"b'21",
5650                                    bVar"b'20",bVar"b'19",bVar"b'18",
5651                                    bVar"b'17",bVar"b'16",bVar"b'15",
5652                                    bVar"b'14",bVar"b'13",bVar"b'12",
5653                                    bVar"b'11",bVar"b'10",bVar"b'9",
5654                                    bVar"b'8",bVar"b'7",bVar"b'6",
5655                                    bVar"b'5"]),LW(0,2)]),
5656                      Mop(Cast F4,
5657                          LL[bVar"b'3",bVar"b'2",bVar"b'1",bVar"b'0"])]))),
5658            (Bop(And,Mop(Not,bVar"b'30"),
5659                 Bop(And,Mop(Not,bVar"b'29"),
5660                     Bop(And,bVar"b'28",
5661                         Bop(And,Mop(Not,bVar"b'27"),bVar"b'26")))),
5662             Call
5663               ("Branch",CTy"instruction",
5664                Call
5665                  ("BranchImmediate",CTy"Branch",
5666                   TP[Mop(SE F64,
5667                          CC[Mop(Cast(FTy 26),
5668                                 LL[bVar"b'25",bVar"b'24",bVar"b'23",
5669                                    bVar"b'22",bVar"b'21",bVar"b'20",
5670                                    bVar"b'19",bVar"b'18",bVar"b'17",
5671                                    bVar"b'16",bVar"b'15",bVar"b'14",
5672                                    bVar"b'13",bVar"b'12",bVar"b'11",
5673                                    bVar"b'10",bVar"b'9",bVar"b'8",
5674                                    bVar"b'7",bVar"b'6",bVar"b'5",
5675                                    bVar"b'4",bVar"b'3",bVar"b'2",
5676                                    bVar"b'1",bVar"b'0"]),LW(0,2)]),
5677                      ITE(EQ(Mop(Cast F1,LL[bVar"b'31"]),LW(1,1)),
5678                          LC("BranchType_CALL",CTy"BranchType"),
5679                          LC("BranchType_JMP",CTy"BranchType"))]))),
5680            (Bop(And,bVar"b'31",
5681                 Bop(And,bVar"b'30",
5682                     Bop(And,Mop(Not,bVar"b'29"),
5683                         Bop(And,bVar"b'28",
5684                             Bop(And,Mop(Not,bVar"b'27"),
5685                                 Bop(And,bVar"b'26",
5686                                     Bop(And,bVar"b'25",
5687                                         Bop(And,Mop(Not,bVar"b'24"),
5688                                             Bop(And,Mop(Not,bVar"b'23"),
5689                                                 Bop(And,
5690                                                     Mop(Not,bVar"b'22"),
5691                                                     Bop(And,
5692                                                         Mop(Not,
5693                                                             bVar"b'21"),
5694                                                         Bop(And,
5695                                                             bVar"b'20",
5696                                                             Bop(And,
5697                                                                 bVar"b'19",
5698                                                                 Bop(And,
5699                                                                     bVar"b'18",
5700                                                                     Bop(And,
5701                                                                         bVar"b'17",
5702                                                                         Bop(And,
5703                                                                             bVar"b'16",
5704                                                                             Bop(And,
5705                                                                                 Mop(Not,
5706                                                                                     bVar"b'15"),
5707                                                                                 Bop(And,
5708                                                                                     Mop(Not,
5709                                                                                         bVar"b'14"),
5710                                                                                     Bop(And,
5711                                                                                         Mop(Not,
5712                                                                                             bVar"b'13"),
5713                                                                                         Bop(And,
5714                                                                                             Mop(Not,
5715                                                                                                 bVar"b'12"),
5716                                                                                             Bop(And,
5717                                                                                                 Mop(Not,
5718                                                                                                     bVar"b'11"),
5719                                                                                                 Bop(And,
5720                                                                                                     Mop(Not,
5721                                                                                                         bVar"b'10"),
5722                                                                                                     Bop(And,
5723                                                                                                         Mop(Not,
5724                                                                                                             bVar"b'4"),
5725                                                                                                         Bop(And,
5726                                                                                                             Mop(Not,
5727                                                                                                                 bVar"b'3"),
5728                                                                                                             Bop(And,
5729                                                                                                                 Mop(Not,
5730                                                                                                                     bVar"b'2"),
5731                                                                                                                 Bop(And,
5732                                                                                                                     Mop(Not,
5733                                                                                                                         bVar"b'1"),
5734                                                                                                                     Mop(Not,
5735                                                                                                                         bVar"b'0"))))))))))))))))))))))))))),
5736             Call
5737               ("Branch",CTy"instruction",
5738                Call
5739                  ("BranchRegister",CTy"Branch",
5740                   TP[Mop(Cast(FTy 5),
5741                          LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
5742                             bVar"b'5"]),
5743                      LC("BranchType_JMP",CTy"BranchType")]))),
5744            (Bop(And,bVar"b'31",
5745                 Bop(And,bVar"b'30",
5746                     Bop(And,Mop(Not,bVar"b'29"),
5747                         Bop(And,bVar"b'28",
5748                             Bop(And,Mop(Not,bVar"b'27"),
5749                                 Bop(And,bVar"b'26",
5750                                     Bop(And,bVar"b'25",
5751                                         Bop(And,Mop(Not,bVar"b'24"),
5752                                             Bop(And,Mop(Not,bVar"b'23"),
5753                                                 Bop(And,
5754                                                     Mop(Not,bVar"b'22"),
5755                                                     Bop(And,bVar"b'21",
5756                                                         Bop(And,
5757                                                             bVar"b'20",
5758                                                             Bop(And,
5759                                                                 bVar"b'19",
5760                                                                 Bop(And,
5761                                                                     bVar"b'18",
5762                                                                     Bop(And,
5763                                                                         bVar"b'17",
5764                                                                         Bop(And,
5765                                                                             bVar"b'16",
5766                                                                             Bop(And,
5767                                                                                 Mop(Not,
5768                                                                                     bVar"b'15"),
5769                                                                                 Bop(And,
5770                                                                                     Mop(Not,
5771                                                                                         bVar"b'14"),
5772                                                                                     Bop(And,
5773                                                                                         Mop(Not,
5774                                                                                             bVar"b'13"),
5775                                                                                         Bop(And,
5776                                                                                             Mop(Not,
5777                                                                                                 bVar"b'12"),
5778                                                                                             Bop(And,
5779                                                                                                 Mop(Not,
5780                                                                                                     bVar"b'11"),
5781                                                                                                 Bop(And,
5782                                                                                                     Mop(Not,
5783                                                                                                         bVar"b'10"),
5784                                                                                                     Bop(And,
5785                                                                                                         Mop(Not,
5786                                                                                                             bVar"b'4"),
5787                                                                                                         Bop(And,
5788                                                                                                             Mop(Not,
5789                                                                                                                 bVar"b'3"),
5790                                                                                                             Bop(And,
5791                                                                                                                 Mop(Not,
5792                                                                                                                     bVar"b'2"),
5793                                                                                                                 Bop(And,
5794                                                                                                                     Mop(Not,
5795                                                                                                                         bVar"b'1"),
5796                                                                                                                     Mop(Not,
5797                                                                                                                         bVar"b'0"))))))))))))))))))))))))))),
5798             Call
5799               ("Branch",CTy"instruction",
5800                Call
5801                  ("BranchRegister",CTy"Branch",
5802                   TP[Mop(Cast(FTy 5),
5803                          LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
5804                             bVar"b'5"]),
5805                      LC("BranchType_CALL",CTy"BranchType")]))),
5806            (Bop(And,bVar"b'31",
5807                 Bop(And,bVar"b'30",
5808                     Bop(And,Mop(Not,bVar"b'29"),
5809                         Bop(And,bVar"b'28",
5810                             Bop(And,Mop(Not,bVar"b'27"),
5811                                 Bop(And,bVar"b'26",
5812                                     Bop(And,bVar"b'25",
5813                                         Bop(And,Mop(Not,bVar"b'24"),
5814                                             Bop(And,Mop(Not,bVar"b'23"),
5815                                                 Bop(And,bVar"b'22",
5816                                                     Bop(And,
5817                                                         Mop(Not,
5818                                                             bVar"b'21"),
5819                                                         Bop(And,
5820                                                             bVar"b'20",
5821                                                             Bop(And,
5822                                                                 bVar"b'19",
5823                                                                 Bop(And,
5824                                                                     bVar"b'18",
5825                                                                     Bop(And,
5826                                                                         bVar"b'17",
5827                                                                         Bop(And,
5828                                                                             bVar"b'16",
5829                                                                             Bop(And,
5830                                                                                 Mop(Not,
5831                                                                                     bVar"b'15"),
5832                                                                                 Bop(And,
5833                                                                                     Mop(Not,
5834                                                                                         bVar"b'14"),
5835                                                                                     Bop(And,
5836                                                                                         Mop(Not,
5837                                                                                             bVar"b'13"),
5838                                                                                         Bop(And,
5839                                                                                             Mop(Not,
5840                                                                                                 bVar"b'12"),
5841                                                                                             Bop(And,
5842                                                                                                 Mop(Not,
5843                                                                                                     bVar"b'11"),
5844                                                                                                 Bop(And,
5845                                                                                                     Mop(Not,
5846                                                                                                         bVar"b'10"),
5847                                                                                                     Bop(And,
5848                                                                                                         Mop(Not,
5849                                                                                                             bVar"b'4"),
5850                                                                                                         Bop(And,
5851                                                                                                             Mop(Not,
5852                                                                                                                 bVar"b'3"),
5853                                                                                                             Bop(And,
5854                                                                                                                 Mop(Not,
5855                                                                                                                     bVar"b'2"),
5856                                                                                                                 Bop(And,
5857                                                                                                                     Mop(Not,
5858                                                                                                                         bVar"b'1"),
5859                                                                                                                     Mop(Not,
5860                                                                                                                         bVar"b'0"))))))))))))))))))))))))))),
5861             Call
5862               ("Branch",CTy"instruction",
5863                Call
5864                  ("BranchRegister",CTy"Branch",
5865                   TP[Mop(Cast(FTy 5),
5866                          LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
5867                             bVar"b'5"]),
5868                      LC("BranchType_RET",CTy"BranchType")]))),
5869            (Bop(And,bVar"b'31",
5870                 Bop(And,bVar"b'30",
5871                     Bop(And,Mop(Not,bVar"b'29"),
5872                         Bop(And,bVar"b'28",
5873                             Bop(And,Mop(Not,bVar"b'27"),
5874                                 Bop(And,bVar"b'26",
5875                                     Bop(And,bVar"b'25",
5876                                         Bop(And,Mop(Not,bVar"b'24"),
5877                                             Bop(And,Mop(Not,bVar"b'23"),
5878                                                 Bop(And,bVar"b'20",
5879                                                     Bop(And,bVar"b'19",
5880                                                         Bop(And,
5881                                                             bVar"b'18",
5882                                                             Bop(And,
5883                                                                 bVar"b'17",
5884                                                                 Bop(And,
5885                                                                     bVar"b'16",
5886                                                                     Bop(And,
5887                                                                         Mop(Not,
5888                                                                             bVar"b'15"),
5889                                                                         Bop(And,
5890                                                                             Mop(Not,
5891                                                                                 bVar"b'14"),
5892                                                                             Bop(And,
5893                                                                                 Mop(Not,
5894                                                                                     bVar"b'13"),
5895                                                                                 Bop(And,
5896                                                                                     Mop(Not,
5897                                                                                         bVar"b'12"),
5898                                                                                     Bop(And,
5899                                                                                         Mop(Not,
5900                                                                                             bVar"b'11"),
5901                                                                                         Bop(And,
5902                                                                                             Mop(Not,
5903                                                                                                 bVar"b'10"),
5904                                                                                             Bop(And,
5905                                                                                                 Mop(Not,
5906                                                                                                     bVar"b'4"),
5907                                                                                                 Bop(And,
5908                                                                                                     Mop(Not,
5909                                                                                                         bVar"b'3"),
5910                                                                                                     Bop(And,
5911                                                                                                         Mop(Not,
5912                                                                                                             bVar"b'2"),
5913                                                                                                         Bop(And,
5914                                                                                                             Mop(Not,
5915                                                                                                                 bVar"b'1"),
5916                                                                                                             Mop(Not,
5917                                                                                                                 bVar"b'0"))))))))))))))))))))))))),
5918             Const("Unallocated",CTy"instruction")),
5919            (Bop(And,Mop(Not,bVar"b'30"),
5920                 Bop(And,bVar"b'29",
5921                     Bop(And,bVar"b'28",
5922                         Bop(And,Mop(Not,bVar"b'27"),
5923                             Bop(And,bVar"b'26",Mop(Not,bVar"b'25")))))),
5924             Let(Var("Rt",FTy 5),
5925                 Mop(Cast(FTy 5),
5926                     LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",bVar"b'0"]),
5927                 Let(bVar"iszero",EQ(Mop(Cast F1,LL[bVar"b'24"]),LW(0,1)),
5928                     Let(Var("offset",F64),
5929                         Mop(SE F64,
5930                             CC[Mop(Cast(FTy 19),
5931                                    LL[bVar"b'23",bVar"b'22",bVar"b'21",
5932                                       bVar"b'20",bVar"b'19",bVar"b'18",
5933                                       bVar"b'17",bVar"b'16",bVar"b'15",
5934                                       bVar"b'14",bVar"b'13",bVar"b'12",
5935                                       bVar"b'11",bVar"b'10",bVar"b'9",
5936                                       bVar"b'8",bVar"b'7",bVar"b'6",
5937                                       bVar"b'5"]),LW(0,2)]),
5938                         ITE(EQ(Mop(Cast F1,LL[bVar"b'31"]),LW(1,1)),
5939                             Call
5940                               ("Branch",CTy"instruction",
5941                                Call
5942                                  ("CompareAndBranch@64",CTy"Branch",
5943                                   TP[LW(1,64),bVar"iszero",
5944                                      Var("offset",F64),Var("Rt",FTy 5)])),
5945                             Call
5946                               ("Branch",CTy"instruction",
5947                                Call
5948                                  ("CompareAndBranch@32",CTy"Branch",
5949                                   TP[LW(0,32),bVar"iszero",
5950                                      Var("offset",F64),Var("Rt",FTy 5)]))))))),
5951            (Bop(And,Mop(Not,bVar"b'30"),
5952                 Bop(And,bVar"b'29",
5953                     Bop(And,bVar"b'28",
5954                         Bop(And,Mop(Not,bVar"b'27"),
5955                             Bop(And,bVar"b'26",bVar"b'25"))))),
5956             Let(Var("Rt",FTy 5),
5957                 Mop(Cast(FTy 5),
5958                     LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",bVar"b'0"]),
5959                 Let(Var("sf",F1),Mop(Cast F1,LL[bVar"b'31"]),
5960                     Let(Var("bit_pos",FTy 6),
5961                         CC[Var("sf",F1),
5962                            Mop(Cast(FTy 5),
5963                                LL[bVar"b'23",bVar"b'22",bVar"b'21",
5964                                   bVar"b'20",bVar"b'19"])],
5965                         Let(bVar"bit_val",
5966                             Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'24"])),
5967                             Let(Var("offset",F64),
5968                                 Mop(SE F64,
5969                                     CC[Mop(Cast(FTy 14),
5970                                            LL[bVar"b'18",bVar"b'17",
5971                                               bVar"b'16",bVar"b'15",
5972                                               bVar"b'14",bVar"b'13",
5973                                               bVar"b'12",bVar"b'11",
5974                                               bVar"b'10",bVar"b'9",
5975                                               bVar"b'8",bVar"b'7",
5976                                               bVar"b'6",bVar"b'5"]),
5977                                        LW(0,2)]),
5978                                 ITE(EQ(Var("sf",F1),LW(1,1)),
5979                                     Call
5980                                       ("Branch",CTy"instruction",
5981                                        Call
5982                                          ("TestBitAndBranch@64",
5983                                           CTy"Branch",
5984                                           TP[LW(1,64),
5985                                              Var("bit_pos",FTy 6),
5986                                              bVar"bit_val",
5987                                              Var("offset",F64),
5988                                              Var("Rt",FTy 5)])),
5989                                     Call
5990                                       ("Branch",CTy"instruction",
5991                                        Call
5992                                          ("TestBitAndBranch@32",
5993                                           CTy"Branch",
5994                                           TP[LW(0,32),
5995                                              Var("bit_pos",FTy 6),
5996                                              bVar"bit_val",
5997                                              Var("offset",F64),
5998                                              Var("Rt",FTy 5)]))))))))),
5999            (Bop(And,bVar"b'31",
6000                 Bop(And,Mop(Not,bVar"b'30"),
6001                     Bop(And,bVar"b'29",
6002                         Bop(And,bVar"b'28",
6003                             Bop(And,bVar"b'27",
6004                                 Bop(And,Mop(Not,bVar"b'26"),
6005                                     Bop(And,Mop(Not,bVar"b'25"),
6006                                         Bop(And,Mop(Not,bVar"b'24"),
6007                                             Bop(And,bVar"b'23",
6008                                                 Bop(And,bVar"b'22",
6009                                                     Mop(Not,bVar"b'21"))))))))))),
6010             Const("Unallocated",CTy"instruction")),
6011            (Bop(And,bVar"b'31",
6012                 Bop(And,Mop(Not,bVar"b'30"),
6013                     Bop(And,bVar"b'29",
6014                         Bop(And,bVar"b'28",
6015                             Bop(And,bVar"b'27",
6016                                 Bop(And,Mop(Not,bVar"b'26"),
6017                                     Bop(And,Mop(Not,bVar"b'25"),
6018                                         Bop(And,bVar"b'24",
6019                                             Bop(And,bVar"b'23",bVar"b'22"))))))))),
6020             Const("Unallocated",CTy"instruction")),
6021            (Bop(And,bVar"b'31",
6022                 Bop(And,bVar"b'30",
6023                     Bop(And,bVar"b'29",
6024                         Bop(And,bVar"b'28",
6025                             Bop(And,bVar"b'27",
6026                                 Bop(And,Mop(Not,bVar"b'26"),
6027                                     Bop(And,Mop(Not,bVar"b'25"),
6028                                         Bop(And,Mop(Not,bVar"b'24"),
6029                                             Bop(And,bVar"b'23",
6030                                                 Bop(And,bVar"b'22",
6031                                                     Mop(Not,bVar"b'21"))))))))))),
6032             Const("Unallocated",CTy"instruction")),
6033            (Bop(And,bVar"b'31",
6034                 Bop(And,bVar"b'30",
6035                     Bop(And,bVar"b'29",
6036                         Bop(And,bVar"b'28",
6037                             Bop(And,bVar"b'27",
6038                                 Bop(And,Mop(Not,bVar"b'26"),
6039                                     Bop(And,Mop(Not,bVar"b'25"),
6040                                         Bop(And,Mop(Not,bVar"b'24"),
6041                                             Bop(And,bVar"b'23",
6042                                                 Bop(And,
6043                                                     Mop(Not,bVar"b'21"),
6044                                                     Bop(And,bVar"b'11",
6045                                                         Mop(Not,
6046                                                             bVar"b'10")))))))))))),
6047             Const("Unallocated",CTy"instruction")),
6048            (Bop(And,bVar"b'29",
6049                 Bop(And,bVar"b'28",
6050                     Bop(And,bVar"b'27",
6051                         Bop(And,Mop(Not,bVar"b'26"),
6052                             Bop(And,Mop(Not,bVar"b'25"),
6053                                 Bop(And,Mop(Not,bVar"b'24"),
6054                                     Bop(And,Mop(Not,bVar"b'21"),
6055                                         bVar"b'10"))))))),
6056             Call
6057               ("LoadStoreImmediate",CTy"instruction",
6058                TP[Mop(Cast(FTy 2),LL[bVar"b'31",bVar"b'30"]),
6059                   Mop(Cast(FTy 2),LL[bVar"b'23",bVar"b'22"]),
6060                   LC("AccType_NORMAL",CTy"AccType"),LT,
6061                   EQ(Mop(Cast F1,LL[bVar"b'11"]),LW(0,1)),LF,
6062                   Mop(SE F64,
6063                       Mop(Cast(FTy 9),
6064                           LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
6065                              bVar"b'16",bVar"b'15",bVar"b'14",bVar"b'13",
6066                              bVar"b'12"])),
6067                   Mop(Cast(FTy 5),
6068                       LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
6069                          bVar"b'5"]),
6070                   Mop(Cast(FTy 5),
6071                       LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
6072                          bVar"b'0"])])),
6073            (Bop(And,bVar"b'29",
6074                 Bop(And,bVar"b'28",
6075                     Bop(And,bVar"b'27",
6076                         Bop(And,Mop(Not,bVar"b'26"),
6077                             Bop(And,Mop(Not,bVar"b'25"),
6078                                 Bop(And,Mop(Not,bVar"b'24"),
6079                                     Bop(And,Mop(Not,bVar"b'21"),
6080                                         Mop(Not,bVar"b'10")))))))),
6081             Call
6082               ("LoadStoreImmediate",CTy"instruction",
6083                TP[Mop(Cast(FTy 2),LL[bVar"b'31",bVar"b'30"]),
6084                   Mop(Cast(FTy 2),LL[bVar"b'23",bVar"b'22"]),
6085                   ITE(EQ(Mop(Cast F1,LL[bVar"b'11"]),LW(1,1)),
6086                       LC("AccType_UNPRIV",CTy"AccType"),
6087                       LC("AccType_NORMAL",CTy"AccType")),LF,LF,LF,
6088                   Mop(SE F64,
6089                       Mop(Cast(FTy 9),
6090                           LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
6091                              bVar"b'16",bVar"b'15",bVar"b'14",bVar"b'13",
6092                              bVar"b'12"])),
6093                   Mop(Cast(FTy 5),
6094                       LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
6095                          bVar"b'5"]),
6096                   Mop(Cast(FTy 5),
6097                       LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
6098                          bVar"b'0"])])),
6099            (Bop(And,bVar"b'29",
6100                 Bop(And,bVar"b'28",
6101                     Bop(And,bVar"b'27",
6102                         Bop(And,Mop(Not,bVar"b'26"),
6103                             Bop(And,Mop(Not,bVar"b'25"),bVar"b'24"))))),
6104             Let(Var("size",FTy 2),
6105                 Mop(Cast(FTy 2),LL[bVar"b'31",bVar"b'30"]),
6106                 Call
6107                   ("LoadStoreImmediate",CTy"instruction",
6108                    TP[Var("size",FTy 2),
6109                       Mop(Cast(FTy 2),LL[bVar"b'23",bVar"b'22"]),
6110                       LC("AccType_NORMAL",CTy"AccType"),LF,LF,LT,
6111                       Bop(Lsl,
6112                           Mop(Cast F64,
6113                               Mop(Cast(FTy 12),
6114                                   LL[bVar"b'21",bVar"b'20",bVar"b'19",
6115                                      bVar"b'18",bVar"b'17",bVar"b'16",
6116                                      bVar"b'15",bVar"b'14",bVar"b'13",
6117                                      bVar"b'12",bVar"b'11",bVar"b'10"])),
6118                           Mop(Cast nTy,Var("size",FTy 2))),
6119                       Mop(Cast(FTy 5),
6120                           LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
6121                              bVar"b'5"]),
6122                       Mop(Cast(FTy 5),
6123                           LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
6124                              bVar"b'0"])]))),
6125            (Bop(And,bVar"b'31",
6126                 Bop(And,bVar"b'29",
6127                     Bop(And,bVar"b'28",
6128                         Bop(And,bVar"b'27",
6129                             Bop(And,Mop(Not,bVar"b'26"),
6130                                 Bop(And,Mop(Not,bVar"b'25"),
6131                                     Bop(And,Mop(Not,bVar"b'24"),
6132                                         Bop(And,bVar"b'23",
6133                                             Bop(And,bVar"b'22",
6134                                                 Bop(And,bVar"b'21",
6135                                                     Bop(And,bVar"b'11",
6136                                                         Mop(Not,
6137                                                             bVar"b'10")))))))))))),
6138             Const("Unallocated",CTy"instruction")),
6139            (Bop(And,bVar"b'29",
6140                 Bop(And,bVar"b'28",
6141                     Bop(And,bVar"b'27",
6142                         Bop(And,Mop(Not,bVar"b'26"),
6143                             Bop(And,Mop(Not,bVar"b'25"),
6144                                 Bop(And,Mop(Not,bVar"b'24"),
6145                                     Bop(And,bVar"b'21",
6146                                         Bop(And,Mop(Not,bVar"b'15"),
6147                                             Bop(And,Mop(Not,bVar"b'14"),
6148                                                 Bop(And,bVar"b'11",
6149                                                     Mop(Not,bVar"b'10"))))))))))),
6150             Const("Reserved",CTy"instruction")),
6151            (Bop(And,bVar"b'29",
6152                 Bop(And,bVar"b'28",
6153                     Bop(And,bVar"b'27",
6154                         Bop(And,Mop(Not,bVar"b'26"),
6155                             Bop(And,Mop(Not,bVar"b'25"),
6156                                 Bop(And,Mop(Not,bVar"b'24"),
6157                                     Bop(And,bVar"b'21",
6158                                         Bop(And,bVar"b'15",
6159                                             Bop(And,Mop(Not,bVar"b'14"),
6160                                                 Bop(And,bVar"b'11",
6161                                                     Mop(Not,bVar"b'10"))))))))))),
6162             Const("Reserved",CTy"instruction")),
6163            (Bop(And,bVar"b'29",
6164                 Bop(And,bVar"b'28",
6165                     Bop(And,bVar"b'27",
6166                         Bop(And,Mop(Not,bVar"b'26"),
6167                             Bop(And,Mop(Not,bVar"b'25"),
6168                                 Bop(And,Mop(Not,bVar"b'24"),
6169                                     Bop(And,bVar"b'21",
6170                                         Bop(And,bVar"b'11",
6171                                             Mop(Not,bVar"b'10"))))))))),
6172             Let(Var("opc",FTy 2),
6173                 Mop(Cast(FTy 2),LL[bVar"b'23",bVar"b'22"]),
6174                 Let(Var("size",FTy 2),
6175                     Mop(Cast(FTy 2),LL[bVar"b'31",bVar"b'30"]),
6176                     Let(TP[Var("memop",CTy"MemOp"),bVar"regsize_word",
6177                            bVar"signed"],
6178                         ITB([(Mop(Not,Bop(Bit,Var("opc",FTy 2),LN 1)),
6179                               TP[ITE(Bop(Bit,Var("opc",FTy 2),LN 0),
6180                                      LC("MemOp_LOAD",CTy"MemOp"),
6181                                      LC("MemOp_STORE",CTy"MemOp")),
6182                                  Mop(Not,EQ(Var("size",FTy 2),LW(3,2))),
6183                                  LF]),
6184                              (EQ(Var("size",FTy 2),LW(3,2)),
6185                               TP[LC("MemOp_PREFETCH",CTy"MemOp"),LX bTy,
6186                                  LX bTy])],
6187                             TP[LC("MemOp_LOAD",CTy"MemOp"),
6188                                Bop(Bit,Var("opc",FTy 2),LN 0),LT]),
6189                         Call
6190                           ("LoadStoreRegister",CTy"instruction",
6191                            TP[Var("size",FTy 2),bVar"regsize_word",
6192                               Var("memop",CTy"MemOp"),bVar"signed",
6193                               Mop(Cast(FTy 5),
6194                                   LL[bVar"b'20",bVar"b'19",bVar"b'18",
6195                                      bVar"b'17",bVar"b'16"]),
6196                               Call
6197                                 ("DecodeRegExtend",CTy"ExtendType",
6198                                  Mop(Cast(FTy 3),
6199                                      LL[bVar"b'15",bVar"b'14",bVar"b'13"])),
6200                               ITE(EQ(Mop(Cast F1,LL[bVar"b'12"]),LW(1,1)),
6201                                   Mop(Cast nTy,Var("size",FTy 2)),LN 0),
6202                               Mop(Cast(FTy 5),
6203                                   LL[bVar"b'9",bVar"b'8",bVar"b'7",
6204                                      bVar"b'6",bVar"b'5"]),
6205                               Mop(Cast(FTy 5),
6206                                   LL[bVar"b'4",bVar"b'3",bVar"b'2",
6207                                      bVar"b'1",bVar"b'0"])]))))),
6208            (Bop(And,Mop(Not,bVar"b'29"),
6209                 Bop(And,bVar"b'28",
6210                     Bop(And,bVar"b'27",
6211                         Bop(And,Mop(Not,bVar"b'26"),
6212                             Bop(And,Mop(Not,bVar"b'25"),
6213                                 Mop(Not,bVar"b'24")))))),
6214             Let(Var("Rt",FTy 5),
6215                 Mop(Cast(FTy 5),
6216                     LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",bVar"b'0"]),
6217                 Let(Var("offset",F64),
6218                     Mop(SE F64,
6219                         CC[Mop(Cast(FTy 19),
6220                                LL[bVar"b'23",bVar"b'22",bVar"b'21",
6221                                   bVar"b'20",bVar"b'19",bVar"b'18",
6222                                   bVar"b'17",bVar"b'16",bVar"b'15",
6223                                   bVar"b'14",bVar"b'13",bVar"b'12",
6224                                   bVar"b'11",bVar"b'10",bVar"b'9",
6225                                   bVar"b'8",bVar"b'7",bVar"b'6",bVar"b'5"]),
6226                            LW(0,2)]),
6227                     CS(Mop(Cast(FTy 2),LL[bVar"b'31",bVar"b'30"]),
6228                        [(LW(0,2),
6229                          Call
6230                            ("LoadStore",CTy"instruction",
6231                             Call
6232                               ("LoadLiteral@32",CTy"LoadStore",
6233                                TP[LW(0,32),LC("MemOp_LOAD",CTy"MemOp"),
6234                                   LF,Var("offset",F64),Var("Rt",FTy 5)]))),
6235                         (LW(1,2),
6236                          Call
6237                            ("LoadStore",CTy"instruction",
6238                             Call
6239                               ("LoadLiteral@64",CTy"LoadStore",
6240                                TP[LW(1,64),LC("MemOp_LOAD",CTy"MemOp"),
6241                                   LF,Var("offset",F64),Var("Rt",FTy 5)]))),
6242                         (LW(2,2),
6243                          Call
6244                            ("LoadStore",CTy"instruction",
6245                             Call
6246                               ("LoadLiteral@32",CTy"LoadStore",
6247                                TP[LW(2,32),LC("MemOp_LOAD",CTy"MemOp"),
6248                                   LT,Var("offset",F64),Var("Rt",FTy 5)]))),
6249                         (LW(3,2),
6250                          Call
6251                            ("LoadStore",CTy"instruction",
6252                             Call
6253                               ("LoadLiteral@32",CTy"LoadStore",
6254                                TP[LW(3,32),
6255                                   LC("MemOp_PREFETCH",CTy"MemOp"),LF,
6256                                   Var("offset",F64),Var("Rt",FTy 5)])))])))),
6257            (Bop(And,bVar"b'30",
6258                 Bop(And,bVar"b'29",
6259                     Bop(And,Mop(Not,bVar"b'28"),
6260                         Bop(And,bVar"b'27",
6261                             Bop(And,Mop(Not,bVar"b'26"),
6262                                 Bop(And,Mop(Not,bVar"b'25"),
6263                                     Mop(Not,bVar"b'22"))))))),
6264             Const("Unallocated",CTy"instruction")),
6265            (Bop(And,bVar"b'31",
6266                 Bop(And,bVar"b'30",
6267                     Bop(And,bVar"b'29",
6268                         Bop(And,Mop(Not,bVar"b'28"),
6269                             Bop(And,bVar"b'27",
6270                                 Bop(And,Mop(Not,bVar"b'26"),
6271                                     Mop(Not,bVar"b'25"))))))),
6272             Const("Unallocated",CTy"instruction")),
6273            (Bop(And,bVar"b'29",
6274                 Bop(And,Mop(Not,bVar"b'28"),
6275                     Bop(And,bVar"b'27",
6276                         Bop(And,Mop(Not,bVar"b'26"),
6277                             Bop(And,Mop(Not,bVar"b'25"),
6278                                 Bop(And,Mop(Not,bVar"b'24"),
6279                                     Mop(Not,bVar"b'23"))))))),
6280             Const("Unallocated",CTy"instruction")),
6281            (Bop(And,bVar"b'29",
6282                 Bop(And,Mop(Not,bVar"b'28"),
6283                     Bop(And,bVar"b'27",
6284                         Bop(And,Mop(Not,bVar"b'26"),Mop(Not,bVar"b'25"))))),
6285             Let(Var("sf",F1),Mop(Cast F1,LL[bVar"b'31"]),
6286                 Let(bVar"wback",EQ(Mop(Cast F1,LL[bVar"b'23"]),LW(1,1)),
6287                     Let(bVar"signed",
6288                         EQ(Mop(Cast F1,LL[bVar"b'30"]),LW(1,1)),
6289                         Let(bVar"postindex",
6290                             EQ(Mop(Cast F1,LL[bVar"b'24"]),LW(0,1)),
6291                             Let(bVar"nontemporal",
6292                                 Bop(And,
6293                                     Mop(Not,
6294                                         Bop(Or,bVar"wback",bVar"signed")),
6295                                     bVar"postindex"),
6296                                 Call
6297                                   ("LoadStorePair",CTy"instruction",
6298                                    TP[Var("sf",F1),
6299                                       ITE(EQ(Mop(Cast F1,LL[bVar"b'22"]),
6300                                              LW(1,1)),
6301                                           LC("MemOp_LOAD",CTy"MemOp"),
6302                                           LC("MemOp_STORE",CTy"MemOp")),
6303                                       ITE(bVar"nontemporal",
6304                                           LC("AccType_STREAM",
6305                                              CTy"AccType"),
6306                                           LC("AccType_NORMAL",
6307                                              CTy"AccType")),bVar"signed",
6308                                       bVar"wback",
6309                                       Bop(And,Mop(Not,bVar"nontemporal"),
6310                                           bVar"postindex"),
6311                                       Bop(Lsl,
6312                                           Mop(SE F64,
6313                                               Mop(Cast(FTy 7),
6314                                                   LL[bVar"b'21",
6315                                                      bVar"b'20",
6316                                                      bVar"b'19",
6317                                                      bVar"b'18",
6318                                                      bVar"b'17",
6319                                                      bVar"b'16",
6320                                                      bVar"b'15"])),
6321                                           Bop(Add,LN 2,
6322                                               Mop(Cast nTy,Var("sf",F1)))),
6323                                       Mop(Cast(FTy 5),
6324                                           LL[bVar"b'9",bVar"b'8",
6325                                              bVar"b'7",bVar"b'6",
6326                                              bVar"b'5"]),
6327                                       Mop(Cast(FTy 5),
6328                                           LL[bVar"b'4",bVar"b'3",
6329                                              bVar"b'2",bVar"b'1",
6330                                              bVar"b'0"]),
6331                                       Mop(Cast(FTy 5),
6332                                           LL[bVar"b'14",bVar"b'13",
6333                                              bVar"b'12",bVar"b'11",
6334                                              bVar"b'10"])]))))))),
6335            (Bop(And,Mop(Not,bVar"b'29"),
6336                 Bop(And,Mop(Not,bVar"b'28"),
6337                     Bop(And,bVar"b'27",
6338                         Bop(And,Mop(Not,bVar"b'26"),
6339                             Bop(And,Mop(Not,bVar"b'25"),
6340                                 Bop(And,Mop(Not,bVar"b'24"),
6341                                     Bop(And,bVar"b'23",
6342                                         Bop(And,Mop(Not,bVar"b'21"),
6343                                             Mop(Not,bVar"b'15"))))))))),
6344             Const("Unallocated",CTy"instruction")),
6345            (Bop(And,Mop(Not,bVar"b'29"),
6346                 Bop(And,Mop(Not,bVar"b'28"),
6347                     Bop(And,bVar"b'27",
6348                         Bop(And,Mop(Not,bVar"b'26"),
6349                             Bop(And,Mop(Not,bVar"b'25"),
6350                                 Bop(And,Mop(Not,bVar"b'24"),
6351                                     Bop(And,bVar"b'23",bVar"b'21"))))))),
6352             Const("Unallocated",CTy"instruction")),
6353            (Bop(And,Mop(Not,bVar"b'31"),
6354                 Bop(And,Mop(Not,bVar"b'29"),
6355                     Bop(And,Mop(Not,bVar"b'28"),
6356                         Bop(And,bVar"b'27",
6357                             Bop(And,Mop(Not,bVar"b'26"),
6358                                 Bop(And,Mop(Not,bVar"b'25"),
6359                                     Bop(And,Mop(Not,bVar"b'24"),
6360                                         bVar"b'21"))))))),
6361             Const("Unallocated",CTy"instruction")),
6362            (Bop(And,Mop(Not,bVar"b'29"),
6363                 Bop(And,Mop(Not,bVar"b'28"),
6364                     Bop(And,bVar"b'27",
6365                         Bop(And,Mop(Not,bVar"b'26"),
6366                             Bop(And,Mop(Not,bVar"b'25"),
6367                                 Mop(Not,bVar"b'24")))))),
6368             Call
6369               ("LoadStoreAcquire",CTy"instruction",
6370                TP[Mop(Cast(FTy 2),LL[bVar"b'31",bVar"b'30"]),
6371                   ITE(EQ(Mop(Cast F1,LL[bVar"b'22"]),LW(1,1)),
6372                       LC("MemOp_LOAD",CTy"MemOp"),
6373                       LC("MemOp_STORE",CTy"MemOp")),
6374                   ITE(EQ(Mop(Cast F1,LL[bVar"b'15"]),LW(1,1)),
6375                       LC("AccType_ORDERED",CTy"AccType"),
6376                       LC("AccType_ATOMIC",CTy"AccType")),
6377                   EQ(Mop(Cast F1,LL[bVar"b'23"]),LW(0,1)),
6378                   EQ(Mop(Cast F1,LL[bVar"b'21"]),LW(1,1)),
6379                   Mop(Cast(FTy 5),
6380                       LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
6381                          bVar"b'16"]),
6382                   Mop(Cast(FTy 5),
6383                       LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
6384                          bVar"b'5"]),
6385                   Mop(Cast(FTy 5),
6386                       LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
6387                          bVar"b'0"]),
6388                   Mop(Cast(FTy 5),
6389                       LL[bVar"b'14",bVar"b'13",bVar"b'12",bVar"b'11",
6390                          bVar"b'10"])])),
6391            (Bop(And,bVar"b'31",
6392                 Bop(And,bVar"b'30",
6393                     Bop(And,Mop(Not,bVar"b'29"),
6394                         Bop(And,bVar"b'28",
6395                             Bop(And,Mop(Not,bVar"b'27"),
6396                                 Bop(And,bVar"b'26",
6397                                     Bop(And,Mop(Not,bVar"b'25"),
6398                                         Bop(And,bVar"b'24",
6399                                             Bop(And,Mop(Not,bVar"b'23"),
6400                                                 Bop(And,
6401                                                     Mop(Not,bVar"b'22"),
6402                                                     bVar"b'20")))))))))),
6403             Call
6404               ("System",CTy"instruction",
6405                Call
6406                  ("MoveSystemRegister",CTy"System",
6407                   TP[Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'21"])),
6408                      Bop(Add,LW(2,3),
6409                          Mop(Cast(FTy 3),Mop(Cast F1,LL[bVar"b'19"]))),
6410                      Mop(Cast(FTy 3),LL[bVar"b'18",bVar"b'17",bVar"b'16"]),
6411                      Mop(Cast(FTy 3),LL[bVar"b'7",bVar"b'6",bVar"b'5"]),
6412                      Mop(Cast F4,
6413                          LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12"]),
6414                      Mop(Cast F4,
6415                          LL[bVar"b'11",bVar"b'10",bVar"b'9",bVar"b'8"]),
6416                      Mop(Cast(FTy 5),
6417                          LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
6418                             bVar"b'0"])]))),
6419            (Bop(And,bVar"b'31",
6420                 Bop(And,bVar"b'30",
6421                     Bop(And,Mop(Not,bVar"b'29"),
6422                         Bop(And,bVar"b'28",
6423                             Bop(And,Mop(Not,bVar"b'27"),
6424                                 Bop(And,bVar"b'26",
6425                                     Bop(And,Mop(Not,bVar"b'25"),
6426                                         Bop(And,bVar"b'24",
6427                                             Bop(And,Mop(Not,bVar"b'23"),
6428                                                 Bop(And,
6429                                                     Mop(Not,bVar"b'22"),
6430                                                     Bop(And,
6431                                                         Mop(Not,
6432                                                             bVar"b'21"),
6433                                                         Bop(And,
6434                                                             Mop(Not,
6435                                                                 bVar"b'20"),
6436                                                             Bop(And,
6437                                                                 Mop(Not,
6438                                                                     bVar"b'19"),
6439                                                                 Bop(And,
6440                                                                     Mop(Not,
6441                                                                         bVar"b'18"),
6442                                                                     Bop(And,
6443                                                                         Mop(Not,
6444                                                                             bVar"b'17"),
6445                                                                         Bop(And,
6446                                                                             Mop(Not,
6447                                                                                 bVar"b'16"),
6448                                                                             Bop(And,
6449                                                                                 Mop(Not,
6450                                                                                     bVar"b'15"),
6451                                                                                 Bop(And,
6452                                                                                     bVar"b'14",
6453                                                                                     Bop(And,
6454                                                                                         Mop(Not,
6455                                                                                             bVar"b'13"),
6456                                                                                         Bop(And,
6457                                                                                             Mop(Not,
6458                                                                                                 bVar"b'12"),
6459                                                                                             Bop(And,
6460                                                                                                 bVar"b'7",
6461                                                                                                 Bop(And,
6462                                                                                                     Mop(Not,
6463                                                                                                         bVar"b'6"),
6464                                                                                                     Bop(And,
6465                                                                                                         bVar"b'5",
6466                                                                                                         Bop(And,
6467                                                                                                             bVar"b'4",
6468                                                                                                             Bop(And,
6469                                                                                                                 bVar"b'3",
6470                                                                                                                 Bop(And,
6471                                                                                                                     bVar"b'2",
6472                                                                                                                     Bop(And,
6473                                                                                                                         bVar"b'1",
6474                                                                                                                         bVar"b'0"))))))))))))))))))))))))))),
6475             Call
6476               ("System",CTy"instruction",
6477                Call
6478                  ("MoveImmediateProcState",CTy"System",
6479                   TP[LC("PSTATEField_SP",CTy"PSTATEField"),
6480                      Mop(Cast F4,
6481                          LL[bVar"b'11",bVar"b'10",bVar"b'9",bVar"b'8"])]))),
6482            (Bop(And,bVar"b'31",
6483                 Bop(And,bVar"b'30",
6484                     Bop(And,Mop(Not,bVar"b'29"),
6485                         Bop(And,bVar"b'28",
6486                             Bop(And,Mop(Not,bVar"b'27"),
6487                                 Bop(And,bVar"b'26",
6488                                     Bop(And,Mop(Not,bVar"b'25"),
6489                                         Bop(And,bVar"b'24",
6490                                             Bop(And,Mop(Not,bVar"b'23"),
6491                                                 Bop(And,
6492                                                     Mop(Not,bVar"b'22"),
6493                                                     Bop(And,
6494                                                         Mop(Not,
6495                                                             bVar"b'21"),
6496                                                         Bop(And,
6497                                                             Mop(Not,
6498                                                                 bVar"b'20"),
6499                                                             Bop(And,
6500                                                                 Mop(Not,
6501                                                                     bVar"b'19"),
6502                                                                 Bop(And,
6503                                                                     Mop(Not,
6504                                                                         bVar"b'18"),
6505                                                                     Bop(And,
6506                                                                         bVar"b'17",
6507                                                                         Bop(And,
6508                                                                             bVar"b'16",
6509                                                                             Bop(And,
6510                                                                                 Mop(Not,
6511                                                                                     bVar"b'15"),
6512                                                                                 Bop(And,
6513                                                                                     bVar"b'14",
6514                                                                                     Bop(And,
6515                                                                                         Mop(Not,
6516                                                                                             bVar"b'13"),
6517                                                                                         Bop(And,
6518                                                                                             Mop(Not,
6519                                                                                                 bVar"b'12"),
6520                                                                                             Bop(And,
6521                                                                                                 bVar"b'7",
6522                                                                                                 Bop(And,
6523                                                                                                     bVar"b'6",
6524                                                                                                     Bop(And,
6525                                                                                                         Mop(Not,
6526                                                                                                             bVar"b'5"),
6527                                                                                                         Bop(And,
6528                                                                                                             bVar"b'4",
6529                                                                                                             Bop(And,
6530                                                                                                                 bVar"b'3",
6531                                                                                                                 Bop(And,
6532                                                                                                                     bVar"b'2",
6533                                                                                                                     Bop(And,
6534                                                                                                                         bVar"b'1",
6535                                                                                                                         bVar"b'0"))))))))))))))))))))))))))),
6536             Call
6537               ("System",CTy"instruction",
6538                Call
6539                  ("MoveImmediateProcState",CTy"System",
6540                   TP[LC("PSTATEField_DAIFSet",CTy"PSTATEField"),
6541                      Mop(Cast F4,
6542                          LL[bVar"b'11",bVar"b'10",bVar"b'9",bVar"b'8"])]))),
6543            (Bop(And,bVar"b'31",
6544                 Bop(And,bVar"b'30",
6545                     Bop(And,Mop(Not,bVar"b'29"),
6546                         Bop(And,bVar"b'28",
6547                             Bop(And,Mop(Not,bVar"b'27"),
6548                                 Bop(And,bVar"b'26",
6549                                     Bop(And,Mop(Not,bVar"b'25"),
6550                                         Bop(And,bVar"b'24",
6551                                             Bop(And,Mop(Not,bVar"b'23"),
6552                                                 Bop(And,
6553                                                     Mop(Not,bVar"b'22"),
6554                                                     Bop(And,
6555                                                         Mop(Not,
6556                                                             bVar"b'21"),
6557                                                         Bop(And,
6558                                                             Mop(Not,
6559                                                                 bVar"b'20"),
6560                                                             Bop(And,
6561                                                                 Mop(Not,
6562                                                                     bVar"b'19"),
6563                                                                 Bop(And,
6564                                                                     Mop(Not,
6565                                                                         bVar"b'18"),
6566                                                                     Bop(And,
6567                                                                         bVar"b'17",
6568                                                                         Bop(And,
6569                                                                             bVar"b'16",
6570                                                                             Bop(And,
6571                                                                                 Mop(Not,
6572                                                                                     bVar"b'15"),
6573                                                                                 Bop(And,
6574                                                                                     bVar"b'14",
6575                                                                                     Bop(And,
6576                                                                                         Mop(Not,
6577                                                                                             bVar"b'13"),
6578                                                                                         Bop(And,
6579                                                                                             Mop(Not,
6580                                                                                                 bVar"b'12"),
6581                                                                                             Bop(And,
6582                                                                                                 bVar"b'7",
6583                                                                                                 Bop(And,
6584                                                                                                     bVar"b'6",
6585                                                                                                     Bop(And,
6586                                                                                                         bVar"b'5",
6587                                                                                                         Bop(And,
6588                                                                                                             bVar"b'4",
6589                                                                                                             Bop(And,
6590                                                                                                                 bVar"b'3",
6591                                                                                                                 Bop(And,
6592                                                                                                                     bVar"b'2",
6593                                                                                                                     Bop(And,
6594                                                                                                                         bVar"b'1",
6595                                                                                                                         bVar"b'0"))))))))))))))))))))))))))),
6596             Call
6597               ("System",CTy"instruction",
6598                Call
6599                  ("MoveImmediateProcState",CTy"System",
6600                   TP[LC("PSTATEField_DAIFClr",CTy"PSTATEField"),
6601                      Mop(Cast F4,
6602                          LL[bVar"b'11",bVar"b'10",bVar"b'9",bVar"b'8"])]))),
6603            (Bop(And,bVar"b'31",
6604                 Bop(And,bVar"b'30",
6605                     Bop(And,Mop(Not,bVar"b'29"),
6606                         Bop(And,bVar"b'28",
6607                             Bop(And,Mop(Not,bVar"b'27"),
6608                                 Bop(And,bVar"b'26",
6609                                     Bop(And,Mop(Not,bVar"b'25"),
6610                                         Bop(And,bVar"b'24",
6611                                             Bop(And,Mop(Not,bVar"b'23"),
6612                                                 Bop(And,
6613                                                     Mop(Not,bVar"b'22"),
6614                                                     Bop(And,
6615                                                         Mop(Not,
6616                                                             bVar"b'21"),
6617                                                         Bop(And,
6618                                                             Mop(Not,
6619                                                                 bVar"b'20"),
6620                                                             Bop(And,
6621                                                                 Mop(Not,
6622                                                                     bVar"b'19"),
6623                                                                 Bop(And,
6624                                                                     Mop(Not,
6625                                                                         bVar"b'18"),
6626                                                                     Bop(And,
6627                                                                         bVar"b'17",
6628                                                                         Bop(And,
6629                                                                             bVar"b'16",
6630                                                                             Bop(And,
6631                                                                                 Mop(Not,
6632                                                                                     bVar"b'15"),
6633                                                                                 Bop(And,
6634                                                                                     Mop(Not,
6635                                                                                         bVar"b'14"),
6636                                                                                     Bop(And,
6637                                                                                         bVar"b'13",
6638                                                                                         Bop(And,
6639                                                                                             bVar"b'12",
6640                                                                                             Bop(And,
6641                                                                                                 bVar"b'7",
6642                                                                                                 Bop(And,
6643                                                                                                     bVar"b'6",
6644                                                                                                     Bop(And,
6645                                                                                                         bVar"b'5",
6646                                                                                                         Bop(And,
6647                                                                                                             bVar"b'4",
6648                                                                                                             Bop(And,
6649                                                                                                                 bVar"b'3",
6650                                                                                                                 Bop(And,
6651                                                                                                                     bVar"b'2",
6652                                                                                                                     Bop(And,
6653                                                                                                                         bVar"b'1",
6654                                                                                                                         bVar"b'0"))))))))))))))))))))))))))),
6655             Const("Unallocated",CTy"instruction")),
6656            (Bop(And,bVar"b'31",
6657                 Bop(And,bVar"b'30",
6658                     Bop(And,Mop(Not,bVar"b'29"),
6659                         Bop(And,bVar"b'28",
6660                             Bop(And,Mop(Not,bVar"b'27"),
6661                                 Bop(And,bVar"b'26",
6662                                     Bop(And,Mop(Not,bVar"b'25"),
6663                                         Bop(And,bVar"b'24",
6664                                             Bop(And,Mop(Not,bVar"b'23"),
6665                                                 Bop(And,
6666                                                     Mop(Not,bVar"b'22"),
6667                                                     Bop(And,
6668                                                         Mop(Not,
6669                                                             bVar"b'21"),
6670                                                         Bop(And,
6671                                                             Mop(Not,
6672                                                                 bVar"b'20"),
6673                                                             Bop(And,
6674                                                                 Mop(Not,
6675                                                                     bVar"b'19"),
6676                                                                 Bop(And,
6677                                                                     Mop(Not,
6678                                                                         bVar"b'18"),
6679                                                                     Bop(And,
6680                                                                         bVar"b'17",
6681                                                                         Bop(And,
6682                                                                             bVar"b'16",
6683                                                                             Bop(And,
6684                                                                                 Mop(Not,
6685                                                                                     bVar"b'15"),
6686                                                                                 Bop(And,
6687                                                                                     Mop(Not,
6688                                                                                         bVar"b'14"),
6689                                                                                     Bop(And,
6690                                                                                         bVar"b'13",
6691                                                                                         Bop(And,
6692                                                                                             bVar"b'12",
6693                                                                                             Bop(And,
6694                                                                                                 bVar"b'7",
6695                                                                                                 Bop(And,
6696                                                                                                     bVar"b'4",
6697                                                                                                     Bop(And,
6698                                                                                                         bVar"b'3",
6699                                                                                                         Bop(And,
6700                                                                                                             bVar"b'2",
6701                                                                                                             Bop(And,
6702                                                                                                                 bVar"b'1",
6703                                                                                                                 bVar"b'0"))))))))))))))))))))))))),
6704             Call
6705               ("MemoryBarrier",CTy"instruction",
6706                TP[Mop(Cast(CTy"MemBarrierOp"),
6707                       Mop(Cast(FTy 2),LL[bVar"b'6",bVar"b'5"])),
6708                   Mop(Cast F4,
6709                       LL[bVar"b'11",bVar"b'10",bVar"b'9",bVar"b'8"])])),
6710            (Bop(And,bVar"b'31",
6711                 Bop(And,bVar"b'30",
6712                     Bop(And,Mop(Not,bVar"b'29"),
6713                         Bop(And,bVar"b'28",
6714                             Bop(And,Mop(Not,bVar"b'27"),
6715                                 Bop(And,bVar"b'26",
6716                                     Bop(And,Mop(Not,bVar"b'25"),
6717                                         Bop(And,Mop(Not,bVar"b'24"),
6718                                             Bop(And,Mop(Not,bVar"b'23"),
6719                                                 Bop(And,
6720                                                     Mop(Not,bVar"b'22"),
6721                                                     Bop(And,bVar"b'21",
6722                                                         Bop(And,
6723                                                             Mop(Not,
6724                                                                 bVar"b'4"),
6725                                                             Bop(And,
6726                                                                 Mop(Not,
6727                                                                     bVar"b'3"),
6728                                                                 Bop(And,
6729                                                                     Mop(Not,
6730                                                                         bVar"b'2"),
6731                                                                     Bop(And,
6732                                                                         Mop(Not,
6733                                                                             bVar"b'1"),
6734                                                                         Mop(Not,
6735                                                                             bVar"b'0")))))))))))))))),
6736             Call
6737               ("Debug",CTy"instruction",
6738                Call
6739                  ("Breakpoint",CTy"Debug",
6740                   Mop(Cast F16,
6741                       LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
6742                          bVar"b'16",bVar"b'15",bVar"b'14",bVar"b'13",
6743                          bVar"b'12",bVar"b'11",bVar"b'10",bVar"b'9",
6744                          bVar"b'8",bVar"b'7",bVar"b'6",bVar"b'5"])))),
6745            (Bop(And,bVar"b'31",
6746                 Bop(And,bVar"b'30",
6747                     Bop(And,Mop(Not,bVar"b'29"),
6748                         Bop(And,bVar"b'28",
6749                             Bop(And,Mop(Not,bVar"b'27"),
6750                                 Bop(And,bVar"b'26",
6751                                     Bop(And,Mop(Not,bVar"b'25"),
6752                                         Bop(And,bVar"b'24",
6753                                             Bop(And,Mop(Not,bVar"b'23"),
6754                                                 Bop(And,
6755                                                     Mop(Not,bVar"b'22"),
6756                                                     Bop(And,
6757                                                         Mop(Not,
6758                                                             bVar"b'21"),
6759                                                         Bop(And,
6760                                                             Mop(Not,
6761                                                                 bVar"b'20"),
6762                                                             Bop(And,
6763                                                                 Mop(Not,
6764                                                                     bVar"b'19"),
6765                                                                 Bop(And,
6766                                                                     Mop(Not,
6767                                                                         bVar"b'18"),
6768                                                                     Bop(And,
6769                                                                         bVar"b'17",
6770                                                                         Bop(And,
6771                                                                             bVar"b'16",
6772                                                                             Bop(And,
6773                                                                                 Mop(Not,
6774                                                                                     bVar"b'15"),
6775                                                                                 Bop(And,
6776                                                                                     Mop(Not,
6777                                                                                         bVar"b'14"),
6778                                                                                     Bop(And,
6779                                                                                         bVar"b'13",
6780                                                                                         Bop(And,
6781                                                                                             Mop(Not,
6782                                                                                                 bVar"b'12"),
6783                                                                                             Bop(And,
6784                                                                                                 bVar"b'4",
6785                                                                                                 Bop(And,
6786                                                                                                     bVar"b'3",
6787                                                                                                     Bop(And,
6788                                                                                                         bVar"b'2",
6789                                                                                                         Bop(And,
6790                                                                                                             bVar"b'1",
6791                                                                                                             bVar"b'0")))))))))))))))))))))))),
6792             Let(Var("op2",FTy 3),
6793                 Mop(Cast(FTy 3),LL[bVar"b'7",bVar"b'6",bVar"b'5"]),
6794                 Call
6795                   ("Hint",CTy"instruction",
6796                    ITE(Bop(And,
6797                            EQ(Mop(Cast F4,
6798                                   LL[bVar"b'11",bVar"b'10",bVar"b'9",
6799                                      bVar"b'8"]),LW(0,4)),
6800                            Bop(Ult,Var("op2",FTy 3),LW(6,3))),
6801                        Mop(Cast(CTy"SystemHintOp"),Var("op2",FTy 3)),
6802                        LC("SystemHintOp_NOP",CTy"SystemHintOp"))))),
6803            (Bop(And,bVar"b'31",
6804                 Bop(And,bVar"b'30",
6805                     Bop(And,Mop(Not,bVar"b'29"),
6806                         Bop(And,bVar"b'28",
6807                             Bop(And,Mop(Not,bVar"b'27"),
6808                                 Bop(And,bVar"b'26",
6809                                     Bop(And,Mop(Not,bVar"b'25"),
6810                                         Bop(And,bVar"b'24",
6811                                             Bop(And,Mop(Not,bVar"b'23"),
6812                                                 Bop(And,
6813                                                     Mop(Not,bVar"b'22"),
6814                                                     Bop(And,
6815                                                         Mop(Not,
6816                                                             bVar"b'21"),
6817                                                         Bop(And,
6818                                                             Mop(Not,
6819                                                                 bVar"b'20"),
6820                                                             Bop(And,
6821                                                                 Mop(Not,
6822                                                                     bVar"b'19"),
6823                                                                 Bop(And,
6824                                                                     Mop(Not,
6825                                                                         bVar"b'18"),
6826                                                                     Bop(And,
6827                                                                         bVar"b'17",
6828                                                                         Bop(And,
6829                                                                             bVar"b'16",
6830                                                                             Bop(And,
6831                                                                                 Mop(Not,
6832                                                                                     bVar"b'15"),
6833                                                                                 Bop(And,
6834                                                                                     Mop(Not,
6835                                                                                         bVar"b'14"),
6836                                                                                     Bop(And,
6837                                                                                         bVar"b'13",
6838                                                                                         Bop(And,
6839                                                                                             bVar"b'12",
6840                                                                                             Bop(And,
6841                                                                                                 Mop(Not,
6842                                                                                                     bVar"b'7"),
6843                                                                                                 Bop(And,
6844                                                                                                     bVar"b'6",
6845                                                                                                     Bop(And,
6846                                                                                                         Mop(Not,
6847                                                                                                             bVar"b'5"),
6848                                                                                                         Bop(And,
6849                                                                                                             bVar"b'4",
6850                                                                                                             Bop(And,
6851                                                                                                                 bVar"b'3",
6852                                                                                                                 Bop(And,
6853                                                                                                                     bVar"b'2",
6854                                                                                                                     Bop(And,
6855                                                                                                                         bVar"b'1",
6856                                                                                                                         bVar"b'0"))))))))))))))))))))))))))),
6857             Call
6858               ("ClearExclusive",CTy"instruction",
6859                Mop(Cast F4,LL[bVar"b'11",bVar"b'10",bVar"b'9",bVar"b'8"]))),
6860            (Bop(And,bVar"b'31",
6861                 Bop(And,bVar"b'30",
6862                     Bop(And,Mop(Not,bVar"b'29"),
6863                         Bop(And,bVar"b'28",
6864                             Bop(And,Mop(Not,bVar"b'27"),
6865                                 Bop(And,bVar"b'26",
6866                                     Bop(And,bVar"b'25",
6867                                         Bop(And,Mop(Not,bVar"b'24"),
6868                                             Bop(And,bVar"b'23",
6869                                                 Bop(And,
6870                                                     Mop(Not,bVar"b'22"),
6871                                                     Bop(And,bVar"b'21",
6872                                                         Bop(And,
6873                                                             bVar"b'20",
6874                                                             Bop(And,
6875                                                                 bVar"b'19",
6876                                                                 Bop(And,
6877                                                                     bVar"b'18",
6878                                                                     Bop(And,
6879                                                                         bVar"b'17",
6880                                                                         Bop(And,
6881                                                                             bVar"b'16",
6882                                                                             Bop(And,
6883                                                                                 Mop(Not,
6884                                                                                     bVar"b'15"),
6885                                                                                 Bop(And,
6886                                                                                     Mop(Not,
6887                                                                                         bVar"b'14"),
6888                                                                                     Bop(And,
6889                                                                                         Mop(Not,
6890                                                                                             bVar"b'13"),
6891                                                                                         Bop(And,
6892                                                                                             Mop(Not,
6893                                                                                                 bVar"b'12"),
6894                                                                                             Bop(And,
6895                                                                                                 Mop(Not,
6896                                                                                                     bVar"b'11"),
6897                                                                                                 Bop(And,
6898                                                                                                     Mop(Not,
6899                                                                                                         bVar"b'10"),
6900                                                                                                     Bop(And,
6901                                                                                                         bVar"b'9",
6902                                                                                                         Bop(And,
6903                                                                                                             bVar"b'8",
6904                                                                                                             Bop(And,
6905                                                                                                                 bVar"b'7",
6906                                                                                                                 Bop(And,
6907                                                                                                                     bVar"b'6",
6908                                                                                                                     Bop(And,
6909                                                                                                                         bVar"b'5",
6910                                                                                                                         Bop(And,
6911                                                                                                                             Mop(Not,
6912                                                                                                                                 bVar"b'4"),
6913                                                                                                                             Bop(And,
6914                                                                                                                                 Mop(Not,
6915                                                                                                                                     bVar"b'3"),
6916                                                                                                                                 Bop(And,
6917                                                                                                                                     Mop(Not,
6918                                                                                                                                         bVar"b'2"),
6919                                                                                                                                     Bop(And,
6920                                                                                                                                         Mop(Not,
6921                                                                                                                                             bVar"b'1"),
6922                                                                                                                                         Mop(Not,
6923                                                                                                                                             bVar"b'0")))))))))))))))))))))))))))))))),
6924             Call
6925               ("Debug",CTy"instruction",Const("DebugRestore",CTy"Debug"))),
6926            (Bop(And,bVar"b'31",
6927                 Bop(And,bVar"b'30",
6928                     Bop(And,Mop(Not,bVar"b'29"),
6929                         Bop(And,bVar"b'28",
6930                             Bop(And,Mop(Not,bVar"b'27"),
6931                                 Bop(And,bVar"b'26",
6932                                     Bop(And,Mop(Not,bVar"b'25"),
6933                                         Bop(And,Mop(Not,bVar"b'24"),
6934                                             Bop(And,bVar"b'23",
6935                                                 Bop(And,
6936                                                     Mop(Not,bVar"b'22"),
6937                                                     Bop(And,bVar"b'21",
6938                                                         Bop(And,
6939                                                             Mop(Not,
6940                                                                 bVar"b'4"),
6941                                                             Bop(And,
6942                                                                 Mop(Not,
6943                                                                     bVar"b'3"),
6944                                                                 Mop(Not,
6945                                                                     bVar"b'2")))))))))))))),
6946             Call
6947               ("Debug",CTy"instruction",
6948                Call
6949                  ("DebugSwitch",CTy"Debug",
6950                   Mop(Cast(FTy 2),LL[bVar"b'1",bVar"b'0"])))),
6951            (Bop(And,bVar"b'31",
6952                 Bop(And,bVar"b'30",
6953                     Bop(And,Mop(Not,bVar"b'29"),
6954                         Bop(And,bVar"b'28",
6955                             Bop(And,Mop(Not,bVar"b'27"),
6956                                 Bop(And,bVar"b'26",
6957                                     Bop(And,Mop(Not,bVar"b'25"),
6958                                         Bop(And,Mop(Not,bVar"b'24"),
6959                                             Bop(And,Mop(Not,bVar"b'23"),
6960                                                 Bop(And,bVar"b'22",
6961                                                     Bop(And,
6962                                                         Mop(Not,
6963                                                             bVar"b'21"),
6964                                                         Bop(And,
6965                                                             Mop(Not,
6966                                                                 bVar"b'4"),
6967                                                             Bop(And,
6968                                                                 Mop(Not,
6969                                                                     bVar"b'3"),
6970                                                                 Bop(And,
6971                                                                     Mop(Not,
6972                                                                         bVar"b'2"),
6973                                                                     Bop(And,
6974                                                                         Mop(Not,
6975                                                                             bVar"b'1"),
6976                                                                         Mop(Not,
6977                                                                             bVar"b'0")))))))))))))))),
6978             Call
6979               ("Debug",CTy"instruction",
6980                Call
6981                  ("Halt",CTy"Debug",
6982                   Mop(Cast F16,
6983                       LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
6984                          bVar"b'16",bVar"b'15",bVar"b'14",bVar"b'13",
6985                          bVar"b'12",bVar"b'11",bVar"b'10",bVar"b'9",
6986                          bVar"b'8",bVar"b'7",bVar"b'6",bVar"b'5"])))),
6987            (Bop(And,bVar"b'31",
6988                 Bop(And,bVar"b'30",
6989                     Bop(And,Mop(Not,bVar"b'29"),
6990                         Bop(And,bVar"b'28",
6991                             Bop(And,Mop(Not,bVar"b'27"),
6992                                 Bop(And,bVar"b'26",
6993                                     Bop(And,bVar"b'25",
6994                                         Bop(And,Mop(Not,bVar"b'24"),
6995                                             Bop(And,bVar"b'23",
6996                                                 Bop(And,
6997                                                     Mop(Not,bVar"b'22"),
6998                                                     Bop(And,
6999                                                         Mop(Not,
7000                                                             bVar"b'21"),
7001                                                         Bop(And,
7002                                                             bVar"b'20",
7003                                                             Bop(And,
7004                                                                 bVar"b'19",
7005                                                                 Bop(And,
7006                                                                     bVar"b'18",
7007                                                                     Bop(And,
7008                                                                         bVar"b'17",
7009                                                                         Bop(And,
7010                                                                             bVar"b'16",
7011                                                                             Bop(And,
7012                                                                                 Mop(Not,
7013                                                                                     bVar"b'15"),
7014                                                                                 Bop(And,
7015                                                                                     Mop(Not,
7016                                                                                         bVar"b'14"),
7017                                                                                     Bop(And,
7018                                                                                         Mop(Not,
7019                                                                                             bVar"b'13"),
7020                                                                                         Bop(And,
7021                                                                                             Mop(Not,
7022                                                                                                 bVar"b'12"),
7023                                                                                             Bop(And,
7024                                                                                                 Mop(Not,
7025                                                                                                     bVar"b'11"),
7026                                                                                                 Bop(And,
7027                                                                                                     Mop(Not,
7028                                                                                                         bVar"b'10"),
7029                                                                                                     Bop(And,
7030                                                                                                         bVar"b'9",
7031                                                                                                         Bop(And,
7032                                                                                                             bVar"b'8",
7033                                                                                                             Bop(And,
7034                                                                                                                 bVar"b'7",
7035                                                                                                                 Bop(And,
7036                                                                                                                     bVar"b'6",
7037                                                                                                                     Bop(And,
7038                                                                                                                         bVar"b'5",
7039                                                                                                                         Bop(And,
7040                                                                                                                             Mop(Not,
7041                                                                                                                                 bVar"b'4"),
7042                                                                                                                             Bop(And,
7043                                                                                                                                 Mop(Not,
7044                                                                                                                                     bVar"b'3"),
7045                                                                                                                                 Bop(And,
7046                                                                                                                                     Mop(Not,
7047                                                                                                                                         bVar"b'2"),
7048                                                                                                                                     Bop(And,
7049                                                                                                                                         Mop(Not,
7050                                                                                                                                             bVar"b'1"),
7051                                                                                                                                         Mop(Not,
7052                                                                                                                                             bVar"b'0")))))))))))))))))))))))))))))))),
7053             Call
7054               ("System",CTy"instruction",
7055                Const("ExceptionReturn",CTy"System"))),
7056            (Bop(And,bVar"b'31",
7057                 Bop(And,bVar"b'30",
7058                     Bop(And,Mop(Not,bVar"b'29"),
7059                         Bop(And,bVar"b'28",
7060                             Bop(And,Mop(Not,bVar"b'27"),
7061                                 Bop(And,bVar"b'26",
7062                                     Bop(And,Mop(Not,bVar"b'25"),
7063                                         Bop(And,Mop(Not,bVar"b'24"),
7064                                             Bop(And,Mop(Not,bVar"b'23"),
7065                                                 Bop(And,
7066                                                     Mop(Not,bVar"b'22"),
7067                                                     Bop(And,
7068                                                         Mop(Not,
7069                                                             bVar"b'21"),
7070                                                         Bop(And,
7071                                                             Mop(Not,
7072                                                                 bVar"b'4"),
7073                                                             Bop(And,
7074                                                                 Mop(Not,
7075                                                                     bVar"b'3"),
7076                                                                 Bop(And,
7077                                                                     Mop(Not,
7078                                                                         bVar"b'2"),
7079                                                                     Bop(And,
7080                                                                         Mop(Not,
7081                                                                             bVar"b'1"),
7082                                                                         bVar"b'0"))))))))))))))),
7083             Call
7084               ("System",CTy"instruction",
7085                Call
7086                  ("SupervisorCall",CTy"System",
7087                   Mop(Cast F16,
7088                       LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
7089                          bVar"b'16",bVar"b'15",bVar"b'14",bVar"b'13",
7090                          bVar"b'12",bVar"b'11",bVar"b'10",bVar"b'9",
7091                          bVar"b'8",bVar"b'7",bVar"b'6",bVar"b'5"])))),
7092            (Bop(And,bVar"b'31",
7093                 Bop(And,bVar"b'30",
7094                     Bop(And,Mop(Not,bVar"b'29"),
7095                         Bop(And,bVar"b'28",
7096                             Bop(And,Mop(Not,bVar"b'27"),
7097                                 Bop(And,bVar"b'26",
7098                                     Bop(And,Mop(Not,bVar"b'25"),
7099                                         Bop(And,Mop(Not,bVar"b'24"),
7100                                             Bop(And,Mop(Not,bVar"b'23"),
7101                                                 Bop(And,
7102                                                     Mop(Not,bVar"b'22"),
7103                                                     Bop(And,
7104                                                         Mop(Not,
7105                                                             bVar"b'21"),
7106                                                         Bop(And,
7107                                                             Mop(Not,
7108                                                                 bVar"b'4"),
7109                                                             Bop(And,
7110                                                                 Mop(Not,
7111                                                                     bVar"b'3"),
7112                                                                 Bop(And,
7113                                                                     Mop(Not,
7114                                                                         bVar"b'2"),
7115                                                                     Bop(And,
7116                                                                         bVar"b'1",
7117                                                                         Mop(Not,
7118                                                                             bVar"b'0")))))))))))))))),
7119             Call
7120               ("System",CTy"instruction",
7121                Call
7122                  ("HypervisorCall",CTy"System",
7123                   Mop(Cast F16,
7124                       LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
7125                          bVar"b'16",bVar"b'15",bVar"b'14",bVar"b'13",
7126                          bVar"b'12",bVar"b'11",bVar"b'10",bVar"b'9",
7127                          bVar"b'8",bVar"b'7",bVar"b'6",bVar"b'5"])))),
7128            (Bop(And,bVar"b'31",
7129                 Bop(And,bVar"b'30",
7130                     Bop(And,Mop(Not,bVar"b'29"),
7131                         Bop(And,bVar"b'28",
7132                             Bop(And,Mop(Not,bVar"b'27"),
7133                                 Bop(And,bVar"b'26",
7134                                     Bop(And,Mop(Not,bVar"b'25"),
7135                                         Bop(And,Mop(Not,bVar"b'24"),
7136                                             Bop(And,Mop(Not,bVar"b'23"),
7137                                                 Bop(And,
7138                                                     Mop(Not,bVar"b'22"),
7139                                                     Bop(And,
7140                                                         Mop(Not,
7141                                                             bVar"b'21"),
7142                                                         Bop(And,
7143                                                             Mop(Not,
7144                                                                 bVar"b'4"),
7145                                                             Bop(And,
7146                                                                 Mop(Not,
7147                                                                     bVar"b'3"),
7148                                                                 Bop(And,
7149                                                                     Mop(Not,
7150                                                                         bVar"b'2"),
7151                                                                     Bop(And,
7152                                                                         bVar"b'1",
7153                                                                         bVar"b'0"))))))))))))))),
7154             Call
7155               ("System",CTy"instruction",
7156                Call
7157                  ("SecureMonitorCall",CTy"System",
7158                   Mop(Cast F16,
7159                       LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
7160                          bVar"b'16",bVar"b'15",bVar"b'14",bVar"b'13",
7161                          bVar"b'12",bVar"b'11",bVar"b'10",bVar"b'9",
7162                          bVar"b'8",bVar"b'7",bVar"b'6",bVar"b'5"])))),
7163            (Bop(And,bVar"b'31",
7164                 Bop(And,bVar"b'30",
7165                     Bop(And,Mop(Not,bVar"b'29"),
7166                         Bop(And,bVar"b'28",
7167                             Bop(And,Mop(Not,bVar"b'27"),
7168                                 Bop(And,bVar"b'26",
7169                                     Bop(And,Mop(Not,bVar"b'25"),
7170                                         Bop(And,bVar"b'24",
7171                                             Bop(And,Mop(Not,bVar"b'23"),
7172                                                 Bop(And,
7173                                                     Mop(Not,bVar"b'22"),
7174                                                     Bop(And,
7175                                                         Mop(Not,
7176                                                             bVar"b'20"),
7177                                                         bVar"b'19"))))))))))),
7178             Call
7179               ("System",CTy"instruction",
7180                Call
7181                  ("SystemInstruction",CTy"System",
7182                   TP[Mop(Cast(FTy 3),LL[bVar"b'18",bVar"b'17",bVar"b'16"]),
7183                      Mop(Cast(FTy 3),LL[bVar"b'7",bVar"b'6",bVar"b'5"]),
7184                      Mop(Cast F4,
7185                          LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12"]),
7186                      Mop(Cast F4,
7187                          LL[bVar"b'11",bVar"b'10",bVar"b'9",bVar"b'8"]),
7188                      Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'21"])),
7189                      Mop(Cast(FTy 5),
7190                          LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
7191                             bVar"b'0"])])))],
7192           Const("Unallocated",CTy"instruction"))))
7193;
7194val Fetch_def = Def
7195  ("Fetch",qVar"state",
7196   Apply
7197     (Call
7198        ("Mem",ATy(qTy,PTy(F32,qTy)),
7199         TP[Dest("PC",F64,qVar"state"),LN 4,
7200            LC("AccType_IFETCH",CTy"AccType")]),qVar"state"))
7201;
7202val Next_def = Def
7203  ("Next",qVar"state",
7204   Let(TP[Var("v",F32),qVar"s"],
7205       Apply
7206         (Const("Fetch",ATy(qTy,PTy(F32,qTy))),
7207          Rupd("branch_hint",TP[qVar"state",LO(CTy"BranchType")])),
7208       Let(qVar"s",
7209           Apply
7210             (Call
7211                ("Run",ATy(qTy,qTy),
7212                 Call("Decode",CTy"instruction",Var("v",F32))),qVar"s"),
7213           ITE(Mop(Not,
7214                   Mop(IsSome,
7215                       Dest("branch_hint",OTy(CTy"BranchType"),qVar"s"))),
7216               Rupd
7217                 ("PC",
7218                  TP[qVar"s",Bop(Add,Dest("PC",F64,qVar"s"),LW(4,64))]),
7219               qVar"s"))))
7220;
7221val CountTrailing_def = tDef
7222  ("CountTrailing",TP[bVar"b",Var("w",BTy"N")],
7223   ITE(Bop(Or,EQ(Bop(Bit,Var("w",BTy"N"),LN 0),bVar"b"),
7224           ITE(bVar"b",EQ(Var("w",BTy"N"),LY(0,"N")),
7225               EQ(Var("w",BTy"N"),Mop(Neg,LY(1,"N"))))),LN 0,
7226       Bop(Add,LN 1,
7227           Call
7228             ("CountTrailing",nTy,
7229              TP[bVar"b",Bop(Lsr,Var("w",BTy"N"),LN 1)]))),
7230   Close(TP[bVar"b",Var("w",BTy"N")],Mop(Cast nTy,Var("w",BTy"N"))),
7231   SRW_TAC [] [wordsTheory.LSR_LESS]
7232THEN Cases_on `w = 0w`
7233THEN FULL_SIMP_TAC (srw_ss()) [wordsTheory.word_0, wordsTheory.LSR_LESS]
7234)
7235;
7236val EncodeBitMaskAux_def = Def
7237  ("EncodeBitMaskAux",Var("imm",BTy"N"),
7238   Let(nVar"pref0",Call("CountTrailing",nTy,TP[LT,Var("imm",BTy"N")]),
7239       ITE(EQ(nVar"pref0",LN 0),
7240           Let(nVar"pref1",
7241               Call("CountTrailing",nTy,TP[LF,Var("imm",BTy"N")]),
7242               Let(nVar"run0",
7243                   Call
7244                     ("CountTrailing",nTy,
7245                      TP[LT,Bop(Ror,Var("imm",BTy"N"),nVar"pref1")]),
7246                   Let(nVar"run1",
7247                       Call
7248                         ("CountTrailing",nTy,
7249                          TP[LF,
7250                             Bop(Ror,Var("imm",BTy"N"),
7251                                 Bop(Add,nVar"pref1",nVar"run0"))]),
7252                       TP[Bop(Add,nVar"run0",nVar"run1"),nVar"run1",
7253                          Bop(Sub,nVar"run1",nVar"pref1")]))),
7254           Let(nVar"run1",
7255               Call
7256                 ("CountTrailing",nTy,
7257                  TP[LF,Bop(Ror,Var("imm",BTy"N"),nVar"pref0")]),
7258               Let(nVar"run0",
7259                   Call
7260                     ("CountTrailing",nTy,
7261                      TP[LT,
7262                         Bop(Ror,Var("imm",BTy"N"),
7263                             Bop(Add,nVar"pref0",nVar"run1"))]),
7264                   TP[Bop(Add,nVar"run0",nVar"run1"),nVar"run1",
7265                      Bop(Sub,Bop(Add,nVar"run0",nVar"run1"),nVar"pref0")])))))
7266;
7267val EncodeBitMask_def = Def
7268  ("EncodeBitMask",Var("imm",BTy"N"),
7269   Let(TP[nVar"e",nVar"S",nVar"R"],
7270       Call("EncodeBitMaskAux",PTy(nTy,PTy(nTy,nTy)),Var("imm",BTy"N")),
7271       Let(TP[Var("immN",F1),Var("imms",FTy 6),Var("immr",FTy 6)],
7272           ITE(EQ(nVar"e",LN 64),
7273               TP[LW(1,1),Mop(Cast(FTy 6),Bop(Sub,nVar"S",LN 1)),
7274                  Mop(Cast(FTy 6),nVar"R")],
7275               TP[LW(0,1),
7276                  Bop(BOr,
7277                      Mop(BNot,
7278                          Mop(Cast(FTy 6),
7279                              Bop(Sub,Bop(Mul,nVar"e",LN 2),LN 1))),
7280                      Mop(Cast(FTy 6),Bop(Sub,nVar"S",LN 1))),
7281                  Mop(Cast(FTy 6),nVar"R")]),
7282           CS(Call
7283                ("DecodeBitMasks",OTy(PTy(BTy"N",BTy"N")),
7284                 TP[Var("immN",F1),Var("imms",FTy 6),Var("immr",FTy 6),LT]),
7285              [(Mop(Some,TP[Var("imm2",BTy"N"),AVar(BTy"N")]),
7286                ITE(EQ(Var("imm",BTy"N"),Var("imm2",BTy"N")),
7287                    Mop(Some,
7288                        TP[Var("immN",F1),Var("imms",FTy 6),
7289                           Var("immr",FTy 6)]),
7290                    LO(PTy(F1,PTy(FTy 6,FTy 6))))),
7291               (LO(PTy(BTy"N",BTy"N")),LO(PTy(F1,PTy(FTy 6,FTy 6))))]))))
7292;
7293val e_sf_def = Def
7294  ("e_sf",Var("sf",BTy"N"),Mop(Cast F1,EQ(Mop(Size,LY(0,"N")),LN 64)))
7295;
7296val EncodeLogicalOp_def = Def
7297  ("EncodeLogicalOp",TP[Var("opc",CTy"LogicalOp"),bVar"setflags"],
7298   CS(TP[Var("opc",CTy"LogicalOp"),bVar"setflags"],
7299      [(TP[LC("LogicalOp_AND",CTy"LogicalOp"),LF],Mop(Some,LW(0,2))),
7300       (TP[LC("LogicalOp_ORR",CTy"LogicalOp"),LF],Mop(Some,LW(1,2))),
7301       (TP[LC("LogicalOp_EOR",CTy"LogicalOp"),LF],Mop(Some,LW(2,2))),
7302       (TP[LC("LogicalOp_AND",CTy"LogicalOp"),LT],Mop(Some,LW(3,2))),
7303       (AVar(PTy(CTy"LogicalOp",bTy)),LO(FTy 2))]))
7304;
7305val e_data_def = Def
7306  ("e_data",Var("i",CTy"Data"),
7307   CS(Var("i",CTy"Data"),
7308      [(Call
7309          ("AddSubShiftedRegister@32",CTy"Data",
7310           TP[AVar F32,bVar"opc",bVar"s",Var("sh",CTy"ShiftType"),
7311              Var("rm",FTy 5),Var("imm6",FTy 6),Var("rn",FTy 5),
7312              Var("rd",FTy 5)]),
7313        ITE(Bop(Bit,Var("imm6",FTy 6),LN 5),
7314            Call("BadCode",CTy"MachineCode",LS"AddSubShiftedRegister32"),
7315            Call
7316              ("ARM8",CTy"MachineCode",
7317               CC[LW(0,1),Mop(Cast F1,bVar"opc"),Mop(Cast F1,bVar"s"),
7318                  LW(11,5),Mop(Cast(FTy 2),Var("sh",CTy"ShiftType")),
7319                  LW(0,1),Var("rm",FTy 5),Var("imm6",FTy 6),
7320                  Var("rn",FTy 5),Var("rd",FTy 5)]))),
7321       (Call
7322          ("AddSubShiftedRegister@64",CTy"Data",
7323           TP[AVar F64,bVar"opc",bVar"s",Var("sh",CTy"ShiftType"),
7324              Var("rm",FTy 5),Var("imm6",FTy 6),Var("rn",FTy 5),
7325              Var("rd",FTy 5)]),
7326        Call
7327          ("ARM8",CTy"MachineCode",
7328           CC[LW(1,1),Mop(Cast F1,bVar"opc"),Mop(Cast F1,bVar"s"),
7329              LW(11,5),Mop(Cast(FTy 2),Var("sh",CTy"ShiftType")),LW(0,1),
7330              Var("rm",FTy 5),Var("imm6",FTy 6),Var("rn",FTy 5),
7331              Var("rd",FTy 5)])),
7332       (Call
7333          ("AddSubExtendRegister@32",CTy"Data",
7334           TP[Var("sf",F32),bVar"opc",bVar"s",Var("rm",FTy 5),
7335              Var("sty",CTy"ExtendType"),Var("imm3",FTy 3),
7336              Var("rn",FTy 5),Var("rd",FTy 5)]),
7337        Call
7338          ("ARM8",CTy"MachineCode",
7339           CC[Call("e_sf",F1,Var("sf",F32)),Mop(Cast F1,bVar"opc"),
7340              Mop(Cast F1,bVar"s"),LW(89,8),Var("rm",FTy 5),
7341              Mop(Cast(FTy 3),Var("sty",CTy"ExtendType")),
7342              Var("imm3",FTy 3),Var("rn",FTy 5),Var("rd",FTy 5)])),
7343       (Call
7344          ("AddSubExtendRegister@64",CTy"Data",
7345           TP[Var("sf",F64),bVar"opc",bVar"s",Var("rm",FTy 5),
7346              Var("sty",CTy"ExtendType"),Var("imm3",FTy 3),
7347              Var("rn",FTy 5),Var("rd",FTy 5)]),
7348        Call
7349          ("ARM8",CTy"MachineCode",
7350           CC[Call("e_sf",F1,Var("sf",F64)),Mop(Cast F1,bVar"opc"),
7351              Mop(Cast F1,bVar"s"),LW(89,8),Var("rm",FTy 5),
7352              Mop(Cast(FTy 3),Var("sty",CTy"ExtendType")),
7353              Var("imm3",FTy 3),Var("rn",FTy 5),Var("rd",FTy 5)])),
7354       (Call
7355          ("AddSubImmediate@32",CTy"Data",
7356           TP[Var("sf",F32),bVar"opc",bVar"s",Var("imm",F32),
7357              Var("rn",FTy 5),Var("rd",FTy 5)]),
7358        ITB([(EQ(Bop(BAnd,Var("imm",F32),Mop(BNot,LW(4095,32))),LW(0,32)),
7359              Call
7360                ("ARM8",CTy"MachineCode",
7361                 CC[Call("e_sf",F1,Var("sf",F32)),Mop(Cast F1,bVar"opc"),
7362                    Mop(Cast F1,bVar"s"),LW(68,7),
7363                    EX(Var("imm",F32),LN 11,LN 0,FTy 12),Var("rn",FTy 5),
7364                    Var("rd",FTy 5)])),
7365             (EQ(Bop(BAnd,Var("imm",F32),Mop(BNot,LW(16773120,32))),
7366                 LW(0,32)),
7367              Call
7368                ("ARM8",CTy"MachineCode",
7369                 CC[Call("e_sf",F1,Var("sf",F32)),Mop(Cast F1,bVar"opc"),
7370                    Mop(Cast F1,bVar"s"),LW(69,7),
7371                    EX(Var("imm",F32),LN 23,LN 12,FTy 12),Var("rn",FTy 5),
7372                    Var("rd",FTy 5)]))],
7373            Call("BadCode",CTy"MachineCode",LS"AddSubImmediate"))),
7374       (Call
7375          ("AddSubImmediate@64",CTy"Data",
7376           TP[Var("sf",F64),bVar"opc",bVar"s",Var("imm",F64),
7377              Var("rn",FTy 5),Var("rd",FTy 5)]),
7378        ITB([(EQ(Bop(BAnd,Var("imm",F64),Mop(BNot,LW(4095,64))),LW(0,64)),
7379              Call
7380                ("ARM8",CTy"MachineCode",
7381                 CC[Call("e_sf",F1,Var("sf",F64)),Mop(Cast F1,bVar"opc"),
7382                    Mop(Cast F1,bVar"s"),LW(68,7),
7383                    EX(Var("imm",F64),LN 11,LN 0,FTy 12),Var("rn",FTy 5),
7384                    Var("rd",FTy 5)])),
7385             (EQ(Bop(BAnd,Var("imm",F64),Mop(BNot,LW(16773120,64))),
7386                 LW(0,64)),
7387              Call
7388                ("ARM8",CTy"MachineCode",
7389                 CC[Call("e_sf",F1,Var("sf",F64)),Mop(Cast F1,bVar"opc"),
7390                    Mop(Cast F1,bVar"s"),LW(69,7),
7391                    EX(Var("imm",F64),LN 23,LN 12,FTy 12),Var("rn",FTy 5),
7392                    Var("rd",FTy 5)]))],
7393            Call("BadCode",CTy"MachineCode",LS"AddSubImmediate"))),
7394       (Call
7395          ("AddSubCarry@32",CTy"Data",
7396           TP[AVar F32,bVar"opc",bVar"s",Var("rm",FTy 5),Var("rn",FTy 5),
7397              Var("rd",FTy 5)]),
7398        Call
7399          ("ARM8",CTy"MachineCode",
7400           CC[LW(0,1),Mop(Cast F1,bVar"opc"),Mop(Cast F1,bVar"s"),
7401              LW(208,8),Var("rm",FTy 5),LW(0,6),Var("rn",FTy 5),
7402              Var("rd",FTy 5)])),
7403       (Call
7404          ("AddSubCarry@64",CTy"Data",
7405           TP[AVar F64,bVar"opc",bVar"s",Var("rm",FTy 5),Var("rn",FTy 5),
7406              Var("rd",FTy 5)]),
7407        Call
7408          ("ARM8",CTy"MachineCode",
7409           CC[LW(1,1),Mop(Cast F1,bVar"opc"),Mop(Cast F1,bVar"s"),
7410              LW(208,8),Var("rm",FTy 5),LW(0,6),Var("rn",FTy 5),
7411              Var("rd",FTy 5)])),
7412       (Call
7413          ("LogicalShiftedRegister@32",CTy"Data",
7414           TP[Var("sf",F32),Var("opc",CTy"LogicalOp"),bVar"invert",
7415              bVar"s",Var("sh",CTy"ShiftType"),nVar"imm",Var("rm",FTy 5),
7416              Var("rn",FTy 5),Var("rd",FTy 5)]),
7417        CS(Call
7418             ("EncodeLogicalOp",OTy(FTy 2),
7419              TP[Var("opc",CTy"LogicalOp"),bVar"s"]),
7420           [(Mop(Some,Var("opc",FTy 2)),
7421             Let(Var("imm6",FTy 6),Mop(Cast(FTy 6),nVar"imm"),
7422                 ITE(EQ(nVar"imm",Mop(Cast nTy,Var("imm6",FTy 6))),
7423                     Call
7424                       ("ARM8",CTy"MachineCode",
7425                        CC[Call("e_sf",F1,Var("sf",F32)),Var("opc",FTy 2),
7426                           LW(10,5),
7427                           Mop(Cast(FTy 2),Var("sh",CTy"ShiftType")),
7428                           Mop(Cast F1,bVar"invert"),Var("rm",FTy 5),
7429                           Var("imm6",FTy 6),Var("rn",FTy 5),
7430                           Var("rd",FTy 5)]),
7431                     Call
7432                       ("BadCode",CTy"MachineCode",
7433                        LS"LogicalShiftedRegister")))),
7434            (LO(FTy 2),
7435             Call("BadCode",CTy"MachineCode",LS"LogicalShiftedRegister"))])),
7436       (Call
7437          ("LogicalShiftedRegister@64",CTy"Data",
7438           TP[Var("sf",F64),Var("opc",CTy"LogicalOp"),bVar"invert",
7439              bVar"s",Var("sh",CTy"ShiftType"),nVar"imm",Var("rm",FTy 5),
7440              Var("rn",FTy 5),Var("rd",FTy 5)]),
7441        CS(Call
7442             ("EncodeLogicalOp",OTy(FTy 2),
7443              TP[Var("opc",CTy"LogicalOp"),bVar"s"]),
7444           [(Mop(Some,Var("opc",FTy 2)),
7445             Let(Var("imm6",FTy 6),Mop(Cast(FTy 6),nVar"imm"),
7446                 ITE(EQ(nVar"imm",Mop(Cast nTy,Var("imm6",FTy 6))),
7447                     Call
7448                       ("ARM8",CTy"MachineCode",
7449                        CC[Call("e_sf",F1,Var("sf",F64)),Var("opc",FTy 2),
7450                           LW(10,5),
7451                           Mop(Cast(FTy 2),Var("sh",CTy"ShiftType")),
7452                           Mop(Cast F1,bVar"invert"),Var("rm",FTy 5),
7453                           Var("imm6",FTy 6),Var("rn",FTy 5),
7454                           Var("rd",FTy 5)]),
7455                     Call
7456                       ("BadCode",CTy"MachineCode",
7457                        LS"LogicalShiftedRegister")))),
7458            (LO(FTy 2),
7459             Call("BadCode",CTy"MachineCode",LS"LogicalShiftedRegister"))])),
7460       (Call
7461          ("LogicalImmediate@32",CTy"Data",
7462           TP[AVar F32,Var("opc",CTy"LogicalOp"),bVar"s",Var("imm",F32),
7463              Var("rn",FTy 5),Var("rd",FTy 5)]),
7464        CS(TP[Call
7465                ("EncodeBitMask",OTy(PTy(F1,PTy(FTy 6,FTy 6))),
7466                 Var("imm",F32)),
7467              Call
7468                ("EncodeLogicalOp",OTy(FTy 2),
7469                 TP[Var("opc",CTy"LogicalOp"),bVar"s"])],
7470           [(TP[Mop(Some,TP[AVar F1,Var("imms",FTy 6),Var("immr",FTy 6)]),
7471                Mop(Some,Var("opc",FTy 2))],
7472             Call
7473               ("ARM8",CTy"MachineCode",
7474                CC[LW(0,1),Var("opc",FTy 2),LW(72,7),Var("immr",FTy 6),
7475                   Var("imms",FTy 6),Var("rn",FTy 5),Var("rd",FTy 5)])),
7476            (AVar(PTy(OTy(PTy(F1,PTy(FTy 6,FTy 6))),OTy(FTy 2))),
7477             Call("BadCode",CTy"MachineCode",LS"LogicalImmediate32"))])),
7478       (Call
7479          ("LogicalImmediate@64",CTy"Data",
7480           TP[AVar F64,Var("opc",CTy"LogicalOp"),bVar"s",Var("imm",F64),
7481              Var("rn",FTy 5),Var("rd",FTy 5)]),
7482        CS(TP[Call
7483                ("EncodeBitMask",OTy(PTy(F1,PTy(FTy 6,FTy 6))),
7484                 Var("imm",F64)),
7485              Call
7486                ("EncodeLogicalOp",OTy(FTy 2),
7487                 TP[Var("opc",CTy"LogicalOp"),bVar"s"])],
7488           [(TP[Mop(Some,
7489                    TP[Var("N",F1),Var("imms",FTy 6),Var("immr",FTy 6)]),
7490                Mop(Some,Var("opc",FTy 2))],
7491             Call
7492               ("ARM8",CTy"MachineCode",
7493                CC[LW(1,1),Var("opc",FTy 2),LW(36,6),Var("N",F1),
7494                   Var("immr",FTy 6),Var("imms",FTy 6),Var("rn",FTy 5),
7495                   Var("rd",FTy 5)])),
7496            (AVar(PTy(OTy(PTy(F1,PTy(FTy 6,FTy 6))),OTy(FTy 2))),
7497             Call("BadCode",CTy"MachineCode",LS"LogicalImmediate64"))])),
7498       (Call
7499          ("Shift@32",CTy"Data",
7500           TP[AVar F32,Var("sh",CTy"ShiftType"),Var("rm",FTy 5),
7501              Var("rn",FTy 5),Var("rd",FTy 5)]),
7502        Call
7503          ("ARM8",CTy"MachineCode",
7504           CC[LW(214,11),Var("rm",FTy 5),LW(2,4),
7505              Mop(Cast(FTy 2),Var("sh",CTy"ShiftType")),Var("rn",FTy 5),
7506              Var("rd",FTy 5)])),
7507       (Call
7508          ("Shift@64",CTy"Data",
7509           TP[AVar F64,Var("sh",CTy"ShiftType"),Var("rm",FTy 5),
7510              Var("rn",FTy 5),Var("rd",FTy 5)]),
7511        Call
7512          ("ARM8",CTy"MachineCode",
7513           CC[LW(1238,11),Var("rm",FTy 5),LW(2,4),
7514              Mop(Cast(FTy 2),Var("sh",CTy"ShiftType")),Var("rn",FTy 5),
7515              Var("rd",FTy 5)])),
7516       (Call
7517          ("MoveWide@32",CTy"Data",
7518           TP[AVar F32,Var("opc",CTy"MoveWideOp"),Var("hw",FTy 2),
7519              Var("imm16",F16),Var("rd",FTy 5)]),
7520        Call
7521          ("ARM8",CTy"MachineCode",
7522           CC[LW(0,1),
7523              CS(Var("opc",CTy"MoveWideOp"),
7524                 [(LC("MoveWideOp_N",CTy"MoveWideOp"),LW(0,2)),
7525                  (LC("MoveWideOp_Z",CTy"MoveWideOp"),LW(2,2)),
7526                  (LC("MoveWideOp_K",CTy"MoveWideOp"),LW(3,2))]),LW(37,6),
7527              Var("hw",FTy 2),Var("imm16",F16),Var("rd",FTy 5)])),
7528       (Call
7529          ("MoveWide@64",CTy"Data",
7530           TP[AVar F64,Var("opc",CTy"MoveWideOp"),Var("hw",FTy 2),
7531              Var("imm16",F16),Var("rd",FTy 5)]),
7532        Call
7533          ("ARM8",CTy"MachineCode",
7534           CC[LW(1,1),
7535              CS(Var("opc",CTy"MoveWideOp"),
7536                 [(LC("MoveWideOp_N",CTy"MoveWideOp"),LW(0,2)),
7537                  (LC("MoveWideOp_Z",CTy"MoveWideOp"),LW(2,2)),
7538                  (LC("MoveWideOp_K",CTy"MoveWideOp"),LW(3,2))]),LW(37,6),
7539              Var("hw",FTy 2),Var("imm16",F16),Var("rd",FTy 5)])),
7540       (Call
7541          ("BitfieldMove@32",CTy"Data",
7542           TP[Var("sf",F32),bVar"inzero",bVar"extend",Var("wmask",F32),
7543              Var("tmask",F32),nVar"immr",nVar"imms",Var("rn",FTy 5),
7544              Var("rd",FTy 5)]),
7545        Let(Var("sz",F1),Call("e_sf",F1,Var("sf",F32)),
7546            CS(CS(TP[bVar"inzero",bVar"extend"],
7547                  [(TP[LT,LT],Mop(Some,LW(0,2))),
7548                   (TP[LF,LF],Mop(Some,LW(1,2))),
7549                   (TP[LT,LF],Mop(Some,LW(2,2))),
7550                   (AVar(PTy(bTy,bTy)),LO(FTy 2))]),
7551               [(Mop(Some,Var("opc",FTy 2)),
7552                 Let(Var("r",FTy 6),Mop(Cast(FTy 6),nVar"immr"),
7553                     Let(Var("s",FTy 6),Mop(Cast(FTy 6),nVar"imms"),
7554                         ITE(Bop(And,
7555                                 EQ(nVar"immr",
7556                                    Mop(Cast nTy,Var("r",FTy 6))),
7557                                 Bop(And,
7558                                     EQ(nVar"imms",
7559                                        Mop(Cast nTy,Var("s",FTy 6))),
7560                                     EQ(Call
7561                                          ("DecodeBitMasks",
7562                                           OTy(PTy(F32,F32)),
7563                                           TP[Var("sz",F1),Var("s",FTy 6),
7564                                              Var("r",FTy 6),LF]),
7565                                        Mop(Some,
7566                                            TP[Var("wmask",F32),
7567                                               Var("tmask",F32)])))),
7568                             Call
7569                               ("ARM8",CTy"MachineCode",
7570                                CC[Var("sz",F1),Var("opc",FTy 2),LW(38,6),
7571                                   Var("sz",F1),Var("r",FTy 6),
7572                                   Var("s",FTy 6),Var("rn",FTy 5),
7573                                   Var("rd",FTy 5)]),
7574                             Call
7575                               ("BadCode",CTy"MachineCode",
7576                                LS"BitfieldMove"))))),
7577                (LO(FTy 2),
7578                 Call("BadCode",CTy"MachineCode",LS"BitfieldMove"))]))),
7579       (Call
7580          ("BitfieldMove@64",CTy"Data",
7581           TP[Var("sf",F64),bVar"inzero",bVar"extend",Var("wmask",F64),
7582              Var("tmask",F64),nVar"immr",nVar"imms",Var("rn",FTy 5),
7583              Var("rd",FTy 5)]),
7584        Let(Var("sz",F1),Call("e_sf",F1,Var("sf",F64)),
7585            CS(CS(TP[bVar"inzero",bVar"extend"],
7586                  [(TP[LT,LT],Mop(Some,LW(0,2))),
7587                   (TP[LF,LF],Mop(Some,LW(1,2))),
7588                   (TP[LT,LF],Mop(Some,LW(2,2))),
7589                   (AVar(PTy(bTy,bTy)),LO(FTy 2))]),
7590               [(Mop(Some,Var("opc",FTy 2)),
7591                 Let(Var("r",FTy 6),Mop(Cast(FTy 6),nVar"immr"),
7592                     Let(Var("s",FTy 6),Mop(Cast(FTy 6),nVar"imms"),
7593                         ITE(Bop(And,
7594                                 EQ(nVar"immr",
7595                                    Mop(Cast nTy,Var("r",FTy 6))),
7596                                 Bop(And,
7597                                     EQ(nVar"imms",
7598                                        Mop(Cast nTy,Var("s",FTy 6))),
7599                                     EQ(Call
7600                                          ("DecodeBitMasks",
7601                                           OTy(PTy(F64,F64)),
7602                                           TP[Var("sz",F1),Var("s",FTy 6),
7603                                              Var("r",FTy 6),LF]),
7604                                        Mop(Some,
7605                                            TP[Var("wmask",F64),
7606                                               Var("tmask",F64)])))),
7607                             Call
7608                               ("ARM8",CTy"MachineCode",
7609                                CC[Var("sz",F1),Var("opc",FTy 2),LW(38,6),
7610                                   Var("sz",F1),Var("r",FTy 6),
7611                                   Var("s",FTy 6),Var("rn",FTy 5),
7612                                   Var("rd",FTy 5)]),
7613                             Call
7614                               ("BadCode",CTy"MachineCode",
7615                                LS"BitfieldMove"))))),
7616                (LO(FTy 2),
7617                 Call("BadCode",CTy"MachineCode",LS"BitfieldMove"))]))),
7618       (Call
7619          ("ConditionalCompareImmediate@32",CTy"Data",
7620           TP[Var("sf",F32),bVar"opc",Var("imm",F32),Var("cd",F4),
7621              TP[bVar"n",bVar"z",bVar"c",bVar"v"],Var("rn",FTy 5)]),
7622        Let(Var("imm5",FTy 5),Mop(Cast(FTy 5),Var("imm",F32)),
7623            ITE(EQ(Var("imm",F32),Mop(Cast F32,Var("imm5",FTy 5))),
7624                Call
7625                  ("ARM8",CTy"MachineCode",
7626                   CC[Call("e_sf",F1,Var("sf",F32)),
7627                      Mop(Cast F1,bVar"opc"),LW(466,9),Var("imm5",FTy 5),
7628                      Var("cd",F4),LW(2,2),Var("rn",FTy 5),LW(0,1),
7629                      Mop(Cast F1,bVar"n"),Mop(Cast F1,bVar"z"),
7630                      Mop(Cast F1,bVar"c"),Mop(Cast F1,bVar"v")]),
7631                Call
7632                  ("BadCode",CTy"MachineCode",
7633                   LS"ConditionalCompareImmediate")))),
7634       (Call
7635          ("ConditionalCompareImmediate@64",CTy"Data",
7636           TP[Var("sf",F64),bVar"opc",Var("imm",F64),Var("cd",F4),
7637              TP[bVar"n",bVar"z",bVar"c",bVar"v"],Var("rn",FTy 5)]),
7638        Let(Var("imm5",FTy 5),Mop(Cast(FTy 5),Var("imm",F64)),
7639            ITE(EQ(Var("imm",F64),Mop(Cast F64,Var("imm5",FTy 5))),
7640                Call
7641                  ("ARM8",CTy"MachineCode",
7642                   CC[Call("e_sf",F1,Var("sf",F64)),
7643                      Mop(Cast F1,bVar"opc"),LW(466,9),Var("imm5",FTy 5),
7644                      Var("cd",F4),LW(2,2),Var("rn",FTy 5),LW(0,1),
7645                      Mop(Cast F1,bVar"n"),Mop(Cast F1,bVar"z"),
7646                      Mop(Cast F1,bVar"c"),Mop(Cast F1,bVar"v")]),
7647                Call
7648                  ("BadCode",CTy"MachineCode",
7649                   LS"ConditionalCompareImmediate")))),
7650       (Call
7651          ("ConditionalCompareRegister@32",CTy"Data",
7652           TP[Var("sf",F32),bVar"opc",Var("cd",F4),
7653              TP[bVar"n",bVar"z",bVar"c",bVar"v"],Var("rm",FTy 5),
7654              Var("rn",FTy 5)]),
7655        Call
7656          ("ARM8",CTy"MachineCode",
7657           CC[Call("e_sf",F1,Var("sf",F32)),Mop(Cast F1,bVar"opc"),
7658              LW(466,9),Var("rm",FTy 5),Var("cd",F4),LW(0,2),
7659              Var("rn",FTy 5),LW(0,1),Mop(Cast F1,bVar"n"),
7660              Mop(Cast F1,bVar"z"),Mop(Cast F1,bVar"c"),
7661              Mop(Cast F1,bVar"v")])),
7662       (Call
7663          ("ConditionalCompareRegister@64",CTy"Data",
7664           TP[Var("sf",F64),bVar"opc",Var("cd",F4),
7665              TP[bVar"n",bVar"z",bVar"c",bVar"v"],Var("rm",FTy 5),
7666              Var("rn",FTy 5)]),
7667        Call
7668          ("ARM8",CTy"MachineCode",
7669           CC[Call("e_sf",F1,Var("sf",F64)),Mop(Cast F1,bVar"opc"),
7670              LW(466,9),Var("rm",FTy 5),Var("cd",F4),LW(0,2),
7671              Var("rn",FTy 5),LW(0,1),Mop(Cast F1,bVar"n"),
7672              Mop(Cast F1,bVar"z"),Mop(Cast F1,bVar"c"),
7673              Mop(Cast F1,bVar"v")])),
7674       (Call
7675          ("ConditionalSelect@32",CTy"Data",
7676           TP[AVar F32,bVar"op",bVar"o2",Var("cd",F4),Var("rm",FTy 5),
7677              Var("rn",FTy 5),Var("rd",FTy 5)]),
7678        Call
7679          ("ARM8",CTy"MachineCode",
7680           CC[LW(0,1),Mop(Cast F1,bVar"op"),LW(212,9),Var("rm",FTy 5),
7681              Var("cd",F4),LW(0,1),Mop(Cast F1,bVar"o2"),Var("rn",FTy 5),
7682              Var("rd",FTy 5)])),
7683       (Call
7684          ("ConditionalSelect@64",CTy"Data",
7685           TP[AVar F64,bVar"op",bVar"o2",Var("cd",F4),Var("rm",FTy 5),
7686              Var("rn",FTy 5),Var("rd",FTy 5)]),
7687        Call
7688          ("ARM8",CTy"MachineCode",
7689           CC[LW(1,1),Mop(Cast F1,bVar"op"),LW(212,9),Var("rm",FTy 5),
7690              Var("cd",F4),LW(0,1),Mop(Cast F1,bVar"o2"),Var("rn",FTy 5),
7691              Var("rd",FTy 5)])),
7692       (Call
7693          ("CountLeading@32",CTy"Data",
7694           TP[AVar F32,bVar"op",Var("rn",FTy 5),Var("rd",FTy 5)]),
7695        Call
7696          ("ARM8",CTy"MachineCode",
7697           CC[LW(743426,21),Mop(Cast F1,bVar"op"),Var("rn",FTy 5),
7698              Var("rd",FTy 5)])),
7699       (Call
7700          ("CountLeading@64",CTy"Data",
7701           TP[AVar F64,bVar"op",Var("rn",FTy 5),Var("rd",FTy 5)]),
7702        Call
7703          ("ARM8",CTy"MachineCode",
7704           CC[LW(1792002,21),Mop(Cast F1,bVar"op"),Var("rn",FTy 5),
7705              Var("rd",FTy 5)])),
7706       (Call
7707          ("ExtractRegister@32",CTy"Data",
7708           TP[AVar F32,Var("imms",FTy 6),Var("rm",FTy 5),Var("rn",FTy 5),
7709              Var("rd",FTy 5)]),
7710        ITE(Bop(Bit,Var("imms",FTy 6),LN 5),
7711            Call("BadCode",CTy"MachineCode",LS"ExtractRegister32"),
7712            Call
7713              ("ARM8",CTy"MachineCode",
7714               CC[LW(156,11),Var("rm",FTy 5),Var("imms",FTy 6),
7715                  Var("rn",FTy 5),Var("rd",FTy 5)]))),
7716       (Call
7717          ("ExtractRegister@64",CTy"Data",
7718           TP[AVar F64,Var("imms",FTy 6),Var("rm",FTy 5),Var("rn",FTy 5),
7719              Var("rd",FTy 5)]),
7720        Call
7721          ("ARM8",CTy"MachineCode",
7722           CC[LW(1182,11),Var("rm",FTy 5),Var("imms",FTy 6),
7723              Var("rn",FTy 5),Var("rd",FTy 5)])),
7724       (Call
7725          ("Division@32",CTy"Data",
7726           TP[AVar F32,bVar"o1",Var("rm",FTy 5),Var("rn",FTy 5),
7727              Var("rd",FTy 5)]),
7728        Call
7729          ("ARM8",CTy"MachineCode",
7730           CC[LW(214,11),Var("rm",FTy 5),LW(1,5),
7731              Mop(Cast F1,Mop(Not,bVar"o1")),Var("rn",FTy 5),
7732              Var("rd",FTy 5)])),
7733       (Call
7734          ("Division@64",CTy"Data",
7735           TP[AVar F64,bVar"o1",Var("rm",FTy 5),Var("rn",FTy 5),
7736              Var("rd",FTy 5)]),
7737        Call
7738          ("ARM8",CTy"MachineCode",
7739           CC[LW(1238,11),Var("rm",FTy 5),LW(1,5),
7740              Mop(Cast F1,Mop(Not,bVar"o1")),Var("rn",FTy 5),
7741              Var("rd",FTy 5)])),
7742       (Call
7743          ("MultiplyAddSub@32",CTy"Data",
7744           TP[AVar F32,bVar"o0",Var("rm",FTy 5),Var("ra",FTy 5),
7745              Var("rn",FTy 5),Var("rd",FTy 5)]),
7746        Call
7747          ("ARM8",CTy"MachineCode",
7748           CC[LW(216,11),Var("rm",FTy 5),Mop(Cast F1,bVar"o0"),
7749              Var("ra",FTy 5),Var("rn",FTy 5),Var("rd",FTy 5)])),
7750       (Call
7751          ("MultiplyAddSub@64",CTy"Data",
7752           TP[AVar F64,bVar"o0",Var("rm",FTy 5),Var("ra",FTy 5),
7753              Var("rn",FTy 5),Var("rd",FTy 5)]),
7754        Call
7755          ("ARM8",CTy"MachineCode",
7756           CC[LW(1240,11),Var("rm",FTy 5),Mop(Cast F1,bVar"o0"),
7757              Var("ra",FTy 5),Var("rn",FTy 5),Var("rd",FTy 5)])),
7758       (Call
7759          ("MultiplyAddSubLong",CTy"Data",
7760           TP[bVar"o0",bVar"u",Var("rm",FTy 5),Var("ra",FTy 5),
7761              Var("rn",FTy 5),Var("rd",FTy 5)]),
7762        Call
7763          ("ARM8",CTy"MachineCode",
7764           CC[LW(155,8),Mop(Cast F1,Mop(Not,bVar"u")),LW(1,2),
7765              Var("rm",FTy 5),Mop(Cast F1,bVar"o0"),Var("ra",FTy 5),
7766              Var("rn",FTy 5),Var("rd",FTy 5)])),
7767       (Call
7768          ("MultiplyHigh",CTy"Data",
7769           TP[bVar"u",Var("rm",FTy 5),Var("rn",FTy 5),Var("rd",FTy 5)]),
7770        Call
7771          ("ARM8",CTy"MachineCode",
7772           CC[LW(155,8),Mop(Cast F1,Mop(Not,bVar"u")),LW(2,2),
7773              Var("rm",FTy 5),LW(31,6),Var("rn",FTy 5),Var("rd",FTy 5)])),
7774       (Call
7775          ("Reverse@32",CTy"Data",
7776           TP[AVar F32,Var("opc",CTy"RevOp"),Var("rn",FTy 5),
7777              Var("rd",FTy 5)]),
7778        ITE(EQ(Var("opc",CTy"RevOp"),LC("RevOp_REV64",CTy"RevOp")),
7779            Call("BadCode",CTy"MachineCode",LS"Reverse32"),
7780            Call
7781              ("ARM8",CTy"MachineCode",
7782               CC[LW(371712,20),Mop(Cast(FTy 2),Var("opc",CTy"RevOp")),
7783                  Var("rn",FTy 5),Var("rd",FTy 5)]))),
7784       (Call
7785          ("Reverse@64",CTy"Data",
7786           TP[AVar F64,Var("opc",CTy"RevOp"),Var("rn",FTy 5),
7787              Var("rd",FTy 5)]),
7788        Call
7789          ("ARM8",CTy"MachineCode",
7790           CC[LW(896000,20),Mop(Cast(FTy 2),Var("opc",CTy"RevOp")),
7791              Var("rn",FTy 5),Var("rd",FTy 5)]))]))
7792;
7793val e_debug_def = Def
7794  ("e_debug",Var("i",CTy"Debug"),
7795   CS(Var("i",CTy"Debug"),
7796      [(Call("Breakpoint",CTy"Debug",Var("imm16",F16)),
7797        CC[LW(1697,11),Var("imm16",F16),LW(0,5)]),
7798       (Const("DebugRestore",CTy"Debug"),LW(3602842592,32)),
7799       (Call("DebugSwitch",CTy"Debug",Var("LL",FTy 2)),
7800        CC[LW(1701,11),LW(0,16),LW(0,3),Var("LL",FTy 2)]),
7801       (Call("Halt",CTy"Debug",Var("imm16",F16)),
7802        CC[LW(1698,11),Var("imm16",F16),LW(0,5)])]))
7803;
7804val e_crc_def = Def
7805  ("e_crc",Var("i",CTy"CRCExt"),
7806   CS(Var("i",CTy"CRCExt"),
7807      [(Call
7808          ("CRC@8",CTy"CRCExt",
7809           TP[AVar F8,bVar"c",Var("rm",FTy 5),Var("rn",FTy 5),
7810              Var("rd",FTy 5)]),
7811        CC[LW(214,11),Var("rm",FTy 5),LW(2,3),Mop(Cast F1,bVar"c"),
7812           LW(0,2),Var("rn",FTy 5),Var("rd",FTy 5)]),
7813       (Call
7814          ("CRC@16",CTy"CRCExt",
7815           TP[AVar F16,bVar"c",Var("rm",FTy 5),Var("rn",FTy 5),
7816              Var("rd",FTy 5)]),
7817        CC[LW(214,11),Var("rm",FTy 5),LW(2,3),Mop(Cast F1,bVar"c"),
7818           LW(1,2),Var("rn",FTy 5),Var("rd",FTy 5)]),
7819       (Call
7820          ("CRC@32",CTy"CRCExt",
7821           TP[AVar F32,bVar"c",Var("rm",FTy 5),Var("rn",FTy 5),
7822              Var("rd",FTy 5)]),
7823        CC[LW(214,11),Var("rm",FTy 5),LW(2,3),Mop(Cast F1,bVar"c"),
7824           LW(2,2),Var("rn",FTy 5),Var("rd",FTy 5)]),
7825       (Call
7826          ("CRC@64",CTy"CRCExt",
7827           TP[AVar F64,bVar"c",Var("rm",FTy 5),Var("rn",FTy 5),
7828              Var("rd",FTy 5)]),
7829        CC[LW(1238,11),Var("rm",FTy 5),LW(2,3),Mop(Cast F1,bVar"c"),
7830           LW(3,2),Var("rn",FTy 5),Var("rd",FTy 5)])]))
7831;
7832val e_branch_def = Def
7833  ("e_branch",Var("i",CTy"Branch"),
7834   CS(Var("i",CTy"Branch"),
7835      [(Call
7836          ("BranchConditional",CTy"Branch",TP[Var("imm",F64),Var("cd",F4)]),
7837        Let(Var("imm19",FTy 19),EX(Var("imm",F64),LN 20,LN 2,FTy 19),
7838            ITE(EQ(Var("imm",F64),
7839                   Mop(SE F64,CC[Var("imm19",FTy 19),LW(0,2)])),
7840                Call
7841                  ("ARM8",CTy"MachineCode",
7842                   CC[LW(84,8),Var("imm19",FTy 19),LW(0,1),Var("cd",F4)]),
7843                Call("BadCode",CTy"MachineCode",LS"BranchConditional")))),
7844       (Call
7845          ("BranchImmediate",CTy"Branch",
7846           TP[Var("imm",F64),Var("btype",CTy"BranchType")]),
7847        Let(Var("imm26",FTy 26),EX(Var("imm",F64),LN 27,LN 2,FTy 26),
7848            ITE(Bop(And,
7849                    EQ(Var("imm",F64),
7850                       Mop(SE F64,CC[Var("imm26",FTy 26),LW(0,2)])),
7851                    Bop(In,Var("btype",CTy"BranchType"),
7852                        SL[LC("BranchType_CALL",CTy"BranchType"),
7853                           LC("BranchType_JMP",CTy"BranchType")])),
7854                Call
7855                  ("ARM8",CTy"MachineCode",
7856                   CC[Mop(Cast F1,
7857                          EQ(Var("btype",CTy"BranchType"),
7858                             LC("BranchType_CALL",CTy"BranchType"))),
7859                      LW(5,5),Var("imm26",FTy 26)]),
7860                Call("BadCode",CTy"MachineCode",LS"BranchImmediate")))),
7861       (Call
7862          ("BranchRegister",CTy"Branch",
7863           TP[Var("rn",FTy 5),Var("btype",CTy"BranchType")]),
7864        Let(Var("opc",FTy 2),
7865            CS(Var("btype",CTy"BranchType"),
7866               [(LC("BranchType_JMP",CTy"BranchType"),LW(0,2)),
7867                (LC("BranchType_CALL",CTy"BranchType"),LW(1,2)),
7868                (LC("BranchType_RET",CTy"BranchType"),LW(2,2)),
7869                (AVar(CTy"BranchType"),LW(3,2))]),
7870            ITE(EQ(Var("opc",FTy 2),LW(3,2)),
7871                Call("BadCode",CTy"MachineCode",LS"BranchRegister"),
7872                Call
7873                  ("ARM8",CTy"MachineCode",
7874                   CC[LW(428,9),Var("opc",FTy 2),LW(1984,11),
7875                      Var("rn",FTy 5),LW(0,5)])))),
7876       (Call
7877          ("CompareAndBranch@32",CTy"Branch",
7878           TP[AVar F32,bVar"iszero",Var("offset",F64),Var("rt",FTy 5)]),
7879        Let(Var("imm19",FTy 19),EX(Var("offset",F64),LN 20,LN 2,FTy 19),
7880            ITE(EQ(Var("offset",F64),
7881                   Mop(SE F64,CC[Var("imm19",FTy 19),LW(0,2)])),
7882                Call
7883                  ("ARM8",CTy"MachineCode",
7884                   CC[LW(26,7),Mop(Cast F1,Mop(Not,bVar"iszero")),
7885                      Var("imm19",FTy 19),Var("rt",FTy 5)]),
7886                Call("BadCode",CTy"MachineCode",LS"CompareAndBranch32")))),
7887       (Call
7888          ("CompareAndBranch@64",CTy"Branch",
7889           TP[AVar F64,bVar"iszero",Var("offset",F64),Var("rt",FTy 5)]),
7890        Let(Var("imm19",FTy 19),EX(Var("offset",F64),LN 20,LN 2,FTy 19),
7891            ITE(EQ(Var("offset",F64),
7892                   Mop(SE F64,CC[Var("imm19",FTy 19),LW(0,2)])),
7893                Call
7894                  ("ARM8",CTy"MachineCode",
7895                   CC[LW(90,7),Mop(Cast F1,Mop(Not,bVar"iszero")),
7896                      Var("imm19",FTy 19),Var("rt",FTy 5)]),
7897                Call("BadCode",CTy"MachineCode",LS"CompareAndBranch64")))),
7898       (Call
7899          ("TestBitAndBranch@32",CTy"Branch",
7900           TP[AVar F32,Var("bit_pos",FTy 6),bVar"bit_val",
7901              Var("offset",F64),Var("rt",FTy 5)]),
7902        Let(Var("imm14",FTy 14),EX(Var("offset",F64),LN 15,LN 2,FTy 14),
7903            ITE(Bop(And,
7904                    EQ(Var("offset",F64),
7905                       Mop(SE F64,CC[Var("imm14",FTy 14),LW(0,2)])),
7906                    Mop(Not,Bop(Bit,Var("bit_pos",FTy 6),LN 5))),
7907                Call
7908                  ("ARM8",CTy"MachineCode",
7909                   CC[LW(27,7),Mop(Cast F1,bVar"bit_val"),
7910                      EX(Var("bit_pos",FTy 6),LN 4,LN 0,FTy 5),
7911                      Var("imm14",FTy 14),Var("rt",FTy 5)]),
7912                Call("BadCode",CTy"MachineCode",LS"TestBitAndBranch32")))),
7913       (Call
7914          ("TestBitAndBranch@64",CTy"Branch",
7915           TP[AVar F64,Var("bit_pos",FTy 6),bVar"bit_val",
7916              Var("offset",F64),Var("rt",FTy 5)]),
7917        Let(Var("imm14",FTy 14),EX(Var("offset",F64),LN 15,LN 2,FTy 14),
7918            ITE(Bop(And,
7919                    EQ(Var("offset",F64),
7920                       Mop(SE F64,CC[Var("imm14",FTy 14),LW(0,2)])),
7921                    Bop(Bit,Var("bit_pos",FTy 6),LN 5)),
7922                Call
7923                  ("ARM8",CTy"MachineCode",
7924                   CC[LW(91,7),Mop(Cast F1,bVar"bit_val"),
7925                      EX(Var("bit_pos",FTy 6),LN 4,LN 0,FTy 5),
7926                      Var("imm14",FTy 14),Var("rt",FTy 5)]),
7927                Call("BadCode",CTy"MachineCode",LS"TestBitAndBranch64"))))]))
7928;
7929val e_system_def = Def
7930  ("e_system",Var("i",CTy"System"),
7931   CS(Var("i",CTy"System"),
7932      [(Call
7933          ("MoveSystemRegister",CTy"System",
7934           TP[bVar"l",Var("op0",FTy 3),Var("op1",FTy 3),Var("op2",FTy 3),
7935              Var("crn",F4),Var("crm",F4),Var("rt",FTy 5)]),
7936        CC[LW(852,10),Mop(Cast F1,bVar"l"),LW(1,1),
7937           Mop(Cast F1,Bop(Sub,Var("op0",FTy 3),LW(2,3))),
7938           Var("op1",FTy 3),Var("crn",F4),Var("crm",F4),Var("op2",FTy 3),
7939           Var("rt",FTy 5)]),
7940       (Call
7941          ("MoveImmediateProcState",CTy"System",
7942           TP[LC("PSTATEField_SP",CTy"PSTATEField"),Var("crm",F4)]),
7943        CC[LW(872452,20),Var("crm",F4),LW(191,8)]),
7944       (Call
7945          ("MoveImmediateProcState",CTy"System",
7946           TP[LC("PSTATEField_DAIFSet",CTy"PSTATEField"),Var("crm",F4)]),
7947        CC[LW(872500,20),Var("crm",F4),LW(223,8)]),
7948       (Call
7949          ("MoveImmediateProcState",CTy"System",
7950           TP[LC("PSTATEField_DAIFClr",CTy"PSTATEField"),Var("crm",F4)]),
7951        CC[LW(872500,20),Var("crm",F4),LW(255,8)]),
7952       (Const("ExceptionReturn",CTy"System"),LW(3600745440,32)),
7953       (Call("SupervisorCall",CTy"System",Var("imm16",F16)),
7954        CC[LW(1696,11),Var("imm16",F16),LW(1,5)]),
7955       (Call("HypervisorCall",CTy"System",Var("imm16",F16)),
7956        CC[LW(1696,11),Var("imm16",F16),LW(2,5)]),
7957       (Call("SecureMonitorCall",CTy"System",Var("imm16",F16)),
7958        CC[LW(1696,11),Var("imm16",F16),LW(3,5)]),
7959       (Call
7960          ("SystemInstruction",CTy"System",
7961           TP[Var("op1",FTy 3),Var("op2",FTy 3),Var("crn",F4),
7962              Var("crm",F4),bVar"l",Var("rt",FTy 5)]),
7963        CC[LW(852,10),Mop(Cast F1,bVar"l"),LW(1,2),Var("op1",FTy 3),
7964           Var("crn",F4),Var("crm",F4),Var("op2",FTy 3),Var("rt",FTy 5)])]))
7965;
7966val e_LoadStoreImmediate_def = Def
7967  ("e_LoadStoreImmediate",
7968   TP[Var("size",FTy 2),bVar"regsize_word",Var("memop",CTy"MemOp"),
7969      Var("acctype",CTy"AccType"),bVar"signed",bVar"wback",
7970      bVar"postindex",bVar"unsigned_offset",Var("offset",F64),
7971      Var("rn",FTy 5),Var("rt",FTy 5)],
7972   Let(Var("sz",FTy 2),
7973       ITE(EQ(Var("memop",CTy"MemOp"),LC("MemOp_PREFETCH",CTy"MemOp")),
7974           LW(3,2),Var("size",FTy 2)),
7975       Let(Var("imm9",FTy 9),EX(Var("offset",F64),LN 8,LN 0,FTy 9),
7976           Let(Var("imm12",FTy 12),
7977               EX(Bop(Lsr,Var("offset",F64),Mop(Cast nTy,Var("sz",FTy 2))),
7978                  LN 11,LN 0,FTy 12),
7979               Let(Var("opc",FTy 2),
7980                   ITB([(EQ(Var("memop",CTy"MemOp"),
7981                            LC("MemOp_STORE",CTy"MemOp")),LW(0,2)),
7982                        (Bop(And,
7983                             EQ(Var("memop",CTy"MemOp"),
7984                                LC("MemOp_LOAD",CTy"MemOp")),
7985                             Mop(Not,bVar"signed")),LW(1,2))],
7986                       CC[LW(1,1),Mop(Cast F1,bVar"regsize_word")]),
7987                   ITB([(bVar"wback",
7988                         ITE(Bop(And,
7989                                 EQ(Var("offset",F64),
7990                                    Mop(SE F64,Var("imm9",FTy 9))),
7991                                 EQ(Var("acctype",CTy"AccType"),
7992                                    LC("AccType_NORMAL",CTy"AccType"))),
7993                             Call
7994                               ("ARM8",CTy"MachineCode",
7995                                CC[Var("sz",FTy 2),LW(56,6),
7996                                   Var("opc",FTy 2),LW(0,1),
7997                                   Var("imm9",FTy 9),
7998                                   Mop(Cast F1,Mop(Not,bVar"postindex")),
7999                                   LW(1,1),Var("rn",FTy 5),Var("rt",FTy 5)]),
8000                             Call
8001                               ("BadCode",CTy"MachineCode",
8002                                LS"LoadStoreImmediate"))),
8003                        (bVar"postindex",
8004                         Call
8005                           ("BadCode",CTy"MachineCode",
8006                            LS"LoadStoreImmediate")),
8007                        (Bop(And,bVar"unsigned_offset",
8008                             Bop(And,
8009                                 EQ(Var("offset",F64),
8010                                    Bop(Lsl,
8011                                        Mop(Cast F64,Var("imm12",FTy 12)),
8012                                        Mop(Cast nTy,Var("sz",FTy 2)))),
8013                                 EQ(Var("acctype",CTy"AccType"),
8014                                    LC("AccType_NORMAL",CTy"AccType")))),
8015                         Call
8016                           ("ARM8",CTy"MachineCode",
8017                            CC[Var("sz",FTy 2),LW(57,6),Var("opc",FTy 2),
8018                               Var("imm12",FTy 12),Var("rn",FTy 5),
8019                               Var("rt",FTy 5)])),
8020                        (EQ(Var("offset",F64),
8021                            Mop(SE F64,Var("imm9",FTy 9))),
8022                         Call
8023                           ("ARM8",CTy"MachineCode",
8024                            CC[Var("sz",FTy 2),LW(56,6),Var("opc",FTy 2),
8025                               LW(0,1),Var("imm9",FTy 9),
8026                               Mop(Cast F1,
8027                                   EQ(Var("acctype",CTy"AccType"),
8028                                      LC("AccType_UNPRIV",CTy"AccType"))),
8029                               LW(0,1),Var("rn",FTy 5),Var("rt",FTy 5)]))],
8030                       Call
8031                         ("BadCode",CTy"MachineCode",
8032                          LS"LoadStoreImmediate")))))))
8033;
8034val e_LoadStoreRegister_def = Def
8035  ("e_LoadStoreRegister",
8036   TP[Var("size",FTy 2),bVar"regsize_word",Var("memop",CTy"MemOp"),
8037      bVar"signed",Var("rm",FTy 5),Var("extend_type",CTy"ExtendType"),
8038      nVar"shift",Var("rn",FTy 5),Var("rt",FTy 5)],
8039   Call
8040     ("ARM8",CTy"MachineCode",
8041      CC[ITE(EQ(Var("memop",CTy"MemOp"),LC("MemOp_PREFETCH",CTy"MemOp")),
8042             LW(3,2),Var("size",FTy 2)),LW(56,6),
8043         ITB([(EQ(Var("memop",CTy"MemOp"),LC("MemOp_STORE",CTy"MemOp")),
8044               LW(0,2)),
8045              (Bop(And,
8046                   EQ(Var("memop",CTy"MemOp"),LC("MemOp_LOAD",CTy"MemOp")),
8047                   Mop(Not,bVar"signed")),LW(1,2))],
8048             CC[LW(1,1),Mop(Cast F1,bVar"regsize_word")]),LW(1,1),
8049         Var("rm",FTy 5),
8050         Mop(Cast(FTy 3),Var("extend_type",CTy"ExtendType")),
8051         Mop(Cast F1,Mop(Not,EQ(nVar"shift",LN 0))),LW(2,2),
8052         Var("rn",FTy 5),Var("rt",FTy 5)]))
8053;
8054val e_load_store_def = Def
8055  ("e_load_store",Var("i",CTy"LoadStore"),
8056   CS(Var("i",CTy"LoadStore"),
8057      [(Call
8058          ("LoadStoreImmediate@8",CTy"LoadStore",
8059           TP[Var("size",F8),bVar"regsize_word",Var("memop",CTy"MemOp"),
8060              Var("acctype",CTy"AccType"),bVar"signed",bVar"wb_unknown",
8061              bVar"rt_unknown",bVar"wback",bVar"postindex",
8062              bVar"unsigned_offset",Var("offset",F64),Var("rn",FTy 5),
8063              Var("rt",FTy 5)]),
8064        Call
8065          ("e_LoadStoreImmediate",CTy"MachineCode",
8066           TP[Mop(Cast(FTy 2),Var("size",F8)),bVar"regsize_word",
8067              Var("memop",CTy"MemOp"),Var("acctype",CTy"AccType"),
8068              bVar"signed",bVar"wback",bVar"postindex",
8069              bVar"unsigned_offset",Var("offset",F64),Var("rn",FTy 5),
8070              Var("rt",FTy 5)])),
8071       (Call
8072          ("LoadStoreImmediate@16",CTy"LoadStore",
8073           TP[Var("size",F16),bVar"regsize_word",Var("memop",CTy"MemOp"),
8074              Var("acctype",CTy"AccType"),bVar"signed",bVar"wb_unknown",
8075              bVar"rt_unknown",bVar"wback",bVar"postindex",
8076              bVar"unsigned_offset",Var("offset",F64),Var("rn",FTy 5),
8077              Var("rt",FTy 5)]),
8078        Call
8079          ("e_LoadStoreImmediate",CTy"MachineCode",
8080           TP[Mop(Cast(FTy 2),Var("size",F16)),bVar"regsize_word",
8081              Var("memop",CTy"MemOp"),Var("acctype",CTy"AccType"),
8082              bVar"signed",bVar"wback",bVar"postindex",
8083              bVar"unsigned_offset",Var("offset",F64),Var("rn",FTy 5),
8084              Var("rt",FTy 5)])),
8085       (Call
8086          ("LoadStoreImmediate@32",CTy"LoadStore",
8087           TP[Var("size",F32),bVar"regsize_word",Var("memop",CTy"MemOp"),
8088              Var("acctype",CTy"AccType"),bVar"signed",bVar"wb_unknown",
8089              bVar"rt_unknown",bVar"wback",bVar"postindex",
8090              bVar"unsigned_offset",Var("offset",F64),Var("rn",FTy 5),
8091              Var("rt",FTy 5)]),
8092        Call
8093          ("e_LoadStoreImmediate",CTy"MachineCode",
8094           TP[Mop(Cast(FTy 2),Var("size",F32)),bVar"regsize_word",
8095              Var("memop",CTy"MemOp"),Var("acctype",CTy"AccType"),
8096              bVar"signed",bVar"wback",bVar"postindex",
8097              bVar"unsigned_offset",Var("offset",F64),Var("rn",FTy 5),
8098              Var("rt",FTy 5)])),
8099       (Call
8100          ("LoadStoreImmediate@64",CTy"LoadStore",
8101           TP[Var("size",F64),bVar"regsize_word",Var("memop",CTy"MemOp"),
8102              Var("acctype",CTy"AccType"),bVar"signed",bVar"wb_unknown",
8103              bVar"rt_unknown",bVar"wback",bVar"postindex",
8104              bVar"unsigned_offset",Var("offset",F64),Var("rn",FTy 5),
8105              Var("rt",FTy 5)]),
8106        Call
8107          ("e_LoadStoreImmediate",CTy"MachineCode",
8108           TP[Mop(Cast(FTy 2),Var("size",F64)),bVar"regsize_word",
8109              Var("memop",CTy"MemOp"),Var("acctype",CTy"AccType"),
8110              bVar"signed",bVar"wback",bVar"postindex",
8111              bVar"unsigned_offset",Var("offset",F64),Var("rn",FTy 5),
8112              Var("rt",FTy 5)])),
8113       (Call
8114          ("LoadStoreRegister@8",CTy"LoadStore",
8115           TP[Var("size",F8),bVar"regsize_word",Var("memop",CTy"MemOp"),
8116              bVar"signed",Var("rm",FTy 5),
8117              Var("extend_type",CTy"ExtendType"),nVar"shift",
8118              Var("rn",FTy 5),Var("rt",FTy 5)]),
8119        Call
8120          ("e_LoadStoreRegister",CTy"MachineCode",
8121           TP[Mop(Cast(FTy 2),Var("size",F8)),bVar"regsize_word",
8122              Var("memop",CTy"MemOp"),bVar"signed",Var("rm",FTy 5),
8123              Var("extend_type",CTy"ExtendType"),nVar"shift",
8124              Var("rn",FTy 5),Var("rt",FTy 5)])),
8125       (Call
8126          ("LoadStoreRegister@16",CTy"LoadStore",
8127           TP[Var("size",F16),bVar"regsize_word",Var("memop",CTy"MemOp"),
8128              bVar"signed",Var("rm",FTy 5),
8129              Var("extend_type",CTy"ExtendType"),nVar"shift",
8130              Var("rn",FTy 5),Var("rt",FTy 5)]),
8131        Call
8132          ("e_LoadStoreRegister",CTy"MachineCode",
8133           TP[Mop(Cast(FTy 2),Var("size",F16)),bVar"regsize_word",
8134              Var("memop",CTy"MemOp"),bVar"signed",Var("rm",FTy 5),
8135              Var("extend_type",CTy"ExtendType"),nVar"shift",
8136              Var("rn",FTy 5),Var("rt",FTy 5)])),
8137       (Call
8138          ("LoadStoreRegister@32",CTy"LoadStore",
8139           TP[Var("size",F32),bVar"regsize_word",Var("memop",CTy"MemOp"),
8140              bVar"signed",Var("rm",FTy 5),
8141              Var("extend_type",CTy"ExtendType"),nVar"shift",
8142              Var("rn",FTy 5),Var("rt",FTy 5)]),
8143        Call
8144          ("e_LoadStoreRegister",CTy"MachineCode",
8145           TP[Mop(Cast(FTy 2),Var("size",F32)),bVar"regsize_word",
8146              Var("memop",CTy"MemOp"),bVar"signed",Var("rm",FTy 5),
8147              Var("extend_type",CTy"ExtendType"),nVar"shift",
8148              Var("rn",FTy 5),Var("rt",FTy 5)])),
8149       (Call
8150          ("LoadStoreRegister@64",CTy"LoadStore",
8151           TP[Var("size",F64),bVar"regsize_word",Var("memop",CTy"MemOp"),
8152              bVar"signed",Var("rm",FTy 5),
8153              Var("extend_type",CTy"ExtendType"),nVar"shift",
8154              Var("rn",FTy 5),Var("rt",FTy 5)]),
8155        Call
8156          ("e_LoadStoreRegister",CTy"MachineCode",
8157           TP[Mop(Cast(FTy 2),Var("size",F64)),bVar"regsize_word",
8158              Var("memop",CTy"MemOp"),bVar"signed",Var("rm",FTy 5),
8159              Var("extend_type",CTy"ExtendType"),nVar"shift",
8160              Var("rn",FTy 5),Var("rt",FTy 5)])),
8161       (Call
8162          ("LoadLiteral@32",CTy"LoadStore",
8163           TP[AVar F32,Var("memop",CTy"MemOp"),bVar"signed",
8164              Var("offset",F64),Var("rt",FTy 5)]),
8165        Let(Var("imm19",FTy 19),EX(Var("offset",F64),LN 20,LN 2,FTy 19),
8166            Let(Var("opc",OTy(FTy 2)),
8167                CS(TP[Var("memop",CTy"MemOp"),bVar"signed"],
8168                   [(TP[LC("MemOp_LOAD",CTy"MemOp"),LF],Mop(Some,LW(0,2))),
8169                    (TP[LC("MemOp_LOAD",CTy"MemOp"),LT],Mop(Some,LW(2,2))),
8170                    (TP[LC("MemOp_PREFETCH",CTy"MemOp"),LF],
8171                     Mop(Some,LW(3,2))),
8172                    (AVar(PTy(CTy"MemOp",bTy)),LO(FTy 2))]),
8173                ITE(Bop(And,Mop(IsSome,Var("opc",OTy(FTy 2))),
8174                        EQ(Var("offset",F64),
8175                           Mop(SE F64,CC[Var("imm19",FTy 19),LW(0,2)]))),
8176                    Call
8177                      ("ARM8",CTy"MachineCode",
8178                       CC[Mop(ValOf,Var("opc",OTy(FTy 2))),LW(24,6),
8179                          Var("imm19",FTy 19),Var("rt",FTy 5)]),
8180                    Call("BadCode",CTy"MachineCode",LS"LoadLiteral32"))))),
8181       (Call
8182          ("LoadLiteral@64",CTy"LoadStore",
8183           TP[AVar F64,LC("MemOp_LOAD",CTy"MemOp"),LF,Var("offset",F64),
8184              Var("rt",FTy 5)]),
8185        Let(Var("imm19",FTy 19),EX(Var("offset",F64),LN 20,LN 2,FTy 19),
8186            ITE(EQ(Var("offset",F64),
8187                   Mop(SE F64,CC[Var("imm19",FTy 19),LW(0,2)])),
8188                Call
8189                  ("ARM8",CTy"MachineCode",
8190                   CC[LW(88,8),Var("imm19",FTy 19),Var("rt",FTy 5)]),
8191                Call("BadCode",CTy"MachineCode",LS"LoadLiteral64")))),
8192       (Call
8193          ("LoadLiteral@64",CTy"LoadStore",
8194           AVar(PTy(F64,PTy(CTy"MemOp",PTy(bTy,PTy(F64,FTy 5)))))),
8195        Call("BadCode",CTy"MachineCode",LS"LoadLiteral64")),
8196       (Call
8197          ("LoadStorePair@32",CTy"LoadStore",
8198           TP[Var("size",F32),Var("memop",CTy"MemOp"),
8199              Var("acctype",CTy"AccType"),bVar"signed",bVar"wb_unknown",
8200              bVar"rt_unknown",bVar"wback",bVar"postindex",
8201              Var("offset",F64),Var("rn",FTy 5),Var("rt",FTy 5),
8202              Var("rt2",FTy 5)]),
8203        Let(Var("sf",F1),Mop(Cast F1,Var("size",F32)),
8204            Let(nVar"scale",Bop(Add,LN 2,Mop(Cast nTy,Var("sf",F1))),
8205                Let(Var("imm7",FTy 7),
8206                    EX(Bop(Lsr,Var("offset",F64),nVar"scale"),LN 6,LN 0,
8207                       FTy 7),
8208                    ITE(Bop(And,
8209                            EQ(EQ(Var("sf",F1),LW(1,1)),
8210                               EQ(Mop(Size,Var("size",F32)),LN 64)),
8211                            Bop(And,
8212                                Bop(In,Var("memop",CTy"MemOp"),
8213                                    SL[LC("MemOp_LOAD",CTy"MemOp"),
8214                                       LC("MemOp_STORE",CTy"MemOp")]),
8215                                Bop(And,
8216                                    Bop(In,Var("acctype",CTy"AccType"),
8217                                        SL[LC("AccType_STREAM",
8218                                              CTy"AccType"),
8219                                           LC("AccType_NORMAL",
8220                                              CTy"AccType")]),
8221                                    EQ(Var("offset",F64),
8222                                       Bop(Lsl,
8223                                           Mop(SE F64,Var("imm7",FTy 7)),
8224                                           nVar"scale"))))),
8225                        Call
8226                          ("ARM8",CTy"MachineCode",
8227                           CC[Var("sf",F1),Mop(Cast F1,bVar"signed"),
8228                              LW(20,5),
8229                              Mop(Cast F1,Mop(Not,bVar"postindex")),
8230                              Mop(Cast F1,bVar"wback"),
8231                              Mop(Cast F1,
8232                                  EQ(Var("memop",CTy"MemOp"),
8233                                     LC("MemOp_LOAD",CTy"MemOp"))),
8234                              Var("imm7",FTy 7),Var("rt2",FTy 5),
8235                              Var("rn",FTy 5),Var("rt",FTy 5)]),
8236                        Call("BadCode",CTy"MachineCode",LS"LoadStorePair")))))),
8237       (Call
8238          ("LoadStorePair@64",CTy"LoadStore",
8239           TP[Var("size",F64),Var("memop",CTy"MemOp"),
8240              Var("acctype",CTy"AccType"),bVar"signed",bVar"wb_unknown",
8241              bVar"rt_unknown",bVar"wback",bVar"postindex",
8242              Var("offset",F64),Var("rn",FTy 5),Var("rt",FTy 5),
8243              Var("rt2",FTy 5)]),
8244        Let(Var("sf",F1),Mop(Cast F1,Var("size",F64)),
8245            Let(nVar"scale",Bop(Add,LN 2,Mop(Cast nTy,Var("sf",F1))),
8246                Let(Var("imm7",FTy 7),
8247                    EX(Bop(Lsr,Var("offset",F64),nVar"scale"),LN 6,LN 0,
8248                       FTy 7),
8249                    ITE(Bop(And,
8250                            EQ(EQ(Var("sf",F1),LW(1,1)),
8251                               EQ(Mop(Size,Var("size",F64)),LN 64)),
8252                            Bop(And,
8253                                Bop(In,Var("memop",CTy"MemOp"),
8254                                    SL[LC("MemOp_LOAD",CTy"MemOp"),
8255                                       LC("MemOp_STORE",CTy"MemOp")]),
8256                                Bop(And,
8257                                    Bop(In,Var("acctype",CTy"AccType"),
8258                                        SL[LC("AccType_STREAM",
8259                                              CTy"AccType"),
8260                                           LC("AccType_NORMAL",
8261                                              CTy"AccType")]),
8262                                    EQ(Var("offset",F64),
8263                                       Bop(Lsl,
8264                                           Mop(SE F64,Var("imm7",FTy 7)),
8265                                           nVar"scale"))))),
8266                        Call
8267                          ("ARM8",CTy"MachineCode",
8268                           CC[Var("sf",F1),Mop(Cast F1,bVar"signed"),
8269                              LW(20,5),
8270                              Mop(Cast F1,Mop(Not,bVar"postindex")),
8271                              Mop(Cast F1,bVar"wback"),
8272                              Mop(Cast F1,
8273                                  EQ(Var("memop",CTy"MemOp"),
8274                                     LC("MemOp_LOAD",CTy"MemOp"))),
8275                              Var("imm7",FTy 7),Var("rt2",FTy 5),
8276                              Var("rn",FTy 5),Var("rt",FTy 5)]),
8277                        Call("BadCode",CTy"MachineCode",LS"LoadStorePair")))))),
8278       (Call
8279          ("LoadStoreAcquire@8",CTy"LoadStore",
8280           TP[Var("size",F8),Var("memop",CTy"MemOp"),
8281              Var("acctype",CTy"AccType"),bVar"excl",bVar"rn_unknown",
8282              bVar"rt_unknown",Var("rs",FTy 5),Var("rn",FTy 5),
8283              Var("rt",FTy 5)]),
8284        ITE(Bop(And,
8285                CS(Mop(Size,Var("size",F8)),
8286                   [(LN 8,EQ(Var("size",F8),LW(0,8))),
8287                    (LN 16,EQ(Var("size",F8),LW(1,8))),
8288                    (LN 32,EQ(Var("size",F8),LW(2,8))),
8289                    (AVar nTy,EQ(Var("size",F8),LW(3,8)))]),
8290                Bop(And,
8291                    Bop(In,Var("memop",CTy"MemOp"),
8292                        SL[LC("MemOp_LOAD",CTy"MemOp"),
8293                           LC("MemOp_STORE",CTy"MemOp")]),
8294                    Bop(In,Var("acctype",CTy"AccType"),
8295                        SL[LC("AccType_ORDERED",CTy"AccType"),
8296                           LC("AccType_ATOMIC",CTy"AccType")]))),
8297            Call
8298              ("ARM8",CTy"MachineCode",
8299               CC[Mop(Cast(FTy 2),Var("size",F8)),LW(8,6),
8300                  Mop(Cast F1,Mop(Not,bVar"excl")),
8301                  Mop(Cast F1,
8302                      EQ(Var("memop",CTy"MemOp"),
8303                         LC("MemOp_LOAD",CTy"MemOp"))),LW(0,1),
8304                  Var("rs",FTy 5),
8305                  Mop(Cast F1,
8306                      EQ(Var("acctype",CTy"AccType"),
8307                         LC("AccType_ORDERED",CTy"AccType"))),LW(31,5),
8308                  Var("rn",FTy 5),Var("rt",FTy 5)]),
8309            Call("BadCode",CTy"MachineCode",LS"LoadStoreAcquire"))),
8310       (Call
8311          ("LoadStoreAcquire@16",CTy"LoadStore",
8312           TP[Var("size",F16),Var("memop",CTy"MemOp"),
8313              Var("acctype",CTy"AccType"),bVar"excl",bVar"rn_unknown",
8314              bVar"rt_unknown",Var("rs",FTy 5),Var("rn",FTy 5),
8315              Var("rt",FTy 5)]),
8316        ITE(Bop(And,
8317                CS(Mop(Size,Var("size",F16)),
8318                   [(LN 8,EQ(Var("size",F16),LW(0,16))),
8319                    (LN 16,EQ(Var("size",F16),LW(1,16))),
8320                    (LN 32,EQ(Var("size",F16),LW(2,16))),
8321                    (AVar nTy,EQ(Var("size",F16),LW(3,16)))]),
8322                Bop(And,
8323                    Bop(In,Var("memop",CTy"MemOp"),
8324                        SL[LC("MemOp_LOAD",CTy"MemOp"),
8325                           LC("MemOp_STORE",CTy"MemOp")]),
8326                    Bop(In,Var("acctype",CTy"AccType"),
8327                        SL[LC("AccType_ORDERED",CTy"AccType"),
8328                           LC("AccType_ATOMIC",CTy"AccType")]))),
8329            Call
8330              ("ARM8",CTy"MachineCode",
8331               CC[Mop(Cast(FTy 2),Var("size",F16)),LW(8,6),
8332                  Mop(Cast F1,Mop(Not,bVar"excl")),
8333                  Mop(Cast F1,
8334                      EQ(Var("memop",CTy"MemOp"),
8335                         LC("MemOp_LOAD",CTy"MemOp"))),LW(0,1),
8336                  Var("rs",FTy 5),
8337                  Mop(Cast F1,
8338                      EQ(Var("acctype",CTy"AccType"),
8339                         LC("AccType_ORDERED",CTy"AccType"))),LW(31,5),
8340                  Var("rn",FTy 5),Var("rt",FTy 5)]),
8341            Call("BadCode",CTy"MachineCode",LS"LoadStoreAcquire"))),
8342       (Call
8343          ("LoadStoreAcquire@32",CTy"LoadStore",
8344           TP[Var("size",F32),Var("memop",CTy"MemOp"),
8345              Var("acctype",CTy"AccType"),bVar"excl",bVar"rn_unknown",
8346              bVar"rt_unknown",Var("rs",FTy 5),Var("rn",FTy 5),
8347              Var("rt",FTy 5)]),
8348        ITE(Bop(And,
8349                CS(Mop(Size,Var("size",F32)),
8350                   [(LN 8,EQ(Var("size",F32),LW(0,32))),
8351                    (LN 16,EQ(Var("size",F32),LW(1,32))),
8352                    (LN 32,EQ(Var("size",F32),LW(2,32))),
8353                    (AVar nTy,EQ(Var("size",F32),LW(3,32)))]),
8354                Bop(And,
8355                    Bop(In,Var("memop",CTy"MemOp"),
8356                        SL[LC("MemOp_LOAD",CTy"MemOp"),
8357                           LC("MemOp_STORE",CTy"MemOp")]),
8358                    Bop(In,Var("acctype",CTy"AccType"),
8359                        SL[LC("AccType_ORDERED",CTy"AccType"),
8360                           LC("AccType_ATOMIC",CTy"AccType")]))),
8361            Call
8362              ("ARM8",CTy"MachineCode",
8363               CC[Mop(Cast(FTy 2),Var("size",F32)),LW(8,6),
8364                  Mop(Cast F1,Mop(Not,bVar"excl")),
8365                  Mop(Cast F1,
8366                      EQ(Var("memop",CTy"MemOp"),
8367                         LC("MemOp_LOAD",CTy"MemOp"))),LW(0,1),
8368                  Var("rs",FTy 5),
8369                  Mop(Cast F1,
8370                      EQ(Var("acctype",CTy"AccType"),
8371                         LC("AccType_ORDERED",CTy"AccType"))),LW(31,5),
8372                  Var("rn",FTy 5),Var("rt",FTy 5)]),
8373            Call("BadCode",CTy"MachineCode",LS"LoadStoreAcquire"))),
8374       (Call
8375          ("LoadStoreAcquire@64",CTy"LoadStore",
8376           TP[Var("size",F64),Var("memop",CTy"MemOp"),
8377              Var("acctype",CTy"AccType"),bVar"excl",bVar"rn_unknown",
8378              bVar"rt_unknown",Var("rs",FTy 5),Var("rn",FTy 5),
8379              Var("rt",FTy 5)]),
8380        ITE(Bop(And,
8381                CS(Mop(Size,Var("size",F64)),
8382                   [(LN 8,EQ(Var("size",F64),LW(0,64))),
8383                    (LN 16,EQ(Var("size",F64),LW(1,64))),
8384                    (LN 32,EQ(Var("size",F64),LW(2,64))),
8385                    (AVar nTy,EQ(Var("size",F64),LW(3,64)))]),
8386                Bop(And,
8387                    Bop(In,Var("memop",CTy"MemOp"),
8388                        SL[LC("MemOp_LOAD",CTy"MemOp"),
8389                           LC("MemOp_STORE",CTy"MemOp")]),
8390                    Bop(In,Var("acctype",CTy"AccType"),
8391                        SL[LC("AccType_ORDERED",CTy"AccType"),
8392                           LC("AccType_ATOMIC",CTy"AccType")]))),
8393            Call
8394              ("ARM8",CTy"MachineCode",
8395               CC[Mop(Cast(FTy 2),Var("size",F64)),LW(8,6),
8396                  Mop(Cast F1,Mop(Not,bVar"excl")),
8397                  Mop(Cast F1,
8398                      EQ(Var("memop",CTy"MemOp"),
8399                         LC("MemOp_LOAD",CTy"MemOp"))),LW(0,1),
8400                  Var("rs",FTy 5),
8401                  Mop(Cast F1,
8402                      EQ(Var("acctype",CTy"AccType"),
8403                         LC("AccType_ORDERED",CTy"AccType"))),LW(31,5),
8404                  Var("rn",FTy 5),Var("rt",FTy 5)]),
8405            Call("BadCode",CTy"MachineCode",LS"LoadStoreAcquire"))),
8406       (Call
8407          ("LoadStoreAcquirePair@64",CTy"LoadStore",
8408           TP[Var("size",F64),Var("memop",CTy"MemOp"),
8409              Var("acctype",CTy"AccType"),bVar"rn_unknown",
8410              bVar"rt_unknown",Var("rs",FTy 5),Var("rn",FTy 5),
8411              Var("rt",FTy 5),Var("rt2",FTy 5)]),
8412        ITE(Bop(And,
8413                EQ(Var("size",F64),
8414                   ITE(EQ(Mop(Size,Var("size",F64)),LN 64),LW(2,64),
8415                       LW(3,64))),
8416                Bop(And,
8417                    Bop(In,Var("memop",CTy"MemOp"),
8418                        SL[LC("MemOp_LOAD",CTy"MemOp"),
8419                           LC("MemOp_STORE",CTy"MemOp")]),
8420                    Bop(In,Var("acctype",CTy"AccType"),
8421                        SL[LC("AccType_ORDERED",CTy"AccType"),
8422                           LC("AccType_ATOMIC",CTy"AccType")]))),
8423            Call
8424              ("ARM8",CTy"MachineCode",
8425               CC[Mop(Cast(FTy 2),Var("size",F64)),LW(16,7),
8426                  Mop(Cast F1,
8427                      EQ(Var("memop",CTy"MemOp"),
8428                         LC("MemOp_LOAD",CTy"MemOp"))),LW(1,1),
8429                  Var("rs",FTy 5),
8430                  Mop(Cast F1,
8431                      EQ(Var("acctype",CTy"AccType"),
8432                         LC("AccType_ORDERED",CTy"AccType"))),
8433                  Var("rt2",FTy 5),Var("rn",FTy 5),Var("rt",FTy 5)]),
8434            Call("BadCode",CTy"MachineCode",LS"LoadStoreAcquirePair"))),
8435       (Call
8436          ("LoadStoreAcquirePair@128",CTy"LoadStore",
8437           TP[Var("size",FTy 128),Var("memop",CTy"MemOp"),
8438              Var("acctype",CTy"AccType"),bVar"rn_unknown",
8439              bVar"rt_unknown",Var("rs",FTy 5),Var("rn",FTy 5),
8440              Var("rt",FTy 5),Var("rt2",FTy 5)]),
8441        ITE(Bop(And,
8442                EQ(Var("size",FTy 128),
8443                   ITE(EQ(Mop(Size,Var("size",FTy 128)),LN 64),LW(2,128),
8444                       LW(3,128))),
8445                Bop(And,
8446                    Bop(In,Var("memop",CTy"MemOp"),
8447                        SL[LC("MemOp_LOAD",CTy"MemOp"),
8448                           LC("MemOp_STORE",CTy"MemOp")]),
8449                    Bop(In,Var("acctype",CTy"AccType"),
8450                        SL[LC("AccType_ORDERED",CTy"AccType"),
8451                           LC("AccType_ATOMIC",CTy"AccType")]))),
8452            Call
8453              ("ARM8",CTy"MachineCode",
8454               CC[Mop(Cast(FTy 2),Var("size",FTy 128)),LW(16,7),
8455                  Mop(Cast F1,
8456                      EQ(Var("memop",CTy"MemOp"),
8457                         LC("MemOp_LOAD",CTy"MemOp"))),LW(1,1),
8458                  Var("rs",FTy 5),
8459                  Mop(Cast F1,
8460                      EQ(Var("acctype",CTy"AccType"),
8461                         LC("AccType_ORDERED",CTy"AccType"))),
8462                  Var("rt2",FTy 5),Var("rn",FTy 5),Var("rt",FTy 5)]),
8463            Call("BadCode",CTy"MachineCode",LS"LoadStoreAcquirePair")))]))
8464;
8465val Encode_def = Def
8466  ("Encode",Var("i",CTy"instruction"),
8467   CS(Var("i",CTy"instruction"),
8468      [(Call
8469          ("Address",CTy"instruction",
8470           TP[bVar"page",Var("imm",F64),Var("rd",FTy 5)]),
8471        ITE(bVar"page",
8472            Let(Var("immlo",FTy 2),EX(Var("imm",F64),LN 13,LN 12,FTy 2),
8473                Let(Var("immhi",FTy 19),
8474                    EX(Var("imm",F64),LN 32,LN 14,FTy 19),
8475                    ITE(EQ(Mop(SE F64,
8476                               CC[Var("immhi",FTy 19),Var("immlo",FTy 2),
8477                                  LW(0,12)]),Var("imm",F64)),
8478                        Call
8479                          ("ARM8",CTy"MachineCode",
8480                           CC[LW(1,1),Var("immlo",FTy 2),LW(16,5),
8481                              Var("immhi",FTy 19),Var("rd",FTy 5)]),
8482                        Call("BadCode",CTy"MachineCode",LS"Address")))),
8483            Let(Var("immlo",FTy 2),EX(Var("imm",F64),LN 1,LN 0,FTy 2),
8484                Let(Var("immhi",FTy 19),
8485                    EX(Var("imm",F64),LN 20,LN 2,FTy 19),
8486                    ITE(EQ(Mop(SE F64,
8487                               CC[Var("immhi",FTy 19),Var("immlo",FTy 2)]),
8488                           Var("imm",F64)),
8489                        Call
8490                          ("ARM8",CTy"MachineCode",
8491                           CC[LW(0,1),Var("immlo",FTy 2),LW(16,5),
8492                              Var("immhi",FTy 19),Var("rd",FTy 5)]),
8493                        Call("BadCode",CTy"MachineCode",LS"Address")))))),
8494       (Call("Data",CTy"instruction",Var("x",CTy"Data")),
8495        Call("e_data",CTy"MachineCode",Var("x",CTy"Data"))),
8496       (Call("Branch",CTy"instruction",Var("x",CTy"Branch")),
8497        Call("e_branch",CTy"MachineCode",Var("x",CTy"Branch"))),
8498       (Call("LoadStore",CTy"instruction",Var("x",CTy"LoadStore")),
8499        Call("e_load_store",CTy"MachineCode",Var("x",CTy"LoadStore"))),
8500       (Call("CRCExt",CTy"instruction",Var("x",CTy"CRCExt")),
8501        Call
8502          ("ARM8",CTy"MachineCode",Call("e_crc",F32,Var("x",CTy"CRCExt")))),
8503       (Call("Debug",CTy"instruction",Var("x",CTy"Debug")),
8504        Call
8505          ("ARM8",CTy"MachineCode",Call("e_debug",F32,Var("x",CTy"Debug")))),
8506       (Call("System",CTy"instruction",Var("x",CTy"System")),
8507        Call
8508          ("ARM8",CTy"MachineCode",
8509           Call("e_system",F32,Var("x",CTy"System")))),
8510       (Call
8511          ("MemoryBarrier",CTy"instruction",
8512           TP[Var("opc",CTy"MemBarrierOp"),Var("crm",F4)]),
8513        Call
8514          ("ARM8",CTy"MachineCode",
8515           CC[LW(872499,20),Var("crm",F4),LW(1,1),
8516              Mop(Cast(FTy 2),Var("opc",CTy"MemBarrierOp")),LW(31,5)])),
8517       (Call("ClearExclusive",CTy"instruction",Var("crm",F4)),
8518        Call
8519          ("ARM8",CTy"MachineCode",
8520           CC[LW(872499,20),Var("crm",F4),LW(95,8)])),
8521       (Call("Hint",CTy"instruction",Var("opc",CTy"SystemHintOp")),
8522        Call
8523          ("ARM8",CTy"MachineCode",
8524           CC[LW(13959968,24),
8525              Mop(Cast(FTy 3),Var("opc",CTy"SystemHintOp")),LW(31,5)])),
8526       (Const("Unallocated",CTy"instruction"),
8527        Call("BadCode",CTy"MachineCode",LS"Unallocated")),
8528       (Const("Reserved",CTy"instruction"),
8529        Call("BadCode",CTy"MachineCode",LS"Reserved"))]))
8530
8531val () = Import.finish 0