1(* riscvScript.sml - generated by L3 - Mon Jul 03 09:59:13 2017 *)
2open HolKernel boolLib bossLib Import
3
4val () = Import.start "riscv"
5
6val _ = Construct [("accessType",[("Read",[]),("Write",[])])]
7;
8val _ = Construct [("fetchType",[("Instruction",[]),("Data",[])])]
9;
10val _ = Construct
11  [("Architecture",[("RV32I",[]),("RV64I",[]),("RV128I",[])])]
12;
13val _ = Construct
14  [("Privilege",
15    [("User",[]),("Supervisor",[]),("Hypervisor",[]),("Machine",[])])]
16;
17val _ = Construct
18  [("VM_Mode",
19    [("Mbare",[]),("Mbb",[]),("Mbbid",[]),("Sv32",[]),("Sv39",[]),
20     ("Sv48",[]),("Sv57",[]),("Sv64",[])])]
21;
22val _ = Construct
23  [("ExtStatus",[("Off",[]),("Initial",[]),("Clean",[]),("Dirty",[])])]
24;
25val _ = Construct [("Interrupt",[("Software",[]),("Timer",[])])]
26;
27val _ = Construct
28  [("ExceptionType",
29    [("Fetch_Misaligned",[]),("Fetch_Fault",[]),("Illegal_Instr",[]),
30     ("Breakpoint",[]),("Load_Fault",[]),("AMO_Misaligned",[]),
31     ("Store_AMO_Fault",[]),("UMode_Env_Call",[]),("SMode_Env_Call",[]),
32     ("HMode_Env_Call",[]),("MMode_Env_Call",[])])]
33;
34val _ = Record
35  ("mcpuid",
36   [("ArchBase",FTy 2),("I",bTy),("M",bTy),("S",bTy),("U",bTy),
37    ("mcpuid'rst",FTy 58)])
38;
39val _ = Record ("mimpid",[("RVImpl",FTy 48),("RVSource",F16)])
40;
41val _ = Record
42  ("mstatus",
43   [("MFS",FTy 2),("MIE",bTy),("MIE1",bTy),("MIE2",bTy),("MIE3",bTy),
44    ("MMPRV",bTy),("MPRV",FTy 2),("MPRV1",FTy 2),("MPRV2",FTy 2),
45    ("MPRV3",FTy 2),("MSD",bTy),("MXS",FTy 2),("VM",FTy 5),
46    ("mstatus'rst",FTy 41)])
47;
48val _ = Record ("mtdeleg",[("Exc_deleg",F16),("Intr_deleg",FTy 48)])
49;
50val _ = Record
51  ("mip",
52   [("HSIP",bTy),("HTIP",bTy),("MSIP",bTy),("MTIP",bTy),("SSIP",bTy),
53    ("STIP",bTy),("mip'rst",FTy 58)])
54;
55val _ = Record
56  ("mie",
57   [("HSIE",bTy),("HTIE",bTy),("MSIE",bTy),("MTIE",bTy),("SSIE",bTy),
58    ("STIE",bTy),("mie'rst",FTy 58)])
59;
60val _ = Record ("mcause",[("EC",F4),("Int",bTy),("mcause'rst",FTy 59)])
61;
62val _ = Record
63  ("MachineCSR",
64   [("mbadaddr",F64),("mbase",F64),("mbound",F64),("mcause",CTy"mcause"),
65    ("mcpuid",CTy"mcpuid"),("mdbase",F64),("mdbound",F64),("mepc",F64),
66    ("mfromhost",F64),("mhartid",F64),("mibase",F64),("mibound",F64),
67    ("mie",CTy"mie"),("mimpid",CTy"mimpid"),("mip",CTy"mip"),
68    ("mscratch",F64),("mstatus",CTy"mstatus"),("mtdeleg",CTy"mtdeleg"),
69    ("mtime_delta",F64),("mtimecmp",F64),("mtohost",F64),("mtvec",F64)])
70;
71val _ = Record
72  ("HypervisorCSR",
73   [("hbadaddr",F64),("hcause",CTy"mcause"),("hepc",F64),("hscratch",F64),
74    ("hstatus",CTy"mstatus"),("htdeleg",CTy"mtdeleg"),("htime_delta",F64),
75    ("htimecmp",F64),("htvec",F64)])
76;
77val _ = Record
78  ("sstatus",
79   [("SFS",FTy 2),("SIE",bTy),("SMPRV",bTy),("SPIE",bTy),("SPS",bTy),
80    ("SSD",bTy),("SXS",FTy 2),("sstatus'rst",FTy 55)])
81;
82val _ = Record ("sip",[("SSIP",bTy),("STIP",bTy),("sip'rst",FTy 62)])
83;
84val _ = Record ("sie",[("SSIE",bTy),("STIE",bTy),("sie'rst",FTy 62)])
85;
86val _ = Record
87  ("SupervisorCSR",
88   [("sasid",F64),("sbadaddr",F64),("scause",CTy"mcause"),("sepc",F64),
89    ("sptbr",F64),("sscratch",F64),("stime_delta",F64),("stimecmp",F64),
90    ("stvec",F64)])
91;
92val _ = Record
93  ("FPCSR",
94   [("DZ",bTy),("FRM",FTy 3),("NV",bTy),("NX",bTy),("OF",bTy),("UF",bTy),
95    ("fpcsr'rst",FTy 24)])
96;
97val _ = Record
98  ("UserCSR",
99   [("cycle_delta",F64),("fpcsr",CTy"FPCSR"),("instret_delta",F64),
100    ("time_delta",F64)])
101;
102val _ = Record
103  ("SynchronousTrap",[("badaddr",OTy F64),("trap",CTy"ExceptionType")])
104;
105val _ = Construct
106  [("TransferControl",
107    [("BranchTo",[F64]),("Ereturn",[]),("Mrts",[]),
108     ("Trap",[CTy"SynchronousTrap"])])]
109;
110val _ = Construct
111  [("Rounding",
112    [("RNE",[]),("RTZ",[]),("RDN",[]),("RUP",[]),("RMM",[]),("RDYN",[])])]
113;
114val _ = Record
115  ("StateDelta",
116   [("addr",OTy F64),("data1",OTy F64),("data2",OTy F64),
117    ("exc_taken",bTy),("fetch_exc",bTy),("fp_data",OTy F64),("pc",F64),
118    ("rinstr",F32),("st_width",OTy F32)])
119;
120val _ = Record
121  ("SV_PTE",
122   [("PTE_D",bTy),("PTE_PPNi",FTy 38),("PTE_R",bTy),("PTE_SW",FTy 3),
123    ("PTE_T",F4),("PTE_V",bTy),("sv_pte'rst",F16)])
124;
125val _ = Record
126  ("SV_Vaddr",
127   [("Sv_PgOfs",FTy 12),("Sv_VPNi",FTy 36),("sv_vaddr'rst",F16)])
128;
129val _ = Record
130  ("TLBEntry",
131   [("age",F64),("asid",FTy 6),("global",bTy),("pAddr",F64),
132    ("pte",CTy"SV_PTE"),("pteAddr",F64),("vAddr",F64),("vAddrMask",F64),
133    ("vMatchMask",F64)])
134;
135val _ = Construct
136  [("Internal",[("FETCH_FAULT",[F64]),("FETCH_MISALIGNED",[F64])])]
137;
138val _ = Construct
139  [("System",
140    [("CSRRC",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),
141     ("CSRRCI",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),
142     ("CSRRS",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),
143     ("CSRRSI",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),
144     ("CSRRW",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),
145     ("CSRRWI",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),("EBREAK",[]),("ECALL",[]),
146     ("ERET",[]),("MRTS",[]),("SFENCE_VM",[FTy 5]),("WFI",[])])]
147;
148val _ = Construct
149  [("FConv",
150    [("FCLASS_D",[PTy(FTy 5,FTy 5)]),("FCLASS_S",[PTy(FTy 5,FTy 5)]),
151     ("FCVT_D_L",[PTy(FTy 5,PTy(FTy 5,FTy 3))]),
152     ("FCVT_D_LU",[PTy(FTy 5,PTy(FTy 5,FTy 3))]),
153     ("FCVT_D_S",[PTy(FTy 5,PTy(FTy 5,FTy 3))]),
154     ("FCVT_D_W",[PTy(FTy 5,PTy(FTy 5,FTy 3))]),
155     ("FCVT_D_WU",[PTy(FTy 5,PTy(FTy 5,FTy 3))]),
156     ("FCVT_LU_D",[PTy(FTy 5,PTy(FTy 5,FTy 3))]),
157     ("FCVT_LU_S",[PTy(FTy 5,PTy(FTy 5,FTy 3))]),
158     ("FCVT_L_D",[PTy(FTy 5,PTy(FTy 5,FTy 3))]),
159     ("FCVT_L_S",[PTy(FTy 5,PTy(FTy 5,FTy 3))]),
160     ("FCVT_S_D",[PTy(FTy 5,PTy(FTy 5,FTy 3))]),
161     ("FCVT_S_L",[PTy(FTy 5,PTy(FTy 5,FTy 3))]),
162     ("FCVT_S_LU",[PTy(FTy 5,PTy(FTy 5,FTy 3))]),
163     ("FCVT_S_W",[PTy(FTy 5,PTy(FTy 5,FTy 3))]),
164     ("FCVT_S_WU",[PTy(FTy 5,PTy(FTy 5,FTy 3))]),
165     ("FCVT_WU_D",[PTy(FTy 5,PTy(FTy 5,FTy 3))]),
166     ("FCVT_WU_S",[PTy(FTy 5,PTy(FTy 5,FTy 3))]),
167     ("FCVT_W_D",[PTy(FTy 5,PTy(FTy 5,FTy 3))]),
168     ("FCVT_W_S",[PTy(FTy 5,PTy(FTy 5,FTy 3))]),
169     ("FMV_D_X",[PTy(FTy 5,FTy 5)]),("FMV_S_X",[PTy(FTy 5,FTy 5)]),
170     ("FMV_X_D",[PTy(FTy 5,FTy 5)]),("FMV_X_S",[PTy(FTy 5,FTy 5)]),
171     ("FSGNJN_D",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
172     ("FSGNJN_S",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
173     ("FSGNJX_D",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
174     ("FSGNJX_S",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
175     ("FSGNJ_D",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
176     ("FSGNJ_S",[PTy(FTy 5,PTy(FTy 5,FTy 5))])])]
177;
178val _ = Construct
179  [("FArith",
180    [("FADD_D",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))]),
181     ("FADD_S",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))]),
182     ("FDIV_D",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))]),
183     ("FDIV_S",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))]),
184     ("FEQ_D",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
185     ("FEQ_S",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
186     ("FLE_D",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
187     ("FLE_S",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
188     ("FLT_D",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
189     ("FLT_S",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
190     ("FMADD_D",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))]),
191     ("FMADD_S",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))]),
192     ("FMAX_D",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
193     ("FMAX_S",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
194     ("FMIN_D",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
195     ("FMIN_S",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
196     ("FMSUB_D",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))]),
197     ("FMSUB_S",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))]),
198     ("FMUL_D",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))]),
199     ("FMUL_S",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))]),
200     ("FNMADD_D",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))]),
201     ("FNMADD_S",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))]),
202     ("FNMSUB_D",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))]),
203     ("FNMSUB_S",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))]),
204     ("FSQRT_D",[PTy(FTy 5,PTy(FTy 5,FTy 3))]),
205     ("FSQRT_S",[PTy(FTy 5,PTy(FTy 5,FTy 3))]),
206     ("FSUB_D",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))]),
207     ("FSUB_S",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))])])]
208;
209val _ = Construct
210  [("FPStore",
211    [("FSD",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),
212     ("FSW",[PTy(FTy 5,PTy(FTy 5,FTy 12))])])]
213;
214val _ = Construct
215  [("FPLoad",
216    [("FLD",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),
217     ("FLW",[PTy(FTy 5,PTy(FTy 5,FTy 12))])])]
218;
219val _ = Construct
220  [("AMO",
221    [("AMOADD_D",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
222     ("AMOADD_W",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
223     ("AMOAND_D",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
224     ("AMOAND_W",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
225     ("AMOMAXU_D",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
226     ("AMOMAXU_W",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
227     ("AMOMAX_D",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
228     ("AMOMAX_W",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
229     ("AMOMINU_D",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
230     ("AMOMINU_W",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
231     ("AMOMIN_D",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
232     ("AMOMIN_W",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
233     ("AMOOR_D",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
234     ("AMOOR_W",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
235     ("AMOSWAP_D",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
236     ("AMOSWAP_W",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
237     ("AMOXOR_D",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
238     ("AMOXOR_W",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
239     ("LR_D",[PTy(F1,PTy(F1,PTy(FTy 5,FTy 5)))]),
240     ("LR_W",[PTy(F1,PTy(F1,PTy(FTy 5,FTy 5)))]),
241     ("SC_D",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
242     ("SC_W",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))])])]
243;
244val _ = Construct
245  [("Store",
246    [("SB",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),
247     ("SD",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),
248     ("SH",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),
249     ("SW",[PTy(FTy 5,PTy(FTy 5,FTy 12))])])]
250;
251val _ = Construct
252  [("Load",
253    [("LB",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),
254     ("LBU",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),
255     ("LD",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),
256     ("LH",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),
257     ("LHU",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),
258     ("LW",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),
259     ("LWU",[PTy(FTy 5,PTy(FTy 5,FTy 12))])])]
260;
261val _ = Construct
262  [("Branch",
263    [("BEQ",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),
264     ("BGE",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),
265     ("BGEU",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),
266     ("BLT",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),
267     ("BLTU",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),
268     ("BNE",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),("JAL",[PTy(FTy 5,FTy 20)]),
269     ("JALR",[PTy(FTy 5,PTy(FTy 5,FTy 12))])])]
270;
271val _ = Construct
272  [("MulDiv",
273    [("DIV",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
274     ("DIVU",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
275     ("DIVUW",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
276     ("DIVW",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
277     ("MUL",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
278     ("MULH",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
279     ("MULHSU",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
280     ("MULHU",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
281     ("MULW",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
282     ("REM",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
283     ("REMU",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
284     ("REMUW",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
285     ("REMW",[PTy(FTy 5,PTy(FTy 5,FTy 5))])])]
286;
287val _ = Construct
288  [("Shift",
289    [("SLL",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
290     ("SLLI",[PTy(FTy 5,PTy(FTy 5,FTy 6))]),
291     ("SLLIW",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
292     ("SLLW",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
293     ("SRA",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
294     ("SRAI",[PTy(FTy 5,PTy(FTy 5,FTy 6))]),
295     ("SRAIW",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
296     ("SRAW",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
297     ("SRL",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
298     ("SRLI",[PTy(FTy 5,PTy(FTy 5,FTy 6))]),
299     ("SRLIW",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
300     ("SRLW",[PTy(FTy 5,PTy(FTy 5,FTy 5))])])]
301;
302val _ = Construct
303  [("ArithR",
304    [("ADD",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
305     ("ADDW",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
306     ("AND",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
307     ("OR",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
308     ("SLT",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
309     ("SLTU",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
310     ("SUB",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
311     ("SUBW",[PTy(FTy 5,PTy(FTy 5,FTy 5))]),
312     ("XOR",[PTy(FTy 5,PTy(FTy 5,FTy 5))])])]
313;
314val _ = Construct
315  [("ArithI",
316    [("ADDI",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),
317     ("ADDIW",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),
318     ("ANDI",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),
319     ("AUIPC",[PTy(FTy 5,FTy 20)]),("LUI",[PTy(FTy 5,FTy 20)]),
320     ("ORI",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),
321     ("SLTI",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),
322     ("SLTIU",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),
323     ("XORI",[PTy(FTy 5,PTy(FTy 5,FTy 12))])])]
324;
325val _ = Construct
326  [("instruction",
327    [("AMO",[CTy"AMO"]),("ArithI",[CTy"ArithI"]),("ArithR",[CTy"ArithR"]),
328     ("Branch",[CTy"Branch"]),("FArith",[CTy"FArith"]),
329     ("FConv",[CTy"FConv"]),("FENCE",[PTy(FTy 5,PTy(FTy 5,PTy(F4,F4)))]),
330     ("FENCE_I",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),("FPLoad",[CTy"FPLoad"]),
331     ("FPStore",[CTy"FPStore"]),("Internal",[CTy"Internal"]),
332     ("Load",[CTy"Load"]),("MulDiv",[CTy"MulDiv"]),("Shift",[CTy"Shift"]),
333     ("Store",[CTy"Store"]),("System",[CTy"System"]),
334     ("UnknownInstruction",[])])]
335;
336val _ = Construct
337  [("FetchResult",[("F_Error",[CTy"instruction"]),("F_Result",[F32])])]
338;
339val _ = Construct
340  [("exception",
341    [("INTERNAL_ERROR",[sTy]),("NoException",[]),("UNDEFINED",[sTy])])]
342;
343val _ = Record
344  ("riscv_state",
345   [("MEM8",ATy(F64,F8)),("c_ExitCode",ATy(F8,F64)),
346    ("c_HCSR",ATy(F8,CTy"HypervisorCSR")),
347    ("c_MCSR",ATy(F8,CTy"MachineCSR")),
348    ("c_NextFetch",ATy(F8,OTy(CTy"TransferControl"))),
349    ("c_PC",ATy(F8,F64)),("c_ReserveLoad",ATy(F8,OTy F64)),
350    ("c_SCSR",ATy(F8,CTy"SupervisorCSR")),("c_UCSR",ATy(F8,CTy"UserCSR")),
351    ("c_cycles",ATy(F8,F64)),("c_fpr",ATy(F8,ATy(FTy 5,F64))),
352    ("c_gpr",ATy(F8,ATy(FTy 5,F64))),("c_instret",ATy(F8,F64)),
353    ("c_tlb",ATy(F8,ATy(F4,OTy(CTy"TLBEntry")))),
354    ("c_update",ATy(F8,CTy"StateDelta")),("clock",F64),("done",bTy),
355    ("exception",CTy"exception"),("log",LTy(PTy(nTy,sTy))),("procID",F8),
356    ("totalCore",nTy)])
357;
358val qTy = CTy "riscv_state";
359fun qVar v = Term.mk_var (v, ParseDatatype.pretypeToType qTy);
360val raise'exception_def = Def
361  ("raise'exception",Var("e",CTy"exception"),
362   Close
363     (qVar"state",
364      TP[LX(VTy"a"),
365         ITE(EQ(Dest("exception",CTy"exception",qVar"state"),
366                Const("NoException",CTy"exception")),
367             Rupd("exception",TP[qVar"state",Var("e",CTy"exception")]),
368             qVar"state")]))
369;
370val ASID_SIZE_def = Def0 ("ASID_SIZE",LN 6)
371;
372val PAGESIZE_BITS_def = Def0 ("PAGESIZE_BITS",LN 12)
373;
374val LEVEL_BITS_def = Def0 ("LEVEL_BITS",LN 9)
375;
376val BYTE_def = Def0 ("BYTE",LW(0,3))
377;
378val HALFWORD_def = Def0 ("HALFWORD",LW(1,3))
379;
380val WORD_def = Def0 ("WORD",LW(3,3))
381;
382val DOUBLEWORD_def = Def0 ("DOUBLEWORD",LW(7,3))
383;
384val archBase_def = Def
385  ("archBase",Var("a",CTy"Architecture"),
386   CS(Var("a",CTy"Architecture"),
387      [(LC("RV32I",CTy"Architecture"),LW(0,2)),
388       (LC("RV64I",CTy"Architecture"),LW(2,2)),
389       (LC("RV128I",CTy"Architecture"),LW(3,2))]))
390;
391val architecture_def = Def
392  ("architecture",Var("ab",FTy 2),
393   Close
394     (qVar"state",
395      CS(Var("ab",FTy 2),
396         [(LW(0,2),TP[LC("RV32I",CTy"Architecture"),qVar"state"]),
397          (LW(2,2),TP[LC("RV64I",CTy"Architecture"),qVar"state"]),
398          (LW(3,2),TP[LC("RV128I",CTy"Architecture"),qVar"state"]),
399          (AVar(FTy 2),
400           Apply
401             (Call
402                ("raise'exception",ATy(qTy,PTy(CTy"Architecture",qTy)),
403                 Call
404                   ("UNDEFINED",CTy"exception",
405                    CC[LS"Unknown architecture: ",
406                       Mop(Cast sTy,Mop(Cast nTy,Var("ab",FTy 2)))])),
407              qVar"state"))])))
408;
409val archName_def = Def
410  ("archName",Var("a",CTy"Architecture"),
411   CS(Var("a",CTy"Architecture"),
412      [(LC("RV32I",CTy"Architecture"),LS"RV32I"),
413       (LC("RV64I",CTy"Architecture"),LS"RV64I"),
414       (LC("RV128I",CTy"Architecture"),LS"RV128I")]))
415;
416val privLevel_def = Def
417  ("privLevel",Var("p",CTy"Privilege"),
418   CS(Var("p",CTy"Privilege"),
419      [(LC("User",CTy"Privilege"),LW(0,2)),
420       (LC("Supervisor",CTy"Privilege"),LW(1,2)),
421       (LC("Hypervisor",CTy"Privilege"),LW(2,2)),
422       (LC("Machine",CTy"Privilege"),LW(3,2))]))
423;
424val privilege_def = Def
425  ("privilege",Var("p",FTy 2),
426   CS(Var("p",FTy 2),
427      [(LW(0,2),LC("User",CTy"Privilege")),
428       (LW(1,2),LC("Supervisor",CTy"Privilege")),
429       (LW(2,2),LC("Hypervisor",CTy"Privilege")),
430       (LW(3,2),LC("Machine",CTy"Privilege"))]))
431;
432val privName_def = Def
433  ("privName",Var("p",CTy"Privilege"),
434   CS(Var("p",CTy"Privilege"),
435      [(LC("User",CTy"Privilege"),LS"U"),
436       (LC("Supervisor",CTy"Privilege"),LS"S"),
437       (LC("Hypervisor",CTy"Privilege"),LS"H"),
438       (LC("Machine",CTy"Privilege"),LS"M")]))
439;
440val vmType_def = Def
441  ("vmType",Var("vm",FTy 5),
442   Close
443     (qVar"state",
444      CS(Var("vm",FTy 5),
445         [(LW(0,5),TP[LC("Mbare",CTy"VM_Mode"),qVar"state"]),
446          (LW(1,5),TP[LC("Mbb",CTy"VM_Mode"),qVar"state"]),
447          (LW(2,5),TP[LC("Mbbid",CTy"VM_Mode"),qVar"state"]),
448          (LW(8,5),TP[LC("Sv32",CTy"VM_Mode"),qVar"state"]),
449          (LW(9,5),TP[LC("Sv39",CTy"VM_Mode"),qVar"state"]),
450          (LW(10,5),TP[LC("Sv48",CTy"VM_Mode"),qVar"state"]),
451          (LW(11,5),TP[LC("Sv57",CTy"VM_Mode"),qVar"state"]),
452          (LW(12,5),TP[LC("Sv64",CTy"VM_Mode"),qVar"state"]),
453          (AVar(FTy 5),
454           Apply
455             (Call
456                ("raise'exception",ATy(qTy,PTy(CTy"VM_Mode",qTy)),
457                 Call
458                   ("UNDEFINED",CTy"exception",
459                    CC[LS"Unknown address translation mode: ",
460                       Mop(Cast sTy,Mop(Cast nTy,Var("vm",FTy 5)))])),
461              qVar"state"))])))
462;
463val isValidVM_def = Def
464  ("isValidVM",Var("vm",FTy 5),
465   CS(Var("vm",FTy 5),
466      [(LW(0,5),LT),(LW(1,5),LT),(LW(2,5),LT),(LW(8,5),LT),(LW(9,5),LT),
467       (LW(10,5),LT),(LW(11,5),LT),(LW(12,5),LT),(AVar(FTy 5),LF)]))
468;
469val vmMode_def = Def
470  ("vmMode",Var("vm",CTy"VM_Mode"),
471   CS(Var("vm",CTy"VM_Mode"),
472      [(LC("Mbare",CTy"VM_Mode"),LW(0,5)),
473       (LC("Mbb",CTy"VM_Mode"),LW(1,5)),
474       (LC("Mbbid",CTy"VM_Mode"),LW(2,5)),
475       (LC("Sv32",CTy"VM_Mode"),LW(8,5)),
476       (LC("Sv39",CTy"VM_Mode"),LW(9,5)),
477       (LC("Sv48",CTy"VM_Mode"),LW(10,5)),
478       (LC("Sv57",CTy"VM_Mode"),LW(11,5)),
479       (LC("Sv64",CTy"VM_Mode"),LW(12,5))]))
480;
481val vmModeName_def = Def
482  ("vmModeName",Var("vm",CTy"VM_Mode"),
483   CS(Var("vm",CTy"VM_Mode"),
484      [(LC("Mbare",CTy"VM_Mode"),LS"Mbare"),
485       (LC("Mbb",CTy"VM_Mode"),LS"Mbb"),
486       (LC("Mbbid",CTy"VM_Mode"),LS"Mbbid"),
487       (LC("Sv32",CTy"VM_Mode"),LS"Sv32"),
488       (LC("Sv39",CTy"VM_Mode"),LS"Sv39"),
489       (LC("Sv48",CTy"VM_Mode"),LS"Sv48"),
490       (LC("Sv57",CTy"VM_Mode"),LS"Sv57"),
491       (LC("Sv64",CTy"VM_Mode"),LS"Sv64")]))
492;
493val ext_status_def = Def
494  ("ext_status",Var("e",CTy"ExtStatus"),
495   CS(Var("e",CTy"ExtStatus"),
496      [(LC("Off",CTy"ExtStatus"),LW(0,2)),
497       (LC("Initial",CTy"ExtStatus"),LW(1,2)),
498       (LC("Clean",CTy"ExtStatus"),LW(2,2)),
499       (LC("Dirty",CTy"ExtStatus"),LW(3,2))]))
500;
501val extStatus_def = Def
502  ("extStatus",Var("e",FTy 2),
503   CS(Var("e",FTy 2),
504      [(LW(0,2),LC("Off",CTy"ExtStatus")),
505       (LW(1,2),LC("Initial",CTy"ExtStatus")),
506       (LW(2,2),LC("Clean",CTy"ExtStatus")),
507       (LW(3,2),LC("Dirty",CTy"ExtStatus"))]))
508;
509val extStatusName_def = Def
510  ("extStatusName",Var("e",CTy"ExtStatus"),
511   CS(Var("e",CTy"ExtStatus"),
512      [(LC("Off",CTy"ExtStatus"),LS"Off"),
513       (LC("Initial",CTy"ExtStatus"),LS"Initial"),
514       (LC("Clean",CTy"ExtStatus"),LS"Clean"),
515       (LC("Dirty",CTy"ExtStatus"),LS"Dirty")]))
516;
517val interruptIndex_def = Def
518  ("interruptIndex",Var("i",CTy"Interrupt"),
519   CS(Var("i",CTy"Interrupt"),
520      [(LC("Software",CTy"Interrupt"),LW(0,4)),
521       (LC("Timer",CTy"Interrupt"),LW(1,4))]))
522;
523val excCode_def = Def
524  ("excCode",Var("e",CTy"ExceptionType"),
525   CS(Var("e",CTy"ExceptionType"),
526      [(LC("Fetch_Misaligned",CTy"ExceptionType"),LW(0,4)),
527       (LC("Fetch_Fault",CTy"ExceptionType"),LW(1,4)),
528       (LC("Illegal_Instr",CTy"ExceptionType"),LW(2,4)),
529       (LC("Breakpoint",CTy"ExceptionType"),LW(3,4)),
530       (LC("Load_Fault",CTy"ExceptionType"),LW(5,4)),
531       (LC("AMO_Misaligned",CTy"ExceptionType"),LW(6,4)),
532       (LC("Store_AMO_Fault",CTy"ExceptionType"),LW(7,4)),
533       (LC("UMode_Env_Call",CTy"ExceptionType"),LW(8,4)),
534       (LC("SMode_Env_Call",CTy"ExceptionType"),LW(9,4)),
535       (LC("HMode_Env_Call",CTy"ExceptionType"),LW(10,4)),
536       (LC("MMode_Env_Call",CTy"ExceptionType"),LW(11,4))]))
537;
538val excType_def = Def
539  ("excType",Var("e",F4),
540   Close
541     (qVar"state",
542      CS(Var("e",F4),
543         [(LW(0,4),
544           TP[LC("Fetch_Misaligned",CTy"ExceptionType"),qVar"state"]),
545          (LW(1,4),TP[LC("Fetch_Fault",CTy"ExceptionType"),qVar"state"]),
546          (LW(2,4),TP[LC("Illegal_Instr",CTy"ExceptionType"),qVar"state"]),
547          (LW(3,4),TP[LC("Breakpoint",CTy"ExceptionType"),qVar"state"]),
548          (LW(5,4),TP[LC("Load_Fault",CTy"ExceptionType"),qVar"state"]),
549          (LW(6,4),TP[LC("AMO_Misaligned",CTy"ExceptionType"),qVar"state"]),
550          (LW(7,4),
551           TP[LC("Store_AMO_Fault",CTy"ExceptionType"),qVar"state"]),
552          (LW(8,4),TP[LC("UMode_Env_Call",CTy"ExceptionType"),qVar"state"]),
553          (LW(9,4),TP[LC("SMode_Env_Call",CTy"ExceptionType"),qVar"state"]),
554          (LW(10,4),
555           TP[LC("HMode_Env_Call",CTy"ExceptionType"),qVar"state"]),
556          (LW(11,4),
557           TP[LC("MMode_Env_Call",CTy"ExceptionType"),qVar"state"]),
558          (AVar F4,
559           Apply
560             (Call
561                ("raise'exception",ATy(qTy,PTy(CTy"ExceptionType",qTy)),
562                 Call
563                   ("UNDEFINED",CTy"exception",
564                    CC[LS"Unknown exception: ",
565                       Mop(Cast sTy,Mop(Cast nTy,Var("e",F4)))])),
566              qVar"state"))])))
567;
568val excName_def = Def
569  ("excName",Var("e",CTy"ExceptionType"),
570   CS(Var("e",CTy"ExceptionType"),
571      [(LC("Fetch_Misaligned",CTy"ExceptionType"),LS"MISALIGNED_FETCH"),
572       (LC("Fetch_Fault",CTy"ExceptionType"),LS"FAULT_FETCH"),
573       (LC("Illegal_Instr",CTy"ExceptionType"),LS"ILLEGAL_INSTRUCTION"),
574       (LC("Breakpoint",CTy"ExceptionType"),LS"BREAKPOINT"),
575       (LC("Load_Fault",CTy"ExceptionType"),LS"FAULT_LOAD"),
576       (LC("AMO_Misaligned",CTy"ExceptionType"),LS"MISALIGNED_AMO"),
577       (LC("Store_AMO_Fault",CTy"ExceptionType"),LS"FAULT_STORE_AMO"),
578       (LC("UMode_Env_Call",CTy"ExceptionType"),LS"U-EnvCall"),
579       (LC("SMode_Env_Call",CTy"ExceptionType"),LS"S-EnvCall"),
580       (LC("HMode_Env_Call",CTy"ExceptionType"),LS"H-EnvCall"),
581       (LC("MMode_Env_Call",CTy"ExceptionType"),LS"M-EnvCall")]))
582;
583val rec'mcpuid_def = Def
584  ("rec'mcpuid",Var("x",F64),
585   Rec(CTy"mcpuid",
586       [EX(Var("x",F64),LN 63,LN 62,FTy 2),Bop(Bit,Var("x",F64),LN 8),
587        Bop(Bit,Var("x",F64),LN 12),Bop(Bit,Var("x",F64),LN 18),
588        Bop(Bit,Var("x",F64),LN 20),
589        CC[EX(Var("x",F64),LN 7,LN 0,F8),
590           EX(Var("x",F64),LN 11,LN 9,FTy 3),
591           EX(Var("x",F64),LN 17,LN 13,FTy 5),
592           EX(Var("x",F64),LN 19,LN 19,F1),
593           EX(Var("x",F64),LN 61,LN 21,FTy 41)]]))
594;
595val reg'mcpuid_def = Def
596  ("reg'mcpuid",Var("x",CTy"mcpuid"),
597   CS(Var("x",CTy"mcpuid"),
598      [(Rec(CTy"mcpuid",
599            [Var("ArchBase",FTy 2),bVar"I",bVar"M",bVar"S",bVar"U",
600             Var("mcpuid'rst",FTy 58)]),
601        CC[Var("ArchBase",FTy 2),
602           EX(Var("mcpuid'rst",FTy 58),LN 40,LN 0,FTy 41),
603           Mop(Cast F1,bVar"U"),
604           EX(Var("mcpuid'rst",FTy 58),LN 41,LN 41,F1),
605           Mop(Cast F1,bVar"S"),
606           EX(Var("mcpuid'rst",FTy 58),LN 46,LN 42,FTy 5),
607           Mop(Cast F1,bVar"M"),
608           EX(Var("mcpuid'rst",FTy 58),LN 49,LN 47,FTy 3),
609           Mop(Cast F1,bVar"I"),
610           EX(Var("mcpuid'rst",FTy 58),LN 57,LN 50,F8)])]))
611;
612val write'rec'mcpuid_def = Def
613  ("write'rec'mcpuid",TP[AVar F64,Var("x",CTy"mcpuid")],
614   Call("reg'mcpuid",F64,Var("x",CTy"mcpuid")))
615;
616val write'reg'mcpuid_def = Def
617  ("write'reg'mcpuid",TP[AVar(CTy"mcpuid"),Var("x",F64)],
618   Call("rec'mcpuid",CTy"mcpuid",Var("x",F64)))
619;
620val rec'mimpid_def = Def
621  ("rec'mimpid",Var("x",F64),
622   Rec(CTy"mimpid",
623       [EX(Var("x",F64),LN 63,LN 16,FTy 48),
624        EX(Var("x",F64),LN 15,LN 0,F16)]))
625;
626val reg'mimpid_def = Def
627  ("reg'mimpid",Var("x",CTy"mimpid"),
628   CS(Var("x",CTy"mimpid"),
629      [(Rec(CTy"mimpid",[Var("RVImpl",FTy 48),Var("RVSource",F16)]),
630        CC[Var("RVImpl",FTy 48),Var("RVSource",F16)])]))
631;
632val write'rec'mimpid_def = Def
633  ("write'rec'mimpid",TP[AVar F64,Var("x",CTy"mimpid")],
634   Call("reg'mimpid",F64,Var("x",CTy"mimpid")))
635;
636val write'reg'mimpid_def = Def
637  ("write'reg'mimpid",TP[AVar(CTy"mimpid"),Var("x",F64)],
638   Call("rec'mimpid",CTy"mimpid",Var("x",F64)))
639;
640val rec'mstatus_def = Def
641  ("rec'mstatus",Var("x",F64),
642   Rec(CTy"mstatus",
643       [EX(Var("x",F64),LN 13,LN 12,FTy 2),Bop(Bit,Var("x",F64),LN 0),
644        Bop(Bit,Var("x",F64),LN 3),Bop(Bit,Var("x",F64),LN 6),
645        Bop(Bit,Var("x",F64),LN 9),Bop(Bit,Var("x",F64),LN 16),
646        EX(Var("x",F64),LN 2,LN 1,FTy 2),EX(Var("x",F64),LN 5,LN 4,FTy 2),
647        EX(Var("x",F64),LN 8,LN 7,FTy 2),
648        EX(Var("x",F64),LN 11,LN 10,FTy 2),Bop(Bit,Var("x",F64),LN 63),
649        EX(Var("x",F64),LN 15,LN 14,FTy 2),
650        EX(Var("x",F64),LN 21,LN 17,FTy 5),
651        EX(Var("x",F64),LN 62,LN 22,FTy 41)]))
652;
653val reg'mstatus_def = Def
654  ("reg'mstatus",Var("x",CTy"mstatus"),
655   CS(Var("x",CTy"mstatus"),
656      [(Rec(CTy"mstatus",
657            [Var("MFS",FTy 2),bVar"MIE",bVar"MIE1",bVar"MIE2",bVar"MIE3",
658             bVar"MMPRV",Var("MPRV",FTy 2),Var("MPRV1",FTy 2),
659             Var("MPRV2",FTy 2),Var("MPRV3",FTy 2),bVar"MSD",
660             Var("MXS",FTy 2),Var("VM",FTy 5),Var("mstatus'rst",FTy 41)]),
661        CC[Mop(Cast F1,bVar"MSD"),Var("mstatus'rst",FTy 41),
662           Var("VM",FTy 5),Mop(Cast F1,bVar"MMPRV"),Var("MXS",FTy 2),
663           Var("MFS",FTy 2),Var("MPRV3",FTy 2),Mop(Cast F1,bVar"MIE3"),
664           Var("MPRV2",FTy 2),Mop(Cast F1,bVar"MIE2"),Var("MPRV1",FTy 2),
665           Mop(Cast F1,bVar"MIE1"),Var("MPRV",FTy 2),
666           Mop(Cast F1,bVar"MIE")])]))
667;
668val write'rec'mstatus_def = Def
669  ("write'rec'mstatus",TP[AVar F64,Var("x",CTy"mstatus")],
670   Call("reg'mstatus",F64,Var("x",CTy"mstatus")))
671;
672val write'reg'mstatus_def = Def
673  ("write'reg'mstatus",TP[AVar(CTy"mstatus"),Var("x",F64)],
674   Call("rec'mstatus",CTy"mstatus",Var("x",F64)))
675;
676val rec'mtdeleg_def = Def
677  ("rec'mtdeleg",Var("x",F64),
678   Rec(CTy"mtdeleg",
679       [EX(Var("x",F64),LN 15,LN 0,F16),
680        EX(Var("x",F64),LN 63,LN 16,FTy 48)]))
681;
682val reg'mtdeleg_def = Def
683  ("reg'mtdeleg",Var("x",CTy"mtdeleg"),
684   CS(Var("x",CTy"mtdeleg"),
685      [(Rec(CTy"mtdeleg",[Var("Exc_deleg",F16),Var("Intr_deleg",FTy 48)]),
686        CC[Var("Intr_deleg",FTy 48),Var("Exc_deleg",F16)])]))
687;
688val write'rec'mtdeleg_def = Def
689  ("write'rec'mtdeleg",TP[AVar F64,Var("x",CTy"mtdeleg")],
690   Call("reg'mtdeleg",F64,Var("x",CTy"mtdeleg")))
691;
692val write'reg'mtdeleg_def = Def
693  ("write'reg'mtdeleg",TP[AVar(CTy"mtdeleg"),Var("x",F64)],
694   Call("rec'mtdeleg",CTy"mtdeleg",Var("x",F64)))
695;
696val rec'mip_def = Def
697  ("rec'mip",Var("x",F64),
698   Rec(CTy"mip",
699       [Bop(Bit,Var("x",F64),LN 2),Bop(Bit,Var("x",F64),LN 6),
700        Bop(Bit,Var("x",F64),LN 3),Bop(Bit,Var("x",F64),LN 7),
701        Bop(Bit,Var("x",F64),LN 1),Bop(Bit,Var("x",F64),LN 5),
702        CC[EX(Var("x",F64),LN 0,LN 0,F1),EX(Var("x",F64),LN 4,LN 4,F1),
703           EX(Var("x",F64),LN 63,LN 8,FTy 56)]]))
704;
705val reg'mip_def = Def
706  ("reg'mip",Var("x",CTy"mip"),
707   CS(Var("x",CTy"mip"),
708      [(Rec(CTy"mip",
709            [bVar"HSIP",bVar"HTIP",bVar"MSIP",bVar"MTIP",bVar"SSIP",
710             bVar"STIP",Var("mip'rst",FTy 58)]),
711        CC[EX(Var("mip'rst",FTy 58),LN 55,LN 0,FTy 56),
712           Mop(Cast F1,bVar"MTIP"),Mop(Cast F1,bVar"HTIP"),
713           Mop(Cast F1,bVar"STIP"),
714           EX(Var("mip'rst",FTy 58),LN 56,LN 56,F1),
715           Mop(Cast F1,bVar"MSIP"),Mop(Cast F1,bVar"HSIP"),
716           Mop(Cast F1,bVar"SSIP"),
717           EX(Var("mip'rst",FTy 58),LN 57,LN 57,F1)])]))
718;
719val write'rec'mip_def = Def
720  ("write'rec'mip",TP[AVar F64,Var("x",CTy"mip")],
721   Call("reg'mip",F64,Var("x",CTy"mip")))
722;
723val write'reg'mip_def = Def
724  ("write'reg'mip",TP[AVar(CTy"mip"),Var("x",F64)],
725   Call("rec'mip",CTy"mip",Var("x",F64)))
726;
727val rec'mie_def = Def
728  ("rec'mie",Var("x",F64),
729   Rec(CTy"mie",
730       [Bop(Bit,Var("x",F64),LN 2),Bop(Bit,Var("x",F64),LN 6),
731        Bop(Bit,Var("x",F64),LN 3),Bop(Bit,Var("x",F64),LN 7),
732        Bop(Bit,Var("x",F64),LN 1),Bop(Bit,Var("x",F64),LN 5),
733        CC[EX(Var("x",F64),LN 0,LN 0,F1),EX(Var("x",F64),LN 4,LN 4,F1),
734           EX(Var("x",F64),LN 63,LN 8,FTy 56)]]))
735;
736val reg'mie_def = Def
737  ("reg'mie",Var("x",CTy"mie"),
738   CS(Var("x",CTy"mie"),
739      [(Rec(CTy"mie",
740            [bVar"HSIE",bVar"HTIE",bVar"MSIE",bVar"MTIE",bVar"SSIE",
741             bVar"STIE",Var("mie'rst",FTy 58)]),
742        CC[EX(Var("mie'rst",FTy 58),LN 55,LN 0,FTy 56),
743           Mop(Cast F1,bVar"MTIE"),Mop(Cast F1,bVar"HTIE"),
744           Mop(Cast F1,bVar"STIE"),
745           EX(Var("mie'rst",FTy 58),LN 56,LN 56,F1),
746           Mop(Cast F1,bVar"MSIE"),Mop(Cast F1,bVar"HSIE"),
747           Mop(Cast F1,bVar"SSIE"),
748           EX(Var("mie'rst",FTy 58),LN 57,LN 57,F1)])]))
749;
750val write'rec'mie_def = Def
751  ("write'rec'mie",TP[AVar F64,Var("x",CTy"mie")],
752   Call("reg'mie",F64,Var("x",CTy"mie")))
753;
754val write'reg'mie_def = Def
755  ("write'reg'mie",TP[AVar(CTy"mie"),Var("x",F64)],
756   Call("rec'mie",CTy"mie",Var("x",F64)))
757;
758val rec'mcause_def = Def
759  ("rec'mcause",Var("x",F64),
760   Rec(CTy"mcause",
761       [EX(Var("x",F64),LN 3,LN 0,F4),Bop(Bit,Var("x",F64),LN 63),
762        EX(Var("x",F64),LN 62,LN 4,FTy 59)]))
763;
764val reg'mcause_def = Def
765  ("reg'mcause",Var("x",CTy"mcause"),
766   CS(Var("x",CTy"mcause"),
767      [(Rec(CTy"mcause",[Var("EC",F4),bVar"Int",Var("mcause'rst",FTy 59)]),
768        CC[Mop(Cast F1,bVar"Int"),Var("mcause'rst",FTy 59),Var("EC",F4)])]))
769;
770val write'rec'mcause_def = Def
771  ("write'rec'mcause",TP[AVar F64,Var("x",CTy"mcause")],
772   Call("reg'mcause",F64,Var("x",CTy"mcause")))
773;
774val write'reg'mcause_def = Def
775  ("write'reg'mcause",TP[AVar(CTy"mcause"),Var("x",F64)],
776   Call("rec'mcause",CTy"mcause",Var("x",F64)))
777;
778val rec'sstatus_def = Def
779  ("rec'sstatus",Var("x",F64),
780   Rec(CTy"sstatus",
781       [EX(Var("x",F64),LN 13,LN 12,FTy 2),Bop(Bit,Var("x",F64),LN 0),
782        Bop(Bit,Var("x",F64),LN 16),Bop(Bit,Var("x",F64),LN 3),
783        Bop(Bit,Var("x",F64),LN 4),Bop(Bit,Var("x",F64),LN 63),
784        EX(Var("x",F64),LN 15,LN 14,FTy 2),
785        CC[EX(Var("x",F64),LN 2,LN 1,FTy 2),
786           EX(Var("x",F64),LN 11,LN 5,FTy 7),
787           EX(Var("x",F64),LN 62,LN 17,FTy 46)]]))
788;
789val reg'sstatus_def = Def
790  ("reg'sstatus",Var("x",CTy"sstatus"),
791   CS(Var("x",CTy"sstatus"),
792      [(Rec(CTy"sstatus",
793            [Var("SFS",FTy 2),bVar"SIE",bVar"SMPRV",bVar"SPIE",bVar"SPS",
794             bVar"SSD",Var("SXS",FTy 2),Var("sstatus'rst",FTy 55)]),
795        CC[Mop(Cast F1,bVar"SSD"),
796           EX(Var("sstatus'rst",FTy 55),LN 45,LN 0,FTy 46),
797           Mop(Cast F1,bVar"SMPRV"),Var("SXS",FTy 2),Var("SFS",FTy 2),
798           EX(Var("sstatus'rst",FTy 55),LN 52,LN 46,FTy 7),
799           Mop(Cast F1,bVar"SPS"),Mop(Cast F1,bVar"SPIE"),
800           EX(Var("sstatus'rst",FTy 55),LN 54,LN 53,FTy 2),
801           Mop(Cast F1,bVar"SIE")])]))
802;
803val write'rec'sstatus_def = Def
804  ("write'rec'sstatus",TP[AVar F64,Var("x",CTy"sstatus")],
805   Call("reg'sstatus",F64,Var("x",CTy"sstatus")))
806;
807val write'reg'sstatus_def = Def
808  ("write'reg'sstatus",TP[AVar(CTy"sstatus"),Var("x",F64)],
809   Call("rec'sstatus",CTy"sstatus",Var("x",F64)))
810;
811val rec'sip_def = Def
812  ("rec'sip",Var("x",F64),
813   Rec(CTy"sip",
814       [Bop(Bit,Var("x",F64),LN 1),Bop(Bit,Var("x",F64),LN 5),
815        CC[EX(Var("x",F64),LN 0,LN 0,F1),EX(Var("x",F64),LN 4,LN 2,FTy 3),
816           EX(Var("x",F64),LN 63,LN 6,FTy 58)]]))
817;
818val reg'sip_def = Def
819  ("reg'sip",Var("x",CTy"sip"),
820   CS(Var("x",CTy"sip"),
821      [(Rec(CTy"sip",[bVar"SSIP",bVar"STIP",Var("sip'rst",FTy 62)]),
822        CC[EX(Var("sip'rst",FTy 62),LN 57,LN 0,FTy 58),
823           Mop(Cast F1,bVar"STIP"),
824           EX(Var("sip'rst",FTy 62),LN 60,LN 58,FTy 3),
825           Mop(Cast F1,bVar"SSIP"),
826           EX(Var("sip'rst",FTy 62),LN 61,LN 61,F1)])]))
827;
828val write'rec'sip_def = Def
829  ("write'rec'sip",TP[AVar F64,Var("x",CTy"sip")],
830   Call("reg'sip",F64,Var("x",CTy"sip")))
831;
832val write'reg'sip_def = Def
833  ("write'reg'sip",TP[AVar(CTy"sip"),Var("x",F64)],
834   Call("rec'sip",CTy"sip",Var("x",F64)))
835;
836val rec'sie_def = Def
837  ("rec'sie",Var("x",F64),
838   Rec(CTy"sie",
839       [Bop(Bit,Var("x",F64),LN 1),Bop(Bit,Var("x",F64),LN 5),
840        CC[EX(Var("x",F64),LN 0,LN 0,F1),EX(Var("x",F64),LN 4,LN 2,FTy 3),
841           EX(Var("x",F64),LN 63,LN 6,FTy 58)]]))
842;
843val reg'sie_def = Def
844  ("reg'sie",Var("x",CTy"sie"),
845   CS(Var("x",CTy"sie"),
846      [(Rec(CTy"sie",[bVar"SSIE",bVar"STIE",Var("sie'rst",FTy 62)]),
847        CC[EX(Var("sie'rst",FTy 62),LN 57,LN 0,FTy 58),
848           Mop(Cast F1,bVar"STIE"),
849           EX(Var("sie'rst",FTy 62),LN 60,LN 58,FTy 3),
850           Mop(Cast F1,bVar"SSIE"),
851           EX(Var("sie'rst",FTy 62),LN 61,LN 61,F1)])]))
852;
853val write'rec'sie_def = Def
854  ("write'rec'sie",TP[AVar F64,Var("x",CTy"sie")],
855   Call("reg'sie",F64,Var("x",CTy"sie")))
856;
857val write'reg'sie_def = Def
858  ("write'reg'sie",TP[AVar(CTy"sie"),Var("x",F64)],
859   Call("rec'sie",CTy"sie",Var("x",F64)))
860;
861val rec'FPCSR_def = Def
862  ("rec'FPCSR",Var("x",F32),
863   Rec(CTy"FPCSR",
864       [Bop(Bit,Var("x",F32),LN 3),EX(Var("x",F32),LN 7,LN 5,FTy 3),
865        Bop(Bit,Var("x",F32),LN 4),Bop(Bit,Var("x",F32),LN 0),
866        Bop(Bit,Var("x",F32),LN 2),Bop(Bit,Var("x",F32),LN 1),
867        EX(Var("x",F32),LN 31,LN 8,FTy 24)]))
868;
869val reg'FPCSR_def = Def
870  ("reg'FPCSR",Var("x",CTy"FPCSR"),
871   CS(Var("x",CTy"FPCSR"),
872      [(Rec(CTy"FPCSR",
873            [bVar"DZ",Var("FRM",FTy 3),bVar"NV",bVar"NX",bVar"OF",
874             bVar"UF",Var("fpcsr'rst",FTy 24)]),
875        CC[Var("fpcsr'rst",FTy 24),Var("FRM",FTy 3),Mop(Cast F1,bVar"NV"),
876           Mop(Cast F1,bVar"DZ"),Mop(Cast F1,bVar"OF"),
877           Mop(Cast F1,bVar"UF"),Mop(Cast F1,bVar"NX")])]))
878;
879val write'rec'FPCSR_def = Def
880  ("write'rec'FPCSR",TP[AVar F32,Var("x",CTy"FPCSR")],
881   Call("reg'FPCSR",F32,Var("x",CTy"FPCSR")))
882;
883val write'reg'FPCSR_def = Def
884  ("write'reg'FPCSR",TP[AVar(CTy"FPCSR"),Var("x",F32)],
885   Call("rec'FPCSR",CTy"FPCSR",Var("x",F32)))
886;
887val lift_mip_sip_def = Def
888  ("lift_mip_sip",Var("mip",CTy"mip"),
889   Rupd
890     ("SSIP",
891      TP[Rupd
892           ("STIP",
893            TP[Call("rec'sip",CTy"sip",LW(0,64)),
894               Dest("STIP",bTy,Var("mip",CTy"mip"))]),
895         Dest("SSIP",bTy,Var("mip",CTy"mip"))]))
896;
897val lift_mie_sie_def = Def
898  ("lift_mie_sie",Var("mie",CTy"mie"),
899   Rupd
900     ("SSIE",
901      TP[Rupd
902           ("STIE",
903            TP[Call("rec'sie",CTy"sie",LW(0,64)),
904               Dest("STIE",bTy,Var("mie",CTy"mie"))]),
905         Dest("SSIE",bTy,Var("mie",CTy"mie"))]))
906;
907val lower_sip_mip_def = Def
908  ("lower_sip_mip",TP[Var("sip",CTy"sip"),Var("mip",CTy"mip")],
909   Rupd
910     ("SSIP",
911      TP[Rupd
912           ("STIP",
913            TP[Var("mip",CTy"mip"),Dest("STIP",bTy,Var("sip",CTy"sip"))]),
914         Dest("SSIP",bTy,Var("sip",CTy"sip"))]))
915;
916val lower_sie_mie_def = Def
917  ("lower_sie_mie",TP[Var("sie",CTy"sie"),Var("mie",CTy"mie")],
918   Rupd
919     ("SSIE",
920      TP[Rupd
921           ("STIE",
922            TP[Var("mie",CTy"mie"),Dest("STIE",bTy,Var("sie",CTy"sie"))]),
923         Dest("SSIE",bTy,Var("sie",CTy"sie"))]))
924;
925val update_mstatus_def = Def
926  ("update_mstatus",TP[Var("orig",CTy"mstatus"),Var("v",CTy"mstatus")],
927   Let(Var("s0",CTy"mstatus"),
928       Rupd
929         ("MPRV3",
930          TP[Rupd
931               ("MIE3",
932                TP[Rupd
933                     ("MPRV2",
934                      TP[Rupd
935                           ("MIE2",
936                            TP[Rupd
937                                 ("MPRV1",
938                                  TP[Rupd
939                                       ("MIE1",
940                                        TP[Rupd
941                                             ("MPRV",
942                                              TP[Rupd
943                                                   ("MIE",
944                                                    TP[Var("orig",
945                                                           CTy"mstatus"),
946                                                       Dest
947                                                         ("MIE",bTy,
948                                                          Var("v",
949                                                              CTy"mstatus"))]),
950                                                 Dest
951                                                   ("MPRV",FTy 2,
952                                                    Var("v",CTy"mstatus"))]),
953                                           Dest
954                                             ("MIE1",bTy,
955                                              Var("v",CTy"mstatus"))]),
956                                     Dest
957                                       ("MPRV1",FTy 2,
958                                        Var("v",CTy"mstatus"))]),
959                               Dest("MIE2",bTy,Var("v",CTy"mstatus"))]),
960                         Dest("MPRV2",FTy 2,Var("v",CTy"mstatus"))]),
961                   Dest("MIE3",bTy,Var("v",CTy"mstatus"))]),
962             Dest("MPRV3",FTy 2,Var("v",CTy"mstatus"))]),
963       Rupd
964         ("MSD",
965          TP[Rupd
966               ("MXS",
967                TP[Rupd
968                     ("MFS",
969                      TP[Rupd
970                           ("MMPRV",
971                            TP[ITE(Call
972                                     ("isValidVM",bTy,
973                                      Dest
974                                        ("VM",FTy 5,Var("v",CTy"mstatus"))),
975                                   Rupd
976                                     ("VM",
977                                      TP[Var("s0",CTy"mstatus"),
978                                         Dest
979                                           ("VM",FTy 5,
980                                            Var("v",CTy"mstatus"))]),
981                                   Var("s0",CTy"mstatus")),
982                               Dest("MMPRV",bTy,Var("v",CTy"mstatus"))]),
983                         Dest("MFS",FTy 2,Var("v",CTy"mstatus"))]),
984                   Dest("MXS",FTy 2,Var("v",CTy"mstatus"))]),
985             Bop(Or,
986                 EQ(Call
987                      ("extStatus",CTy"ExtStatus",
988                       Dest("MXS",FTy 2,Var("v",CTy"mstatus"))),
989                    LC("Dirty",CTy"ExtStatus")),
990                 EQ(Call
991                      ("extStatus",CTy"ExtStatus",
992                       Dest("MFS",FTy 2,Var("v",CTy"mstatus"))),
993                    LC("Dirty",CTy"ExtStatus")))])))
994;
995val lift_mstatus_sstatus_def = Def
996  ("lift_mstatus_sstatus",Var("mst",CTy"mstatus"),
997   Rupd
998     ("SIE",
999      TP[Rupd
1000           ("SPIE",
1001            TP[Rupd
1002                 ("SPS",
1003                  TP[Rupd
1004                       ("SSD",
1005                        TP[Rupd
1006                             ("SFS",
1007                              TP[Rupd
1008                                   ("SXS",
1009                                    TP[Rupd
1010                                         ("SMPRV",
1011                                          TP[Call
1012                                               ("rec'sstatus",
1013                                                CTy"sstatus",LW(0,64)),
1014                                             Dest
1015                                               ("MMPRV",bTy,
1016                                                Var("mst",CTy"mstatus"))]),
1017                                       Dest
1018                                         ("MXS",FTy 2,
1019                                          Var("mst",CTy"mstatus"))]),
1020                                 Dest("MFS",FTy 2,Var("mst",CTy"mstatus"))]),
1021                           Bop(Or,
1022                               EQ(Call
1023                                    ("extStatus",CTy"ExtStatus",
1024                                     Dest
1025                                       ("MXS",FTy 2,
1026                                        Var("mst",CTy"mstatus"))),
1027                                  LC("Dirty",CTy"ExtStatus")),
1028                               EQ(Call
1029                                    ("extStatus",CTy"ExtStatus",
1030                                     Dest
1031                                       ("MFS",FTy 2,
1032                                        Var("mst",CTy"mstatus"))),
1033                                  LC("Dirty",CTy"ExtStatus")))]),
1034                     Mop(Not,
1035                         EQ(Call
1036                              ("privilege",CTy"Privilege",
1037                               Dest("MPRV1",FTy 2,Var("mst",CTy"mstatus"))),
1038                            LC("User",CTy"Privilege")))]),
1039               Dest("MIE1",bTy,Var("mst",CTy"mstatus"))]),
1040         Dest("MIE",bTy,Var("mst",CTy"mstatus"))]))
1041;
1042val lower_sstatus_mstatus_def = Def
1043  ("lower_sstatus_mstatus",
1044   TP[Var("sst",CTy"sstatus"),Var("mst",CTy"mstatus")],
1045   Call
1046     ("update_mstatus",CTy"mstatus",
1047      TP[Var("mst",CTy"mstatus"),
1048         Rupd
1049           ("MIE",
1050            TP[Rupd
1051                 ("MIE1",
1052                  TP[Rupd
1053                       ("MPRV1",
1054                        TP[Rupd
1055                             ("MFS",
1056                              TP[Rupd
1057                                   ("MXS",
1058                                    TP[Rupd
1059                                         ("MMPRV",
1060                                          TP[Call
1061                                               ("rec'mstatus",
1062                                                CTy"mstatus",
1063                                                Call
1064                                                  ("reg'mstatus",F64,
1065                                                   Var("mst",CTy"mstatus"))),
1066                                             Dest
1067                                               ("SMPRV",bTy,
1068                                                Var("sst",CTy"sstatus"))]),
1069                                       Dest
1070                                         ("SXS",FTy 2,
1071                                          Var("sst",CTy"sstatus"))]),
1072                                 Dest("SFS",FTy 2,Var("sst",CTy"sstatus"))]),
1073                           Call
1074                             ("privLevel",FTy 2,
1075                              ITE(Dest("SPS",bTy,Var("sst",CTy"sstatus")),
1076                                  LC("Supervisor",CTy"Privilege"),
1077                                  LC("User",CTy"Privilege")))]),
1078                     Dest("SPIE",bTy,Var("sst",CTy"sstatus"))]),
1079               Dest("SIE",bTy,Var("sst",CTy"sstatus"))])]))
1080;
1081val popPrivilegeStack_def = Def
1082  ("popPrivilegeStack",Var("mst",CTy"mstatus"),
1083   Rupd
1084     ("MPRV2",
1085      TP[Rupd
1086           ("MIE2",
1087            TP[Rupd
1088                 ("MPRV1",
1089                  TP[Rupd
1090                       ("MIE1",
1091                        TP[Rupd
1092                             ("MPRV",
1093                              TP[Rupd
1094                                   ("MIE",
1095                                    TP[Var("mst",CTy"mstatus"),
1096                                       Dest
1097                                         ("MIE1",bTy,
1098                                          Var("mst",CTy"mstatus"))]),
1099                                 Dest
1100                                   ("MPRV1",FTy 2,Var("mst",CTy"mstatus"))]),
1101                           Dest("MIE2",bTy,Var("mst",CTy"mstatus"))]),
1102                     Dest("MPRV2",FTy 2,Var("mst",CTy"mstatus"))]),LT]),
1103         Call("privLevel",FTy 2,LC("User",CTy"Privilege"))]))
1104;
1105val pushPrivilegeStack_def = Def
1106  ("pushPrivilegeStack",
1107   TP[Var("mst",CTy"mstatus"),Var("p",CTy"Privilege")],
1108   Rupd
1109     ("MPRV",
1110      TP[Rupd
1111           ("MIE",
1112            TP[Rupd
1113                 ("MPRV1",
1114                  TP[Rupd
1115                       ("MIE1",
1116                        TP[Rupd
1117                             ("MPRV2",
1118                              TP[Rupd
1119                                   ("MIE2",
1120                                    TP[Var("mst",CTy"mstatus"),
1121                                       Dest
1122                                         ("MIE1",bTy,
1123                                          Var("mst",CTy"mstatus"))]),
1124                                 Dest
1125                                   ("MPRV1",FTy 2,Var("mst",CTy"mstatus"))]),
1126                           Dest("MIE",bTy,Var("mst",CTy"mstatus"))]),
1127                     Dest("MPRV",FTy 2,Var("mst",CTy"mstatus"))]),LF]),
1128         Call("privLevel",FTy 2,Var("p",CTy"Privilege"))]))
1129;
1130val scheduleCore_def = Def
1131  ("scheduleCore",nVar"id",
1132   Close
1133     (qVar"state",
1134      ITE(Bop(Lt,nVar"id",Dest("totalCore",nTy,qVar"state")),
1135          Rupd("procID",TP[qVar"state",Mop(Cast F8,nVar"id")]),qVar"state")))
1136;
1137val gpr_def = Def
1138  ("gpr",Var("n",FTy 5),
1139   Close
1140     (qVar"state",
1141      Apply
1142        (Apply
1143           (Dest("c_gpr",ATy(F8,ATy(FTy 5,F64)),qVar"state"),
1144            Dest("procID",F8,qVar"state")),Var("n",FTy 5))))
1145;
1146val write'gpr_def = Def
1147  ("write'gpr",TP[Var("value",F64),Var("n",FTy 5)],
1148   Close
1149     (qVar"state",
1150      Rupd
1151        ("c_gpr",
1152         TP[qVar"state",
1153            Fupd
1154              (Dest("c_gpr",ATy(F8,ATy(FTy 5,F64)),qVar"state"),
1155               Dest("procID",F8,qVar"state"),
1156               Fupd
1157                 (Apply
1158                    (Dest("c_gpr",ATy(F8,ATy(FTy 5,F64)),qVar"state"),
1159                     Dest("procID",F8,qVar"state")),Var("n",FTy 5),
1160                  Var("value",F64)))])))
1161;
1162val fcsr_def = Def
1163  ("fcsr",qVar"state",
1164   Dest
1165     ("fpcsr",CTy"FPCSR",
1166      Apply
1167        (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
1168         Dest("procID",F8,qVar"state"))))
1169;
1170val write'fcsr_def = Def
1171  ("write'fcsr",Var("value",CTy"FPCSR"),
1172   Close
1173     (qVar"state",
1174      Let(qVar"s",
1175          Rupd
1176            ("c_UCSR",
1177             TP[qVar"state",
1178                Fupd
1179                  (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
1180                   Dest("procID",F8,qVar"state"),
1181                   Rupd
1182                     ("fpcsr",
1183                      TP[Apply
1184                           (Dest
1185                              ("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
1186                            Dest("procID",F8,qVar"state")),
1187                         Var("value",CTy"FPCSR")]))]),
1188          Let(qVar"s",
1189              Let(Var("v",CTy"MachineCSR"),
1190                  Apply
1191                    (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"s"),
1192                     Dest("procID",F8,qVar"s")),
1193                  Rupd
1194                    ("c_MCSR",
1195                     TP[qVar"s",
1196                        Fupd
1197                          (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"s"),
1198                           Dest("procID",F8,qVar"s"),
1199                           Rupd
1200                             ("mstatus",
1201                              TP[Var("v",CTy"MachineCSR"),
1202                                 Rupd
1203                                   ("MFS",
1204                                    TP[Dest
1205                                         ("mstatus",CTy"mstatus",
1206                                          Var("v",CTy"MachineCSR")),
1207                                       Call
1208                                         ("ext_status",FTy 2,
1209                                          LC("Dirty",CTy"ExtStatus"))])]))])),
1210              Let(Var("v",CTy"MachineCSR"),
1211                  Apply
1212                    (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"s"),
1213                     Dest("procID",F8,qVar"s")),
1214                  Rupd
1215                    ("c_MCSR",
1216                     TP[qVar"s",
1217                        Fupd
1218                          (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"s"),
1219                           Dest("procID",F8,qVar"s"),
1220                           Rupd
1221                             ("mstatus",
1222                              TP[Var("v",CTy"MachineCSR"),
1223                                 Rupd
1224                                   ("MSD",
1225                                    TP[Dest
1226                                         ("mstatus",CTy"mstatus",
1227                                          Var("v",CTy"MachineCSR")),LT])]))]))))))
1228;
1229val fpr_def = Def
1230  ("fpr",Var("n",FTy 5),
1231   Close
1232     (qVar"state",
1233      Apply
1234        (Apply
1235           (Dest("c_fpr",ATy(F8,ATy(FTy 5,F64)),qVar"state"),
1236            Dest("procID",F8,qVar"state")),Var("n",FTy 5))))
1237;
1238val write'fpr_def = Def
1239  ("write'fpr",TP[Var("value",F64),Var("n",FTy 5)],
1240   Close
1241     (qVar"state",
1242      Rupd
1243        ("c_fpr",
1244         TP[qVar"state",
1245            Fupd
1246              (Dest("c_fpr",ATy(F8,ATy(FTy 5,F64)),qVar"state"),
1247               Dest("procID",F8,qVar"state"),
1248               Fupd
1249                 (Apply
1250                    (Dest("c_fpr",ATy(F8,ATy(FTy 5,F64)),qVar"state"),
1251                     Dest("procID",F8,qVar"state")),Var("n",FTy 5),
1252                  Var("value",F64)))])))
1253;
1254val PC_def = Def
1255  ("PC",qVar"state",
1256   Apply
1257     (Dest("c_PC",ATy(F8,F64),qVar"state"),Dest("procID",F8,qVar"state")))
1258;
1259val write'PC_def = Def
1260  ("write'PC",Var("value",F64),
1261   Close
1262     (qVar"state",
1263      Rupd
1264        ("c_PC",
1265         TP[qVar"state",
1266            Fupd
1267              (Dest("c_PC",ATy(F8,F64),qVar"state"),
1268               Dest("procID",F8,qVar"state"),Var("value",F64))])))
1269;
1270val UCSR_def = Def
1271  ("UCSR",qVar"state",
1272   Apply
1273     (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
1274      Dest("procID",F8,qVar"state")))
1275;
1276val write'UCSR_def = Def
1277  ("write'UCSR",Var("value",CTy"UserCSR"),
1278   Close
1279     (qVar"state",
1280      Rupd
1281        ("c_UCSR",
1282         TP[qVar"state",
1283            Fupd
1284              (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
1285               Dest("procID",F8,qVar"state"),Var("value",CTy"UserCSR"))])))
1286;
1287val SCSR_def = Def
1288  ("SCSR",qVar"state",
1289   Apply
1290     (Dest("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"),
1291      Dest("procID",F8,qVar"state")))
1292;
1293val write'SCSR_def = Def
1294  ("write'SCSR",Var("value",CTy"SupervisorCSR"),
1295   Close
1296     (qVar"state",
1297      Rupd
1298        ("c_SCSR",
1299         TP[qVar"state",
1300            Fupd
1301              (Dest("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"),
1302               Dest("procID",F8,qVar"state"),
1303               Var("value",CTy"SupervisorCSR"))])))
1304;
1305val HCSR_def = Def
1306  ("HCSR",qVar"state",
1307   Apply
1308     (Dest("c_HCSR",ATy(F8,CTy"HypervisorCSR"),qVar"state"),
1309      Dest("procID",F8,qVar"state")))
1310;
1311val write'HCSR_def = Def
1312  ("write'HCSR",Var("value",CTy"HypervisorCSR"),
1313   Close
1314     (qVar"state",
1315      Rupd
1316        ("c_HCSR",
1317         TP[qVar"state",
1318            Fupd
1319              (Dest("c_HCSR",ATy(F8,CTy"HypervisorCSR"),qVar"state"),
1320               Dest("procID",F8,qVar"state"),
1321               Var("value",CTy"HypervisorCSR"))])))
1322;
1323val MCSR_def = Def
1324  ("MCSR",qVar"state",
1325   Apply
1326     (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
1327      Dest("procID",F8,qVar"state")))
1328;
1329val write'MCSR_def = Def
1330  ("write'MCSR",Var("value",CTy"MachineCSR"),
1331   Close
1332     (qVar"state",
1333      Rupd
1334        ("c_MCSR",
1335         TP[qVar"state",
1336            Fupd
1337              (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
1338               Dest("procID",F8,qVar"state"),Var("value",CTy"MachineCSR"))])))
1339;
1340val NextFetch_def = Def
1341  ("NextFetch",qVar"state",
1342   Apply
1343     (Dest("c_NextFetch",ATy(F8,OTy(CTy"TransferControl")),qVar"state"),
1344      Dest("procID",F8,qVar"state")))
1345;
1346val write'NextFetch_def = Def
1347  ("write'NextFetch",Var("value",OTy(CTy"TransferControl")),
1348   Close
1349     (qVar"state",
1350      Rupd
1351        ("c_NextFetch",
1352         TP[qVar"state",
1353            Fupd
1354              (Dest
1355                 ("c_NextFetch",ATy(F8,OTy(CTy"TransferControl")),
1356                  qVar"state"),Dest("procID",F8,qVar"state"),
1357               Var("value",OTy(CTy"TransferControl")))])))
1358;
1359val ReserveLoad_def = Def
1360  ("ReserveLoad",qVar"state",
1361   Apply
1362     (Dest("c_ReserveLoad",ATy(F8,OTy F64),qVar"state"),
1363      Dest("procID",F8,qVar"state")))
1364;
1365val write'ReserveLoad_def = Def
1366  ("write'ReserveLoad",Var("value",OTy F64),
1367   Close
1368     (qVar"state",
1369      Rupd
1370        ("c_ReserveLoad",
1371         TP[qVar"state",
1372            Fupd
1373              (Dest("c_ReserveLoad",ATy(F8,OTy F64),qVar"state"),
1374               Dest("procID",F8,qVar"state"),Var("value",OTy F64))])))
1375;
1376val ExitCode_def = Def
1377  ("ExitCode",qVar"state",
1378   Apply
1379     (Dest("c_ExitCode",ATy(F8,F64),qVar"state"),
1380      Dest("procID",F8,qVar"state")))
1381;
1382val write'ExitCode_def = Def
1383  ("write'ExitCode",Var("value",F64),
1384   Close
1385     (qVar"state",
1386      Rupd
1387        ("c_ExitCode",
1388         TP[qVar"state",
1389            Fupd
1390              (Dest("c_ExitCode",ATy(F8,F64),qVar"state"),
1391               Dest("procID",F8,qVar"state"),Var("value",F64))])))
1392;
1393val curArch_def = Def
1394  ("curArch",AVar uTy,
1395   Close
1396     (qVar"state",
1397      Apply
1398        (Call
1399           ("architecture",ATy(qTy,PTy(CTy"Architecture",qTy)),
1400            Dest
1401              ("ArchBase",FTy 2,
1402               Dest
1403                 ("mcpuid",CTy"mcpuid",
1404                  Apply
1405                    (Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"state")))),
1406         qVar"state")))
1407;
1408val in32BitMode_def = Def
1409  ("in32BitMode",AVar uTy,
1410   Close
1411     (qVar"state",
1412      Let(TP[Var("v",CTy"Architecture"),qVar"s"],
1413          Apply
1414            (Call("curArch",ATy(qTy,PTy(CTy"Architecture",qTy)),LU),
1415             qVar"state"),
1416          TP[EQ(Var("v",CTy"Architecture"),LC("RV32I",CTy"Architecture")),
1417             qVar"s"])))
1418;
1419val curPrivilege_def = Def
1420  ("curPrivilege",AVar uTy,
1421   Close
1422     (qVar"state",
1423      Call
1424        ("privilege",CTy"Privilege",
1425         Dest
1426           ("MPRV",FTy 2,
1427            Dest
1428              ("mstatus",CTy"mstatus",
1429               Apply(Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"state"))))))
1430;
1431val curEPC_def = Def
1432  ("curEPC",AVar uTy,
1433   Close
1434     (qVar"state",
1435      CS(Apply
1436           (Call("curPrivilege",ATy(qTy,CTy"Privilege"),LU),qVar"state"),
1437         [(LC("User",CTy"Privilege"),
1438           Apply
1439             (Call
1440                ("raise'exception",ATy(qTy,PTy(F64,qTy)),
1441                 Call
1442                   ("INTERNAL_ERROR",CTy"exception",LS"No EPC in U-mode")),
1443              qVar"state")),
1444          (LC("Supervisor",CTy"Privilege"),
1445           TP[Dest
1446                ("sepc",F64,
1447                 Apply
1448                   (Const("SCSR",ATy(qTy,CTy"SupervisorCSR")),qVar"state")),
1449              qVar"state"]),
1450          (LC("Hypervisor",CTy"Privilege"),
1451           TP[Dest
1452                ("hepc",F64,
1453                 Apply
1454                   (Const("HCSR",ATy(qTy,CTy"HypervisorCSR")),qVar"state")),
1455              qVar"state"]),
1456          (LC("Machine",CTy"Privilege"),
1457           TP[Dest
1458                ("mepc",F64,
1459                 Apply(Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"state")),
1460              qVar"state"])])))
1461;
1462val sendIPI_def = Def
1463  ("sendIPI",Var("core",F64),
1464   Close
1465     (qVar"state",
1466      Let(Var("id",F8),Mop(Cast F8,Var("core",F64)),
1467          ITE(Bop(Lt,Mop(Cast nTy,Var("id",F8)),
1468                  Dest("totalCore",nTy,qVar"state")),
1469              Let(Var("v",CTy"MachineCSR"),
1470                  Apply
1471                    (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
1472                     Var("id",F8)),
1473                  Rupd
1474                    ("c_MCSR",
1475                     TP[qVar"state",
1476                        Fupd
1477                          (Dest
1478                             ("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
1479                           Var("id",F8),
1480                           Rupd
1481                             ("mip",
1482                              TP[Var("v",CTy"MachineCSR"),
1483                                 Rupd
1484                                   ("MSIP",
1485                                    TP[Dest
1486                                         ("mip",CTy"mip",
1487                                          Var("v",CTy"MachineCSR")),LT])]))])),
1488              qVar"state"))))
1489;
1490val rnd_mode_static_def = Def
1491  ("rnd_mode_static",Var("rnd",FTy 3),
1492   CS(Var("rnd",FTy 3),
1493      [(LW(0,3),Mop(Some,LC("RNE",CTy"Rounding"))),
1494       (LW(1,3),Mop(Some,LC("RTZ",CTy"Rounding"))),
1495       (LW(2,3),Mop(Some,LC("RDN",CTy"Rounding"))),
1496       (LW(3,3),Mop(Some,LC("RUP",CTy"Rounding"))),
1497       (LW(4,3),Mop(Some,LC("RMM",CTy"Rounding"))),
1498       (LW(7,3),Mop(Some,LC("RDYN",CTy"Rounding"))),
1499       (AVar(FTy 3),LO(CTy"Rounding"))]))
1500;
1501val rnd_mode_dynamic_def = Def
1502  ("rnd_mode_dynamic",Var("rnd",FTy 3),
1503   CS(Var("rnd",FTy 3),
1504      [(LW(0,3),Mop(Some,LC("RNE",CTy"Rounding"))),
1505       (LW(1,3),Mop(Some,LC("RTZ",CTy"Rounding"))),
1506       (LW(2,3),Mop(Some,LC("RDN",CTy"Rounding"))),
1507       (LW(3,3),Mop(Some,LC("RUP",CTy"Rounding"))),
1508       (LW(4,3),Mop(Some,LC("RMM",CTy"Rounding"))),
1509       (AVar(FTy 3),LO(CTy"Rounding"))]))
1510;
1511val l3round_def = Def
1512  ("l3round",Var("rnd",CTy"Rounding"),
1513   CS(Var("rnd",CTy"Rounding"),
1514      [(LC("RNE",CTy"Rounding"),
1515        Mop(Some,binary_ieeeSyntax.roundTiesToEven_tm)),
1516       (LC("RTZ",CTy"Rounding"),
1517        Mop(Some,binary_ieeeSyntax.roundTowardZero_tm)),
1518       (LC("RDN",CTy"Rounding"),
1519        Mop(Some,binary_ieeeSyntax.roundTowardNegative_tm)),
1520       (LC("RUP",CTy"Rounding"),
1521        Mop(Some,binary_ieeeSyntax.roundTowardPositive_tm)),
1522       (LC("RMM",CTy"Rounding"),LO rTy),(LC("RDYN",CTy"Rounding"),LO rTy)]))
1523;
1524val round_def = Def
1525  ("round",Var("rnd",FTy 3),
1526   Close
1527     (qVar"state",
1528      CS(Call("rnd_mode_static",OTy(CTy"Rounding"),Var("rnd",FTy 3)),
1529         [(Mop(Some,LC("RDYN",CTy"Rounding")),
1530           CS(Call
1531                ("rnd_mode_dynamic",OTy(CTy"Rounding"),
1532                 Dest
1533                   ("FRM",FTy 3,
1534                    Apply(Const("fcsr",ATy(qTy,CTy"FPCSR")),qVar"state"))),
1535              [(Mop(Some,Var("frm",CTy"Rounding")),
1536                Call("l3round",OTy rTy,Var("frm",CTy"Rounding"))),
1537               (LO(CTy"Rounding"),LO rTy)])),
1538          (Mop(Some,Var("frm",CTy"Rounding")),
1539           Call("l3round",OTy rTy,Var("frm",CTy"Rounding"))),
1540          (LO(CTy"Rounding"),LO rTy)])))
1541;
1542val RV32_CanonicalNan_def = Def0 ("RV32_CanonicalNan",LW(2143289344,32))
1543;
1544val RV64_CanonicalNan_def = Def0
1545  ("RV64_CanonicalNan",LW(9221120237041090560,64))
1546;
1547val FP32_IsSignalingNan_def = Def
1548  ("FP32_IsSignalingNan",Var("x",F32),
1549   Bop(And,EQ(EX(Var("x",F32),LN 30,LN 23,F8),LW(255,8)),
1550       Bop(And,EQ(Bop(Bit,Var("x",F32),LN 22),LF),
1551           Mop(Not,EQ(EX(Var("x",F32),LN 21,LN 0,FTy 22),LW(0,22))))))
1552;
1553val FP64_IsSignalingNan_def = Def
1554  ("FP64_IsSignalingNan",Var("x",F64),
1555   Bop(And,EQ(EX(Var("x",F64),LN 62,LN 52,FTy 11),LW(2047,11)),
1556       Bop(And,EQ(Bop(Bit,Var("x",F64),LN 51),LF),
1557           Mop(Not,EQ(EX(Var("x",F64),LN 50,LN 0,FTy 51),LW(0,51))))))
1558;
1559val FP32_Sign_def = Def
1560  ("FP32_Sign",Var("x",F32),Bop(Bit,Var("x",F32),LN 31))
1561;
1562val FP64_Sign_def = Def
1563  ("FP64_Sign",Var("x",F64),Bop(Bit,Var("x",F64),LN 63))
1564;
1565val setFP_Invalid_def = Def
1566  ("setFP_Invalid",AVar uTy,
1567   Close
1568     (qVar"state",
1569      Apply
1570        (Call
1571           ("write'fcsr",ATy(qTy,qTy),
1572            Rupd
1573              ("NV",
1574               TP[Apply(Const("fcsr",ATy(qTy,CTy"FPCSR")),qVar"state"),LT])),
1575         qVar"state")))
1576;
1577val setFP_DivZero_def = Def
1578  ("setFP_DivZero",AVar uTy,
1579   Close
1580     (qVar"state",
1581      Apply
1582        (Call
1583           ("write'fcsr",ATy(qTy,qTy),
1584            Rupd
1585              ("DZ",
1586               TP[Apply(Const("fcsr",ATy(qTy,CTy"FPCSR")),qVar"state"),LT])),
1587         qVar"state")))
1588;
1589val setFP_Overflow_def = Def
1590  ("setFP_Overflow",AVar uTy,
1591   Close
1592     (qVar"state",
1593      Apply
1594        (Call
1595           ("write'fcsr",ATy(qTy,qTy),
1596            Rupd
1597              ("OF",
1598               TP[Apply(Const("fcsr",ATy(qTy,CTy"FPCSR")),qVar"state"),LT])),
1599         qVar"state")))
1600;
1601val setFP_Underflow_def = Def
1602  ("setFP_Underflow",AVar uTy,
1603   Close
1604     (qVar"state",
1605      Apply
1606        (Call
1607           ("write'fcsr",ATy(qTy,qTy),
1608            Rupd
1609              ("OF",
1610               TP[Apply(Const("fcsr",ATy(qTy,CTy"FPCSR")),qVar"state"),LT])),
1611         qVar"state")))
1612;
1613val setFP_Inexact_def = Def
1614  ("setFP_Inexact",AVar uTy,
1615   Close
1616     (qVar"state",
1617      Apply
1618        (Call
1619           ("write'fcsr",ATy(qTy,qTy),
1620            Rupd
1621              ("OF",
1622               TP[Apply(Const("fcsr",ATy(qTy,CTy"FPCSR")),qVar"state"),LT])),
1623         qVar"state")))
1624;
1625val csrRW_def = Def
1626  ("csrRW",Var("csr",FTy 12),EX(Var("csr",FTy 12),LN 11,LN 10,FTy 2))
1627;
1628val csrPR_def = Def
1629  ("csrPR",Var("csr",FTy 12),EX(Var("csr",FTy 12),LN 9,LN 8,FTy 2))
1630;
1631val check_CSR_access_def = Def
1632  ("check_CSR_access",
1633   TP[Var("rw",FTy 2),Var("pr",FTy 2),Var("p",CTy"Privilege"),
1634      Var("a",CTy"accessType")],
1635   Bop(And,
1636       Bop(Or,EQ(Var("a",CTy"accessType"),LC("Read",CTy"accessType")),
1637           Mop(Not,EQ(Var("rw",FTy 2),LW(3,2)))),
1638       Bop(Uge,Call("privLevel",FTy 2,Var("p",CTy"Privilege")),
1639           Var("pr",FTy 2))))
1640;
1641val is_CSR_defined_def = Def
1642  ("is_CSR_defined",Var("csr",FTy 12),
1643   Close
1644     (qVar"state",
1645      ITB([(Bop(And,Bop(Ge,Var("csr",FTy 12),LW(1,12)),
1646                Bop(Le,Var("csr",FTy 12),LW(3,12))),TP[LT,qVar"state"]),
1647           (Bop(And,Bop(Ge,Var("csr",FTy 12),LW(3072,12)),
1648                Bop(Le,Var("csr",FTy 12),LW(3074,12))),TP[LT,qVar"state"])],
1649          Let(TP[bVar"v",qVar"s"],
1650              ITE(Bop(Ge,Var("csr",FTy 12),LW(3200,12)),
1651                  ITE(Bop(Le,Var("csr",FTy 12),LW(3202,12)),
1652                      Apply
1653                        (Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),
1654                         qVar"state"),TP[LF,qVar"state"]),
1655                  TP[LF,qVar"state"]),
1656              ITB([(bVar"v",TP[LT,qVar"s"]),
1657                   (Bop(And,Bop(Ge,Var("csr",FTy 12),LW(256,12)),
1658                        Bop(Le,Var("csr",FTy 12),LW(257,12))),
1659                    TP[LT,qVar"s"]),
1660                   (EQ(Var("csr",FTy 12),LW(260,12)),TP[LT,qVar"s"]),
1661                   (EQ(Var("csr",FTy 12),LW(289,12)),TP[LT,qVar"s"]),
1662                   (EQ(Var("csr",FTy 12),LW(3329,12)),TP[LT,qVar"s"])],
1663                  Let(TP[bVar"v",qVar"s"],
1664                      ITE(EQ(Var("csr",FTy 12),LW(3457,12)),
1665                          Apply
1666                            (Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),
1667                             qVar"s"),TP[LF,qVar"s"]),
1668                      ITB([(bVar"v",TP[LT,qVar"s"]),
1669                           (Bop(And,Bop(Ge,Var("csr",FTy 12),LW(320,12)),
1670                                Bop(Le,Var("csr",FTy 12),LW(321,12))),
1671                            TP[LT,qVar"s"]),
1672                           (EQ(Var("csr",FTy 12),LW(324,12)),
1673                            TP[LT,qVar"s"]),
1674                           (Bop(And,Bop(Ge,Var("csr",FTy 12),LW(3394,12)),
1675                                Bop(Le,Var("csr",FTy 12),LW(3395,12))),
1676                            TP[LT,qVar"s"]),
1677                           (Bop(And,Bop(Ge,Var("csr",FTy 12),LW(384,12)),
1678                                Bop(Le,Var("csr",FTy 12),LW(385,12))),
1679                            TP[LT,qVar"s"]),
1680                           (Bop(And,Bop(Ge,Var("csr",FTy 12),LW(2304,12)),
1681                                Bop(Le,Var("csr",FTy 12),LW(2306,12))),
1682                            TP[LT,qVar"s"])],
1683                          Let(TP[bVar"v",qVar"s"],
1684                              ITE(Bop(Ge,Var("csr",FTy 12),LW(2432,12)),
1685                                  ITE(Bop(Le,Var("csr",FTy 12),LW(2434,12)),
1686                                      Apply
1687                                        (Call
1688                                           ("in32BitMode",
1689                                            ATy(qTy,PTy(bTy,qTy)),LU),
1690                                         qVar"s"),TP[LF,qVar"s"]),
1691                                  TP[LF,qVar"s"]),
1692                              ITB([(bVar"v",TP[LT,qVar"s"]),
1693                                   (Bop(And,
1694                                        Bop(Ge,Var("csr",FTy 12),
1695                                            LW(3840,12)),
1696                                        Bop(Le,Var("csr",FTy 12),
1697                                            LW(3841,12))),TP[LT,qVar"s"]),
1698                                   (EQ(Var("csr",FTy 12),LW(3856,12)),
1699                                    TP[LT,qVar"s"]),
1700                                   (Bop(And,
1701                                        Bop(Ge,Var("csr",FTy 12),
1702                                            LW(768,12)),
1703                                        Bop(Le,Var("csr",FTy 12),
1704                                            LW(770,12))),TP[LT,qVar"s"]),
1705                                   (EQ(Var("csr",FTy 12),LW(772,12)),
1706                                    TP[LT,qVar"s"]),
1707                                   (EQ(Var("csr",FTy 12),LW(801,12)),
1708                                    TP[LT,qVar"s"]),
1709                                   (EQ(Var("csr",FTy 12),LW(1793,12)),
1710                                    TP[LT,qVar"s"])],
1711                                  Let(TP[bVar"v",qVar"s"],
1712                                      ITE(EQ(Var("csr",FTy 12),LW(1857,12)),
1713                                          Apply
1714                                            (Call
1715                                               ("in32BitMode",
1716                                                ATy(qTy,PTy(bTy,qTy)),LU),
1717                                             qVar"s"),TP[LF,qVar"s"]),
1718                                      ITB([(bVar"v",TP[LT,qVar"s"]),
1719                                           (Bop(And,
1720                                                Bop(Ge,Var("csr",FTy 12),
1721                                                    LW(832,12)),
1722                                                Bop(Le,Var("csr",FTy 12),
1723                                                    LW(836,12))),
1724                                            TP[LT,qVar"s"]),
1725                                           (Bop(And,
1726                                                Bop(Ge,Var("csr",FTy 12),
1727                                                    LW(896,12)),
1728                                                Bop(Le,Var("csr",FTy 12),
1729                                                    LW(901,12))),
1730                                            TP[LT,qVar"s"]),
1731                                           (Bop(Ge,Var("csr",FTy 12),
1732                                                LW(2817,12)),
1733                                            TP[LT,qVar"s"])],
1734                                          Let(TP[bVar"v",qVar"s"],
1735                                              ITE(EQ(Var("csr",FTy 12),
1736                                                     LW(2945,12)),
1737                                                  Apply
1738                                                    (Call
1739                                                       ("in32BitMode",
1740                                                        ATy(qTy,
1741                                                            PTy(bTy,qTy)),
1742                                                        LU),qVar"s"),
1743                                                  TP[LF,qVar"s"]),
1744                                              TP[Bop(Or,bVar"v",
1745                                                     Bop(And,
1746                                                         Bop(Ge,
1747                                                             Var("csr",
1748                                                                 FTy 12),
1749                                                             LW(1920,12)),
1750                                                         Bop(And,
1751                                                             Bop(Le,
1752                                                                 Var("csr",
1753                                                                     FTy 12),
1754                                                                 LW(1923,
1755                                                                    12)),
1756                                                             Mop(Not,
1757                                                                 EQ(Var("csr",
1758                                                                        FTy 12),
1759                                                                    LW(1922,
1760                                                                       12)))))),
1761                                                 qVar"s"]))))))))))))
1762;
1763val CSRMap_def = Def
1764  ("CSRMap",Var("csr",FTy 12),
1765   Close
1766     (qVar"state",
1767      CS(Var("csr",FTy 12),
1768         [(LW(1,12),
1769           TP[Mop(Cast F64,
1770                  EX(Call
1771                       ("reg'FPCSR",F32,
1772                        Dest
1773                          ("fpcsr",CTy"FPCSR",
1774                           Apply
1775                             (Dest
1776                                ("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
1777                              Dest("procID",F8,qVar"state")))),LN 4,LN 0,
1778                     FTy 5)),qVar"state"]),
1779          (LW(2,12),
1780           TP[Mop(Cast F64,
1781                  Dest
1782                    ("FRM",FTy 3,
1783                     Dest
1784                       ("fpcsr",CTy"FPCSR",
1785                        Apply
1786                          (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
1787                           Dest("procID",F8,qVar"state"))))),qVar"state"]),
1788          (LW(3,12),
1789           TP[Mop(Cast F64,
1790                  EX(Call
1791                       ("reg'FPCSR",F32,
1792                        Dest
1793                          ("fpcsr",CTy"FPCSR",
1794                           Apply
1795                             (Dest
1796                                ("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
1797                              Dest("procID",F8,qVar"state")))),LN 7,LN 0,
1798                     F8)),qVar"state"]),
1799          (LW(3072,12),
1800           TP[Bop(Add,
1801                  Apply
1802                    (Dest("c_cycles",ATy(F8,F64),qVar"state"),
1803                     Dest("procID",F8,qVar"state")),
1804                  Dest
1805                    ("cycle_delta",F64,
1806                     Apply
1807                       (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
1808                        Dest("procID",F8,qVar"state")))),qVar"state"]),
1809          (LW(3073,12),
1810           TP[Bop(Add,Dest("clock",F64,qVar"state"),
1811                  Dest
1812                    ("time_delta",F64,
1813                     Apply
1814                       (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
1815                        Dest("procID",F8,qVar"state")))),qVar"state"]),
1816          (LW(3074,12),
1817           TP[Bop(Add,
1818                  Apply
1819                    (Dest("c_instret",ATy(F8,F64),qVar"state"),
1820                     Dest("procID",F8,qVar"state")),
1821                  Dest
1822                    ("instret_delta",F64,
1823                     Apply
1824                       (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
1825                        Dest("procID",F8,qVar"state")))),qVar"state"]),
1826          (LW(3200,12),
1827           TP[Mop(SE F64,
1828                  EX(Bop(Add,
1829                         Apply
1830                           (Dest("c_cycles",ATy(F8,F64),qVar"state"),
1831                            Dest("procID",F8,qVar"state")),
1832                         Dest
1833                           ("cycle_delta",F64,
1834                            Apply
1835                              (Dest
1836                                 ("c_UCSR",ATy(F8,CTy"UserCSR"),
1837                                  qVar"state"),
1838                               Dest("procID",F8,qVar"state")))),LN 63,
1839                     LN 32,F32)),qVar"state"]),
1840          (LW(3201,12),
1841           TP[Mop(SE F64,
1842                  EX(Bop(Add,Dest("clock",F64,qVar"state"),
1843                         Dest
1844                           ("time_delta",F64,
1845                            Apply
1846                              (Dest
1847                                 ("c_UCSR",ATy(F8,CTy"UserCSR"),
1848                                  qVar"state"),
1849                               Dest("procID",F8,qVar"state")))),LN 63,
1850                     LN 32,F32)),qVar"state"]),
1851          (LW(3202,12),
1852           TP[Mop(SE F64,
1853                  EX(Bop(Add,
1854                         Apply
1855                           (Dest("c_instret",ATy(F8,F64),qVar"state"),
1856                            Dest("procID",F8,qVar"state")),
1857                         Dest
1858                           ("instret_delta",F64,
1859                            Apply
1860                              (Dest
1861                                 ("c_UCSR",ATy(F8,CTy"UserCSR"),
1862                                  qVar"state"),
1863                               Dest("procID",F8,qVar"state")))),LN 63,
1864                     LN 32,F32)),qVar"state"]),
1865          (LW(256,12),
1866           TP[Call
1867                ("reg'sstatus",F64,
1868                 Call
1869                   ("lift_mstatus_sstatus",CTy"sstatus",
1870                    Dest
1871                      ("mstatus",CTy"mstatus",
1872                       Apply
1873                         (Dest
1874                            ("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
1875                          Dest("procID",F8,qVar"state"))))),qVar"state"]),
1876          (LW(257,12),
1877           TP[Dest
1878                ("stvec",F64,
1879                 Apply
1880                   (Dest("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"),
1881                    Dest("procID",F8,qVar"state"))),qVar"state"]),
1882          (LW(260,12),
1883           TP[Call
1884                ("reg'sie",F64,
1885                 Call
1886                   ("lift_mie_sie",CTy"sie",
1887                    Dest
1888                      ("mie",CTy"mie",
1889                       Apply
1890                         (Dest
1891                            ("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
1892                          Dest("procID",F8,qVar"state"))))),qVar"state"]),
1893          (LW(289,12),
1894           TP[Dest
1895                ("stimecmp",F64,
1896                 Apply
1897                   (Dest("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"),
1898                    Dest("procID",F8,qVar"state"))),qVar"state"]),
1899          (LW(3329,12),
1900           TP[Bop(Add,Dest("clock",F64,qVar"state"),
1901                  Dest
1902                    ("stime_delta",F64,
1903                     Apply
1904                       (Dest
1905                          ("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"),
1906                        Dest("procID",F8,qVar"state")))),qVar"state"]),
1907          (LW(3457,12),
1908           TP[Mop(SE F64,
1909                  EX(Bop(Add,Dest("clock",F64,qVar"state"),
1910                         Dest
1911                           ("stime_delta",F64,
1912                            Apply
1913                              (Dest
1914                                 ("c_SCSR",ATy(F8,CTy"SupervisorCSR"),
1915                                  qVar"state"),
1916                               Dest("procID",F8,qVar"state")))),LN 63,
1917                     LN 32,F32)),qVar"state"]),
1918          (LW(320,12),
1919           TP[Dest
1920                ("sscratch",F64,
1921                 Apply
1922                   (Dest("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"),
1923                    Dest("procID",F8,qVar"state"))),qVar"state"]),
1924          (LW(321,12),
1925           TP[Dest
1926                ("sepc",F64,
1927                 Apply
1928                   (Dest("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"),
1929                    Dest("procID",F8,qVar"state"))),qVar"state"]),
1930          (LW(3394,12),
1931           TP[Call
1932                ("reg'mcause",F64,
1933                 Dest
1934                   ("scause",CTy"mcause",
1935                    Apply
1936                      (Dest
1937                         ("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"),
1938                       Dest("procID",F8,qVar"state")))),qVar"state"]),
1939          (LW(3395,12),
1940           TP[Dest
1941                ("sbadaddr",F64,
1942                 Apply
1943                   (Dest("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"),
1944                    Dest("procID",F8,qVar"state"))),qVar"state"]),
1945          (LW(324,12),
1946           TP[Call
1947                ("reg'sip",F64,
1948                 Call
1949                   ("lift_mip_sip",CTy"sip",
1950                    Dest
1951                      ("mip",CTy"mip",
1952                       Apply
1953                         (Dest
1954                            ("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
1955                          Dest("procID",F8,qVar"state"))))),qVar"state"]),
1956          (LW(384,12),
1957           TP[Dest
1958                ("sptbr",F64,
1959                 Apply
1960                   (Dest("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"),
1961                    Dest("procID",F8,qVar"state"))),qVar"state"]),
1962          (LW(385,12),
1963           TP[Dest
1964                ("sasid",F64,
1965                 Apply
1966                   (Dest("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"),
1967                    Dest("procID",F8,qVar"state"))),qVar"state"]),
1968          (LW(2304,12),
1969           TP[Bop(Add,
1970                  Apply
1971                    (Dest("c_cycles",ATy(F8,F64),qVar"state"),
1972                     Dest("procID",F8,qVar"state")),
1973                  Dest
1974                    ("cycle_delta",F64,
1975                     Apply
1976                       (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
1977                        Dest("procID",F8,qVar"state")))),qVar"state"]),
1978          (LW(2305,12),
1979           TP[Bop(Add,Dest("clock",F64,qVar"state"),
1980                  Dest
1981                    ("time_delta",F64,
1982                     Apply
1983                       (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
1984                        Dest("procID",F8,qVar"state")))),qVar"state"]),
1985          (LW(2306,12),
1986           TP[Bop(Add,
1987                  Apply
1988                    (Dest("c_instret",ATy(F8,F64),qVar"state"),
1989                     Dest("procID",F8,qVar"state")),
1990                  Dest
1991                    ("instret_delta",F64,
1992                     Apply
1993                       (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
1994                        Dest("procID",F8,qVar"state")))),qVar"state"]),
1995          (LW(2432,12),
1996           TP[Mop(SE F64,
1997                  EX(Bop(Add,
1998                         Apply
1999                           (Dest("c_cycles",ATy(F8,F64),qVar"state"),
2000                            Dest("procID",F8,qVar"state")),
2001                         Dest
2002                           ("cycle_delta",F64,
2003                            Apply
2004                              (Dest
2005                                 ("c_UCSR",ATy(F8,CTy"UserCSR"),
2006                                  qVar"state"),
2007                               Dest("procID",F8,qVar"state")))),LN 63,
2008                     LN 32,F32)),qVar"state"]),
2009          (LW(2433,12),
2010           TP[Mop(SE F64,
2011                  EX(Bop(Add,Dest("clock",F64,qVar"state"),
2012                         Dest
2013                           ("time_delta",F64,
2014                            Apply
2015                              (Dest
2016                                 ("c_UCSR",ATy(F8,CTy"UserCSR"),
2017                                  qVar"state"),
2018                               Dest("procID",F8,qVar"state")))),LN 63,
2019                     LN 32,F32)),qVar"state"]),
2020          (LW(2434,12),
2021           TP[Mop(SE F64,
2022                  EX(Bop(Add,
2023                         Apply
2024                           (Dest("c_instret",ATy(F8,F64),qVar"state"),
2025                            Dest("procID",F8,qVar"state")),
2026                         Dest
2027                           ("instret_delta",F64,
2028                            Apply
2029                              (Dest
2030                                 ("c_UCSR",ATy(F8,CTy"UserCSR"),
2031                                  qVar"state"),
2032                               Dest("procID",F8,qVar"state")))),LN 63,
2033                     LN 32,F32)),qVar"state"]),
2034          (LW(512,12),
2035           TP[Call
2036                ("reg'mstatus",F64,
2037                 Dest
2038                   ("hstatus",CTy"mstatus",
2039                    Apply
2040                      (Dest
2041                         ("c_HCSR",ATy(F8,CTy"HypervisorCSR"),qVar"state"),
2042                       Dest("procID",F8,qVar"state")))),qVar"state"]),
2043          (LW(513,12),
2044           TP[Dest
2045                ("htvec",F64,
2046                 Apply
2047                   (Dest("c_HCSR",ATy(F8,CTy"HypervisorCSR"),qVar"state"),
2048                    Dest("procID",F8,qVar"state"))),qVar"state"]),
2049          (LW(514,12),
2050           TP[Call
2051                ("reg'mtdeleg",F64,
2052                 Dest
2053                   ("htdeleg",CTy"mtdeleg",
2054                    Apply
2055                      (Dest
2056                         ("c_HCSR",ATy(F8,CTy"HypervisorCSR"),qVar"state"),
2057                       Dest("procID",F8,qVar"state")))),qVar"state"]),
2058          (LW(545,12),
2059           TP[Dest
2060                ("htimecmp",F64,
2061                 Apply
2062                   (Dest("c_HCSR",ATy(F8,CTy"HypervisorCSR"),qVar"state"),
2063                    Dest("procID",F8,qVar"state"))),qVar"state"]),
2064          (LW(3585,12),
2065           TP[Bop(Add,Dest("clock",F64,qVar"state"),
2066                  Dest
2067                    ("htime_delta",F64,
2068                     Apply
2069                       (Dest
2070                          ("c_HCSR",ATy(F8,CTy"HypervisorCSR"),qVar"state"),
2071                        Dest("procID",F8,qVar"state")))),qVar"state"]),
2072          (LW(3713,12),
2073           TP[Mop(SE F64,
2074                  EX(Bop(Add,Dest("clock",F64,qVar"state"),
2075                         Dest
2076                           ("htime_delta",F64,
2077                            Apply
2078                              (Dest
2079                                 ("c_HCSR",ATy(F8,CTy"HypervisorCSR"),
2080                                  qVar"state"),
2081                               Dest("procID",F8,qVar"state")))),LN 63,
2082                     LN 32,F32)),qVar"state"]),
2083          (LW(576,12),
2084           TP[Dest
2085                ("hscratch",F64,
2086                 Apply
2087                   (Dest("c_HCSR",ATy(F8,CTy"HypervisorCSR"),qVar"state"),
2088                    Dest("procID",F8,qVar"state"))),qVar"state"]),
2089          (LW(577,12),
2090           TP[Dest
2091                ("hepc",F64,
2092                 Apply
2093                   (Dest("c_HCSR",ATy(F8,CTy"HypervisorCSR"),qVar"state"),
2094                    Dest("procID",F8,qVar"state"))),qVar"state"]),
2095          (LW(578,12),
2096           TP[Call
2097                ("reg'mcause",F64,
2098                 Dest
2099                   ("hcause",CTy"mcause",
2100                    Apply
2101                      (Dest
2102                         ("c_HCSR",ATy(F8,CTy"HypervisorCSR"),qVar"state"),
2103                       Dest("procID",F8,qVar"state")))),qVar"state"]),
2104          (LW(579,12),
2105           TP[Dest
2106                ("hbadaddr",F64,
2107                 Apply
2108                   (Dest("c_HCSR",ATy(F8,CTy"HypervisorCSR"),qVar"state"),
2109                    Dest("procID",F8,qVar"state"))),qVar"state"]),
2110          (LW(2561,12),
2111           TP[Bop(Add,Dest("clock",F64,qVar"state"),
2112                  Dest
2113                    ("stime_delta",F64,
2114                     Apply
2115                       (Dest
2116                          ("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"),
2117                        Dest("procID",F8,qVar"state")))),qVar"state"]),
2118          (LW(2689,12),
2119           TP[Mop(SE F64,
2120                  EX(Bop(Add,Dest("clock",F64,qVar"state"),
2121                         Dest
2122                           ("stime_delta",F64,
2123                            Apply
2124                              (Dest
2125                                 ("c_SCSR",ATy(F8,CTy"SupervisorCSR"),
2126                                  qVar"state"),
2127                               Dest("procID",F8,qVar"state")))),LN 63,
2128                     LN 32,F32)),qVar"state"]),
2129          (LW(3840,12),
2130           TP[Call
2131                ("reg'mcpuid",F64,
2132                 Dest
2133                   ("mcpuid",CTy"mcpuid",
2134                    Apply
2135                      (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2136                       Dest("procID",F8,qVar"state")))),qVar"state"]),
2137          (LW(3841,12),
2138           TP[Call
2139                ("reg'mimpid",F64,
2140                 Dest
2141                   ("mimpid",CTy"mimpid",
2142                    Apply
2143                      (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2144                       Dest("procID",F8,qVar"state")))),qVar"state"]),
2145          (LW(3856,12),
2146           TP[Dest
2147                ("mhartid",F64,
2148                 Apply
2149                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2150                    Dest("procID",F8,qVar"state"))),qVar"state"]),
2151          (LW(768,12),
2152           TP[Call
2153                ("reg'mstatus",F64,
2154                 Dest
2155                   ("mstatus",CTy"mstatus",
2156                    Apply
2157                      (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2158                       Dest("procID",F8,qVar"state")))),qVar"state"]),
2159          (LW(769,12),
2160           TP[Dest
2161                ("mtvec",F64,
2162                 Apply
2163                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2164                    Dest("procID",F8,qVar"state"))),qVar"state"]),
2165          (LW(770,12),
2166           TP[Call
2167                ("reg'mtdeleg",F64,
2168                 Dest
2169                   ("mtdeleg",CTy"mtdeleg",
2170                    Apply
2171                      (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2172                       Dest("procID",F8,qVar"state")))),qVar"state"]),
2173          (LW(772,12),
2174           TP[Call
2175                ("reg'mie",F64,
2176                 Dest
2177                   ("mie",CTy"mie",
2178                    Apply
2179                      (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2180                       Dest("procID",F8,qVar"state")))),qVar"state"]),
2181          (LW(801,12),
2182           TP[Dest
2183                ("mtimecmp",F64,
2184                 Apply
2185                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2186                    Dest("procID",F8,qVar"state"))),qVar"state"]),
2187          (LW(1793,12),
2188           TP[Bop(Add,Dest("clock",F64,qVar"state"),
2189                  Dest
2190                    ("mtime_delta",F64,
2191                     Apply
2192                       (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2193                        Dest("procID",F8,qVar"state")))),qVar"state"]),
2194          (LW(1857,12),
2195           TP[Mop(SE F64,
2196                  EX(Bop(Add,Dest("clock",F64,qVar"state"),
2197                         Dest
2198                           ("mtime_delta",F64,
2199                            Apply
2200                              (Dest
2201                                 ("c_MCSR",ATy(F8,CTy"MachineCSR"),
2202                                  qVar"state"),
2203                               Dest("procID",F8,qVar"state")))),LN 63,
2204                     LN 32,F32)),qVar"state"]),
2205          (LW(832,12),
2206           TP[Dest
2207                ("mscratch",F64,
2208                 Apply
2209                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2210                    Dest("procID",F8,qVar"state"))),qVar"state"]),
2211          (LW(833,12),
2212           TP[Dest
2213                ("mepc",F64,
2214                 Apply
2215                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2216                    Dest("procID",F8,qVar"state"))),qVar"state"]),
2217          (LW(834,12),
2218           TP[Call
2219                ("reg'mcause",F64,
2220                 Dest
2221                   ("mcause",CTy"mcause",
2222                    Apply
2223                      (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2224                       Dest("procID",F8,qVar"state")))),qVar"state"]),
2225          (LW(835,12),
2226           TP[Dest
2227                ("mbadaddr",F64,
2228                 Apply
2229                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2230                    Dest("procID",F8,qVar"state"))),qVar"state"]),
2231          (LW(836,12),
2232           TP[Call
2233                ("reg'mip",F64,
2234                 Dest
2235                   ("mip",CTy"mip",
2236                    Apply
2237                      (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2238                       Dest("procID",F8,qVar"state")))),qVar"state"]),
2239          (LW(896,12),
2240           TP[Dest
2241                ("mbase",F64,
2242                 Apply
2243                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2244                    Dest("procID",F8,qVar"state"))),qVar"state"]),
2245          (LW(897,12),
2246           TP[Dest
2247                ("mbound",F64,
2248                 Apply
2249                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2250                    Dest("procID",F8,qVar"state"))),qVar"state"]),
2251          (LW(898,12),
2252           TP[Dest
2253                ("mibase",F64,
2254                 Apply
2255                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2256                    Dest("procID",F8,qVar"state"))),qVar"state"]),
2257          (LW(899,12),
2258           TP[Dest
2259                ("mibound",F64,
2260                 Apply
2261                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2262                    Dest("procID",F8,qVar"state"))),qVar"state"]),
2263          (LW(900,12),
2264           TP[Dest
2265                ("mdbase",F64,
2266                 Apply
2267                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2268                    Dest("procID",F8,qVar"state"))),qVar"state"]),
2269          (LW(901,12),
2270           TP[Dest
2271                ("mdbound",F64,
2272                 Apply
2273                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2274                    Dest("procID",F8,qVar"state"))),qVar"state"]),
2275          (LW(2817,12),
2276           TP[Bop(Add,Dest("clock",F64,qVar"state"),
2277                  Dest
2278                    ("htime_delta",F64,
2279                     Apply
2280                       (Dest
2281                          ("c_HCSR",ATy(F8,CTy"HypervisorCSR"),qVar"state"),
2282                        Dest("procID",F8,qVar"state")))),qVar"state"]),
2283          (LW(2945,12),
2284           TP[Mop(SE F64,
2285                  EX(Bop(Add,Dest("clock",F64,qVar"state"),
2286                         Dest
2287                           ("htime_delta",F64,
2288                            Apply
2289                              (Dest
2290                                 ("c_HCSR",ATy(F8,CTy"HypervisorCSR"),
2291                                  qVar"state"),
2292                               Dest("procID",F8,qVar"state")))),LN 63,
2293                     LN 32,F32)),qVar"state"]),
2294          (LW(1920,12),
2295           TP[Dest
2296                ("mtohost",F64,
2297                 Apply
2298                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2299                    Dest("procID",F8,qVar"state"))),qVar"state"]),
2300          (LW(1921,12),
2301           TP[Dest
2302                ("mfromhost",F64,
2303                 Apply
2304                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2305                    Dest("procID",F8,qVar"state"))),qVar"state"]),
2306          (LW(1923,12),TP[LW(0,64),qVar"state"]),
2307          (AVar(FTy 12),
2308           Apply
2309             (Call
2310                ("raise'exception",ATy(qTy,PTy(F64,qTy)),
2311                 Call
2312                   ("UNDEFINED",CTy"exception",
2313                    CC[LS"unexpected CSR read at ",
2314                       Mop(Cast sTy,Var("csr",FTy 12))])),qVar"state"))])))
2315;
2316val write'CSRMap_def = Def
2317  ("write'CSRMap",TP[Var("value",F64),Var("csr",FTy 12)],
2318   Close
2319     (qVar"state",
2320      CS(Var("csr",FTy 12),
2321         [(LW(1,12),
2322           Let(qVar"s",
2323               Let(Var("v",CTy"UserCSR"),
2324                   Apply
2325                     (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
2326                      Dest("procID",F8,qVar"state")),
2327                   Let(Var("x1",CTy"FPCSR"),
2328                       Dest("fpcsr",CTy"FPCSR",Var("v",CTy"UserCSR")),
2329                       Rupd
2330                         ("c_UCSR",
2331                          TP[qVar"state",
2332                             Fupd
2333                               (Dest
2334                                  ("c_UCSR",ATy(F8,CTy"UserCSR"),
2335                                   qVar"state"),
2336                                Dest("procID",F8,qVar"state"),
2337                                Rupd
2338                                  ("fpcsr",
2339                                   TP[Var("v",CTy"UserCSR"),
2340                                      Call
2341                                        ("write'reg'FPCSR",CTy"FPCSR",
2342                                         TP[Var("x1",CTy"FPCSR"),
2343                                            BFI(LN 4,LN 0,
2344                                                EX(Var("value",F64),LN 4,
2345                                                   LN 0,FTy 5),
2346                                                Call
2347                                                  ("reg'FPCSR",F32,
2348                                                   Var("x1",CTy"FPCSR")))])]))]))),
2349               Let(qVar"s",
2350                   Let(Var("v",CTy"MachineCSR"),
2351                       Apply
2352                         (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"s"),
2353                          Dest("procID",F8,qVar"s")),
2354                       Rupd
2355                         ("c_MCSR",
2356                          TP[qVar"s",
2357                             Fupd
2358                               (Dest
2359                                  ("c_MCSR",ATy(F8,CTy"MachineCSR"),
2360                                   qVar"s"),Dest("procID",F8,qVar"s"),
2361                                Rupd
2362                                  ("mstatus",
2363                                   TP[Var("v",CTy"MachineCSR"),
2364                                      Rupd
2365                                        ("MFS",
2366                                         TP[Dest
2367                                              ("mstatus",CTy"mstatus",
2368                                               Var("v",CTy"MachineCSR")),
2369                                            Call
2370                                              ("ext_status",FTy 2,
2371                                               LC("Dirty",CTy"ExtStatus"))])]))])),
2372                   Let(Var("v",CTy"MachineCSR"),
2373                       Apply
2374                         (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"s"),
2375                          Dest("procID",F8,qVar"s")),
2376                       Rupd
2377                         ("c_MCSR",
2378                          TP[qVar"s",
2379                             Fupd
2380                               (Dest
2381                                  ("c_MCSR",ATy(F8,CTy"MachineCSR"),
2382                                   qVar"s"),Dest("procID",F8,qVar"s"),
2383                                Rupd
2384                                  ("mstatus",
2385                                   TP[Var("v",CTy"MachineCSR"),
2386                                      Rupd
2387                                        ("MSD",
2388                                         TP[Dest
2389                                              ("mstatus",CTy"mstatus",
2390                                               Var("v",CTy"MachineCSR")),
2391                                            LT])]))]))))),
2392          (LW(2,12),
2393           Let(qVar"s",
2394               Let(Var("v",CTy"UserCSR"),
2395                   Apply
2396                     (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
2397                      Dest("procID",F8,qVar"state")),
2398                   Rupd
2399                     ("c_UCSR",
2400                      TP[qVar"state",
2401                         Fupd
2402                           (Dest
2403                              ("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
2404                            Dest("procID",F8,qVar"state"),
2405                            Rupd
2406                              ("fpcsr",
2407                               TP[Var("v",CTy"UserCSR"),
2408                                  Rupd
2409                                    ("FRM",
2410                                     TP[Dest
2411                                          ("fpcsr",CTy"FPCSR",
2412                                           Var("v",CTy"UserCSR")),
2413                                        EX(Var("value",F64),LN 2,LN 0,
2414                                           FTy 3)])]))])),
2415               Let(qVar"s",
2416                   Let(Var("v",CTy"MachineCSR"),
2417                       Apply
2418                         (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"s"),
2419                          Dest("procID",F8,qVar"s")),
2420                       Rupd
2421                         ("c_MCSR",
2422                          TP[qVar"s",
2423                             Fupd
2424                               (Dest
2425                                  ("c_MCSR",ATy(F8,CTy"MachineCSR"),
2426                                   qVar"s"),Dest("procID",F8,qVar"s"),
2427                                Rupd
2428                                  ("mstatus",
2429                                   TP[Var("v",CTy"MachineCSR"),
2430                                      Rupd
2431                                        ("MFS",
2432                                         TP[Dest
2433                                              ("mstatus",CTy"mstatus",
2434                                               Var("v",CTy"MachineCSR")),
2435                                            Call
2436                                              ("ext_status",FTy 2,
2437                                               LC("Dirty",CTy"ExtStatus"))])]))])),
2438                   Let(Var("v",CTy"MachineCSR"),
2439                       Apply
2440                         (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"s"),
2441                          Dest("procID",F8,qVar"s")),
2442                       Rupd
2443                         ("c_MCSR",
2444                          TP[qVar"s",
2445                             Fupd
2446                               (Dest
2447                                  ("c_MCSR",ATy(F8,CTy"MachineCSR"),
2448                                   qVar"s"),Dest("procID",F8,qVar"s"),
2449                                Rupd
2450                                  ("mstatus",
2451                                   TP[Var("v",CTy"MachineCSR"),
2452                                      Rupd
2453                                        ("MSD",
2454                                         TP[Dest
2455                                              ("mstatus",CTy"mstatus",
2456                                               Var("v",CTy"MachineCSR")),
2457                                            LT])]))]))))),
2458          (LW(3,12),
2459           Let(qVar"s",
2460               Let(Var("v",CTy"UserCSR"),
2461                   Apply
2462                     (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
2463                      Dest("procID",F8,qVar"state")),
2464                   Rupd
2465                     ("c_UCSR",
2466                      TP[qVar"state",
2467                         Fupd
2468                           (Dest
2469                              ("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
2470                            Dest("procID",F8,qVar"state"),
2471                            Rupd
2472                              ("fpcsr",
2473                               TP[Var("v",CTy"UserCSR"),
2474                                  Call
2475                                    ("write'reg'FPCSR",CTy"FPCSR",
2476                                     TP[Dest
2477                                          ("fpcsr",CTy"FPCSR",
2478                                           Var("v",CTy"UserCSR")),
2479                                        EX(Var("value",F64),LN 31,LN 0,F32)])]))])),
2480               Let(qVar"s",
2481                   Let(Var("v",CTy"MachineCSR"),
2482                       Apply
2483                         (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"s"),
2484                          Dest("procID",F8,qVar"s")),
2485                       Rupd
2486                         ("c_MCSR",
2487                          TP[qVar"s",
2488                             Fupd
2489                               (Dest
2490                                  ("c_MCSR",ATy(F8,CTy"MachineCSR"),
2491                                   qVar"s"),Dest("procID",F8,qVar"s"),
2492                                Rupd
2493                                  ("mstatus",
2494                                   TP[Var("v",CTy"MachineCSR"),
2495                                      Rupd
2496                                        ("MFS",
2497                                         TP[Dest
2498                                              ("mstatus",CTy"mstatus",
2499                                               Var("v",CTy"MachineCSR")),
2500                                            Call
2501                                              ("ext_status",FTy 2,
2502                                               LC("Dirty",CTy"ExtStatus"))])]))])),
2503                   Let(Var("v",CTy"MachineCSR"),
2504                       Apply
2505                         (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"s"),
2506                          Dest("procID",F8,qVar"s")),
2507                       Rupd
2508                         ("c_MCSR",
2509                          TP[qVar"s",
2510                             Fupd
2511                               (Dest
2512                                  ("c_MCSR",ATy(F8,CTy"MachineCSR"),
2513                                   qVar"s"),Dest("procID",F8,qVar"s"),
2514                                Rupd
2515                                  ("mstatus",
2516                                   TP[Var("v",CTy"MachineCSR"),
2517                                      Rupd
2518                                        ("MSD",
2519                                         TP[Dest
2520                                              ("mstatus",CTy"mstatus",
2521                                               Var("v",CTy"MachineCSR")),
2522                                            LT])]))]))))),
2523          (LW(256,12),
2524           Rupd
2525             ("c_MCSR",
2526              TP[qVar"state",
2527                 Fupd
2528                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2529                    Dest("procID",F8,qVar"state"),
2530                    Rupd
2531                      ("mstatus",
2532                       TP[Apply
2533                            (Dest
2534                               ("c_MCSR",ATy(F8,CTy"MachineCSR"),
2535                                qVar"state"),Dest("procID",F8,qVar"state")),
2536                          Call
2537                            ("lower_sstatus_mstatus",CTy"mstatus",
2538                             TP[Call
2539                                  ("rec'sstatus",CTy"sstatus",
2540                                   Var("value",F64)),
2541                                Dest
2542                                  ("mstatus",CTy"mstatus",
2543                                   Apply
2544                                     (Dest
2545                                        ("c_MCSR",ATy(F8,CTy"MachineCSR"),
2546                                         qVar"state"),
2547                                      Dest("procID",F8,qVar"state")))])]))])),
2548          (LW(257,12),
2549           Rupd
2550             ("c_SCSR",
2551              TP[qVar"state",
2552                 Fupd
2553                   (Dest("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"),
2554                    Dest("procID",F8,qVar"state"),
2555                    Rupd
2556                      ("stvec",
2557                       TP[Apply
2558                            (Dest
2559                               ("c_SCSR",ATy(F8,CTy"SupervisorCSR"),
2560                                qVar"state"),Dest("procID",F8,qVar"state")),
2561                          Var("value",F64)]))])),
2562          (LW(260,12),
2563           Rupd
2564             ("c_MCSR",
2565              TP[qVar"state",
2566                 Fupd
2567                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2568                    Dest("procID",F8,qVar"state"),
2569                    Rupd
2570                      ("mie",
2571                       TP[Apply
2572                            (Dest
2573                               ("c_MCSR",ATy(F8,CTy"MachineCSR"),
2574                                qVar"state"),Dest("procID",F8,qVar"state")),
2575                          Call
2576                            ("lower_sie_mie",CTy"mie",
2577                             TP[Call("rec'sie",CTy"sie",Var("value",F64)),
2578                                Dest
2579                                  ("mie",CTy"mie",
2580                                   Apply
2581                                     (Dest
2582                                        ("c_MCSR",ATy(F8,CTy"MachineCSR"),
2583                                         qVar"state"),
2584                                      Dest("procID",F8,qVar"state")))])]))])),
2585          (LW(289,12),
2586           Let(qVar"s",
2587               Rupd
2588                 ("c_SCSR",
2589                  TP[qVar"state",
2590                     Fupd
2591                       (Dest
2592                          ("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"),
2593                        Dest("procID",F8,qVar"state"),
2594                        Rupd
2595                          ("stimecmp",
2596                           TP[Apply
2597                                (Dest
2598                                   ("c_SCSR",ATy(F8,CTy"SupervisorCSR"),
2599                                    qVar"state"),
2600                                 Dest("procID",F8,qVar"state")),
2601                              Var("value",F64)]))]),
2602               Let(Var("v",CTy"MachineCSR"),
2603                   Apply
2604                     (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"s"),
2605                      Dest("procID",F8,qVar"s")),
2606                   Rupd
2607                     ("c_MCSR",
2608                      TP[qVar"s",
2609                         Fupd
2610                           (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"s"),
2611                            Dest("procID",F8,qVar"s"),
2612                            Rupd
2613                              ("mip",
2614                               TP[Var("v",CTy"MachineCSR"),
2615                                  Rupd
2616                                    ("STIP",
2617                                     TP[Dest
2618                                          ("mip",CTy"mip",
2619                                           Var("v",CTy"MachineCSR")),LF])]))])))),
2620          (LW(320,12),
2621           Rupd
2622             ("c_SCSR",
2623              TP[qVar"state",
2624                 Fupd
2625                   (Dest("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"),
2626                    Dest("procID",F8,qVar"state"),
2627                    Rupd
2628                      ("sscratch",
2629                       TP[Apply
2630                            (Dest
2631                               ("c_SCSR",ATy(F8,CTy"SupervisorCSR"),
2632                                qVar"state"),Dest("procID",F8,qVar"state")),
2633                          Var("value",F64)]))])),
2634          (LW(321,12),
2635           Rupd
2636             ("c_SCSR",
2637              TP[qVar"state",
2638                 Fupd
2639                   (Dest("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"),
2640                    Dest("procID",F8,qVar"state"),
2641                    Rupd
2642                      ("sepc",
2643                       TP[Apply
2644                            (Dest
2645                               ("c_SCSR",ATy(F8,CTy"SupervisorCSR"),
2646                                qVar"state"),Dest("procID",F8,qVar"state")),
2647                          Bop(BAnd,Var("value",F64),Mop(SE F64,LW(4,3)))]))])),
2648          (LW(324,12),
2649           Rupd
2650             ("c_MCSR",
2651              TP[qVar"state",
2652                 Fupd
2653                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2654                    Dest("procID",F8,qVar"state"),
2655                    Rupd
2656                      ("mip",
2657                       TP[Apply
2658                            (Dest
2659                               ("c_MCSR",ATy(F8,CTy"MachineCSR"),
2660                                qVar"state"),Dest("procID",F8,qVar"state")),
2661                          Call
2662                            ("lower_sip_mip",CTy"mip",
2663                             TP[Call("rec'sip",CTy"sip",Var("value",F64)),
2664                                Dest
2665                                  ("mip",CTy"mip",
2666                                   Apply
2667                                     (Dest
2668                                        ("c_MCSR",ATy(F8,CTy"MachineCSR"),
2669                                         qVar"state"),
2670                                      Dest("procID",F8,qVar"state")))])]))])),
2671          (LW(384,12),
2672           Rupd
2673             ("c_SCSR",
2674              TP[qVar"state",
2675                 Fupd
2676                   (Dest("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"),
2677                    Dest("procID",F8,qVar"state"),
2678                    Rupd
2679                      ("sptbr",
2680                       TP[Apply
2681                            (Dest
2682                               ("c_SCSR",ATy(F8,CTy"SupervisorCSR"),
2683                                qVar"state"),Dest("procID",F8,qVar"state")),
2684                          Var("value",F64)]))])),
2685          (LW(385,12),
2686           Rupd
2687             ("c_SCSR",
2688              TP[qVar"state",
2689                 Fupd
2690                   (Dest("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"),
2691                    Dest("procID",F8,qVar"state"),
2692                    Rupd
2693                      ("sasid",
2694                       TP[Apply
2695                            (Dest
2696                               ("c_SCSR",ATy(F8,CTy"SupervisorCSR"),
2697                                qVar"state"),Dest("procID",F8,qVar"state")),
2698                          Var("value",F64)]))])),
2699          (LW(2304,12),
2700           Rupd
2701             ("c_UCSR",
2702              TP[qVar"state",
2703                 Fupd
2704                   (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
2705                    Dest("procID",F8,qVar"state"),
2706                    Rupd
2707                      ("cycle_delta",
2708                       TP[Apply
2709                            (Dest
2710                               ("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
2711                             Dest("procID",F8,qVar"state")),
2712                          Bop(Sub,Var("value",F64),
2713                              Apply
2714                                (Dest("c_cycles",ATy(F8,F64),qVar"state"),
2715                                 Dest("procID",F8,qVar"state")))]))])),
2716          (LW(2305,12),
2717           Rupd
2718             ("c_UCSR",
2719              TP[qVar"state",
2720                 Fupd
2721                   (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
2722                    Dest("procID",F8,qVar"state"),
2723                    Rupd
2724                      ("time_delta",
2725                       TP[Apply
2726                            (Dest
2727                               ("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
2728                             Dest("procID",F8,qVar"state")),
2729                          Bop(Sub,Var("value",F64),
2730                              Dest("clock",F64,qVar"state"))]))])),
2731          (LW(2306,12),
2732           Rupd
2733             ("c_UCSR",
2734              TP[qVar"state",
2735                 Fupd
2736                   (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
2737                    Dest("procID",F8,qVar"state"),
2738                    Rupd
2739                      ("instret_delta",
2740                       TP[Apply
2741                            (Dest
2742                               ("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
2743                             Dest("procID",F8,qVar"state")),
2744                          Bop(Sub,Var("value",F64),
2745                              Apply
2746                                (Dest("c_instret",ATy(F8,F64),qVar"state"),
2747                                 Dest("procID",F8,qVar"state")))]))])),
2748          (LW(2432,12),
2749           Let(Var("v",CTy"UserCSR"),
2750               Apply
2751                 (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
2752                  Dest("procID",F8,qVar"state")),
2753               Rupd
2754                 ("c_UCSR",
2755                  TP[qVar"state",
2756                     Fupd
2757                       (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
2758                        Dest("procID",F8,qVar"state"),
2759                        Rupd
2760                          ("cycle_delta",
2761                           TP[Var("v",CTy"UserCSR"),
2762                              BFI(LN 63,LN 32,
2763                                  Bop(Lsl,
2764                                      Bop(Sub,
2765                                          EX(Var("value",F64),LN 31,LN 0,
2766                                             F32),
2767                                          EX(Apply
2768                                               (Dest
2769                                                  ("c_cycles",ATy(F8,F64),
2770                                                   qVar"state"),
2771                                                Dest
2772                                                  ("procID",F8,qVar"state")),
2773                                             LN 63,LN 32,F32)),LN 32),
2774                                  Dest
2775                                    ("cycle_delta",F64,
2776                                     Var("v",CTy"UserCSR")))]))]))),
2777          (LW(2433,12),
2778           Let(Var("v",CTy"UserCSR"),
2779               Apply
2780                 (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
2781                  Dest("procID",F8,qVar"state")),
2782               Rupd
2783                 ("c_UCSR",
2784                  TP[qVar"state",
2785                     Fupd
2786                       (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
2787                        Dest("procID",F8,qVar"state"),
2788                        Rupd
2789                          ("time_delta",
2790                           TP[Var("v",CTy"UserCSR"),
2791                              BFI(LN 63,LN 32,
2792                                  Bop(Lsl,
2793                                      Bop(Sub,
2794                                          EX(Var("value",F64),LN 31,LN 0,
2795                                             F32),
2796                                          EX(Dest("clock",F64,qVar"state"),
2797                                             LN 63,LN 32,F32)),LN 32),
2798                                  Dest
2799                                    ("time_delta",F64,
2800                                     Var("v",CTy"UserCSR")))]))]))),
2801          (LW(2434,12),
2802           Let(Var("v",CTy"UserCSR"),
2803               Apply
2804                 (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
2805                  Dest("procID",F8,qVar"state")),
2806               Rupd
2807                 ("c_UCSR",
2808                  TP[qVar"state",
2809                     Fupd
2810                       (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"),
2811                        Dest("procID",F8,qVar"state"),
2812                        Rupd
2813                          ("instret_delta",
2814                           TP[Var("v",CTy"UserCSR"),
2815                              BFI(LN 63,LN 32,
2816                                  Bop(Lsl,
2817                                      Bop(Sub,
2818                                          EX(Var("value",F64),LN 31,LN 0,
2819                                             F32),
2820                                          EX(Apply
2821                                               (Dest
2822                                                  ("c_instret",
2823                                                   ATy(F8,F64),qVar"state"),
2824                                                Dest
2825                                                  ("procID",F8,qVar"state")),
2826                                             LN 63,LN 32,F32)),LN 32),
2827                                  Dest
2828                                    ("instret_delta",F64,
2829                                     Var("v",CTy"UserCSR")))]))]))),
2830          (LW(768,12),
2831           Rupd
2832             ("c_MCSR",
2833              TP[qVar"state",
2834                 Fupd
2835                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2836                    Dest("procID",F8,qVar"state"),
2837                    Rupd
2838                      ("mstatus",
2839                       TP[Apply
2840                            (Dest
2841                               ("c_MCSR",ATy(F8,CTy"MachineCSR"),
2842                                qVar"state"),Dest("procID",F8,qVar"state")),
2843                          Call
2844                            ("update_mstatus",CTy"mstatus",
2845                             TP[Dest
2846                                  ("mstatus",CTy"mstatus",
2847                                   Apply
2848                                     (Dest
2849                                        ("c_MCSR",ATy(F8,CTy"MachineCSR"),
2850                                         qVar"state"),
2851                                      Dest("procID",F8,qVar"state"))),
2852                                Call
2853                                  ("rec'mstatus",CTy"mstatus",
2854                                   Var("value",F64))])]))])),
2855          (LW(769,12),
2856           Rupd
2857             ("c_MCSR",
2858              TP[qVar"state",
2859                 Fupd
2860                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2861                    Dest("procID",F8,qVar"state"),
2862                    Rupd
2863                      ("mtvec",
2864                       TP[Apply
2865                            (Dest
2866                               ("c_MCSR",ATy(F8,CTy"MachineCSR"),
2867                                qVar"state"),Dest("procID",F8,qVar"state")),
2868                          Var("value",F64)]))])),
2869          (LW(770,12),
2870           Rupd
2871             ("c_MCSR",
2872              TP[qVar"state",
2873                 Fupd
2874                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2875                    Dest("procID",F8,qVar"state"),
2876                    Rupd
2877                      ("mtdeleg",
2878                       TP[Apply
2879                            (Dest
2880                               ("c_MCSR",ATy(F8,CTy"MachineCSR"),
2881                                qVar"state"),Dest("procID",F8,qVar"state")),
2882                          Call
2883                            ("rec'mtdeleg",CTy"mtdeleg",Var("value",F64))]))])),
2884          (LW(772,12),
2885           Rupd
2886             ("c_MCSR",
2887              TP[qVar"state",
2888                 Fupd
2889                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2890                    Dest("procID",F8,qVar"state"),
2891                    Rupd
2892                      ("mie",
2893                       TP[Apply
2894                            (Dest
2895                               ("c_MCSR",ATy(F8,CTy"MachineCSR"),
2896                                qVar"state"),Dest("procID",F8,qVar"state")),
2897                          Call("rec'mie",CTy"mie",Var("value",F64))]))])),
2898          (LW(801,12),
2899           Let(qVar"s",
2900               Rupd
2901                 ("c_MCSR",
2902                  TP[qVar"state",
2903                     Fupd
2904                       (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2905                        Dest("procID",F8,qVar"state"),
2906                        Rupd
2907                          ("mtimecmp",
2908                           TP[Apply
2909                                (Dest
2910                                   ("c_MCSR",ATy(F8,CTy"MachineCSR"),
2911                                    qVar"state"),
2912                                 Dest("procID",F8,qVar"state")),
2913                              Var("value",F64)]))]),
2914               Let(Var("v",CTy"MachineCSR"),
2915                   Apply
2916                     (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"s"),
2917                      Dest("procID",F8,qVar"s")),
2918                   Rupd
2919                     ("c_MCSR",
2920                      TP[qVar"s",
2921                         Fupd
2922                           (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"s"),
2923                            Dest("procID",F8,qVar"s"),
2924                            Rupd
2925                              ("mip",
2926                               TP[Var("v",CTy"MachineCSR"),
2927                                  Rupd
2928                                    ("MTIP",
2929                                     TP[Dest
2930                                          ("mip",CTy"mip",
2931                                           Var("v",CTy"MachineCSR")),LF])]))])))),
2932          (LW(1793,12),
2933           Rupd
2934             ("c_MCSR",
2935              TP[qVar"state",
2936                 Fupd
2937                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2938                    Dest("procID",F8,qVar"state"),
2939                    Rupd
2940                      ("mtime_delta",
2941                       TP[Apply
2942                            (Dest
2943                               ("c_MCSR",ATy(F8,CTy"MachineCSR"),
2944                                qVar"state"),Dest("procID",F8,qVar"state")),
2945                          Bop(Sub,Var("value",F64),
2946                              Dest("clock",F64,qVar"state"))]))])),
2947          (LW(1857,12),
2948           Let(Var("v",CTy"MachineCSR"),
2949               Apply
2950                 (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2951                  Dest("procID",F8,qVar"state")),
2952               Rupd
2953                 ("c_MCSR",
2954                  TP[qVar"state",
2955                     Fupd
2956                       (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2957                        Dest("procID",F8,qVar"state"),
2958                        Rupd
2959                          ("mtime_delta",
2960                           TP[Var("v",CTy"MachineCSR"),
2961                              BFI(LN 63,LN 32,
2962                                  Bop(Lsl,
2963                                      Bop(Sub,
2964                                          EX(Var("value",F64),LN 31,LN 0,
2965                                             F32),
2966                                          EX(Dest("clock",F64,qVar"state"),
2967                                             LN 63,LN 32,F32)),LN 32),
2968                                  Dest
2969                                    ("mtime_delta",F64,
2970                                     Var("v",CTy"MachineCSR")))]))]))),
2971          (LW(832,12),
2972           Rupd
2973             ("c_MCSR",
2974              TP[qVar"state",
2975                 Fupd
2976                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2977                    Dest("procID",F8,qVar"state"),
2978                    Rupd
2979                      ("mscratch",
2980                       TP[Apply
2981                            (Dest
2982                               ("c_MCSR",ATy(F8,CTy"MachineCSR"),
2983                                qVar"state"),Dest("procID",F8,qVar"state")),
2984                          Var("value",F64)]))])),
2985          (LW(833,12),
2986           Rupd
2987             ("c_MCSR",
2988              TP[qVar"state",
2989                 Fupd
2990                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
2991                    Dest("procID",F8,qVar"state"),
2992                    Rupd
2993                      ("mepc",
2994                       TP[Apply
2995                            (Dest
2996                               ("c_MCSR",ATy(F8,CTy"MachineCSR"),
2997                                qVar"state"),Dest("procID",F8,qVar"state")),
2998                          Bop(BAnd,Var("value",F64),Mop(SE F64,LW(4,3)))]))])),
2999          (LW(834,12),
3000           Rupd
3001             ("c_MCSR",
3002              TP[qVar"state",
3003                 Fupd
3004                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
3005                    Dest("procID",F8,qVar"state"),
3006                    Rupd
3007                      ("mcause",
3008                       TP[Apply
3009                            (Dest
3010                               ("c_MCSR",ATy(F8,CTy"MachineCSR"),
3011                                qVar"state"),Dest("procID",F8,qVar"state")),
3012                          Call("rec'mcause",CTy"mcause",Var("value",F64))]))])),
3013          (LW(835,12),
3014           Rupd
3015             ("c_MCSR",
3016              TP[qVar"state",
3017                 Fupd
3018                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
3019                    Dest("procID",F8,qVar"state"),
3020                    Rupd
3021                      ("mbadaddr",
3022                       TP[Apply
3023                            (Dest
3024                               ("c_MCSR",ATy(F8,CTy"MachineCSR"),
3025                                qVar"state"),Dest("procID",F8,qVar"state")),
3026                          Var("value",F64)]))])),
3027          (LW(836,12),
3028           Rupd
3029             ("c_MCSR",
3030              TP[qVar"state",
3031                 Fupd
3032                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
3033                    Dest("procID",F8,qVar"state"),
3034                    Rupd
3035                      ("mip",
3036                       TP[Apply
3037                            (Dest
3038                               ("c_MCSR",ATy(F8,CTy"MachineCSR"),
3039                                qVar"state"),Dest("procID",F8,qVar"state")),
3040                          Call("rec'mip",CTy"mip",Var("value",F64))]))])),
3041          (LW(896,12),
3042           Rupd
3043             ("c_MCSR",
3044              TP[qVar"state",
3045                 Fupd
3046                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
3047                    Dest("procID",F8,qVar"state"),
3048                    Rupd
3049                      ("mbase",
3050                       TP[Apply
3051                            (Dest
3052                               ("c_MCSR",ATy(F8,CTy"MachineCSR"),
3053                                qVar"state"),Dest("procID",F8,qVar"state")),
3054                          Var("value",F64)]))])),
3055          (LW(897,12),
3056           Rupd
3057             ("c_MCSR",
3058              TP[qVar"state",
3059                 Fupd
3060                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
3061                    Dest("procID",F8,qVar"state"),
3062                    Rupd
3063                      ("mbound",
3064                       TP[Apply
3065                            (Dest
3066                               ("c_MCSR",ATy(F8,CTy"MachineCSR"),
3067                                qVar"state"),Dest("procID",F8,qVar"state")),
3068                          Var("value",F64)]))])),
3069          (LW(898,12),
3070           Rupd
3071             ("c_MCSR",
3072              TP[qVar"state",
3073                 Fupd
3074                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
3075                    Dest("procID",F8,qVar"state"),
3076                    Rupd
3077                      ("mibase",
3078                       TP[Apply
3079                            (Dest
3080                               ("c_MCSR",ATy(F8,CTy"MachineCSR"),
3081                                qVar"state"),Dest("procID",F8,qVar"state")),
3082                          Var("value",F64)]))])),
3083          (LW(899,12),
3084           Rupd
3085             ("c_MCSR",
3086              TP[qVar"state",
3087                 Fupd
3088                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
3089                    Dest("procID",F8,qVar"state"),
3090                    Rupd
3091                      ("mibound",
3092                       TP[Apply
3093                            (Dest
3094                               ("c_MCSR",ATy(F8,CTy"MachineCSR"),
3095                                qVar"state"),Dest("procID",F8,qVar"state")),
3096                          Var("value",F64)]))])),
3097          (LW(900,12),
3098           Rupd
3099             ("c_MCSR",
3100              TP[qVar"state",
3101                 Fupd
3102                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
3103                    Dest("procID",F8,qVar"state"),
3104                    Rupd
3105                      ("mdbase",
3106                       TP[Apply
3107                            (Dest
3108                               ("c_MCSR",ATy(F8,CTy"MachineCSR"),
3109                                qVar"state"),Dest("procID",F8,qVar"state")),
3110                          Var("value",F64)]))])),
3111          (LW(901,12),
3112           Rupd
3113             ("c_MCSR",
3114              TP[qVar"state",
3115                 Fupd
3116                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
3117                    Dest("procID",F8,qVar"state"),
3118                    Rupd
3119                      ("mdbound",
3120                       TP[Apply
3121                            (Dest
3122                               ("c_MCSR",ATy(F8,CTy"MachineCSR"),
3123                                qVar"state"),Dest("procID",F8,qVar"state")),
3124                          Var("value",F64)]))])),
3125          (LW(2817,12),
3126           Rupd
3127             ("c_HCSR",
3128              TP[qVar"state",
3129                 Fupd
3130                   (Dest("c_HCSR",ATy(F8,CTy"HypervisorCSR"),qVar"state"),
3131                    Dest("procID",F8,qVar"state"),
3132                    Rupd
3133                      ("htime_delta",
3134                       TP[Apply
3135                            (Dest
3136                               ("c_HCSR",ATy(F8,CTy"HypervisorCSR"),
3137                                qVar"state"),Dest("procID",F8,qVar"state")),
3138                          Bop(Sub,Var("value",F64),
3139                              Dest("clock",F64,qVar"state"))]))])),
3140          (LW(2945,12),
3141           Let(Var("v",CTy"HypervisorCSR"),
3142               Apply
3143                 (Dest("c_HCSR",ATy(F8,CTy"HypervisorCSR"),qVar"state"),
3144                  Dest("procID",F8,qVar"state")),
3145               Rupd
3146                 ("c_HCSR",
3147                  TP[qVar"state",
3148                     Fupd
3149                       (Dest
3150                          ("c_HCSR",ATy(F8,CTy"HypervisorCSR"),qVar"state"),
3151                        Dest("procID",F8,qVar"state"),
3152                        Rupd
3153                          ("htime_delta",
3154                           TP[Var("v",CTy"HypervisorCSR"),
3155                              BFI(LN 63,LN 32,
3156                                  Bop(Lsl,
3157                                      Bop(Sub,
3158                                          EX(Var("value",F64),LN 31,LN 0,
3159                                             F32),
3160                                          EX(Dest("clock",F64,qVar"state"),
3161                                             LN 63,LN 32,F32)),LN 32),
3162                                  Dest
3163                                    ("htime_delta",F64,
3164                                     Var("v",CTy"HypervisorCSR")))]))]))),
3165          (LW(1920,12),
3166           Rupd
3167             ("c_MCSR",
3168              TP[qVar"state",
3169                 Fupd
3170                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
3171                    Dest("procID",F8,qVar"state"),
3172                    Rupd
3173                      ("mtohost",
3174                       TP[Apply
3175                            (Dest
3176                               ("c_MCSR",ATy(F8,CTy"MachineCSR"),
3177                                qVar"state"),Dest("procID",F8,qVar"state")),
3178                          Var("value",F64)]))])),
3179          (LW(1921,12),
3180           Rupd
3181             ("c_MCSR",
3182              TP[qVar"state",
3183                 Fupd
3184                   (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"),
3185                    Dest("procID",F8,qVar"state"),
3186                    Rupd
3187                      ("mfromhost",
3188                       TP[Apply
3189                            (Dest
3190                               ("c_MCSR",ATy(F8,CTy"MachineCSR"),
3191                                qVar"state"),Dest("procID",F8,qVar"state")),
3192                          Var("value",F64)]))])),
3193          (LW(1923,12),
3194           Apply
3195             (Call("sendIPI",ATy(qTy,qTy),Var("value",F64)),qVar"state")),
3196          (AVar(FTy 12),
3197           Mop(Snd,
3198               Apply
3199                 (Call
3200                    ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
3201                     Call
3202                       ("INTERNAL_ERROR",CTy"exception",
3203                        CC[LS"unexpected CSR write to ",
3204                           Mop(Cast sTy,Var("csr",FTy 12))])),qVar"state")))])))
3205;
3206val csrName_def = Def
3207  ("csrName",Var("csr",FTy 12),
3208   CS(Var("csr",FTy 12),
3209      [(LW(1,12),LS"fflags"),(LW(2,12),LS"frm"),(LW(3,12),LS"fcsr"),
3210       (LW(3072,12),LS"cycle"),(LW(3073,12),LS"time"),
3211       (LW(3074,12),LS"instret"),(LW(3200,12),LS"cycleh"),
3212       (LW(3201,12),LS"timeh"),(LW(3202,12),LS"instreth"),
3213       (LW(256,12),LS"sstatus"),(LW(257,12),LS"stvec"),
3214       (LW(260,12),LS"sie"),(LW(289,12),LS"stimecmp"),
3215       (LW(3329,12),LS"stime"),(LW(3457,12),LS"stimeh"),
3216       (LW(320,12),LS"sscratch"),(LW(321,12),LS"sepc"),
3217       (LW(3394,12),LS"scause"),(LW(3395,12),LS"sbadaddr"),
3218       (LW(324,12),LS"mip"),(LW(384,12),LS"sptbr"),(LW(385,12),LS"sasid"),
3219       (LW(2304,12),LS"cycle"),(LW(2305,12),LS"time"),
3220       (LW(2306,12),LS"instret"),(LW(2432,12),LS"cycleh"),
3221       (LW(2433,12),LS"timeh"),(LW(2434,12),LS"instreth"),
3222       (LW(512,12),LS"hstatus"),(LW(513,12),LS"htvec"),
3223       (LW(514,12),LS"htdeleg"),(LW(545,12),LS"htimecmp"),
3224       (LW(3585,12),LS"htime"),(LW(3713,12),LS"htimeh"),
3225       (LW(576,12),LS"hscratch"),(LW(577,12),LS"hepc"),
3226       (LW(578,12),LS"hcause"),(LW(579,12),LS"hbadaddr"),
3227       (LW(2561,12),LS"stime"),(LW(2689,12),LS"stimeh"),
3228       (LW(3840,12),LS"mcpuid"),(LW(3841,12),LS"mimpid"),
3229       (LW(3856,12),LS"mhartid"),(LW(768,12),LS"mstatus"),
3230       (LW(769,12),LS"mtvec"),(LW(770,12),LS"mtdeleg"),
3231       (LW(772,12),LS"mie"),(LW(801,12),LS"mtimecmp"),
3232       (LW(1793,12),LS"mtime"),(LW(1857,12),LS"mtimeh"),
3233       (LW(832,12),LS"mscratch"),(LW(833,12),LS"mepc"),
3234       (LW(834,12),LS"mcause"),(LW(835,12),LS"mbadaddr"),
3235       (LW(836,12),LS"mip"),(LW(896,12),LS"mbase"),
3236       (LW(897,12),LS"mbound"),(LW(898,12),LS"mibase"),
3237       (LW(899,12),LS"mibound"),(LW(900,12),LS"mdbase"),
3238       (LW(901,12),LS"mdbound"),(LW(2817,12),LS"htime"),
3239       (LW(2945,12),LS"htimeh"),(LW(1920,12),LS"mtohost"),
3240       (LW(1921,12),LS"mfromhost"),(LW(1923,12),LS"send_ipi"),
3241       (AVar(FTy 12),LS"UNKNOWN")]))
3242;
3243val Delta_def = Def
3244  ("Delta",qVar"state",
3245   Apply
3246     (Dest("c_update",ATy(F8,CTy"StateDelta"),qVar"state"),
3247      Dest("procID",F8,qVar"state")))
3248;
3249val write'Delta_def = Def
3250  ("write'Delta",Var("value",CTy"StateDelta"),
3251   Close
3252     (qVar"state",
3253      Rupd
3254        ("c_update",
3255         TP[qVar"state",
3256            Fupd
3257              (Dest("c_update",ATy(F8,CTy"StateDelta"),qVar"state"),
3258               Dest("procID",F8,qVar"state"),Var("value",CTy"StateDelta"))])))
3259;
3260val hex32_def = Def
3261  ("hex32",Var("x",F32),
3262   Mop(PadLeft,TP[LSC #"0",LN 8,Mop(Cast sTy,Var("x",F32))]))
3263;
3264val hex64_def = Def
3265  ("hex64",Var("x",F64),
3266   Mop(PadLeft,TP[LSC #"0",LN 16,Mop(Cast sTy,Var("x",F64))]))
3267;
3268val log_w_csr_def = Def
3269  ("log_w_csr",TP[Var("csr",FTy 12),Var("data",F64)],
3270   CC[LS"CSR (",Call("csrName",sTy,Var("csr",FTy 12)),LS") <- 0x",
3271      Call("hex64",sTy,Var("data",F64))])
3272;
3273val reg_def = Def
3274  ("reg",Var("r",FTy 5),
3275   ITB([(EQ(Var("r",FTy 5),LW(0,5)),LS"$0"),
3276        (EQ(Var("r",FTy 5),LW(1,5)),LS"ra"),
3277        (EQ(Var("r",FTy 5),LW(2,5)),LS"sp"),
3278        (EQ(Var("r",FTy 5),LW(3,5)),LS"gp"),
3279        (EQ(Var("r",FTy 5),LW(4,5)),LS"tp"),
3280        (EQ(Var("r",FTy 5),LW(5,5)),LS"t0"),
3281        (EQ(Var("r",FTy 5),LW(6,5)),LS"t1"),
3282        (EQ(Var("r",FTy 5),LW(7,5)),LS"t2"),
3283        (EQ(Var("r",FTy 5),LW(8,5)),LS"fp"),
3284        (EQ(Var("r",FTy 5),LW(9,5)),LS"s1"),
3285        (EQ(Var("r",FTy 5),LW(10,5)),LS"a0"),
3286        (EQ(Var("r",FTy 5),LW(11,5)),LS"a1"),
3287        (EQ(Var("r",FTy 5),LW(12,5)),LS"a2"),
3288        (EQ(Var("r",FTy 5),LW(13,5)),LS"a3"),
3289        (EQ(Var("r",FTy 5),LW(14,5)),LS"a4"),
3290        (EQ(Var("r",FTy 5),LW(15,5)),LS"a5"),
3291        (EQ(Var("r",FTy 5),LW(16,5)),LS"a6"),
3292        (EQ(Var("r",FTy 5),LW(17,5)),LS"a7"),
3293        (EQ(Var("r",FTy 5),LW(18,5)),LS"s2"),
3294        (EQ(Var("r",FTy 5),LW(19,5)),LS"s3"),
3295        (EQ(Var("r",FTy 5),LW(20,5)),LS"s4"),
3296        (EQ(Var("r",FTy 5),LW(21,5)),LS"s5"),
3297        (EQ(Var("r",FTy 5),LW(22,5)),LS"s6"),
3298        (EQ(Var("r",FTy 5),LW(23,5)),LS"s7"),
3299        (EQ(Var("r",FTy 5),LW(24,5)),LS"s8"),
3300        (EQ(Var("r",FTy 5),LW(25,5)),LS"s9"),
3301        (EQ(Var("r",FTy 5),LW(26,5)),LS"s10"),
3302        (EQ(Var("r",FTy 5),LW(27,5)),LS"s11"),
3303        (EQ(Var("r",FTy 5),LW(28,5)),LS"t3"),
3304        (EQ(Var("r",FTy 5),LW(29,5)),LS"t4"),
3305        (EQ(Var("r",FTy 5),LW(30,5)),LS"t5")],LS"t6"))
3306;
3307val fpreg_def = Def
3308  ("fpreg",Var("r",FTy 5),
3309   ITB([(EQ(Var("r",FTy 5),LW(0,5)),LS"fs0"),
3310        (EQ(Var("r",FTy 5),LW(1,5)),LS"fs1"),
3311        (EQ(Var("r",FTy 5),LW(2,5)),LS"fs2"),
3312        (EQ(Var("r",FTy 5),LW(3,5)),LS"fs3"),
3313        (EQ(Var("r",FTy 5),LW(4,5)),LS"fs4"),
3314        (EQ(Var("r",FTy 5),LW(5,5)),LS"fs5"),
3315        (EQ(Var("r",FTy 5),LW(6,5)),LS"fs6"),
3316        (EQ(Var("r",FTy 5),LW(7,5)),LS"fs7"),
3317        (EQ(Var("r",FTy 5),LW(8,5)),LS"fs8"),
3318        (EQ(Var("r",FTy 5),LW(9,5)),LS"fs9"),
3319        (EQ(Var("r",FTy 5),LW(10,5)),LS"fs10"),
3320        (EQ(Var("r",FTy 5),LW(11,5)),LS"fs11"),
3321        (EQ(Var("r",FTy 5),LW(12,5)),LS"fs12"),
3322        (EQ(Var("r",FTy 5),LW(13,5)),LS"fs13"),
3323        (EQ(Var("r",FTy 5),LW(14,5)),LS"fs14"),
3324        (EQ(Var("r",FTy 5),LW(15,5)),LS"fs15"),
3325        (EQ(Var("r",FTy 5),LW(16,5)),LS"fv0"),
3326        (EQ(Var("r",FTy 5),LW(17,5)),LS"fv1"),
3327        (EQ(Var("r",FTy 5),LW(18,5)),LS"fa0"),
3328        (EQ(Var("r",FTy 5),LW(19,5)),LS"fa1"),
3329        (EQ(Var("r",FTy 5),LW(20,5)),LS"fa2"),
3330        (EQ(Var("r",FTy 5),LW(21,5)),LS"fa3"),
3331        (EQ(Var("r",FTy 5),LW(22,5)),LS"fa4"),
3332        (EQ(Var("r",FTy 5),LW(23,5)),LS"fa5"),
3333        (EQ(Var("r",FTy 5),LW(24,5)),LS"fa6"),
3334        (EQ(Var("r",FTy 5),LW(25,5)),LS"fa7"),
3335        (EQ(Var("r",FTy 5),LW(26,5)),LS"ft0"),
3336        (EQ(Var("r",FTy 5),LW(27,5)),LS"ft1"),
3337        (EQ(Var("r",FTy 5),LW(28,5)),LS"ft2"),
3338        (EQ(Var("r",FTy 5),LW(29,5)),LS"ft3"),
3339        (EQ(Var("r",FTy 5),LW(30,5)),LS"ft4")],LS"ft5"))
3340;
3341val log_w_gpr_def = Def
3342  ("log_w_gpr",TP[Var("r",FTy 5),Var("data",F64)],
3343   CC[LS"Reg ",Call("reg",sTy,Var("r",FTy 5)),LS" (",
3344      Mop(Cast sTy,Mop(Cast nTy,Var("r",FTy 5))),LS") <- 0x",
3345      Call("hex64",sTy,Var("data",F64))])
3346;
3347val log_w_fprs_def = Def
3348  ("log_w_fprs",TP[Var("r",FTy 5),Var("data",F32)],
3349   CC[LS"FPR ",Call("reg",sTy,Var("r",FTy 5)),LS" (",
3350      Mop(Cast sTy,Mop(Cast nTy,Var("r",FTy 5))),LS") <- 0x",
3351      Call("hex32",sTy,Var("data",F32))])
3352;
3353val log_w_fprd_def = Def
3354  ("log_w_fprd",TP[Var("r",FTy 5),Var("data",F64)],
3355   CC[LS"FPR ",Call("reg",sTy,Var("r",FTy 5)),LS" (",
3356      Mop(Cast sTy,Mop(Cast nTy,Var("r",FTy 5))),LS") <- 0x",
3357      Call("hex64",sTy,Var("data",F64))])
3358;
3359val log_w_mem_mask_def = Def
3360  ("log_w_mem_mask",
3361   TP[Var("pAddrIdx",FTy 61),Var("vAddr",F64),Var("mask",F64),
3362      Var("data",F64),Var("old",F64),Var("new",F64)],
3363   CC[LS"MEM[0x",Call("hex64",sTy,Mop(Cast F64,Var("pAddrIdx",FTy 61))),
3364      LS"/",Call("hex64",sTy,Var("vAddr",F64)),LS"] <- (data: 0x",
3365      Call("hex64",sTy,Var("data",F64)),LS", mask: 0x",
3366      Call("hex64",sTy,Var("mask",F64)),LS", old: 0x",
3367      Call("hex64",sTy,Var("old",F64)),LS", new: 0x",
3368      Call("hex64",sTy,Var("new",F64)),LS")"])
3369;
3370val log_w_mem_mask_misaligned_def = Def
3371  ("log_w_mem_mask_misaligned",
3372   TP[Var("pAddrIdx",FTy 61),Var("vAddr",F64),Var("mask",F64),
3373      Var("data",F64),nVar"align",Var("old",F64),Var("new",F64)],
3374   CC[LS"MEM[0x",Call("hex64",sTy,Mop(Cast F64,Var("pAddrIdx",FTy 61))),
3375      LS"/",Call("hex64",sTy,Var("vAddr",F64)),LS"/ misaligned@",
3376      Mop(Cast sTy,nVar"align"),LS"] <- (data: 0x",
3377      Call("hex64",sTy,Var("data",F64)),LS", mask: 0x",
3378      Call("hex64",sTy,Var("mask",F64)),LS", old: 0x",
3379      Call("hex64",sTy,Var("old",F64)),LS", new: 0x",
3380      Call("hex64",sTy,Var("new",F64)),LS")"])
3381;
3382val log_w_mem_def = Def
3383  ("log_w_mem",
3384   TP[Var("pAddrIdx",FTy 61),Var("vAddr",F64),Var("data",F64)],
3385   CC[LS"MEM[0x",Call("hex64",sTy,Mop(Cast F64,Var("pAddrIdx",FTy 61))),
3386      LS"/",Call("hex64",sTy,Var("vAddr",F64)),LS"] <- (data: 0x",
3387      Call("hex64",sTy,Var("data",F64)),LS")"])
3388;
3389val log_r_mem_def = Def
3390  ("log_r_mem",
3391   TP[Var("pAddrIdx",FTy 61),Var("vAddr",F64),Var("data",F64)],
3392   CC[LS"data <- MEM[0x",
3393      Mop(PadLeft,TP[LSC #"0",LN 10,Mop(Cast sTy,Var("pAddrIdx",FTy 61))]),
3394      LS"/",Call("hex64",sTy,Var("vAddr",F64)),LS"]: 0x",
3395      Call("hex64",sTy,Var("data",F64))])
3396;
3397val log_exc_def = Def
3398  ("log_exc",Var("e",CTy"ExceptionType"),
3399   CC[LS" Exception ",Call("excName",sTy,Var("e",CTy"ExceptionType")),
3400      LS" raised!"])
3401;
3402val log_tohost_def = Def
3403  ("log_tohost",Var("tohost",F64),
3404   CC[LS"-> host: ",
3405      Mop(Cast sTy,Mop(Cast cTy,EX(Var("tohost",F64),LN 7,LN 0,F8)))])
3406;
3407val clear_logs_def = Def
3408  ("clear_logs",AVar uTy,
3409   Close(qVar"state",Rupd("log",TP[qVar"state",LNL(PTy(nTy,sTy))])))
3410;
3411val setTrap_def = Def
3412  ("setTrap",TP[Var("e",CTy"ExceptionType"),Var("badaddr",OTy F64)],
3413   Close
3414     (qVar"state",
3415      Apply
3416        (Call
3417           ("write'NextFetch",ATy(qTy,qTy),
3418            Mop(Some,
3419                Call
3420                  ("Trap",CTy"TransferControl",
3421                   Rupd
3422                     ("badaddr",
3423                      TP[Rupd
3424                           ("trap",
3425                            TP[LX(CTy"SynchronousTrap"),
3426                               Var("e",CTy"ExceptionType")]),
3427                         Var("badaddr",OTy F64)])))),qVar"state")))
3428;
3429val signalException_def = Def
3430  ("signalException",Var("e",CTy"ExceptionType"),
3431   Close
3432     (qVar"state",
3433      Apply
3434        (Call
3435           ("setTrap",ATy(qTy,qTy),TP[Var("e",CTy"ExceptionType"),LO F64]),
3436         qVar"state")))
3437;
3438val signalAddressException_def = Def
3439  ("signalAddressException",
3440   TP[Var("e",CTy"ExceptionType"),Var("vAddr",F64)],
3441   Close
3442     (qVar"state",
3443      Apply
3444        (Call
3445           ("setTrap",ATy(qTy,qTy),
3446            TP[Var("e",CTy"ExceptionType"),Mop(Some,Var("vAddr",F64))]),
3447         qVar"state")))
3448;
3449val signalEnvCall_def = Def
3450  ("signalEnvCall",AVar uTy,
3451   Close
3452     (qVar"state",
3453      Apply
3454        (Call
3455           ("signalException",ATy(qTy,qTy),
3456            CS(Call
3457                 ("privilege",CTy"Privilege",
3458                  Dest
3459                    ("MPRV",FTy 2,
3460                     Dest
3461                       ("mstatus",CTy"mstatus",
3462                        Apply
3463                          (Const("MCSR",ATy(qTy,CTy"MachineCSR")),
3464                           qVar"state")))),
3465               [(LC("User",CTy"Privilege"),
3466                 LC("UMode_Env_Call",CTy"ExceptionType")),
3467                (LC("Supervisor",CTy"Privilege"),
3468                 LC("SMode_Env_Call",CTy"ExceptionType")),
3469                (LC("Hypervisor",CTy"Privilege"),
3470                 LC("HMode_Env_Call",CTy"ExceptionType")),
3471                (LC("Machine",CTy"Privilege"),
3472                 LC("MMode_Env_Call",CTy"ExceptionType"))])),qVar"state")))
3473;
3474val checkDelegation_def = tDef
3475  ("checkDelegation",
3476   TP[Var("curPriv",CTy"Privilege"),bVar"intr",Var("ec",F4)],
3477   Close
3478     (qVar"state",
3479      Let(nVar"e",Mop(Cast nTy,Var("ec",F4)),
3480          CS(Var("curPriv",CTy"Privilege"),
3481             [(LC("User",CTy"Privilege"),
3482               Apply
3483                 (Call
3484                    ("raise'exception",ATy(qTy,PTy(CTy"Privilege",qTy)),
3485                     Call
3486                       ("INTERNAL_ERROR",CTy"exception",
3487                        LS"No user-level delegation!")),qVar"state")),
3488              (LC("Supervisor",CTy"Privilege"),
3489               Apply
3490                 (Call
3491                    ("raise'exception",ATy(qTy,PTy(CTy"Privilege",qTy)),
3492                     Call
3493                       ("INTERNAL_ERROR",CTy"exception",
3494                        LS"No supervisor-level delegation!")),qVar"state")),
3495              (LC("Hypervisor",CTy"Privilege"),
3496               TP[ITE(Bop(Or,
3497                          Bop(And,bVar"intr",
3498                              Bop(Bit,
3499                                  Dest
3500                                    ("Intr_deleg",FTy 48,
3501                                     Dest
3502                                       ("htdeleg",CTy"mtdeleg",
3503                                        Apply
3504                                          (Const
3505                                             ("HCSR",
3506                                              ATy(qTy,CTy"HypervisorCSR")),
3507                                           qVar"state"))),nVar"e")),
3508                          Bop(And,Mop(Not,bVar"intr"),
3509                              Bop(Bit,
3510                                  Dest
3511                                    ("Exc_deleg",F16,
3512                                     Dest
3513                                       ("htdeleg",CTy"mtdeleg",
3514                                        Apply
3515                                          (Const
3516                                             ("HCSR",
3517                                              ATy(qTy,CTy"HypervisorCSR")),
3518                                           qVar"state"))),nVar"e"))),
3519                      LC("Supervisor",CTy"Privilege"),
3520                      Var("curPriv",CTy"Privilege")),qVar"state"]),
3521              (LC("Machine",CTy"Privilege"),
3522               ITE(Bop(Or,
3523                       Bop(And,bVar"intr",
3524                           Bop(Bit,
3525                               Dest
3526                                 ("Intr_deleg",FTy 48,
3527                                  Dest
3528                                    ("mtdeleg",CTy"mtdeleg",
3529                                     Apply
3530                                       (Const
3531                                          ("MCSR",ATy(qTy,CTy"MachineCSR")),
3532                                        qVar"state"))),nVar"e")),
3533                       Bop(And,Mop(Not,bVar"intr"),
3534                           Bop(Bit,
3535                               Dest
3536                                 ("Exc_deleg",F16,
3537                                  Dest
3538                                    ("mtdeleg",CTy"mtdeleg",
3539                                     Apply
3540                                       (Const
3541                                          ("MCSR",ATy(qTy,CTy"MachineCSR")),
3542                                        qVar"state"))),nVar"e"))),
3543                   Apply
3544                     (Call
3545                        ("checkDelegation",
3546                         ATy(qTy,PTy(CTy"Privilege",qTy)),
3547                         TP[LC("Hypervisor",CTy"Privilege"),bVar"intr",
3548                            Var("ec",F4)]),qVar"state"),
3549                   TP[Var("curPriv",CTy"Privilege"),qVar"state"]))]))),
3550   Close
3551     (Var("x",PTy(PTy(CTy"Privilege",PTy(bTy,F4)),qTy)),
3552      CS(Var("x",PTy(PTy(CTy"Privilege",PTy(bTy,F4)),qTy)),
3553         [(TP[TP[Var("curPriv",CTy"Privilege"),bVar"intr",Var("ec",F4)],
3554              AVar qTy],Mop(Cast nTy,Var("curPriv",CTy"Privilege")))])),
3555   SIMP_TAC std_ss [DB.theorem "Privilege2num_thm"]
3556)
3557;
3558val checkPrivInterrupt_def = Def
3559  ("checkPrivInterrupt",Var("curPriv",CTy"Privilege"),
3560   Close
3561     (qVar"state",
3562      Let(Var("v",CTy"mip"),
3563          Dest
3564            ("mip",CTy"mip",
3565             Apply(Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"state")),
3566          Let(Var("v0",CTy"mie"),
3567              Dest
3568                ("mie",CTy"mie",
3569                 Apply(Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"state")),
3570              CS(Var("curPriv",CTy"Privilege"),
3571                 [(LC("User",CTy"Privilege"),
3572                   Apply
3573                     (Call
3574                        ("raise'exception",
3575                         ATy(qTy,
3576                             PTy(OTy(PTy(CTy"Interrupt",CTy"Privilege")),
3577                                 qTy)),
3578                         Call
3579                           ("INTERNAL_ERROR",CTy"exception",
3580                            LS"No user-level interrupts!")),qVar"state")),
3581                  (LC("Supervisor",CTy"Privilege"),
3582                   TP[ITB([(Bop(And,Dest("STIP",bTy,Var("v",CTy"mip")),
3583                                Dest("STIE",bTy,Var("v0",CTy"mie"))),
3584                            Mop(Some,
3585                                TP[LC("Timer",CTy"Interrupt"),
3586                                   Var("curPriv",CTy"Privilege")])),
3587                           (Bop(And,Dest("SSIP",bTy,Var("v",CTy"mip")),
3588                                Dest("SSIE",bTy,Var("v0",CTy"mie"))),
3589                            Mop(Some,
3590                                TP[LC("Software",CTy"Interrupt"),
3591                                   Var("curPriv",CTy"Privilege")]))],
3592                          LO(PTy(CTy"Interrupt",CTy"Privilege"))),
3593                      qVar"state"]),
3594                  (LC("Hypervisor",CTy"Privilege"),
3595                   TP[ITB([(Bop(And,Dest("HTIP",bTy,Var("v",CTy"mip")),
3596                                Dest("HTIE",bTy,Var("v0",CTy"mie"))),
3597                            Mop(Some,
3598                                TP[LC("Timer",CTy"Interrupt"),
3599                                   Var("curPriv",CTy"Privilege")])),
3600                           (Bop(And,Dest("HSIP",bTy,Var("v",CTy"mip")),
3601                                Dest("HSIE",bTy,Var("v0",CTy"mie"))),
3602                            Mop(Some,
3603                                TP[LC("Software",CTy"Interrupt"),
3604                                   Var("curPriv",CTy"Privilege")]))],
3605                          LO(PTy(CTy"Interrupt",CTy"Privilege"))),
3606                      qVar"state"]),
3607                  (LC("Machine",CTy"Privilege"),
3608                   TP[ITB([(Bop(And,Dest("MTIP",bTy,Var("v",CTy"mip")),
3609                                Dest("MTIE",bTy,Var("v0",CTy"mie"))),
3610                            Mop(Some,
3611                                TP[LC("Timer",CTy"Interrupt"),
3612                                   Var("curPriv",CTy"Privilege")])),
3613                           (Bop(And,Dest("MSIP",bTy,Var("v",CTy"mip")),
3614                                Dest("MSIE",bTy,Var("v0",CTy"mie"))),
3615                            Mop(Some,
3616                                TP[LC("Software",CTy"Interrupt"),
3617                                   Var("curPriv",CTy"Privilege")]))],
3618                          LO(PTy(CTy"Interrupt",CTy"Privilege"))),
3619                      qVar"state"])])))))
3620;
3621val checkInterrupts_def = Def
3622  ("checkInterrupts",AVar uTy,
3623   Close
3624     (qVar"state",
3625      Let(bVar"v",
3626          Dest
3627            ("MIE",bTy,
3628             Dest
3629               ("mstatus",CTy"mstatus",
3630                Apply(Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"state"))),
3631          Let(Var("v0",CTy"Privilege"),
3632              Apply
3633                (Call("curPrivilege",ATy(qTy,CTy"Privilege"),LU),
3634                 qVar"state"),
3635              CS(Var("v0",CTy"Privilege"),
3636                 [(LC("User",CTy"Privilege"),
3637                   Let(TP[Var("v1",OTy(PTy(CTy"Interrupt",CTy"Privilege"))),
3638                          qVar"s"],
3639                       Apply
3640                         (Call
3641                            ("checkPrivInterrupt",
3642                             ATy(qTy,
3643                                 PTy(OTy(PTy(CTy"Interrupt",CTy"Privilege")),
3644                                     qTy)),LC("Machine",CTy"Privilege")),
3645                          qVar"state"),
3646                       CS(Var("v1",OTy(PTy(CTy"Interrupt",CTy"Privilege"))),
3647                          [(LO(PTy(CTy"Interrupt",CTy"Privilege")),
3648                            Let(TP[Var("v1",
3649                                       OTy(PTy(CTy"Interrupt",
3650                                               CTy"Privilege"))),qVar"s"],
3651                                Apply
3652                                  (Call
3653                                     ("checkPrivInterrupt",
3654                                      ATy(qTy,
3655                                          PTy(OTy(PTy(CTy"Interrupt",
3656                                                      CTy"Privilege")),qTy)),
3657                                      LC("Hypervisor",CTy"Privilege")),
3658                                   qVar"s"),
3659                                CS(Var("v1",
3660                                       OTy(PTy(CTy"Interrupt",
3661                                               CTy"Privilege"))),
3662                                   [(LO(PTy(CTy"Interrupt",CTy"Privilege")),
3663                                     ITE(Bop(Or,
3664                                             EQ(Var("v0",CTy"Privilege"),
3665                                                LC("User",CTy"Privilege")),
3666                                             bVar"v"),
3667                                         Apply
3668                                           (Call
3669                                              ("checkPrivInterrupt",
3670                                               ATy(qTy,
3671                                                   PTy(OTy(PTy(CTy"Interrupt",
3672                                                               CTy"Privilege")),
3673                                                       qTy)),
3674                                               LC("Supervisor",
3675                                                  CTy"Privilege")),qVar"s"),
3676                                         TP[LO(PTy(CTy"Interrupt",
3677                                                   CTy"Privilege")),
3678                                            qVar"s"])),
3679                                    (Var("i",
3680                                         OTy(PTy(CTy"Interrupt",
3681                                                 CTy"Privilege"))),
3682                                     TP[Var("i",
3683                                            OTy(PTy(CTy"Interrupt",
3684                                                    CTy"Privilege"))),
3685                                        qVar"s"])]))),
3686                           (Var("i",
3687                                OTy(PTy(CTy"Interrupt",CTy"Privilege"))),
3688                            TP[Var("i",
3689                                   OTy(PTy(CTy"Interrupt",CTy"Privilege"))),
3690                               qVar"s"])]))),
3691                  (LC("Supervisor",CTy"Privilege"),
3692                   Let(TP[Var("v1",OTy(PTy(CTy"Interrupt",CTy"Privilege"))),
3693                          qVar"s"],
3694                       Apply
3695                         (Call
3696                            ("checkPrivInterrupt",
3697                             ATy(qTy,
3698                                 PTy(OTy(PTy(CTy"Interrupt",CTy"Privilege")),
3699                                     qTy)),LC("Machine",CTy"Privilege")),
3700                          qVar"state"),
3701                       CS(Var("v1",OTy(PTy(CTy"Interrupt",CTy"Privilege"))),
3702                          [(LO(PTy(CTy"Interrupt",CTy"Privilege")),
3703                            Let(TP[Var("v1",
3704                                       OTy(PTy(CTy"Interrupt",
3705                                               CTy"Privilege"))),qVar"s"],
3706                                Apply
3707                                  (Call
3708                                     ("checkPrivInterrupt",
3709                                      ATy(qTy,
3710                                          PTy(OTy(PTy(CTy"Interrupt",
3711                                                      CTy"Privilege")),qTy)),
3712                                      LC("Hypervisor",CTy"Privilege")),
3713                                   qVar"s"),
3714                                CS(Var("v1",
3715                                       OTy(PTy(CTy"Interrupt",
3716                                               CTy"Privilege"))),
3717                                   [(LO(PTy(CTy"Interrupt",CTy"Privilege")),
3718                                     ITE(Bop(Or,
3719                                             EQ(Var("v0",CTy"Privilege"),
3720                                                LC("User",CTy"Privilege")),
3721                                             bVar"v"),
3722                                         Apply
3723                                           (Call
3724                                              ("checkPrivInterrupt",
3725                                               ATy(qTy,
3726                                                   PTy(OTy(PTy(CTy"Interrupt",
3727                                                               CTy"Privilege")),
3728                                                       qTy)),
3729                                               LC("Supervisor",
3730                                                  CTy"Privilege")),qVar"s"),
3731                                         TP[LO(PTy(CTy"Interrupt",
3732                                                   CTy"Privilege")),
3733                                            qVar"s"])),
3734                                    (Var("i",
3735                                         OTy(PTy(CTy"Interrupt",
3736                                                 CTy"Privilege"))),
3737                                     TP[Var("i",
3738                                            OTy(PTy(CTy"Interrupt",
3739                                                    CTy"Privilege"))),
3740                                        qVar"s"])]))),
3741                           (Var("i",
3742                                OTy(PTy(CTy"Interrupt",CTy"Privilege"))),
3743                            TP[Var("i",
3744                                   OTy(PTy(CTy"Interrupt",CTy"Privilege"))),
3745                               qVar"s"])]))),
3746                  (LC("Hypervisor",CTy"Privilege"),
3747                   Let(TP[Var("v0",OTy(PTy(CTy"Interrupt",CTy"Privilege"))),
3748                          qVar"s"],
3749                       Apply
3750                         (Call
3751                            ("checkPrivInterrupt",
3752                             ATy(qTy,
3753                                 PTy(OTy(PTy(CTy"Interrupt",CTy"Privilege")),
3754                                     qTy)),LC("Machine",CTy"Privilege")),
3755                          qVar"state"),
3756                       CS(Var("v0",OTy(PTy(CTy"Interrupt",CTy"Privilege"))),
3757                          [(LO(PTy(CTy"Interrupt",CTy"Privilege")),
3758                            ITE(bVar"v",
3759                                Apply
3760                                  (Call
3761                                     ("checkPrivInterrupt",
3762                                      ATy(qTy,
3763                                          PTy(OTy(PTy(CTy"Interrupt",
3764                                                      CTy"Privilege")),qTy)),
3765                                      LC("Hypervisor",CTy"Privilege")),
3766                                   qVar"s"),
3767                                TP[LO(PTy(CTy"Interrupt",CTy"Privilege")),
3768                                   qVar"s"])),
3769                           (Var("i",
3770                                OTy(PTy(CTy"Interrupt",CTy"Privilege"))),
3771                            TP[Var("i",
3772                                   OTy(PTy(CTy"Interrupt",CTy"Privilege"))),
3773                               qVar"s"])]))),
3774                  (LC("Machine",CTy"Privilege"),
3775                   ITE(bVar"v",
3776                       Apply
3777                         (Call
3778                            ("checkPrivInterrupt",
3779                             ATy(qTy,
3780                                 PTy(OTy(PTy(CTy"Interrupt",CTy"Privilege")),
3781                                     qTy)),LC("Machine",CTy"Privilege")),
3782                          qVar"state"),
3783                       TP[LO(PTy(CTy"Interrupt",CTy"Privilege")),
3784                          qVar"state"]))])))))
3785;
3786val takeTrap_def = Def
3787  ("takeTrap",
3788   TP[bVar"intr",Var("ec",F4),Var("epc",F64),Var("badaddr",OTy F64),
3789      Var("toPriv",CTy"Privilege")],
3790   Close
3791     (qVar"state",
3792      Let(TP[Var("v0",CTy"MachineCSR"),qVar"s"],
3793          Let(qVar"s0",
3794              Apply
3795                (Call("write'ReserveLoad",ATy(qTy,qTy),LO F64),qVar"state"),
3796              TP[Apply(Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"s0"),
3797                 qVar"s0"]),
3798          Let(TP[Var("v0",CTy"MachineCSR"),qVar"s"],
3799              Let(qVar"s0",
3800                  Apply
3801                    (Call
3802                       ("write'MCSR",ATy(qTy,qTy),
3803                        Rupd
3804                          ("mstatus",
3805                           TP[Var("v0",CTy"MachineCSR"),
3806                              Rupd
3807                                ("MMPRV",
3808                                 TP[Dest
3809                                      ("mstatus",CTy"mstatus",
3810                                       Var("v0",CTy"MachineCSR")),LF])])),
3811                     qVar"s"),
3812                  TP[Apply
3813                       (Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"s0"),
3814                     qVar"s0"]),
3815              Let(qVar"s",
3816                  Apply
3817                    (Call
3818                       ("write'MCSR",ATy(qTy,qTy),
3819                        Rupd
3820                          ("mstatus",
3821                           TP[Var("v0",CTy"MachineCSR"),
3822                              Call
3823                                ("pushPrivilegeStack",CTy"mstatus",
3824                                 TP[Dest
3825                                      ("mstatus",CTy"mstatus",
3826                                       Apply
3827                                         (Const
3828                                            ("MCSR",
3829                                             ATy(qTy,CTy"MachineCSR")),
3830                                          qVar"s")),
3831                                    Var("toPriv",CTy"Privilege")])])),
3832                     qVar"s"),
3833                  CS(Var("toPriv",CTy"Privilege"),
3834                     [(LC("User",CTy"Privilege"),
3835                       Mop(Snd,
3836                           Apply
3837                             (Call
3838                                ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
3839                                 Call
3840                                   ("INTERNAL_ERROR",CTy"exception",
3841                                    LS"Illegal trap to U-mode")),qVar"s"))),
3842                      (LC("Supervisor",CTy"Privilege"),
3843                       Let(Var("v",CTy"SupervisorCSR"),
3844                           Apply
3845                             (Const("SCSR",ATy(qTy,CTy"SupervisorCSR")),
3846                              qVar"s"),
3847                           Let(TP[Var("v",CTy"SupervisorCSR"),qVar"s"],
3848                               Let(qVar"s0",
3849                                   Apply
3850                                     (Call
3851                                        ("write'SCSR",ATy(qTy,qTy),
3852                                         Rupd
3853                                           ("scause",
3854                                            TP[Var("v",CTy"SupervisorCSR"),
3855                                               Rupd
3856                                                 ("Int",
3857                                                  TP[Dest
3858                                                       ("scause",
3859                                                        CTy"mcause",
3860                                                        Var("v",
3861                                                            CTy"SupervisorCSR")),
3862                                                     bVar"intr"])])),
3863                                      qVar"s"),
3864                                   TP[Apply
3865                                        (Const
3866                                           ("SCSR",
3867                                            ATy(qTy,CTy"SupervisorCSR")),
3868                                         qVar"s0"),qVar"s0"]),
3869                               Let(TP[Var("v",CTy"SupervisorCSR"),qVar"s"],
3870                                   Let(qVar"s0",
3871                                       Apply
3872                                         (Call
3873                                            ("write'SCSR",ATy(qTy,qTy),
3874                                             Rupd
3875                                               ("scause",
3876                                                TP[Var("v",
3877                                                       CTy"SupervisorCSR"),
3878                                                   Rupd
3879                                                     ("EC",
3880                                                      TP[Dest
3881                                                           ("scause",
3882                                                            CTy"mcause",
3883                                                            Var("v",
3884                                                                CTy"SupervisorCSR")),
3885                                                         Var("ec",F4)])])),
3886                                          qVar"s"),
3887                                       TP[Apply
3888                                            (Const
3889                                               ("SCSR",
3890                                                ATy(qTy,CTy"SupervisorCSR")),
3891                                             qVar"s0"),qVar"s0"]),
3892                                   Let(qVar"s",
3893                                       Apply
3894                                         (Call
3895                                            ("write'SCSR",ATy(qTy,qTy),
3896                                             Rupd
3897                                               ("sepc",
3898                                                TP[Var("v",
3899                                                       CTy"SupervisorCSR"),
3900                                                   Var("epc",F64)])),
3901                                          qVar"s"),
3902                                       Let(TP[Var("v",CTy"SupervisorCSR"),
3903                                              qVar"s"],
3904                                           Let(qVar"s0",
3905                                               ITE(Mop(IsSome,
3906                                                       Var("badaddr",
3907                                                           OTy F64)),
3908                                                   Apply
3909                                                     (Call
3910                                                        ("write'SCSR",
3911                                                         ATy(qTy,qTy),
3912                                                         Rupd
3913                                                           ("sbadaddr",
3914                                                            TP[Apply
3915                                                                 (Const
3916                                                                    ("SCSR",
3917                                                                     ATy(qTy,
3918                                                                         CTy"SupervisorCSR")),
3919                                                                  qVar"s"),
3920                                                               Mop(ValOf,
3921                                                                   Var("badaddr",
3922                                                                       OTy F64))])),
3923                                                      qVar"s"),qVar"s"),
3924                                               TP[Apply
3925                                                    (Const
3926                                                       ("SCSR",
3927                                                        ATy(qTy,
3928                                                            CTy"SupervisorCSR")),
3929                                                     qVar"s0"),qVar"s0"]),
3930                                           Apply
3931                                             (Call
3932                                                ("write'PC",ATy(qTy,qTy),
3933                                                 Dest
3934                                                   ("stvec",F64,
3935                                                    Var("v",
3936                                                        CTy"SupervisorCSR"))),
3937                                              qVar"s"))))))),
3938                      (LC("Hypervisor",CTy"Privilege"),
3939                       Mop(Snd,
3940                           Apply
3941                             (Call
3942                                ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
3943                                 Call
3944                                   ("INTERNAL_ERROR",CTy"exception",
3945                                    LS"Unsupported trap to H-mode")),
3946                              qVar"s"))),
3947                      (LC("Machine",CTy"Privilege"),
3948                       Let(Var("v0",CTy"MachineCSR"),
3949                           Apply
3950                             (Const("MCSR",ATy(qTy,CTy"MachineCSR")),
3951                              qVar"s"),
3952                           Let(TP[Var("v0",CTy"MachineCSR"),qVar"s"],
3953                               Let(qVar"s0",
3954                                   Apply
3955                                     (Call
3956                                        ("write'MCSR",ATy(qTy,qTy),
3957                                         Rupd
3958                                           ("mcause",
3959                                            TP[Var("v0",CTy"MachineCSR"),
3960                                               Rupd
3961                                                 ("Int",
3962                                                  TP[Dest
3963                                                       ("mcause",
3964                                                        CTy"mcause",
3965                                                        Var("v0",
3966                                                            CTy"MachineCSR")),
3967                                                     bVar"intr"])])),
3968                                      qVar"s"),
3969                                   TP[Apply
3970                                        (Const
3971                                           ("MCSR",
3972                                            ATy(qTy,CTy"MachineCSR")),
3973                                         qVar"s0"),qVar"s0"]),
3974                               Let(TP[Var("v0",CTy"MachineCSR"),qVar"s"],
3975                                   Let(qVar"s0",
3976                                       Apply
3977                                         (Call
3978                                            ("write'MCSR",ATy(qTy,qTy),
3979                                             Rupd
3980                                               ("mcause",
3981                                                TP[Var("v0",
3982                                                       CTy"MachineCSR"),
3983                                                   Rupd
3984                                                     ("EC",
3985                                                      TP[Dest
3986                                                           ("mcause",
3987                                                            CTy"mcause",
3988                                                            Var("v0",
3989                                                                CTy"MachineCSR")),
3990                                                         Var("ec",F4)])])),
3991                                          qVar"s"),
3992                                       TP[Apply
3993                                            (Const
3994                                               ("MCSR",
3995                                                ATy(qTy,CTy"MachineCSR")),
3996                                             qVar"s0"),qVar"s0"]),
3997                                   Let(qVar"s",
3998                                       Apply
3999                                         (Call
4000                                            ("write'MCSR",ATy(qTy,qTy),
4001                                             Rupd
4002                                               ("mepc",
4003                                                TP[Var("v0",
4004                                                       CTy"MachineCSR"),
4005                                                   Var("epc",F64)])),
4006                                          qVar"s"),
4007                                       Let(TP[Var("v0",CTy"MachineCSR"),
4008                                              qVar"s"],
4009                                           Let(qVar"s0",
4010                                               ITE(Mop(IsSome,
4011                                                       Var("badaddr",
4012                                                           OTy F64)),
4013                                                   Apply
4014                                                     (Call
4015                                                        ("write'MCSR",
4016                                                         ATy(qTy,qTy),
4017                                                         Rupd
4018                                                           ("mbadaddr",
4019                                                            TP[Apply
4020                                                                 (Const
4021                                                                    ("MCSR",
4022                                                                     ATy(qTy,
4023                                                                         CTy"MachineCSR")),
4024                                                                  qVar"s"),
4025                                                               Mop(ValOf,
4026                                                                   Var("badaddr",
4027                                                                       OTy F64))])),
4028                                                      qVar"s"),qVar"s"),
4029                                               TP[Apply
4030                                                    (Const
4031                                                       ("MCSR",
4032                                                        ATy(qTy,
4033                                                            CTy"MachineCSR")),
4034                                                     qVar"s0"),qVar"s0"]),
4035                                           Apply
4036                                             (Call
4037                                                ("write'PC",ATy(qTy,qTy),
4038                                                 Bop(Add,
4039                                                     Dest
4040                                                       ("mtvec",F64,
4041                                                        Var("v0",
4042                                                            CTy"MachineCSR")),
4043                                                     Bop(Mul,
4044                                                         Mop(Cast F64,
4045                                                             Call
4046                                                               ("privLevel",
4047                                                                FTy 2,
4048                                                                Apply
4049                                                                  (Call
4050                                                                     ("curPrivilege",
4051                                                                      ATy(qTy,
4052                                                                          CTy"Privilege"),
4053                                                                      LU),
4054                                                                   qVar"state"))),
4055                                                         LW(64,64)))),
4056                                              qVar"s")))))))]))))))
4057;
4058val CSR_def = Def
4059  ("CSR",Var("n",FTy 12),
4060   Close
4061     (qVar"state",
4062      Apply
4063        (Call("CSRMap",ATy(qTy,PTy(F64,qTy)),Var("n",FTy 12)),qVar"state")))
4064;
4065val write'CSR_def = Def
4066  ("write'CSR",TP[Var("value",F64),Var("n",FTy 12)],
4067   Close
4068     (qVar"state",
4069      Apply
4070        (Call
4071           ("write'CSRMap",ATy(qTy,qTy),
4072            TP[Var("value",F64),Var("n",FTy 12)]),qVar"state")))
4073;
4074val writeCSR_def = Def
4075  ("writeCSR",TP[Var("csr",FTy 12),Var("val",F64)],
4076   Close
4077     (qVar"state",
4078      Let(TP[Var("v",CTy"StateDelta"),qVar"s"],
4079          Let(qVar"s",
4080              Apply
4081                (Call
4082                   ("write'CSR",ATy(qTy,qTy),
4083                    TP[Var("val",F64),Var("csr",FTy 12)]),qVar"state"),
4084              TP[Apply(Const("Delta",ATy(qTy,CTy"StateDelta")),qVar"s"),
4085                 qVar"s"]),
4086          Let(TP[Var("v",CTy"StateDelta"),qVar"s"],
4087              Let(qVar"s0",
4088                  Apply
4089                    (Call
4090                       ("write'Delta",ATy(qTy,qTy),
4091                        Rupd
4092                          ("addr",
4093                           TP[Var("v",CTy"StateDelta"),
4094                              Mop(Some,Mop(Cast F64,Var("csr",FTy 12)))])),
4095                     qVar"s"),
4096                  TP[Apply
4097                       (Const("Delta",ATy(qTy,CTy"StateDelta")),qVar"s0"),
4098                     qVar"s0"]),
4099              Let(TP[Var("v0",F64),qVar"s"],
4100                  Apply
4101                    (Call("CSR",ATy(qTy,PTy(F64,qTy)),Var("csr",FTy 12)),
4102                     qVar"s"),
4103                  Apply
4104                    (Call
4105                       ("write'Delta",ATy(qTy,qTy),
4106                        Rupd
4107                          ("data2",
4108                           TP[Var("v",CTy"StateDelta"),
4109                              Mop(Some,Var("v0",F64))])),qVar"s"))))))
4110;
4111val GPR_def = Def
4112  ("GPR",Var("n",FTy 5),
4113   Close
4114     (qVar"state",
4115      ITE(EQ(Var("n",FTy 5),LW(0,5)),LW(0,64),
4116          Apply(Call("gpr",ATy(qTy,F64),Var("n",FTy 5)),qVar"state"))))
4117;
4118val write'GPR_def = Def
4119  ("write'GPR",TP[Var("value",F64),Var("n",FTy 5)],
4120   Close
4121     (qVar"state",
4122      ITE(Mop(Not,EQ(Var("n",FTy 5),LW(0,5))),
4123          Apply
4124            (Call
4125               ("write'gpr",ATy(qTy,qTy),
4126                TP[Var("value",F64),Var("n",FTy 5)]),qVar"state"),
4127          qVar"state")))
4128;
4129val FPRS_def = Def
4130  ("FPRS",Var("n",FTy 5),
4131   Close
4132     (qVar"state",
4133      EX(Apply(Call("fpr",ATy(qTy,F64),Var("n",FTy 5)),qVar"state"),LN 31,
4134         LN 0,F32)))
4135;
4136val write'FPRS_def = Def
4137  ("write'FPRS",TP[Var("value",F32),Var("n",FTy 5)],
4138   Close
4139     (qVar"state",
4140      Apply
4141        (Call
4142           ("write'fpr",ATy(qTy,qTy),
4143            TP[BFI(LN 31,LN 0,Var("value",F32),
4144                   Apply
4145                     (Call("fpr",ATy(qTy,F64),Var("n",FTy 5)),qVar"state")),
4146               Var("n",FTy 5)]),qVar"state")))
4147;
4148val FPRD_def = Def
4149  ("FPRD",Var("n",FTy 5),
4150   Close
4151     (qVar"state",
4152      Apply(Call("fpr",ATy(qTy,F64),Var("n",FTy 5)),qVar"state")))
4153;
4154val write'FPRD_def = Def
4155  ("write'FPRD",TP[Var("value",F64),Var("n",FTy 5)],
4156   Close
4157     (qVar"state",
4158      Apply
4159        (Call
4160           ("write'fpr",ATy(qTy,qTy),TP[Var("value",F64),Var("n",FTy 5)]),
4161         qVar"state")))
4162;
4163val writeFPRS_def = Def
4164  ("writeFPRS",TP[Var("rd",FTy 5),Var("val",F32)],
4165   Close
4166     (qVar"state",
4167      Let(TP[Var("v",CTy"MachineCSR"),qVar"s"],
4168          Let(qVar"s",
4169              Apply
4170                (Call
4171                   ("write'FPRS",ATy(qTy,qTy),
4172                    TP[Var("val",F32),Var("rd",FTy 5)]),qVar"state"),
4173              TP[Apply(Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"s"),
4174                 qVar"s"]),
4175          Let(TP[Var("v",CTy"MachineCSR"),qVar"s"],
4176              Let(qVar"s0",
4177                  Apply
4178                    (Call
4179                       ("write'MCSR",ATy(qTy,qTy),
4180                        Rupd
4181                          ("mstatus",
4182                           TP[Var("v",CTy"MachineCSR"),
4183                              Rupd
4184                                ("MFS",
4185                                 TP[Dest
4186                                      ("mstatus",CTy"mstatus",
4187                                       Var("v",CTy"MachineCSR")),
4188                                    Call
4189                                      ("ext_status",FTy 2,
4190                                       LC("Dirty",CTy"ExtStatus"))])])),
4191                     qVar"s"),
4192                  TP[Apply
4193                       (Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"s0"),
4194                     qVar"s0"]),
4195              Let(TP[Var("v",CTy"StateDelta"),qVar"s"],
4196                  Let(qVar"s0",
4197                      Apply
4198                        (Call
4199                           ("write'MCSR",ATy(qTy,qTy),
4200                            Rupd
4201                              ("mstatus",
4202                               TP[Var("v",CTy"MachineCSR"),
4203                                  Rupd
4204                                    ("MSD",
4205                                     TP[Dest
4206                                          ("mstatus",CTy"mstatus",
4207                                           Var("v",CTy"MachineCSR")),LT])])),
4208                         qVar"s"),
4209                      TP[Apply
4210                           (Const("Delta",ATy(qTy,CTy"StateDelta")),
4211                            qVar"s0"),qVar"s0"]),
4212                  Apply
4213                    (Call
4214                       ("write'Delta",ATy(qTy,qTy),
4215                        Rupd
4216                          ("data1",
4217                           TP[Var("v",CTy"StateDelta"),
4218                              Mop(Some,Mop(Cast F64,Var("val",F32)))])),
4219                     qVar"s"))))))
4220;
4221val writeFPRD_def = Def
4222  ("writeFPRD",TP[Var("rd",FTy 5),Var("val",F64)],
4223   Close
4224     (qVar"state",
4225      Let(TP[Var("v",CTy"MachineCSR"),qVar"s"],
4226          Let(qVar"s",
4227              Apply
4228                (Call
4229                   ("write'FPRD",ATy(qTy,qTy),
4230                    TP[Var("val",F64),Var("rd",FTy 5)]),qVar"state"),
4231              TP[Apply(Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"s"),
4232                 qVar"s"]),
4233          Let(TP[Var("v",CTy"MachineCSR"),qVar"s"],
4234              Let(qVar"s0",
4235                  Apply
4236                    (Call
4237                       ("write'MCSR",ATy(qTy,qTy),
4238                        Rupd
4239                          ("mstatus",
4240                           TP[Var("v",CTy"MachineCSR"),
4241                              Rupd
4242                                ("MFS",
4243                                 TP[Dest
4244                                      ("mstatus",CTy"mstatus",
4245                                       Var("v",CTy"MachineCSR")),
4246                                    Call
4247                                      ("ext_status",FTy 2,
4248                                       LC("Dirty",CTy"ExtStatus"))])])),
4249                     qVar"s"),
4250                  TP[Apply
4251                       (Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"s0"),
4252                     qVar"s0"]),
4253              Let(TP[Var("v",CTy"StateDelta"),qVar"s"],
4254                  Let(qVar"s0",
4255                      Apply
4256                        (Call
4257                           ("write'MCSR",ATy(qTy,qTy),
4258                            Rupd
4259                              ("mstatus",
4260                               TP[Var("v",CTy"MachineCSR"),
4261                                  Rupd
4262                                    ("MSD",
4263                                     TP[Dest
4264                                          ("mstatus",CTy"mstatus",
4265                                           Var("v",CTy"MachineCSR")),LT])])),
4266                         qVar"s"),
4267                      TP[Apply
4268                           (Const("Delta",ATy(qTy,CTy"StateDelta")),
4269                            qVar"s0"),qVar"s0"]),
4270                  Apply
4271                    (Call
4272                       ("write'Delta",ATy(qTy,qTy),
4273                        Rupd
4274                          ("data1",
4275                           TP[Var("v",CTy"StateDelta"),
4276                              Mop(Some,Var("val",F64))])),qVar"s"))))))
4277;
4278val MEM_def = Def
4279  ("MEM",Var("a",FTy 61),
4280   Close
4281     (qVar"state",
4282      Let(Var("b",F64),Bop(Lsl,Mop(Cast F64,Var("a",FTy 61)),LN 3),
4283          CC[Apply
4284               (Dest("MEM8",ATy(F64,F8),qVar"state"),
4285                Bop(Add,Var("b",F64),LW(7,64))),
4286             Apply
4287               (Dest("MEM8",ATy(F64,F8),qVar"state"),
4288                Bop(Add,Var("b",F64),LW(6,64))),
4289             Apply
4290               (Dest("MEM8",ATy(F64,F8),qVar"state"),
4291                Bop(Add,Var("b",F64),LW(5,64))),
4292             Apply
4293               (Dest("MEM8",ATy(F64,F8),qVar"state"),
4294                Bop(Add,Var("b",F64),LW(4,64))),
4295             Apply
4296               (Dest("MEM8",ATy(F64,F8),qVar"state"),
4297                Bop(Add,Var("b",F64),LW(3,64))),
4298             Apply
4299               (Dest("MEM8",ATy(F64,F8),qVar"state"),
4300                Bop(Add,Var("b",F64),LW(2,64))),
4301             Apply
4302               (Dest("MEM8",ATy(F64,F8),qVar"state"),
4303                Bop(Add,Var("b",F64),LW(1,64))),
4304             Apply(Dest("MEM8",ATy(F64,F8),qVar"state"),Var("b",F64))])))
4305;
4306val write'MEM_def = Def
4307  ("write'MEM",TP[Var("val",F64),Var("a",FTy 61)],
4308   Close
4309     (qVar"state",
4310      Let(Var("b",F64),Bop(Lsl,Mop(Cast F64,Var("a",FTy 61)),LN 3),
4311          Let(qVar"s",
4312              Rupd
4313                ("MEM8",
4314                 TP[qVar"state",
4315                    Fupd
4316                      (Dest("MEM8",ATy(F64,F8),qVar"state"),
4317                       Bop(Add,Var("b",F64),LW(7,64)),
4318                       EX(Var("val",F64),LN 63,LN 56,F8))]),
4319              Let(qVar"s",
4320                  Rupd
4321                    ("MEM8",
4322                     TP[qVar"s",
4323                        Fupd
4324                          (Dest("MEM8",ATy(F64,F8),qVar"s"),
4325                           Bop(Add,Var("b",F64),LW(6,64)),
4326                           EX(Var("val",F64),LN 55,LN 48,F8))]),
4327                  Let(qVar"s",
4328                      Rupd
4329                        ("MEM8",
4330                         TP[qVar"s",
4331                            Fupd
4332                              (Dest("MEM8",ATy(F64,F8),qVar"s"),
4333                               Bop(Add,Var("b",F64),LW(5,64)),
4334                               EX(Var("val",F64),LN 47,LN 40,F8))]),
4335                      Let(qVar"s",
4336                          Rupd
4337                            ("MEM8",
4338                             TP[qVar"s",
4339                                Fupd
4340                                  (Dest("MEM8",ATy(F64,F8),qVar"s"),
4341                                   Bop(Add,Var("b",F64),LW(4,64)),
4342                                   EX(Var("val",F64),LN 39,LN 32,F8))]),
4343                          Let(qVar"s",
4344                              Rupd
4345                                ("MEM8",
4346                                 TP[qVar"s",
4347                                    Fupd
4348                                      (Dest("MEM8",ATy(F64,F8),qVar"s"),
4349                                       Bop(Add,Var("b",F64),LW(3,64)),
4350                                       EX(Var("val",F64),LN 31,LN 24,F8))]),
4351                              Let(qVar"s",
4352                                  Rupd
4353                                    ("MEM8",
4354                                     TP[qVar"s",
4355                                        Fupd
4356                                          (Dest
4357                                             ("MEM8",ATy(F64,F8),qVar"s"),
4358                                           Bop(Add,Var("b",F64),LW(2,64)),
4359                                           EX(Var("val",F64),LN 23,LN 16,
4360                                              F8))]),
4361                                  Let(qVar"s",
4362                                      Rupd
4363                                        ("MEM8",
4364                                         TP[qVar"s",
4365                                            Fupd
4366                                              (Dest
4367                                                 ("MEM8",ATy(F64,F8),
4368                                                  qVar"s"),
4369                                               Bop(Add,Var("b",F64),
4370                                                   LW(1,64)),
4371                                               EX(Var("val",F64),LN 15,
4372                                                  LN 8,F8))]),
4373                                      Rupd
4374                                        ("MEM8",
4375                                         TP[qVar"s",
4376                                            Fupd
4377                                              (Dest
4378                                                 ("MEM8",ATy(F64,F8),
4379                                                  qVar"s"),Var("b",F64),
4380                                               EX(Var("val",F64),LN 7,
4381                                                  LN 0,F8))])))))))))))
4382;
4383val rawReadData_def = Def
4384  ("rawReadData",Var("pAddr",F64),
4385   Close
4386     (qVar"state",
4387      Let(Var("pAddrIdx",FTy 61),EX(Var("pAddr",F64),LN 63,LN 3,FTy 61),
4388          Let(nVar"align",
4389              Mop(Cast nTy,EX(Var("pAddr",F64),LN 2,LN 0,FTy 3)),
4390              ITE(EQ(nVar"align",LN 0),
4391                  Apply
4392                    (Call("MEM",ATy(qTy,F64),Var("pAddrIdx",FTy 61)),
4393                     qVar"state"),
4394                  EX(Bop(Asr,
4395                         CC[Apply
4396                              (Call
4397                                 ("MEM",ATy(qTy,F64),
4398                                  Bop(Add,Var("pAddrIdx",FTy 61),LW(1,61))),
4399                               qVar"state"),
4400                            Apply
4401                              (Call
4402                                 ("MEM",ATy(qTy,F64),
4403                                  Var("pAddrIdx",FTy 61)),qVar"state")],
4404                         Bop(Mul,nVar"align",LN 8)),LN 63,LN 0,F64))))))
4405;
4406val rawWriteData_def = Def
4407  ("rawWriteData",TP[Var("pAddr",F64),Var("data",F64),nVar"nbytes"],
4408   Close
4409     (qVar"state",
4410      Let(Var("mask",F64),
4411          Bop(Sub,
4412              Bop(Lsl,Mop(Cast F64,LW(1,1)),Bop(Mul,nVar"nbytes",LN 8)),
4413              LW(1,64)),
4414          Let(Var("pAddrIdx",FTy 61),
4415              EX(Var("pAddr",F64),LN 63,LN 3,FTy 61),
4416              Let(nVar"align",
4417                  Mop(Cast nTy,EX(Var("pAddr",F64),LN 2,LN 0,FTy 3)),
4418                  Let(Var("v",F64),
4419                      Apply
4420                        (Call("MEM",ATy(qTy,F64),Var("pAddrIdx",FTy 61)),
4421                         qVar"state"),
4422                      ITB([(EQ(nVar"align",LN 0),
4423                            Apply
4424                              (Call
4425                                 ("write'MEM",ATy(qTy,qTy),
4426                                  TP[Bop(BOr,
4427                                         Bop(BAnd,Var("v",F64),
4428                                             Mop(BNot,Var("mask",F64))),
4429                                         Bop(BAnd,Var("data",F64),
4430                                             Var("mask",F64))),
4431                                     Var("pAddrIdx",FTy 61)]),qVar"state")),
4432                           (Bop(Le,Bop(Add,nVar"align",nVar"nbytes"),
4433                                Bop(Div,Mop(Size,Var("mask",F64)),LN 8)),
4434                            Apply
4435                              (Call
4436                                 ("write'MEM",ATy(qTy,qTy),
4437                                  TP[Bop(BOr,
4438                                         Bop(BAnd,Var("v",F64),
4439                                             Mop(BNot,
4440                                                 Bop(Lsl,Var("mask",F64),
4441                                                     Bop(Mul,nVar"align",
4442                                                         LN 8)))),
4443                                         Bop(Lsl,
4444                                             Bop(BAnd,Var("data",F64),
4445                                                 Var("mask",F64)),
4446                                             Bop(Mul,nVar"align",LN 8))),
4447                                     Var("pAddrIdx",FTy 61)]),qVar"state"))],
4448                          Let(Var("dw_mask",FTy 128),
4449                              Bop(Lsl,Mop(Cast(FTy 128),Var("mask",F64)),
4450                                  Bop(Mul,nVar"align",LN 8)),
4451                              Let(Var("dw_new",FTy 128),
4452                                  Bop(BOr,
4453                                      Bop(BAnd,
4454                                          CC[Apply
4455                                               (Call
4456                                                  ("MEM",ATy(qTy,F64),
4457                                                   Bop(Add,
4458                                                       Var("pAddrIdx",
4459                                                           FTy 61),
4460                                                       LW(1,61))),
4461                                                qVar"state"),Var("v",F64)],
4462                                          Mop(BNot,Var("dw_mask",FTy 128))),
4463                                      Bop(BAnd,
4464                                          Bop(Lsl,
4465                                              Mop(Cast(FTy 128),
4466                                                  Var("data",F64)),
4467                                              Bop(Mul,nVar"align",LN 8)),
4468                                          Var("dw_mask",FTy 128))),
4469                                  Apply
4470                                    (Call
4471                                       ("write'MEM",ATy(qTy,qTy),
4472                                        TP[EX(Var("dw_new",FTy 128),
4473                                              Bop(Sub,
4474                                                  Mop(Size,Var("data",F64)),
4475                                                  LN 1),LN 0,F64),
4476                                           Var("pAddrIdx",FTy 61)]),
4477                                     Apply
4478                                       (Call
4479                                          ("write'MEM",ATy(qTy,qTy),
4480                                           TP[EX(Var("dw_new",FTy 128),
4481                                                 Bop(Sub,
4482                                                     Bop(Mul,LN 2,
4483                                                         Mop(Size,
4484                                                             Var("data",
4485                                                                 F64))),
4486                                                     LN 1),
4487                                                 Mop(Size,Var("data",F64)),
4488                                                 F64),
4489                                              Bop(Add,
4490                                                  Var("pAddrIdx",FTy 61),
4491                                                  LW(1,61))]),qVar"state")))))))))))
4492;
4493val rawReadInst_def = Def
4494  ("rawReadInst",Var("pAddr",F64),
4495   Close
4496     (qVar"state",
4497      Let(Var("v",F64),
4498          Apply
4499            (Call
4500               ("MEM",ATy(qTy,F64),EX(Var("pAddr",F64),LN 63,LN 3,FTy 61)),
4501             qVar"state"),
4502          ITE(Bop(Bit,Var("pAddr",F64),LN 2),
4503              EX(Var("v",F64),LN 63,LN 32,F32),
4504              EX(Var("v",F64),LN 31,LN 0,F32)))))
4505;
4506val rawWriteMem_def = Def
4507  ("rawWriteMem",TP[Var("pAddr",F64),Var("data",F64)],
4508   Close
4509     (qVar"state",
4510      Apply
4511        (Call
4512           ("write'MEM",ATy(qTy,qTy),
4513            TP[Var("data",F64),EX(Var("pAddr",F64),LN 63,LN 3,FTy 61)]),
4514         qVar"state")))
4515;
4516val checkMemPermission_def = Def
4517  ("checkMemPermission",
4518   TP[Var("ft",CTy"fetchType"),Var("ac",CTy"accessType"),
4519      Var("priv",CTy"Privilege"),Var("perm",F4)],
4520   Close
4521     (qVar"state",
4522      CS(Var("perm",F4),
4523         [(LW(0,4),
4524           Apply
4525             (Call
4526                ("raise'exception",ATy(qTy,PTy(bTy,qTy)),
4527                 Call
4528                   ("INTERNAL_ERROR",CTy"exception",
4529                    LS"Checking perm on Page-Table pointer!")),qVar"state")),
4530          (LW(1,4),
4531           Apply
4532             (Call
4533                ("raise'exception",ATy(qTy,PTy(bTy,qTy)),
4534                 Call
4535                   ("INTERNAL_ERROR",CTy"exception",
4536                    LS"Checking perm on Page-Table pointer!")),qVar"state")),
4537          (LW(2,4),
4538           TP[ITE(EQ(Var("priv",CTy"Privilege"),LC("User",CTy"Privilege")),
4539                  Mop(Not,
4540                      EQ(Var("ac",CTy"accessType"),
4541                         LC("Write",CTy"accessType"))),
4542                  Bop(And,
4543                      EQ(Var("ac",CTy"accessType"),
4544                         LC("Read",CTy"accessType")),
4545                      EQ(Var("ft",CTy"fetchType"),
4546                         LC("Data",CTy"fetchType")))),qVar"state"]),
4547          (LW(3,4),
4548           TP[Bop(Or,
4549                  EQ(Var("priv",CTy"Privilege"),LC("User",CTy"Privilege")),
4550                  Mop(Not,
4551                      EQ(Var("ft",CTy"fetchType"),
4552                         LC("Instruction",CTy"fetchType")))),qVar"state"]),
4553          (LW(4,4),
4554           TP[Bop(And,
4555                  EQ(Var("ac",CTy"accessType"),LC("Read",CTy"accessType")),
4556                  EQ(Var("ft",CTy"fetchType"),LC("Data",CTy"fetchType"))),
4557              qVar"state"]),
4558          (LW(5,4),
4559           TP[Mop(Not,
4560                  EQ(Var("ft",CTy"fetchType"),
4561                     LC("Instruction",CTy"fetchType"))),qVar"state"]),
4562          (LW(6,4),
4563           TP[Mop(Not,
4564                  EQ(Var("ac",CTy"accessType"),LC("Write",CTy"accessType"))),
4565              qVar"state"]),(LW(7,4),TP[LT,qVar"state"]),
4566          (LW(8,4),
4567           TP[Bop(And,
4568                  Mop(Not,
4569                      EQ(Var("priv",CTy"Privilege"),
4570                         LC("User",CTy"Privilege"))),
4571                  Bop(And,
4572                      EQ(Var("ac",CTy"accessType"),
4573                         LC("Read",CTy"accessType")),
4574                      EQ(Var("ft",CTy"fetchType"),
4575                         LC("Data",CTy"fetchType")))),qVar"state"]),
4576          (LW(9,4),
4577           TP[Bop(And,
4578                  Mop(Not,
4579                      EQ(Var("priv",CTy"Privilege"),
4580                         LC("User",CTy"Privilege"))),
4581                  Mop(Not,
4582                      EQ(Var("ft",CTy"fetchType"),
4583                         LC("Instruction",CTy"fetchType")))),qVar"state"]),
4584          (LW(10,4),
4585           TP[Bop(And,
4586                  Mop(Not,
4587                      EQ(Var("priv",CTy"Privilege"),
4588                         LC("User",CTy"Privilege"))),
4589                  Mop(Not,
4590                      EQ(Var("ac",CTy"accessType"),
4591                         LC("Write",CTy"accessType")))),qVar"state"]),
4592          (LW(11,4),
4593           TP[Mop(Not,
4594                  EQ(Var("priv",CTy"Privilege"),LC("User",CTy"Privilege"))),
4595              qVar"state"]),
4596          (LW(12,4),
4597           TP[Bop(And,
4598                  Mop(Not,
4599                      EQ(Var("priv",CTy"Privilege"),
4600                         LC("User",CTy"Privilege"))),
4601                  Bop(And,
4602                      EQ(Var("ac",CTy"accessType"),
4603                         LC("Read",CTy"accessType")),
4604                      EQ(Var("ft",CTy"fetchType"),
4605                         LC("Data",CTy"fetchType")))),qVar"state"]),
4606          (LW(13,4),
4607           TP[Bop(And,
4608                  Mop(Not,
4609                      EQ(Var("priv",CTy"Privilege"),
4610                         LC("User",CTy"Privilege"))),
4611                  Mop(Not,
4612                      EQ(Var("ft",CTy"fetchType"),
4613                         LC("Instruction",CTy"fetchType")))),qVar"state"]),
4614          (LW(14,4),
4615           TP[Bop(And,
4616                  Mop(Not,
4617                      EQ(Var("priv",CTy"Privilege"),
4618                         LC("User",CTy"Privilege"))),
4619                  Mop(Not,
4620                      EQ(Var("ac",CTy"accessType"),
4621                         LC("Write",CTy"accessType")))),qVar"state"]),
4622          (LW(15,4),
4623           TP[Mop(Not,
4624                  EQ(Var("priv",CTy"Privilege"),LC("User",CTy"Privilege"))),
4625              qVar"state"])])))
4626;
4627val isGlobal_def = Def
4628  ("isGlobal",Var("perm",F4),
4629   EQ(EX(Var("perm",F4),LN 3,LN 2,FTy 2),LW(3,2)))
4630;
4631val rec'SV_PTE_def = Def
4632  ("rec'SV_PTE",Var("x",F64),
4633   Rec(CTy"SV_PTE",
4634       [Bop(Bit,Var("x",F64),LN 6),EX(Var("x",F64),LN 47,LN 10,FTy 38),
4635        Bop(Bit,Var("x",F64),LN 5),EX(Var("x",F64),LN 9,LN 7,FTy 3),
4636        EX(Var("x",F64),LN 4,LN 1,F4),Bop(Bit,Var("x",F64),LN 0),
4637        EX(Var("x",F64),LN 63,LN 48,F16)]))
4638;
4639val reg'SV_PTE_def = Def
4640  ("reg'SV_PTE",Var("x",CTy"SV_PTE"),
4641   CS(Var("x",CTy"SV_PTE"),
4642      [(Rec(CTy"SV_PTE",
4643            [bVar"PTE_D",Var("PTE_PPNi",FTy 38),bVar"PTE_R",
4644             Var("PTE_SW",FTy 3),Var("PTE_T",F4),bVar"PTE_V",
4645             Var("sv_pte'rst",F16)]),
4646        CC[Var("sv_pte'rst",F16),Var("PTE_PPNi",FTy 38),
4647           Var("PTE_SW",FTy 3),Mop(Cast F1,bVar"PTE_D"),
4648           Mop(Cast F1,bVar"PTE_R"),Var("PTE_T",F4),
4649           Mop(Cast F1,bVar"PTE_V")])]))
4650;
4651val write'rec'SV_PTE_def = Def
4652  ("write'rec'SV_PTE",TP[AVar F64,Var("x",CTy"SV_PTE")],
4653   Call("reg'SV_PTE",F64,Var("x",CTy"SV_PTE")))
4654;
4655val write'reg'SV_PTE_def = Def
4656  ("write'reg'SV_PTE",TP[AVar(CTy"SV_PTE"),Var("x",F64)],
4657   Call("rec'SV_PTE",CTy"SV_PTE",Var("x",F64)))
4658;
4659val rec'SV_Vaddr_def = Def
4660  ("rec'SV_Vaddr",Var("x",F64),
4661   Rec(CTy"SV_Vaddr",
4662       [EX(Var("x",F64),LN 11,LN 0,FTy 12),
4663        EX(Var("x",F64),LN 47,LN 12,FTy 36),
4664        EX(Var("x",F64),LN 63,LN 48,F16)]))
4665;
4666val reg'SV_Vaddr_def = Def
4667  ("reg'SV_Vaddr",Var("x",CTy"SV_Vaddr"),
4668   CS(Var("x",CTy"SV_Vaddr"),
4669      [(Rec(CTy"SV_Vaddr",
4670            [Var("Sv_PgOfs",FTy 12),Var("Sv_VPNi",FTy 36),
4671             Var("sv_vaddr'rst",F16)]),
4672        CC[Var("sv_vaddr'rst",F16),Var("Sv_VPNi",FTy 36),
4673           Var("Sv_PgOfs",FTy 12)])]))
4674;
4675val write'rec'SV_Vaddr_def = Def
4676  ("write'rec'SV_Vaddr",TP[AVar F64,Var("x",CTy"SV_Vaddr")],
4677   Call("reg'SV_Vaddr",F64,Var("x",CTy"SV_Vaddr")))
4678;
4679val write'reg'SV_Vaddr_def = Def
4680  ("write'reg'SV_Vaddr",TP[AVar(CTy"SV_Vaddr"),Var("x",F64)],
4681   Call("rec'SV_Vaddr",CTy"SV_Vaddr",Var("x",F64)))
4682;
4683val walk64_def = tDef
4684  ("walk64",
4685   TP[Var("vAddr",F64),Var("ft",CTy"fetchType"),Var("ac",CTy"accessType"),
4686      Var("priv",CTy"Privilege"),Var("ptb",F64),nVar"level"],
4687   Close
4688     (qVar"state",
4689      Let(Var("va",CTy"SV_Vaddr"),
4690          Call("rec'SV_Vaddr",CTy"SV_Vaddr",Var("vAddr",F64)),
4691          Let(Var("pte_addr",F64),
4692              Bop(Add,Var("ptb",F64),
4693                  Bop(Lsl,
4694                      Mop(Cast F64,
4695                          EX(Bop(Lsr,
4696                                 Dest
4697                                   ("Sv_VPNi",FTy 36,
4698                                    Var("va",CTy"SV_Vaddr")),
4699                                 Bop(Mul,nVar"level",
4700                                     Const("LEVEL_BITS",nTy))),
4701                             Bop(Sub,Const("LEVEL_BITS",nTy),LN 1),LN 0,
4702                             FTy 9)),LN 3)),
4703              Let(Var("v",CTy"SV_PTE"),
4704                  Call
4705                    ("rec'SV_PTE",CTy"SV_PTE",
4706                     Apply
4707                       (Call
4708                          ("rawReadData",ATy(qTy,F64),Var("pte_addr",F64)),
4709                        qVar"state")),
4710                  ITB([(Mop(Not,Dest("PTE_V",bTy,Var("v",CTy"SV_PTE"))),
4711                        TP[LO(PTy(F64,
4712                                  PTy(CTy"SV_PTE",PTy(nTy,PTy(bTy,F64))))),
4713                           qVar"state"]),
4714                       (Bop(Or,
4715                            EQ(Dest("PTE_T",F4,Var("v",CTy"SV_PTE")),
4716                               LW(0,4)),
4717                            EQ(Dest("PTE_T",F4,Var("v",CTy"SV_PTE")),
4718                               LW(1,4))),
4719                        ITE(EQ(nVar"level",LN 0),
4720                            TP[LO(PTy(F64,
4721                                      PTy(CTy"SV_PTE",
4722                                          PTy(nTy,PTy(bTy,F64))))),
4723                               qVar"state"],
4724                            Apply
4725                              (Call
4726                                 ("walk64",
4727                                  ATy(qTy,
4728                                      PTy(OTy(PTy(F64,
4729                                                  PTy(CTy"SV_PTE",
4730                                                      PTy(nTy,PTy(bTy,F64))))),
4731                                          qTy)),
4732                                  TP[Var("vAddr",F64),
4733                                     Var("ft",CTy"fetchType"),
4734                                     Var("ac",CTy"accessType"),
4735                                     Var("priv",CTy"Privilege"),
4736                                     Mop(Cast F64,
4737                                         Bop(Lsl,
4738                                             Dest
4739                                               ("PTE_PPNi",FTy 38,
4740                                                Var("v",CTy"SV_PTE")),
4741                                             Const("PAGESIZE_BITS",nTy))),
4742                                     Bop(Sub,nVar"level",LN 1)]),
4743                               qVar"state")))],
4744                      Let(TP[bVar"v0",qVar"s"],
4745                          Apply
4746                            (Call
4747                               ("checkMemPermission",
4748                                ATy(qTy,PTy(bTy,qTy)),
4749                                TP[Var("ft",CTy"fetchType"),
4750                                   Var("ac",CTy"accessType"),
4751                                   Var("priv",CTy"Privilege"),
4752                                   Dest("PTE_T",F4,Var("v",CTy"SV_PTE"))]),
4753                             qVar"state"),
4754                          ITE(Mop(Not,bVar"v0"),
4755                              TP[LO(PTy(F64,
4756                                        PTy(CTy"SV_PTE",
4757                                            PTy(nTy,PTy(bTy,F64))))),
4758                                 qVar"s"],
4759                              Let(TP[Var("r",
4760                                         OTy(PTy(F64,
4761                                                 PTy(CTy"SV_PTE",
4762                                                     PTy(nTy,PTy(bTy,F64)))))),
4763                                     Var("s1",PTy(CTy"SV_PTE",qTy))],
4764                                  Let(Var("s0",CTy"SV_PTE"),
4765                                      Rupd
4766                                        ("PTE_R",
4767                                         TP[Var("v",CTy"SV_PTE"),LT]),
4768                                      Let(Var("s0",CTy"SV_PTE"),
4769                                          ITE(EQ(Var("ac",CTy"accessType"),
4770                                                 LC("Write",
4771                                                    CTy"accessType")),
4772                                              Rupd
4773                                                ("PTE_D",
4774                                                 TP[Var("s0",CTy"SV_PTE"),
4775                                                    LT]),
4776                                              Var("s0",CTy"SV_PTE")),
4777                                          TP[Mop(Some,
4778                                                 TP[Mop(Cast F64,
4779                                                        CC[ITE(Bop(Gt,
4780                                                                   nVar"level",
4781                                                                   LN 0),
4782                                                               Bop(BOr,
4783                                                                   Mop(Cast
4784                                                                         (FTy 38),
4785                                                                       Bop(Lsl,
4786                                                                           Bop(Lsr,
4787                                                                               Dest
4788                                                                                 ("PTE_PPNi",
4789                                                                                  FTy 38,
4790                                                                                  Var("v",
4791                                                                                      CTy"SV_PTE")),
4792                                                                               Bop(Mul,
4793                                                                                   nVar"level",
4794                                                                                   Const
4795                                                                                     ("LEVEL_BITS",
4796                                                                                      nTy))),
4797                                                                           Bop(Mul,
4798                                                                               nVar"level",
4799                                                                               Const
4800                                                                                 ("LEVEL_BITS",
4801                                                                                  nTy)))),
4802                                                                   Mop(Cast
4803                                                                         (FTy 38),
4804                                                                       Bop(BAnd,
4805                                                                           Dest
4806                                                                             ("Sv_VPNi",
4807                                                                              FTy 36,
4808                                                                              Var("va",
4809                                                                                  CTy"SV_Vaddr")),
4810                                                                           Bop(Sub,
4811                                                                               Bop(Lsl,
4812                                                                                   LW(1,
4813                                                                                      36),
4814                                                                                   Bop(Mul,
4815                                                                                       nVar"level",
4816                                                                                       Const
4817                                                                                         ("LEVEL_BITS",
4818                                                                                          nTy))),
4819                                                                               LW(1,
4820                                                                                  36))))),
4821                                                               Dest
4822                                                                 ("PTE_PPNi",
4823                                                                  FTy 38,
4824                                                                  Var("v",
4825                                                                      CTy"SV_PTE"))),
4826                                                           Dest
4827                                                             ("Sv_PgOfs",
4828                                                              FTy 12,
4829                                                              Var("va",
4830                                                                  CTy"SV_Vaddr"))]),
4831                                                    Var("s0",CTy"SV_PTE"),
4832                                                    nVar"level",
4833                                                    Call
4834                                                      ("isGlobal",bTy,
4835                                                       Dest
4836                                                         ("PTE_T",F4,
4837                                                          Var("v",
4838                                                              CTy"SV_PTE"))),
4839                                                    Var("pte_addr",F64)]),
4840                                             Var("s0",CTy"SV_PTE"),
4841                                             ITE(Bop(Or,
4842                                                     Mop(Not,
4843                                                         EQ(Dest
4844                                                              ("PTE_R",
4845                                                               bTy,
4846                                                               Var("v",
4847                                                                   CTy"SV_PTE")),
4848                                                            Dest
4849                                                              ("PTE_R",
4850                                                               bTy,
4851                                                               Var("s0",
4852                                                                   CTy"SV_PTE")))),
4853                                                     Mop(Not,
4854                                                         EQ(Dest
4855                                                              ("PTE_D",
4856                                                               bTy,
4857                                                               Var("v",
4858                                                                   CTy"SV_PTE")),
4859                                                            Dest
4860                                                              ("PTE_D",
4861                                                               bTy,
4862                                                               Var("s0",
4863                                                                   CTy"SV_PTE"))))),
4864                                                 Apply
4865                                                   (Call
4866                                                      ("rawWriteData",
4867                                                       ATy(qTy,qTy),
4868                                                       TP[Var("pte_addr",
4869                                                              F64),
4870                                                          Call
4871                                                            ("reg'SV_PTE",
4872                                                             F64,
4873                                                             Var("s0",
4874                                                                 CTy"SV_PTE")),
4875                                                          LN 8]),qVar"s"),
4876                                                 qVar"s")])),
4877                                  TP[Var("r",
4878                                         OTy(PTy(F64,
4879                                                 PTy(CTy"SV_PTE",
4880                                                     PTy(nTy,PTy(bTy,F64)))))),
4881                                     Mop(Snd,
4882                                         Var("s1",PTy(CTy"SV_PTE",qTy)))])))))))),
4883   Close
4884     (Var("x",
4885          PTy(PTy(F64,
4886                  PTy(CTy"fetchType",
4887                      PTy(CTy"accessType",PTy(CTy"Privilege",PTy(F64,nTy))))),
4888              qTy)),
4889      CS(Var("x",
4890             PTy(PTy(F64,
4891                     PTy(CTy"fetchType",
4892                         PTy(CTy"accessType",
4893                             PTy(CTy"Privilege",PTy(F64,nTy))))),qTy)),
4894         [(TP[TP[Var("vAddr",F64),Var("ft",CTy"fetchType"),
4895                 Var("ac",CTy"accessType"),Var("priv",CTy"Privilege"),
4896                 Var("ptb",F64),nVar"level"],AVar qTy],nVar"level")])),
4897   NO_TAC)
4898;
4899val curASID_def = Def
4900  ("curASID",AVar uTy,
4901   Close
4902     (qVar"state",
4903      EX(Dest
4904           ("sasid",F64,
4905            Apply(Const("SCSR",ATy(qTy,CTy"SupervisorCSR")),qVar"state")),
4906         Bop(Sub,Const("ASID_SIZE",nTy),LN 1),LN 0,FTy 6)))
4907;
4908val mkTLBEntry_def = Def
4909  ("mkTLBEntry",
4910   TP[Var("asid",FTy 6),bVar"global",Var("vAddr",F64),Var("pAddr",F64),
4911      Var("pte",CTy"SV_PTE"),nVar"i",Var("pteAddr",F64)],
4912   Close
4913     (qVar"state",
4914      Let(Var("s0",CTy"TLBEntry"),
4915          Rupd
4916            ("vAddrMask",
4917             TP[Rupd
4918                  ("pteAddr",
4919                   TP[Rupd
4920                        ("pte",
4921                         TP[Rupd
4922                              ("global",
4923                               TP[Rupd
4924                                    ("asid",
4925                                     TP[LX(CTy"TLBEntry"),
4926                                        Var("asid",FTy 6)]),bVar"global"]),
4927                            Var("pte",CTy"SV_PTE")]),Var("pteAddr",F64)]),
4928                Bop(Sub,
4929                    Bop(Lsl,LW(1,64),
4930                        Bop(Add,Bop(Mul,Const("LEVEL_BITS",nTy),nVar"i"),
4931                            Const("PAGESIZE_BITS",nTy))),LW(1,64))]),
4932          Let(Var("s0",CTy"TLBEntry"),
4933              Rupd
4934                ("vMatchMask",
4935                 TP[Var("s0",CTy"TLBEntry"),
4936                    Bop(BXor,Mop(SE F64,LW(1,1)),
4937                        Dest("vAddrMask",F64,Var("s0",CTy"TLBEntry")))]),
4938              Rupd
4939                ("age",
4940                 TP[Rupd
4941                      ("pAddr",
4942                       TP[Rupd
4943                            ("vAddr",
4944                             TP[Var("s0",CTy"TLBEntry"),
4945                                Bop(BAnd,Var("vAddr",F64),
4946                                    Dest
4947                                      ("vMatchMask",F64,
4948                                       Var("s0",CTy"TLBEntry")))]),
4949                          Bop(Lsl,
4950                              Bop(Asr,Var("pAddr",F64),
4951                                  Bop(Add,Const("PAGESIZE_BITS",nTy),
4952                                      Bop(Mul,Const("LEVEL_BITS",nTy),
4953                                          nVar"i"))),
4954                              Bop(Add,Const("PAGESIZE_BITS",nTy),
4955                                  Bop(Mul,Const("LEVEL_BITS",nTy),nVar"i")))]),
4956                    Apply
4957                      (Dest("c_cycles",ATy(F8,F64),qVar"state"),
4958                       Dest("procID",F8,qVar"state"))])))))
4959;
4960val TLBEntries_def = Def0 ("TLBEntries",LN 16)
4961;
4962val lookupTLB_def = Def
4963  ("lookupTLB",
4964   TP[Var("asid",FTy 6),Var("vAddr",F64),
4965      Var("tlb",ATy(F4,OTy(CTy"TLBEntry")))],
4966   Mop(Fst,
4967       Mop(Snd,
4968           Apply
4969             (For(TP[LN 0,Bop(Sub,Const("TLBEntries",nTy),LN 1),
4970                     Close
4971                       (nVar"i",
4972                        Close
4973                          (Var("state",PTy(OTy(PTy(CTy"TLBEntry",F4)),uTy)),
4974                           CS(Apply
4975                                (Var("tlb",ATy(F4,OTy(CTy"TLBEntry"))),
4976                                 Mop(Cast F4,nVar"i")),
4977                              [(Mop(Some,Var("e",CTy"TLBEntry")),
4978                                TP[LU,
4979                                   ITE(Bop(And,
4980                                           EQ(Mop(Fst,
4981                                                  Var("state",
4982                                                      PTy(OTy(PTy(CTy"TLBEntry",
4983                                                                  F4)),uTy))),
4984                                              LO(PTy(CTy"TLBEntry",F4))),
4985                                           Bop(And,
4986                                               Bop(Or,
4987                                                   Dest
4988                                                     ("global",bTy,
4989                                                      Var("e",
4990                                                          CTy"TLBEntry")),
4991                                                   EQ(Dest
4992                                                        ("asid",FTy 6,
4993                                                         Var("e",
4994                                                             CTy"TLBEntry")),
4995                                                      Var("asid",FTy 6))),
4996                                               EQ(Dest
4997                                                    ("vAddr",F64,
4998                                                     Var("e",CTy"TLBEntry")),
4999                                                  Bop(BAnd,
5000                                                      Var("vAddr",F64),
5001                                                      Dest
5002                                                        ("vMatchMask",F64,
5003                                                         Var("e",
5004                                                             CTy"TLBEntry")))))),
5005                                       TP[Mop(Some,
5006                                              TP[Var("e",CTy"TLBEntry"),
5007                                                 Mop(Cast F4,nVar"i")]),LU],
5008                                       Var("state",
5009                                           PTy(OTy(PTy(CTy"TLBEntry",F4)),
5010                                               uTy)))]),
5011                               (LO(CTy"TLBEntry"),
5012                                TP[LU,
5013                                   Var("state",
5014                                       PTy(OTy(PTy(CTy"TLBEntry",F4)),uTy))])])))]),
5015              TP[LO(PTy(CTy"TLBEntry",F4)),LU]))))
5016;
5017val addToTLB_def = Def
5018  ("addToTLB",
5019   TP[Var("asid",FTy 6),Var("vAddr",F64),Var("pAddr",F64),
5020      Var("pte",CTy"SV_PTE"),Var("pteAddr",F64),nVar"i",bVar"global",
5021      Var("curTLB",ATy(F4,OTy(CTy"TLBEntry")))],
5022   Close
5023     (qVar"state",
5024      Let(Var("s",
5025              PTy(bTy,
5026                  PTy(nTy,
5027                      PTy(F64,
5028                          PTy(ATy(F4,OTy(CTy"TLBEntry")),
5029                              PTy(CTy"TLBEntry",qTy)))))),
5030          Mop(Snd,
5031              Apply
5032                (For(TP[LN 0,Bop(Sub,Const("TLBEntries",nTy),LN 1),
5033                        Close
5034                          (nVar"i",
5035                           Close
5036                             (Var("state",
5037                                  PTy(bTy,
5038                                      PTy(nTy,
5039                                          PTy(F64,
5040                                              PTy(ATy(F4,
5041                                                      OTy(CTy"TLBEntry")),
5042                                                  PTy(CTy"TLBEntry",qTy)))))),
5043                              CS(Apply
5044                                   (Mop(Fst,
5045                                        Mop(Snd,
5046                                            Mop(Snd,
5047                                                Mop(Snd,
5048                                                    Var("state",
5049                                                        PTy(bTy,
5050                                                            PTy(nTy,
5051                                                                PTy(F64,
5052                                                                    PTy(ATy(F4,
5053                                                                            OTy(CTy"TLBEntry")),
5054                                                                        PTy(CTy"TLBEntry",
5055                                                                            qTy)))))))))),
5056                                    Mop(Cast F4,nVar"i")),
5057                                 [(Mop(Some,Var("e",CTy"TLBEntry")),
5058                                   ITE(Bop(Ult,
5059                                           Dest
5060                                             ("age",F64,
5061                                              Var("e",CTy"TLBEntry")),
5062                                           Mop(Fst,
5063                                               Mop(Snd,
5064                                                   Mop(Snd,
5065                                                       Var("state",
5066                                                           PTy(bTy,
5067                                                               PTy(nTy,
5068                                                                   PTy(F64,
5069                                                                       PTy(ATy(F4,
5070                                                                               OTy(CTy"TLBEntry")),
5071                                                                           PTy(CTy"TLBEntry",
5072                                                                               qTy)))))))))),
5073                                       Let(Var("s",
5074                                               PTy(bTy,
5075                                                   PTy(nTy,
5076                                                       PTy(F64,
5077                                                           PTy(ATy(F4,
5078                                                                   OTy(CTy"TLBEntry")),
5079                                                               PTy(CTy"TLBEntry",
5080                                                                   qTy)))))),
5081                                           TP[Mop(Fst,
5082                                                  Var("state",
5083                                                      PTy(bTy,
5084                                                          PTy(nTy,
5085                                                              PTy(F64,
5086                                                                  PTy(ATy(F4,
5087                                                                          OTy(CTy"TLBEntry")),
5088                                                                      PTy(CTy"TLBEntry",
5089                                                                          qTy))))))),
5090                                              Let(Var("s",
5091                                                      PTy(nTy,
5092                                                          PTy(F64,
5093                                                              PTy(ATy(F4,
5094                                                                      OTy(CTy"TLBEntry")),
5095                                                                  PTy(CTy"TLBEntry",
5096                                                                      qTy))))),
5097                                                  Mop(Snd,
5098                                                      Var("state",
5099                                                          PTy(bTy,
5100                                                              PTy(nTy,
5101                                                                  PTy(F64,
5102                                                                      PTy(ATy(F4,
5103                                                                              OTy(CTy"TLBEntry")),
5104                                                                          PTy(CTy"TLBEntry",
5105                                                                              qTy))))))),
5106                                                  TP[Mop(Fst,
5107                                                         Var("s",
5108                                                             PTy(nTy,
5109                                                                 PTy(F64,
5110                                                                     PTy(ATy(F4,
5111                                                                             OTy(CTy"TLBEntry")),
5112                                                                         PTy(CTy"TLBEntry",
5113                                                                             qTy)))))),
5114                                                     Dest
5115                                                       ("age",F64,
5116                                                        Var("e",
5117                                                            CTy"TLBEntry")),
5118                                                     Mop(Snd,
5119                                                         Mop(Snd,
5120                                                             Var("s",
5121                                                                 PTy(nTy,
5122                                                                     PTy(F64,
5123                                                                         PTy(ATy(F4,
5124                                                                                 OTy(CTy"TLBEntry")),
5125                                                                             PTy(CTy"TLBEntry",
5126                                                                                 qTy)))))))])],
5127                                           TP[LU,
5128                                              Mop(Fst,
5129                                                  Var("s",
5130                                                      PTy(bTy,
5131                                                          PTy(nTy,
5132                                                              PTy(F64,
5133                                                                  PTy(ATy(F4,
5134                                                                          OTy(CTy"TLBEntry")),
5135                                                                      PTy(CTy"TLBEntry",
5136                                                                          qTy))))))),
5137                                              nVar"i",
5138                                              Mop(Snd,
5139                                                  Mop(Snd,
5140                                                      Var("s",
5141                                                          PTy(bTy,
5142                                                              PTy(nTy,
5143                                                                  PTy(F64,
5144                                                                      PTy(ATy(F4,
5145                                                                              OTy(CTy"TLBEntry")),
5146                                                                          PTy(CTy"TLBEntry",
5147                                                                              qTy))))))))]),
5148                                       TP[LU,
5149                                          Var("state",
5150                                              PTy(bTy,
5151                                                  PTy(nTy,
5152                                                      PTy(F64,
5153                                                          PTy(ATy(F4,
5154                                                                  OTy(CTy"TLBEntry")),
5155                                                              PTy(CTy"TLBEntry",
5156                                                                  qTy))))))])),
5157                                  (LO(CTy"TLBEntry"),
5158                                   TP[LU,
5159                                      ITE(Mop(Not,
5160                                              Mop(Fst,
5161                                                  Var("state",
5162                                                      PTy(bTy,
5163                                                          PTy(nTy,
5164                                                              PTy(F64,
5165                                                                  PTy(ATy(F4,
5166                                                                          OTy(CTy"TLBEntry")),
5167                                                                      PTy(CTy"TLBEntry",
5168                                                                          qTy)))))))),
5169                                          TP[LT,
5170                                             Let(Var("s0",
5171                                                     PTy(nTy,
5172                                                         PTy(F64,
5173                                                             PTy(ATy(F4,
5174                                                                     OTy(CTy"TLBEntry")),
5175                                                                 PTy(CTy"TLBEntry",
5176                                                                     qTy))))),
5177                                                 Mop(Snd,
5178                                                     Var("state",
5179                                                         PTy(bTy,
5180                                                             PTy(nTy,
5181                                                                 PTy(F64,
5182                                                                     PTy(ATy(F4,
5183                                                                             OTy(CTy"TLBEntry")),
5184                                                                         PTy(CTy"TLBEntry",
5185                                                                             qTy))))))),
5186                                                 TP[Mop(Fst,
5187                                                        Var("s0",
5188                                                            PTy(nTy,
5189                                                                PTy(F64,
5190                                                                    PTy(ATy(F4,
5191                                                                            OTy(CTy"TLBEntry")),
5192                                                                        PTy(CTy"TLBEntry",
5193                                                                            qTy)))))),
5194                                                    Let(Var("s0",
5195                                                            PTy(F64,
5196                                                                PTy(ATy(F4,
5197                                                                        OTy(CTy"TLBEntry")),
5198                                                                    PTy(CTy"TLBEntry",
5199                                                                        qTy)))),
5200                                                        Mop(Snd,
5201                                                            Var("s0",
5202                                                                PTy(nTy,
5203                                                                    PTy(F64,
5204                                                                        PTy(ATy(F4,
5205                                                                                OTy(CTy"TLBEntry")),
5206                                                                            PTy(CTy"TLBEntry",
5207                                                                                qTy)))))),
5208                                                        TP[Mop(Fst,
5209                                                               Var("s0",
5210                                                                   PTy(F64,
5211                                                                       PTy(ATy(F4,
5212                                                                               OTy(CTy"TLBEntry")),
5213                                                                           PTy(CTy"TLBEntry",
5214                                                                               qTy))))),
5215                                                           Fupd
5216                                                             (Mop(Fst,
5217                                                                  Mop(Snd,
5218                                                                      Mop(Snd,
5219                                                                          Mop(Snd,
5220                                                                              Var("state",
5221                                                                                  PTy(bTy,
5222                                                                                      PTy(nTy,
5223                                                                                          PTy(F64,
5224                                                                                              PTy(ATy(F4,
5225                                                                                                      OTy(CTy"TLBEntry")),
5226                                                                                                  PTy(CTy"TLBEntry",
5227                                                                                                      qTy)))))))))),
5228                                                              Mop(Cast F4,
5229                                                                  nVar"i"),
5230                                                              Mop(Some,
5231                                                                  Mop(Fst,
5232                                                                      Mop(Snd,
5233                                                                          Mop(Snd,
5234                                                                              Mop(Snd,
5235                                                                                  Mop(Snd,
5236                                                                                      Var("state",
5237                                                                                          PTy(bTy,
5238                                                                                              PTy(nTy,
5239                                                                                                  PTy(F64,
5240                                                                                                      PTy(ATy(F4,
5241                                                                                                              OTy(CTy"TLBEntry")),
5242                                                                                                          PTy(CTy"TLBEntry",
5243                                                                                                              qTy))))))))))))),
5244                                                           Mop(Snd,
5245                                                               Mop(Snd,
5246                                                                   Var("s0",
5247                                                                       PTy(F64,
5248                                                                           PTy(ATy(F4,
5249                                                                                   OTy(CTy"TLBEntry")),
5250                                                                               PTy(CTy"TLBEntry",
5251                                                                                   qTy))))))])])],
5252                                          Var("state",
5253                                              PTy(bTy,
5254                                                  PTy(nTy,
5255                                                      PTy(F64,
5256                                                          PTy(ATy(F4,
5257                                                                  OTy(CTy"TLBEntry")),
5258                                                              PTy(CTy"TLBEntry",
5259                                                                  qTy)))))))])])))]),
5260                 TP[LF,LN 0,Mop(SE F64,LW(1,1)),
5261                    Var("curTLB",ATy(F4,OTy(CTy"TLBEntry"))),
5262                    Apply
5263                      (Call
5264                         ("mkTLBEntry",ATy(qTy,CTy"TLBEntry"),
5265                          TP[Var("asid",FTy 6),bVar"global",
5266                             Var("vAddr",F64),Var("pAddr",F64),
5267                             Var("pte",CTy"SV_PTE"),nVar"i",
5268                             Var("pteAddr",F64)]),qVar"state"),qVar"state"])),
5269          ITE(Mop(Not,
5270                  Mop(Fst,
5271                      Var("s",
5272                          PTy(bTy,
5273                              PTy(nTy,
5274                                  PTy(F64,
5275                                      PTy(ATy(F4,OTy(CTy"TLBEntry")),
5276                                          PTy(CTy"TLBEntry",qTy)))))))),
5277              Fupd
5278                (Mop(Fst,
5279                     Mop(Snd,
5280                         Mop(Snd,
5281                             Mop(Snd,
5282                                 Var("s",
5283                                     PTy(bTy,
5284                                         PTy(nTy,
5285                                             PTy(F64,
5286                                                 PTy(ATy(F4,
5287                                                         OTy(CTy"TLBEntry")),
5288                                                     PTy(CTy"TLBEntry",qTy)))))))))),
5289                 Mop(Cast F4,
5290                     Mop(Fst,
5291                         Mop(Snd,
5292                             Var("s",
5293                                 PTy(bTy,
5294                                     PTy(nTy,
5295                                         PTy(F64,
5296                                             PTy(ATy(F4,OTy(CTy"TLBEntry")),
5297                                                 PTy(CTy"TLBEntry",qTy))))))))),
5298                 Mop(Some,
5299                     Mop(Fst,
5300                         Mop(Snd,
5301                             Mop(Snd,
5302                                 Mop(Snd,
5303                                     Mop(Snd,
5304                                         Var("s",
5305                                             PTy(bTy,
5306                                                 PTy(nTy,
5307                                                     PTy(F64,
5308                                                         PTy(ATy(F4,
5309                                                                 OTy(CTy"TLBEntry")),
5310                                                             PTy(CTy"TLBEntry",
5311                                                                 qTy))))))))))))),
5312              Mop(Fst,
5313                  Mop(Snd,
5314                      Mop(Snd,
5315                          Mop(Snd,
5316                              Var("s",
5317                                  PTy(bTy,
5318                                      PTy(nTy,
5319                                          PTy(F64,
5320                                              PTy(ATy(F4,
5321                                                      OTy(CTy"TLBEntry")),
5322                                                  PTy(CTy"TLBEntry",qTy))))))))))))))
5323;
5324val flushTLB_def = Def
5325  ("flushTLB",
5326   TP[Var("asid",FTy 6),Var("addr",OTy F64),
5327      Var("curTLB",ATy(F4,OTy(CTy"TLBEntry")))],
5328   Mop(Fst,
5329       Mop(Snd,
5330           Apply
5331             (For(TP[LN 0,Bop(Sub,Const("TLBEntries",nTy),LN 1),
5332                     Close
5333                       (nVar"i",
5334                        Close
5335                          (Var("state",PTy(ATy(F4,OTy(CTy"TLBEntry")),uTy)),
5336                           CS(TP[Apply
5337                                   (Mop(Fst,
5338                                        Var("state",
5339                                            PTy(ATy(F4,OTy(CTy"TLBEntry")),
5340                                                uTy))),
5341                                    Mop(Cast F4,nVar"i")),
5342                                 Var("addr",OTy F64)],
5343                              [(TP[Mop(Some,Var("e",CTy"TLBEntry")),
5344                                   Mop(Some,Var("va",F64))],
5345                                TP[LU,
5346                                   ITE(Bop(And,
5347                                           Bop(Or,
5348                                               EQ(Var("asid",FTy 6),
5349                                                  LW(0,6)),
5350                                               Bop(And,
5351                                                   EQ(Var("asid",FTy 6),
5352                                                      Dest
5353                                                        ("asid",FTy 6,
5354                                                         Var("e",
5355                                                             CTy"TLBEntry"))),
5356                                                   Mop(Not,
5357                                                       Dest
5358                                                         ("global",bTy,
5359                                                          Var("e",
5360                                                              CTy"TLBEntry"))))),
5361                                           EQ(Dest
5362                                                ("vAddr",F64,
5363                                                 Var("e",CTy"TLBEntry")),
5364                                              Bop(BAnd,Var("va",F64),
5365                                                  Dest
5366                                                    ("vMatchMask",F64,
5367                                                     Var("e",CTy"TLBEntry"))))),
5368                                       TP[Fupd
5369                                            (Mop(Fst,
5370                                                 Var("state",
5371                                                     PTy(ATy(F4,
5372                                                             OTy(CTy"TLBEntry")),
5373                                                         uTy))),
5374                                             Mop(Cast F4,nVar"i"),
5375                                             LO(CTy"TLBEntry")),LU],
5376                                       Var("state",
5377                                           PTy(ATy(F4,OTy(CTy"TLBEntry")),
5378                                               uTy)))]),
5379                               (TP[Mop(Some,Var("e",CTy"TLBEntry")),LO F64],
5380                                TP[LU,
5381                                   ITE(Bop(Or,
5382                                           EQ(Var("asid",FTy 6),LW(0,6)),
5383                                           Bop(And,
5384                                               EQ(Var("asid",FTy 6),
5385                                                  Dest
5386                                                    ("asid",FTy 6,
5387                                                     Var("e",CTy"TLBEntry"))),
5388                                               Mop(Not,
5389                                                   Dest
5390                                                     ("global",bTy,
5391                                                      Var("e",
5392                                                          CTy"TLBEntry"))))),
5393                                       TP[Fupd
5394                                            (Mop(Fst,
5395                                                 Var("state",
5396                                                     PTy(ATy(F4,
5397                                                             OTy(CTy"TLBEntry")),
5398                                                         uTy))),
5399                                             Mop(Cast F4,nVar"i"),
5400                                             LO(CTy"TLBEntry")),LU],
5401                                       Var("state",
5402                                           PTy(ATy(F4,OTy(CTy"TLBEntry")),
5403                                               uTy)))]),
5404                               (TP[LO(CTy"TLBEntry"),AVar(OTy F64)],
5405                                TP[LU,
5406                                   Var("state",
5407                                       PTy(ATy(F4,OTy(CTy"TLBEntry")),uTy))])])))]),
5408              TP[Var("curTLB",ATy(F4,OTy(CTy"TLBEntry"))),LU]))))
5409;
5410val TLB_def = Def
5411  ("TLB",qVar"state",
5412   Apply
5413     (Dest("c_tlb",ATy(F8,ATy(F4,OTy(CTy"TLBEntry"))),qVar"state"),
5414      Dest("procID",F8,qVar"state")))
5415;
5416val write'TLB_def = Def
5417  ("write'TLB",Var("value",ATy(F4,OTy(CTy"TLBEntry"))),
5418   Close
5419     (qVar"state",
5420      Rupd
5421        ("c_tlb",
5422         TP[qVar"state",
5423            Fupd
5424              (Dest
5425                 ("c_tlb",ATy(F8,ATy(F4,OTy(CTy"TLBEntry"))),qVar"state"),
5426               Dest("procID",F8,qVar"state"),
5427               Var("value",ATy(F4,OTy(CTy"TLBEntry"))))])))
5428;
5429val translate64_def = Def
5430  ("translate64",
5431   TP[Var("vAddr",F64),Var("ft",CTy"fetchType"),Var("ac",CTy"accessType"),
5432      Var("priv",CTy"Privilege"),nVar"level"],
5433   Close
5434     (qVar"state",
5435      Let(Var("v",FTy 6),
5436          Apply(Call("curASID",ATy(qTy,FTy 6),LU),qVar"state"),
5437          CS(Call
5438               ("lookupTLB",OTy(PTy(CTy"TLBEntry",F4)),
5439                TP[Var("v",FTy 6),Var("vAddr",F64),
5440                   Apply
5441                     (Const("TLB",ATy(qTy,ATy(F4,OTy(CTy"TLBEntry")))),
5442                      qVar"state")]),
5443             [(Mop(Some,TP[Var("e",CTy"TLBEntry"),Var("idx",F4)]),
5444               Let(TP[bVar"v",qVar"s"],
5445                   Apply
5446                     (Call
5447                        ("checkMemPermission",ATy(qTy,PTy(bTy,qTy)),
5448                         TP[Var("ft",CTy"fetchType"),
5449                            Var("ac",CTy"accessType"),
5450                            Var("priv",CTy"Privilege"),
5451                            Dest
5452                              ("PTE_T",F4,
5453                               Dest
5454                                 ("pte",CTy"SV_PTE",Var("e",CTy"TLBEntry")))]),
5455                      qVar"state"),
5456                   ITE(bVar"v",
5457                       TP[Mop(Some,
5458                              Bop(BOr,
5459                                  Dest("pAddr",F64,Var("e",CTy"TLBEntry")),
5460                                  Bop(BAnd,Var("vAddr",F64),
5461                                      Dest
5462                                        ("vAddrMask",F64,
5463                                         Var("e",CTy"TLBEntry"))))),
5464                          ITE(Bop(And,
5465                                  EQ(Var("ac",CTy"accessType"),
5466                                     LC("Write",CTy"accessType")),
5467                                  Mop(Not,
5468                                      Dest
5469                                        ("PTE_D",bTy,
5470                                         Dest
5471                                           ("pte",CTy"SV_PTE",
5472                                            Var("e",CTy"TLBEntry"))))),
5473                              Let(Var("s0",CTy"TLBEntry"),
5474                                  Rupd
5475                                    ("pte",
5476                                     TP[Var("e",CTy"TLBEntry"),
5477                                        Rupd
5478                                          ("PTE_D",
5479                                           TP[Dest
5480                                                ("pte",CTy"SV_PTE",
5481                                                 Var("e",CTy"TLBEntry")),
5482                                              LT])]),
5483                                  Let(qVar"s1",
5484                                      Apply
5485                                        (Call
5486                                           ("rawWriteData",ATy(qTy,qTy),
5487                                            TP[Dest
5488                                                 ("pteAddr",F64,
5489                                                  Var("s0",CTy"TLBEntry")),
5490                                               Call
5491                                                 ("reg'SV_PTE",F64,
5492                                                  Dest
5493                                                    ("pte",CTy"SV_PTE",
5494                                                     Var("s0",
5495                                                         CTy"TLBEntry"))),
5496                                               LN 8]),qVar"s"),
5497                                      Apply
5498                                        (Call
5499                                           ("write'TLB",ATy(qTy,qTy),
5500                                            Fupd
5501                                              (Apply
5502                                                 (Const
5503                                                    ("TLB",
5504                                                     ATy(qTy,
5505                                                         ATy(F4,
5506                                                             OTy(CTy"TLBEntry")))),
5507                                                  qVar"s1"),Var("idx",F4),
5508                                               Mop(Some,
5509                                                   Var("s0",CTy"TLBEntry")))),
5510                                         qVar"s1"))),qVar"s")],
5511                       TP[LO F64,qVar"s"]))),
5512              (LO(PTy(CTy"TLBEntry",F4)),
5513               Let(TP[Var("v0",
5514                          OTy(PTy(F64,
5515                                  PTy(CTy"SV_PTE",PTy(nTy,PTy(bTy,F64)))))),
5516                      qVar"s"],
5517                   Apply
5518                     (Call
5519                        ("walk64",
5520                         ATy(qTy,
5521                             PTy(OTy(PTy(F64,
5522                                         PTy(CTy"SV_PTE",
5523                                             PTy(nTy,PTy(bTy,F64))))),qTy)),
5524                         TP[Var("vAddr",F64),Var("ft",CTy"fetchType"),
5525                            Var("ac",CTy"accessType"),
5526                            Var("priv",CTy"Privilege"),
5527                            Dest
5528                              ("sptbr",F64,
5529                               Apply
5530                                 (Const
5531                                    ("SCSR",ATy(qTy,CTy"SupervisorCSR")),
5532                                  qVar"state")),nVar"level"]),qVar"state"),
5533                   CS(Var("v0",
5534                          OTy(PTy(F64,
5535                                  PTy(CTy"SV_PTE",PTy(nTy,PTy(bTy,F64)))))),
5536                      [(Mop(Some,
5537                            TP[Var("pAddr",F64),Var("pte",CTy"SV_PTE"),
5538                               nVar"i",bVar"global",Var("pteAddr",F64)]),
5539                        TP[Mop(Some,Var("pAddr",F64)),
5540                           Apply
5541                             (Call
5542                                ("write'TLB",ATy(qTy,qTy),
5543                                 Apply
5544                                   (Call
5545                                      ("addToTLB",
5546                                       ATy(qTy,ATy(F4,OTy(CTy"TLBEntry"))),
5547                                       TP[Var("v",FTy 6),Var("vAddr",F64),
5548                                          Var("pAddr",F64),
5549                                          Var("pte",CTy"SV_PTE"),
5550                                          Var("pteAddr",F64),nVar"i",
5551                                          bVar"global",
5552                                          Apply
5553                                            (Const
5554                                               ("TLB",
5555                                                ATy(qTy,
5556                                                    ATy(F4,
5557                                                        OTy(CTy"TLBEntry")))),
5558                                             qVar"s")]),qVar"s")),qVar"s")]),
5559                       (LO(PTy(F64,PTy(CTy"SV_PTE",PTy(nTy,PTy(bTy,F64))))),
5560                        TP[LO F64,qVar"s"])])))]))))
5561;
5562val translateAddr_def = Def
5563  ("translateAddr",
5564   TP[Var("vAddr",F64),Var("ft",CTy"fetchType"),Var("ac",CTy"accessType")],
5565   Close
5566     (qVar"state",
5567      Let(Var("v",CTy"Privilege"),
5568          Call
5569            ("privilege",CTy"Privilege",
5570             ITE(Bop(And,
5571                     Dest
5572                       ("MMPRV",bTy,
5573                        Dest
5574                          ("mstatus",CTy"mstatus",
5575                           Apply
5576                             (Const("MCSR",ATy(qTy,CTy"MachineCSR")),
5577                              qVar"state"))),
5578                     EQ(Var("ft",CTy"fetchType"),LC("Data",CTy"fetchType"))),
5579                 Dest
5580                   ("MPRV1",FTy 2,
5581                    Dest
5582                      ("mstatus",CTy"mstatus",
5583                       Apply
5584                         (Const("MCSR",ATy(qTy,CTy"MachineCSR")),
5585                          qVar"state"))),
5586                 Dest
5587                   ("MPRV",FTy 2,
5588                    Dest
5589                      ("mstatus",CTy"mstatus",
5590                       Apply
5591                         (Const("MCSR",ATy(qTy,CTy"MachineCSR")),
5592                          qVar"state"))))),
5593          Let(TP[Var("v0",PTy(CTy"VM_Mode",CTy"Privilege")),qVar"s"],
5594              Let(TP[Var("v0",CTy"VM_Mode"),qVar"s"],
5595                  Apply
5596                    (Call
5597                       ("vmType",ATy(qTy,PTy(CTy"VM_Mode",qTy)),
5598                        Dest
5599                          ("VM",FTy 5,
5600                           Dest
5601                             ("mstatus",CTy"mstatus",
5602                              Apply
5603                                (Const("MCSR",ATy(qTy,CTy"MachineCSR")),
5604                                 qVar"state")))),qVar"state"),
5605                  TP[TP[Var("v0",CTy"VM_Mode"),Var("v",CTy"Privilege")],
5606                     qVar"s"]),
5607              CS(Var("v0",PTy(CTy"VM_Mode",CTy"Privilege")),
5608                 [(TP[LC("Mbare",CTy"VM_Mode"),AVar(CTy"Privilege")],
5609                   TP[Mop(Some,Var("vAddr",F64)),qVar"s"]),
5610                  (TP[AVar(CTy"VM_Mode"),LC("Machine",CTy"Privilege")],
5611                   TP[Mop(Some,Var("vAddr",F64)),qVar"s"]),
5612                  (TP[LC("Sv39",CTy"VM_Mode"),AVar(CTy"Privilege")],
5613                   Apply
5614                     (Call
5615                        ("translate64",ATy(qTy,PTy(OTy F64,qTy)),
5616                         TP[Var("vAddr",F64),Var("ft",CTy"fetchType"),
5617                            Var("ac",CTy"accessType"),
5618                            Var("v",CTy"Privilege"),LN 2]),qVar"s")),
5619                  (TP[LC("Sv48",CTy"VM_Mode"),AVar(CTy"Privilege")],
5620                   Apply
5621                     (Call
5622                        ("translate64",ATy(qTy,PTy(OTy F64,qTy)),
5623                         TP[Var("vAddr",F64),Var("ft",CTy"fetchType"),
5624                            Var("ac",CTy"accessType"),
5625                            Var("v",CTy"Privilege"),LN 3]),qVar"s")),
5626                  (TP[AVar(CTy"VM_Mode"),AVar(CTy"Privilege")],
5627                   TP[LO F64,qVar"s"])])))))
5628;
5629val matchLoadReservation_def = Def
5630  ("matchLoadReservation",Var("vAddr",F64),
5631   Close
5632     (qVar"state",
5633      Bop(And,
5634          Mop(IsSome,
5635              Apply(Const("ReserveLoad",ATy(qTy,OTy F64)),qVar"state")),
5636          EQ(Mop(ValOf,
5637                 Apply(Const("ReserveLoad",ATy(qTy,OTy F64)),qVar"state")),
5638             Var("vAddr",F64)))))
5639;
5640val branchTo_def = Def
5641  ("branchTo",Var("newPC",F64),
5642   Close
5643     (qVar"state",
5644      Apply
5645        (Call
5646           ("write'NextFetch",ATy(qTy,qTy),
5647            Mop(Some,
5648                Call("BranchTo",CTy"TransferControl",Var("newPC",F64)))),
5649         qVar"state")))
5650;
5651val dfn'ADDI_def = Def
5652  ("dfn'ADDI",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)],
5653   Close
5654     (qVar"state",
5655      Apply
5656        (Call
5657           ("write'GPR",ATy(qTy,qTy),
5658            TP[Bop(Add,
5659                   Apply
5660                     (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
5661                      qVar"state"),Mop(SE F64,Var("imm",FTy 12))),
5662               Var("rd",FTy 5)]),qVar"state")))
5663;
5664val dfn'ADDIW_def = Def
5665  ("dfn'ADDIW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)],
5666   Close
5667     (qVar"state",
5668      Let(TP[bVar"v",qVar"s"],
5669          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
5670          ITE(bVar"v",
5671              Apply
5672                (Call
5673                   ("signalException",ATy(qTy,qTy),
5674                    LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"),
5675              Apply
5676                (Call
5677                   ("write'GPR",ATy(qTy,qTy),
5678                    TP[Mop(SE F64,
5679                           EX(Bop(Add,
5680                                  Apply
5681                                    (Call
5682                                       ("GPR",ATy(qTy,F64),
5683                                        Var("rs1",FTy 5)),qVar"s"),
5684                                  Mop(SE F64,Var("imm",FTy 12))),LN 31,
5685                              LN 0,F32)),Var("rd",FTy 5)]),qVar"s")))))
5686;
5687val dfn'SLTI_def = Def
5688  ("dfn'SLTI",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)],
5689   Close
5690     (qVar"state",
5691      Let(TP[bVar"v",qVar"s"],
5692          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
5693          Apply
5694            (Call
5695               ("write'GPR",ATy(qTy,qTy),
5696                TP[Mop(Cast F64,
5697                       Bop(Lt,
5698                           ITE(bVar"v",
5699                               Mop(SE F64,
5700                                   EX(Apply
5701                                        (Call
5702                                           ("GPR",ATy(qTy,F64),
5703                                            Var("rs1",FTy 5)),qVar"s"),
5704                                      LN 31,LN 0,F32)),
5705                               Apply
5706                                 (Call
5707                                    ("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
5708                                  qVar"s")),Mop(SE F64,Var("imm",FTy 12)))),
5709                   Var("rd",FTy 5)]),qVar"s"))))
5710;
5711val dfn'SLTIU_def = Def
5712  ("dfn'SLTIU",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)],
5713   Close
5714     (qVar"state",
5715      Let(TP[bVar"v",qVar"s"],
5716          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
5717          Apply
5718            (Call
5719               ("write'GPR",ATy(qTy,qTy),
5720                TP[Mop(Cast F64,
5721                       Bop(Ult,
5722                           ITE(bVar"v",
5723                               Mop(SE F64,
5724                                   EX(Apply
5725                                        (Call
5726                                           ("GPR",ATy(qTy,F64),
5727                                            Var("rs1",FTy 5)),qVar"s"),
5728                                      LN 31,LN 0,F32)),
5729                               Apply
5730                                 (Call
5731                                    ("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
5732                                  qVar"s")),Mop(SE F64,Var("imm",FTy 12)))),
5733                   Var("rd",FTy 5)]),qVar"s"))))
5734;
5735val dfn'ANDI_def = Def
5736  ("dfn'ANDI",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)],
5737   Close
5738     (qVar"state",
5739      Apply
5740        (Call
5741           ("write'GPR",ATy(qTy,qTy),
5742            TP[Bop(BAnd,
5743                   Apply
5744                     (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
5745                      qVar"state"),Mop(SE F64,Var("imm",FTy 12))),
5746               Var("rd",FTy 5)]),qVar"state")))
5747;
5748val dfn'ORI_def = Def
5749  ("dfn'ORI",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)],
5750   Close
5751     (qVar"state",
5752      Apply
5753        (Call
5754           ("write'GPR",ATy(qTy,qTy),
5755            TP[Bop(BOr,
5756                   Apply
5757                     (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
5758                      qVar"state"),Mop(SE F64,Var("imm",FTy 12))),
5759               Var("rd",FTy 5)]),qVar"state")))
5760;
5761val dfn'XORI_def = Def
5762  ("dfn'XORI",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)],
5763   Close
5764     (qVar"state",
5765      Apply
5766        (Call
5767           ("write'GPR",ATy(qTy,qTy),
5768            TP[Bop(BXor,
5769                   Apply
5770                     (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
5771                      qVar"state"),Mop(SE F64,Var("imm",FTy 12))),
5772               Var("rd",FTy 5)]),qVar"state")))
5773;
5774val dfn'SLLI_def = Def
5775  ("dfn'SLLI",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 6)],
5776   Close
5777     (qVar"state",
5778      Let(TP[bVar"v",qVar"s"],
5779          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
5780          ITE(Bop(And,bVar"v",Bop(Bit,Var("imm",FTy 6),LN 5)),
5781              Apply
5782                (Call
5783                   ("signalException",ATy(qTy,qTy),
5784                    LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"),
5785              Apply
5786                (Call
5787                   ("write'GPR",ATy(qTy,qTy),
5788                    TP[Bop(Lsl,
5789                           Apply
5790                             (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
5791                              qVar"s"),Mop(Cast nTy,Var("imm",FTy 6))),
5792                       Var("rd",FTy 5)]),qVar"s")))))
5793;
5794val dfn'SRLI_def = Def
5795  ("dfn'SRLI",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 6)],
5796   Close
5797     (qVar"state",
5798      Let(TP[bVar"v",qVar"s"],
5799          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
5800          ITE(Bop(And,bVar"v",Bop(Bit,Var("imm",FTy 6),LN 5)),
5801              Apply
5802                (Call
5803                   ("signalException",ATy(qTy,qTy),
5804                    LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"),
5805              Let(TP[bVar"v",qVar"s"],
5806                  Apply
5807                    (Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"),
5808                  Apply
5809                    (Call
5810                       ("write'GPR",ATy(qTy,qTy),
5811                        TP[Bop(Lsr,
5812                               ITE(bVar"v",
5813                                   Mop(Cast F64,
5814                                       EX(Apply
5815                                            (Call
5816                                               ("GPR",ATy(qTy,F64),
5817                                                Var("rs1",FTy 5)),qVar"s"),
5818                                          LN 31,LN 0,F32)),
5819                                   Apply
5820                                     (Call
5821                                        ("GPR",ATy(qTy,F64),
5822                                         Var("rs1",FTy 5)),qVar"s")),
5823                               Mop(Cast nTy,Var("imm",FTy 6))),
5824                           Var("rd",FTy 5)]),qVar"s"))))))
5825;
5826val dfn'SRAI_def = Def
5827  ("dfn'SRAI",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 6)],
5828   Close
5829     (qVar"state",
5830      Let(TP[bVar"v",qVar"s"],
5831          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
5832          ITE(Bop(And,bVar"v",Bop(Bit,Var("imm",FTy 6),LN 5)),
5833              Apply
5834                (Call
5835                   ("signalException",ATy(qTy,qTy),
5836                    LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"),
5837              Let(TP[bVar"v",qVar"s"],
5838                  Apply
5839                    (Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"),
5840                  Apply
5841                    (Call
5842                       ("write'GPR",ATy(qTy,qTy),
5843                        TP[Bop(Asr,
5844                               ITE(bVar"v",
5845                                   Mop(SE F64,
5846                                       EX(Apply
5847                                            (Call
5848                                               ("GPR",ATy(qTy,F64),
5849                                                Var("rs1",FTy 5)),qVar"s"),
5850                                          LN 31,LN 0,F32)),
5851                                   Apply
5852                                     (Call
5853                                        ("GPR",ATy(qTy,F64),
5854                                         Var("rs1",FTy 5)),qVar"s")),
5855                               Mop(Cast nTy,Var("imm",FTy 6))),
5856                           Var("rd",FTy 5)]),qVar"s"))))))
5857;
5858val dfn'SLLIW_def = Def
5859  ("dfn'SLLIW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 5)],
5860   Close
5861     (qVar"state",
5862      Let(TP[bVar"v",qVar"s"],
5863          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
5864          ITE(bVar"v",
5865              Apply
5866                (Call
5867                   ("signalException",ATy(qTy,qTy),
5868                    LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"),
5869              Apply
5870                (Call
5871                   ("write'GPR",ATy(qTy,qTy),
5872                    TP[Mop(SE F64,
5873                           Bop(Lsl,
5874                               EX(Apply
5875                                    (Call
5876                                       ("GPR",ATy(qTy,F64),
5877                                        Var("rs1",FTy 5)),qVar"s"),LN 31,
5878                                  LN 0,F32),Mop(Cast nTy,Var("imm",FTy 5)))),
5879                       Var("rd",FTy 5)]),qVar"s")))))
5880;
5881val dfn'SRLIW_def = Def
5882  ("dfn'SRLIW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 5)],
5883   Close
5884     (qVar"state",
5885      Let(TP[bVar"v",qVar"s"],
5886          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
5887          ITE(bVar"v",
5888              Apply
5889                (Call
5890                   ("signalException",ATy(qTy,qTy),
5891                    LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"),
5892              Apply
5893                (Call
5894                   ("write'GPR",ATy(qTy,qTy),
5895                    TP[Mop(SE F64,
5896                           Bop(Lsr,
5897                               EX(Apply
5898                                    (Call
5899                                       ("GPR",ATy(qTy,F64),
5900                                        Var("rs1",FTy 5)),qVar"s"),LN 31,
5901                                  LN 0,F32),Mop(Cast nTy,Var("imm",FTy 5)))),
5902                       Var("rd",FTy 5)]),qVar"s")))))
5903;
5904val dfn'SRAIW_def = Def
5905  ("dfn'SRAIW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 5)],
5906   Close
5907     (qVar"state",
5908      Let(TP[bVar"v",qVar"s"],
5909          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
5910          ITE(bVar"v",
5911              Apply
5912                (Call
5913                   ("signalException",ATy(qTy,qTy),
5914                    LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"),
5915              Apply
5916                (Call
5917                   ("write'GPR",ATy(qTy,qTy),
5918                    TP[Mop(SE F64,
5919                           Bop(Asr,
5920                               EX(Apply
5921                                    (Call
5922                                       ("GPR",ATy(qTy,F64),
5923                                        Var("rs1",FTy 5)),qVar"s"),LN 31,
5924                                  LN 0,F32),Mop(Cast nTy,Var("imm",FTy 5)))),
5925                       Var("rd",FTy 5)]),qVar"s")))))
5926;
5927val dfn'LUI_def = Def
5928  ("dfn'LUI",TP[Var("rd",FTy 5),Var("imm",FTy 20)],
5929   Close
5930     (qVar"state",
5931      Apply
5932        (Call
5933           ("write'GPR",ATy(qTy,qTy),
5934            TP[Mop(SE F64,CC[Var("imm",FTy 20),LW(0,12)]),Var("rd",FTy 5)]),
5935         qVar"state")))
5936;
5937val dfn'AUIPC_def = Def
5938  ("dfn'AUIPC",TP[Var("rd",FTy 5),Var("imm",FTy 20)],
5939   Close
5940     (qVar"state",
5941      Apply
5942        (Call
5943           ("write'GPR",ATy(qTy,qTy),
5944            TP[Bop(Add,Apply(Const("PC",ATy(qTy,F64)),qVar"state"),
5945                   Mop(SE F64,CC[Var("imm",FTy 20),LW(0,12)])),
5946               Var("rd",FTy 5)]),qVar"state")))
5947;
5948val dfn'ADD_def = Def
5949  ("dfn'ADD",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
5950   Close
5951     (qVar"state",
5952      Apply
5953        (Call
5954           ("write'GPR",ATy(qTy,qTy),
5955            TP[Bop(Add,
5956                   Apply
5957                     (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
5958                      qVar"state"),
5959                   Apply
5960                     (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
5961                      qVar"state")),Var("rd",FTy 5)]),qVar"state")))
5962;
5963val dfn'ADDW_def = Def
5964  ("dfn'ADDW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
5965   Close
5966     (qVar"state",
5967      Let(TP[bVar"v",qVar"s"],
5968          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
5969          ITE(bVar"v",
5970              Apply
5971                (Call
5972                   ("signalException",ATy(qTy,qTy),
5973                    LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"),
5974              Apply
5975                (Call
5976                   ("write'GPR",ATy(qTy,qTy),
5977                    TP[Mop(SE F64,
5978                           Bop(Add,
5979                               EX(Apply
5980                                    (Call
5981                                       ("GPR",ATy(qTy,F64),
5982                                        Var("rs1",FTy 5)),qVar"s"),LN 31,
5983                                  LN 0,F32),
5984                               EX(Apply
5985                                    (Call
5986                                       ("GPR",ATy(qTy,F64),
5987                                        Var("rs2",FTy 5)),qVar"s"),LN 31,
5988                                  LN 0,F32))),Var("rd",FTy 5)]),qVar"s")))))
5989;
5990val dfn'SUB_def = Def
5991  ("dfn'SUB",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
5992   Close
5993     (qVar"state",
5994      Apply
5995        (Call
5996           ("write'GPR",ATy(qTy,qTy),
5997            TP[Bop(Sub,
5998                   Apply
5999                     (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
6000                      qVar"state"),
6001                   Apply
6002                     (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
6003                      qVar"state")),Var("rd",FTy 5)]),qVar"state")))
6004;
6005val dfn'SUBW_def = Def
6006  ("dfn'SUBW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
6007   Close
6008     (qVar"state",
6009      Let(TP[bVar"v",qVar"s"],
6010          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
6011          ITE(bVar"v",
6012              Apply
6013                (Call
6014                   ("signalException",ATy(qTy,qTy),
6015                    LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"),
6016              Apply
6017                (Call
6018                   ("write'GPR",ATy(qTy,qTy),
6019                    TP[Mop(SE F64,
6020                           Bop(Sub,
6021                               EX(Apply
6022                                    (Call
6023                                       ("GPR",ATy(qTy,F64),
6024                                        Var("rs1",FTy 5)),qVar"s"),LN 31,
6025                                  LN 0,F32),
6026                               EX(Apply
6027                                    (Call
6028                                       ("GPR",ATy(qTy,F64),
6029                                        Var("rs2",FTy 5)),qVar"s"),LN 31,
6030                                  LN 0,F32))),Var("rd",FTy 5)]),qVar"s")))))
6031;
6032val dfn'SLT_def = Def
6033  ("dfn'SLT",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
6034   Close
6035     (qVar"state",
6036      Let(TP[bVar"v",qVar"s"],
6037          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
6038          Let(TP[bVar"v0",qVar"s0"],
6039              Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"),
6040              Apply
6041                (Call
6042                   ("write'GPR",ATy(qTy,qTy),
6043                    TP[Mop(Cast F64,
6044                           Bop(Lt,
6045                               ITE(bVar"v",
6046                                   Mop(SE F64,
6047                                       EX(Apply
6048                                            (Call
6049                                               ("GPR",ATy(qTy,F64),
6050                                                Var("rs1",FTy 5)),qVar"s"),
6051                                          LN 31,LN 0,F32)),
6052                                   Apply
6053                                     (Call
6054                                        ("GPR",ATy(qTy,F64),
6055                                         Var("rs1",FTy 5)),qVar"s")),
6056                               ITE(bVar"v0",
6057                                   Mop(SE F64,
6058                                       EX(Apply
6059                                            (Call
6060                                               ("GPR",ATy(qTy,F64),
6061                                                Var("rs2",FTy 5)),qVar"s0"),
6062                                          LN 31,LN 0,F32)),
6063                                   Apply
6064                                     (Call
6065                                        ("GPR",ATy(qTy,F64),
6066                                         Var("rs2",FTy 5)),qVar"s0")))),
6067                       Var("rd",FTy 5)]),qVar"s0")))))
6068;
6069val dfn'SLTU_def = Def
6070  ("dfn'SLTU",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
6071   Close
6072     (qVar"state",
6073      Let(TP[bVar"v",qVar"s"],
6074          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
6075          Let(TP[bVar"v0",qVar"s0"],
6076              Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"),
6077              Apply
6078                (Call
6079                   ("write'GPR",ATy(qTy,qTy),
6080                    TP[Mop(Cast F64,
6081                           Bop(Ult,
6082                               ITE(bVar"v",
6083                                   Mop(Cast F64,
6084                                       EX(Apply
6085                                            (Call
6086                                               ("GPR",ATy(qTy,F64),
6087                                                Var("rs1",FTy 5)),qVar"s"),
6088                                          LN 31,LN 0,F32)),
6089                                   Apply
6090                                     (Call
6091                                        ("GPR",ATy(qTy,F64),
6092                                         Var("rs1",FTy 5)),qVar"s")),
6093                               ITE(bVar"v0",
6094                                   Mop(Cast F64,
6095                                       EX(Apply
6096                                            (Call
6097                                               ("GPR",ATy(qTy,F64),
6098                                                Var("rs2",FTy 5)),qVar"s0"),
6099                                          LN 31,LN 0,F32)),
6100                                   Apply
6101                                     (Call
6102                                        ("GPR",ATy(qTy,F64),
6103                                         Var("rs2",FTy 5)),qVar"s0")))),
6104                       Var("rd",FTy 5)]),qVar"s0")))))
6105;
6106val dfn'AND_def = Def
6107  ("dfn'AND",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
6108   Close
6109     (qVar"state",
6110      Apply
6111        (Call
6112           ("write'GPR",ATy(qTy,qTy),
6113            TP[Bop(BAnd,
6114                   Apply
6115                     (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
6116                      qVar"state"),
6117                   Apply
6118                     (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
6119                      qVar"state")),Var("rd",FTy 5)]),qVar"state")))
6120;
6121val dfn'OR_def = Def
6122  ("dfn'OR",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
6123   Close
6124     (qVar"state",
6125      Apply
6126        (Call
6127           ("write'GPR",ATy(qTy,qTy),
6128            TP[Bop(BOr,
6129                   Apply
6130                     (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
6131                      qVar"state"),
6132                   Apply
6133                     (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
6134                      qVar"state")),Var("rd",FTy 5)]),qVar"state")))
6135;
6136val dfn'XOR_def = Def
6137  ("dfn'XOR",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
6138   Close
6139     (qVar"state",
6140      Apply
6141        (Call
6142           ("write'GPR",ATy(qTy,qTy),
6143            TP[Bop(BXor,
6144                   Apply
6145                     (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
6146                      qVar"state"),
6147                   Apply
6148                     (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
6149                      qVar"state")),Var("rd",FTy 5)]),qVar"state")))
6150;
6151val dfn'SLL_def = Def
6152  ("dfn'SLL",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
6153   Close
6154     (qVar"state",
6155      Let(TP[bVar"v",qVar"s"],
6156          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
6157          ITE(bVar"v",
6158              Apply
6159                (Call
6160                   ("write'GPR",ATy(qTy,qTy),
6161                    TP[Bop(Lsl,
6162                           Apply
6163                             (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
6164                              qVar"s"),
6165                           Mop(Cast F64,
6166                               EX(Apply
6167                                    (Call
6168                                       ("GPR",ATy(qTy,F64),
6169                                        Var("rs2",FTy 5)),qVar"s"),LN 4,
6170                                  LN 0,FTy 5))),Var("rd",FTy 5)]),qVar"s"),
6171              Apply
6172                (Call
6173                   ("write'GPR",ATy(qTy,qTy),
6174                    TP[Bop(Lsl,
6175                           Apply
6176                             (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
6177                              qVar"s"),
6178                           Mop(Cast F64,
6179                               EX(Apply
6180                                    (Call
6181                                       ("GPR",ATy(qTy,F64),
6182                                        Var("rs2",FTy 5)),qVar"s"),LN 5,
6183                                  LN 0,FTy 6))),Var("rd",FTy 5)]),qVar"s")))))
6184;
6185val dfn'SLLW_def = Def
6186  ("dfn'SLLW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
6187   Close
6188     (qVar"state",
6189      Let(TP[bVar"v",qVar"s"],
6190          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
6191          ITE(bVar"v",
6192              Apply
6193                (Call
6194                   ("signalException",ATy(qTy,qTy),
6195                    LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"),
6196              Apply
6197                (Call
6198                   ("write'GPR",ATy(qTy,qTy),
6199                    TP[Mop(SE F64,
6200                           Bop(Lsl,
6201                               EX(Apply
6202                                    (Call
6203                                       ("GPR",ATy(qTy,F64),
6204                                        Var("rs1",FTy 5)),qVar"s"),LN 31,
6205                                  LN 0,F32),
6206                               Mop(Cast F32,
6207                                   EX(Apply
6208                                        (Call
6209                                           ("GPR",ATy(qTy,F64),
6210                                            Var("rs2",FTy 5)),qVar"s"),
6211                                      LN 4,LN 0,FTy 5)))),Var("rd",FTy 5)]),
6212                 qVar"s")))))
6213;
6214val dfn'SRL_def = Def
6215  ("dfn'SRL",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
6216   Close
6217     (qVar"state",
6218      Let(TP[bVar"v",qVar"s"],
6219          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
6220          ITE(bVar"v",
6221              Apply
6222                (Call
6223                   ("write'GPR",ATy(qTy,qTy),
6224                    TP[Mop(Cast F64,
6225                           Bop(Lsr,
6226                               EX(Apply
6227                                    (Call
6228                                       ("GPR",ATy(qTy,F64),
6229                                        Var("rs1",FTy 5)),qVar"s"),LN 31,
6230                                  LN 0,F32),
6231                               Mop(Cast F32,
6232                                   EX(Apply
6233                                        (Call
6234                                           ("GPR",ATy(qTy,F64),
6235                                            Var("rs2",FTy 5)),qVar"s"),
6236                                      LN 4,LN 0,FTy 5)))),Var("rd",FTy 5)]),
6237                 qVar"s"),
6238              Apply
6239                (Call
6240                   ("write'GPR",ATy(qTy,qTy),
6241                    TP[Bop(Lsr,
6242                           Apply
6243                             (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
6244                              qVar"s"),
6245                           Mop(Cast F64,
6246                               EX(Apply
6247                                    (Call
6248                                       ("GPR",ATy(qTy,F64),
6249                                        Var("rs2",FTy 5)),qVar"s"),LN 5,
6250                                  LN 0,FTy 6))),Var("rd",FTy 5)]),qVar"s")))))
6251;
6252val dfn'SRLW_def = Def
6253  ("dfn'SRLW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
6254   Close
6255     (qVar"state",
6256      Let(TP[bVar"v",qVar"s"],
6257          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
6258          ITE(bVar"v",
6259              Apply
6260                (Call
6261                   ("signalException",ATy(qTy,qTy),
6262                    LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"),
6263              Apply
6264                (Call
6265                   ("write'GPR",ATy(qTy,qTy),
6266                    TP[Mop(SE F64,
6267                           Bop(Lsr,
6268                               EX(Apply
6269                                    (Call
6270                                       ("GPR",ATy(qTy,F64),
6271                                        Var("rs1",FTy 5)),qVar"s"),LN 31,
6272                                  LN 0,F32),
6273                               Mop(Cast F32,
6274                                   EX(Apply
6275                                        (Call
6276                                           ("GPR",ATy(qTy,F64),
6277                                            Var("rs2",FTy 5)),qVar"s"),
6278                                      LN 4,LN 0,FTy 5)))),Var("rd",FTy 5)]),
6279                 qVar"s")))))
6280;
6281val dfn'SRA_def = Def
6282  ("dfn'SRA",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
6283   Close
6284     (qVar"state",
6285      Let(TP[bVar"v",qVar"s"],
6286          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
6287          ITE(bVar"v",
6288              Apply
6289                (Call
6290                   ("write'GPR",ATy(qTy,qTy),
6291                    TP[Mop(SE F64,
6292                           Bop(Asr,
6293                               EX(Apply
6294                                    (Call
6295                                       ("GPR",ATy(qTy,F64),
6296                                        Var("rs1",FTy 5)),qVar"s"),LN 31,
6297                                  LN 0,F32),
6298                               Mop(Cast F32,
6299                                   EX(Apply
6300                                        (Call
6301                                           ("GPR",ATy(qTy,F64),
6302                                            Var("rs2",FTy 5)),qVar"s"),
6303                                      LN 4,LN 0,FTy 5)))),Var("rd",FTy 5)]),
6304                 qVar"s"),
6305              Apply
6306                (Call
6307                   ("write'GPR",ATy(qTy,qTy),
6308                    TP[Bop(Asr,
6309                           Apply
6310                             (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
6311                              qVar"s"),
6312                           Mop(Cast F64,
6313                               EX(Apply
6314                                    (Call
6315                                       ("GPR",ATy(qTy,F64),
6316                                        Var("rs2",FTy 5)),qVar"s"),LN 5,
6317                                  LN 0,FTy 6))),Var("rd",FTy 5)]),qVar"s")))))
6318;
6319val dfn'SRAW_def = Def
6320  ("dfn'SRAW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
6321   Close
6322     (qVar"state",
6323      Let(TP[bVar"v",qVar"s"],
6324          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
6325          ITE(bVar"v",
6326              Apply
6327                (Call
6328                   ("signalException",ATy(qTy,qTy),
6329                    LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"),
6330              Apply
6331                (Call
6332                   ("write'GPR",ATy(qTy,qTy),
6333                    TP[Mop(SE F64,
6334                           Bop(Asr,
6335                               EX(Apply
6336                                    (Call
6337                                       ("GPR",ATy(qTy,F64),
6338                                        Var("rs1",FTy 5)),qVar"s"),LN 31,
6339                                  LN 0,F32),
6340                               Mop(Cast F32,
6341                                   EX(Apply
6342                                        (Call
6343                                           ("GPR",ATy(qTy,F64),
6344                                            Var("rs2",FTy 5)),qVar"s"),
6345                                      LN 4,LN 0,FTy 5)))),Var("rd",FTy 5)]),
6346                 qVar"s")))))
6347;
6348val dfn'MUL_def = Def
6349  ("dfn'MUL",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
6350   Close
6351     (qVar"state",
6352      Apply
6353        (Call
6354           ("write'GPR",ATy(qTy,qTy),
6355            TP[Bop(Mul,
6356                   Apply
6357                     (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
6358                      qVar"state"),
6359                   Apply
6360                     (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
6361                      qVar"state")),Var("rd",FTy 5)]),qVar"state")))
6362;
6363val dfn'MULH_def = Def
6364  ("dfn'MULH",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
6365   Close
6366     (qVar"state",
6367      Let(TP[bVar"v",qVar"s"],
6368          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
6369          Let(TP[bVar"v0",qVar"s0"],
6370              Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"),
6371              Let(Var("prod",FTy 128),
6372                  Bop(Mul,
6373                      Mop(SE(FTy 128),
6374                          ITE(bVar"v",
6375                              Mop(SE F64,
6376                                  EX(Apply
6377                                       (Call
6378                                          ("GPR",ATy(qTy,F64),
6379                                           Var("rs1",FTy 5)),qVar"s"),
6380                                     LN 31,LN 0,F32)),
6381                              Apply
6382                                (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
6383                                 qVar"s"))),
6384                      Mop(SE(FTy 128),
6385                          ITE(bVar"v0",
6386                              Mop(SE F64,
6387                                  EX(Apply
6388                                       (Call
6389                                          ("GPR",ATy(qTy,F64),
6390                                           Var("rs2",FTy 5)),qVar"s0"),
6391                                     LN 31,LN 0,F32)),
6392                              Apply
6393                                (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
6394                                 qVar"s0")))),
6395                  Let(TP[bVar"v",qVar"s"],
6396                      Apply
6397                        (Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),
6398                         qVar"s0"),
6399                      Apply
6400                        (Call
6401                           ("write'GPR",ATy(qTy,qTy),
6402                            TP[ITE(bVar"v",
6403                                   Mop(SE F64,
6404                                       EX(Var("prod",FTy 128),LN 63,LN 32,
6405                                          F32)),
6406                                   Mop(SE F64,
6407                                       EX(Var("prod",FTy 128),LN 127,
6408                                          LN 64,F64))),Var("rd",FTy 5)]),
6409                         qVar"s")))))))
6410;
6411val dfn'MULHU_def = Def
6412  ("dfn'MULHU",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
6413   Close
6414     (qVar"state",
6415      Let(TP[bVar"v",qVar"s"],
6416          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
6417          Let(TP[bVar"v0",qVar"s0"],
6418              Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"),
6419              Let(Var("prod",FTy 128),
6420                  Bop(Mul,
6421                      ITE(bVar"v",
6422                          Mop(Cast(FTy 128),
6423                              EX(Apply
6424                                   (Call
6425                                      ("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
6426                                    qVar"s"),LN 31,LN 0,F32)),
6427                          Mop(Cast(FTy 128),
6428                              Apply
6429                                (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
6430                                 qVar"s"))),
6431                      ITE(bVar"v0",
6432                          Mop(Cast(FTy 128),
6433                              EX(Apply
6434                                   (Call
6435                                      ("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
6436                                    qVar"s0"),LN 31,LN 0,F32)),
6437                          Mop(Cast(FTy 128),
6438                              Apply
6439                                (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
6440                                 qVar"s0")))),
6441                  Let(TP[bVar"v",qVar"s"],
6442                      Apply
6443                        (Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),
6444                         qVar"s0"),
6445                      Apply
6446                        (Call
6447                           ("write'GPR",ATy(qTy,qTy),
6448                            TP[ITE(bVar"v",
6449                                   Mop(Cast F64,
6450                                       EX(Var("prod",FTy 128),LN 63,LN 32,
6451                                          F32)),
6452                                   EX(Var("prod",FTy 128),LN 127,LN 64,F64)),
6453                               Var("rd",FTy 5)]),qVar"s")))))))
6454;
6455val dfn'MULHSU_def = Def
6456  ("dfn'MULHSU",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
6457   Close
6458     (qVar"state",
6459      Let(TP[bVar"v",qVar"s"],
6460          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
6461          Let(TP[bVar"v0",qVar"s0"],
6462              Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"),
6463              Let(Var("prod",FTy 128),
6464                  Bop(Mul,
6465                      ITE(bVar"v",
6466                          Mop(SE(FTy 128),
6467                              EX(Apply
6468                                   (Call
6469                                      ("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
6470                                    qVar"s"),LN 31,LN 0,F32)),
6471                          Mop(SE(FTy 128),
6472                              Apply
6473                                (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
6474                                 qVar"s"))),
6475                      ITE(bVar"v0",
6476                          Mop(Cast(FTy 128),
6477                              EX(Apply
6478                                   (Call
6479                                      ("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
6480                                    qVar"s0"),LN 31,LN 0,F32)),
6481                          Mop(Cast(FTy 128),
6482                              Apply
6483                                (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
6484                                 qVar"s0")))),
6485                  Let(TP[bVar"v",qVar"s"],
6486                      Apply
6487                        (Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),
6488                         qVar"s0"),
6489                      Apply
6490                        (Call
6491                           ("write'GPR",ATy(qTy,qTy),
6492                            TP[ITE(bVar"v",
6493                                   Mop(SE F64,
6494                                       EX(Var("prod",FTy 128),LN 63,LN 32,
6495                                          F32)),
6496                                   EX(Var("prod",FTy 128),LN 127,LN 64,F64)),
6497                               Var("rd",FTy 5)]),qVar"s")))))))
6498;
6499val dfn'MULW_def = Def
6500  ("dfn'MULW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
6501   Close
6502     (qVar"state",
6503      Let(TP[bVar"v",qVar"s"],
6504          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
6505          ITE(bVar"v",
6506              Apply
6507                (Call
6508                   ("signalException",ATy(qTy,qTy),
6509                    LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"),
6510              Apply
6511                (Call
6512                   ("write'GPR",ATy(qTy,qTy),
6513                    TP[Mop(SE F64,
6514                           EX(Mop(SE F64,
6515                                  Bop(Mul,
6516                                      EX(Apply
6517                                           (Call
6518                                              ("GPR",ATy(qTy,F64),
6519                                               Var("rs1",FTy 5)),qVar"s"),
6520                                         LN 31,LN 0,F32),
6521                                      EX(Apply
6522                                           (Call
6523                                              ("GPR",ATy(qTy,F64),
6524                                               Var("rs2",FTy 5)),qVar"s"),
6525                                         LN 31,LN 0,F32))),LN 31,LN 0,F32)),
6526                       Var("rd",FTy 5)]),qVar"s")))))
6527;
6528val dfn'DIV_def = Def
6529  ("dfn'DIV",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
6530   Close
6531     (qVar"state",
6532      ITE(EQ(Apply(Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),qVar"state"),
6533             LW(0,64)),
6534          Apply
6535            (Call
6536               ("write'GPR",ATy(qTy,qTy),
6537                TP[Mop(SE F64,LW(1,1)),Var("rd",FTy 5)]),qVar"state"),
6538          Apply
6539            (Call
6540               ("write'GPR",ATy(qTy,qTy),
6541                TP[Bop(Quot,
6542                       Apply
6543                         (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
6544                          qVar"state"),
6545                       Apply
6546                         (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
6547                          qVar"state")),Var("rd",FTy 5)]),qVar"state"))))
6548;
6549val dfn'REM_def = Def
6550  ("dfn'REM",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
6551   Close
6552     (qVar"state",
6553      ITE(EQ(Apply(Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),qVar"state"),
6554             LW(0,64)),
6555          Apply
6556            (Call
6557               ("write'GPR",ATy(qTy,qTy),
6558                TP[Apply
6559                     (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
6560                      qVar"state"),Var("rd",FTy 5)]),qVar"state"),
6561          Apply
6562            (Call
6563               ("write'GPR",ATy(qTy,qTy),
6564                TP[Bop(Rem,
6565                       Apply
6566                         (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
6567                          qVar"state"),
6568                       Apply
6569                         (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
6570                          qVar"state")),Var("rd",FTy 5)]),qVar"state"))))
6571;
6572val dfn'DIVU_def = Def
6573  ("dfn'DIVU",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
6574   Close
6575     (qVar"state",
6576      Let(TP[bVar"v",qVar"s"],
6577          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
6578          Let(TP[bVar"v0",qVar"s0"],
6579              Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"),
6580              Let(Var("v0",F64),
6581                  ITE(bVar"v0",
6582                      Mop(Cast F64,
6583                          EX(Apply
6584                               (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
6585                                qVar"s0"),LN 31,LN 0,F32)),
6586                      Apply
6587                        (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
6588                         qVar"s0")),
6589                  ITE(EQ(Var("v0",F64),LW(0,64)),
6590                      Apply
6591                        (Call
6592                           ("write'GPR",ATy(qTy,qTy),
6593                            TP[Mop(SE F64,LW(1,1)),Var("rd",FTy 5)]),
6594                         qVar"s0"),
6595                      Apply
6596                        (Call
6597                           ("write'GPR",ATy(qTy,qTy),
6598                            TP[Bop(Div,
6599                                   ITE(bVar"v",
6600                                       Mop(Cast F64,
6601                                           EX(Apply
6602                                                (Call
6603                                                   ("GPR",ATy(qTy,F64),
6604                                                    Var("rs1",FTy 5)),
6605                                                 qVar"s"),LN 31,LN 0,F32)),
6606                                       Apply
6607                                         (Call
6608                                            ("GPR",ATy(qTy,F64),
6609                                             Var("rs1",FTy 5)),qVar"s")),
6610                                   Var("v0",F64)),Var("rd",FTy 5)]),
6611                         qVar"s0")))))))
6612;
6613val dfn'REMU_def = Def
6614  ("dfn'REMU",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
6615   Close
6616     (qVar"state",
6617      ITE(EQ(Apply(Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),qVar"state"),
6618             LW(0,64)),
6619          Apply
6620            (Call
6621               ("write'GPR",ATy(qTy,qTy),
6622                TP[Apply
6623                     (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
6624                      qVar"state"),Var("rd",FTy 5)]),qVar"state"),
6625          Apply
6626            (Call
6627               ("write'GPR",ATy(qTy,qTy),
6628                TP[Bop(Mod,
6629                       Apply
6630                         (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
6631                          qVar"state"),
6632                       Apply
6633                         (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
6634                          qVar"state")),Var("rd",FTy 5)]),qVar"state"))))
6635;
6636val dfn'DIVW_def = Def
6637  ("dfn'DIVW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
6638   Close
6639     (qVar"state",
6640      Let(TP[bVar"v",qVar"s"],
6641          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
6642          ITE(bVar"v",
6643              Apply
6644                (Call
6645                   ("signalException",ATy(qTy,qTy),
6646                    LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"),
6647              Let(Var("v0",F32),
6648                  EX(Apply
6649                       (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),qVar"s"),
6650                     LN 31,LN 0,F32),
6651                  ITE(EQ(Var("v0",F32),LW(0,32)),
6652                      Apply
6653                        (Call
6654                           ("write'GPR",ATy(qTy,qTy),
6655                            TP[Mop(SE F64,LW(1,1)),Var("rd",FTy 5)]),
6656                         qVar"s"),
6657                      Apply
6658                        (Call
6659                           ("write'GPR",ATy(qTy,qTy),
6660                            TP[Mop(SE F64,
6661                                   Bop(Quot,
6662                                       EX(Apply
6663                                            (Call
6664                                               ("GPR",ATy(qTy,F64),
6665                                                Var("rs1",FTy 5)),qVar"s"),
6666                                          LN 31,LN 0,F32),Var("v0",F32))),
6667                               Var("rd",FTy 5)]),qVar"s")))))))
6668;
6669val dfn'REMW_def = Def
6670  ("dfn'REMW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
6671   Close
6672     (qVar"state",
6673      Let(TP[bVar"v",qVar"s"],
6674          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
6675          ITE(bVar"v",
6676              Apply
6677                (Call
6678                   ("signalException",ATy(qTy,qTy),
6679                    LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"),
6680              Let(Var("v",F32),
6681                  EX(Apply
6682                       (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"s"),
6683                     LN 31,LN 0,F32),
6684                  Let(Var("v0",F32),
6685                      EX(Apply
6686                           (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
6687                            qVar"s"),LN 31,LN 0,F32),
6688                      ITE(EQ(Var("v0",F32),LW(0,32)),
6689                          Apply
6690                            (Call
6691                               ("write'GPR",ATy(qTy,qTy),
6692                                TP[Mop(SE F64,Var("v",F32)),
6693                                   Var("rd",FTy 5)]),qVar"s"),
6694                          Apply
6695                            (Call
6696                               ("write'GPR",ATy(qTy,qTy),
6697                                TP[Mop(SE F64,
6698                                       Bop(Rem,Var("v",F32),Var("v0",F32))),
6699                                   Var("rd",FTy 5)]),qVar"s"))))))))
6700;
6701val dfn'DIVUW_def = Def
6702  ("dfn'DIVUW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
6703   Close
6704     (qVar"state",
6705      Let(TP[bVar"v",qVar"s"],
6706          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
6707          ITE(bVar"v",
6708              Apply
6709                (Call
6710                   ("signalException",ATy(qTy,qTy),
6711                    LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"),
6712              Let(Var("v0",F32),
6713                  EX(Apply
6714                       (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),qVar"s"),
6715                     LN 31,LN 0,F32),
6716                  ITE(EQ(Var("v0",F32),LW(0,32)),
6717                      Apply
6718                        (Call
6719                           ("write'GPR",ATy(qTy,qTy),
6720                            TP[Mop(SE F64,LW(1,1)),Var("rd",FTy 5)]),
6721                         qVar"s"),
6722                      Apply
6723                        (Call
6724                           ("write'GPR",ATy(qTy,qTy),
6725                            TP[Mop(SE F64,
6726                                   Bop(Div,
6727                                       EX(Apply
6728                                            (Call
6729                                               ("GPR",ATy(qTy,F64),
6730                                                Var("rs1",FTy 5)),qVar"s"),
6731                                          LN 31,LN 0,F32),Var("v0",F32))),
6732                               Var("rd",FTy 5)]),qVar"s")))))))
6733;
6734val dfn'REMUW_def = Def
6735  ("dfn'REMUW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
6736   Close
6737     (qVar"state",
6738      Let(TP[bVar"v",qVar"s"],
6739          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
6740          ITE(bVar"v",
6741              Apply
6742                (Call
6743                   ("signalException",ATy(qTy,qTy),
6744                    LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"),
6745              Let(Var("v",F32),
6746                  EX(Apply
6747                       (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"s"),
6748                     LN 31,LN 0,F32),
6749                  Let(Var("v0",F32),
6750                      EX(Apply
6751                           (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
6752                            qVar"s"),LN 31,LN 0,F32),
6753                      ITE(EQ(Var("v0",F32),LW(0,32)),
6754                          Apply
6755                            (Call
6756                               ("write'GPR",ATy(qTy,qTy),
6757                                TP[Mop(SE F64,Var("v",F32)),
6758                                   Var("rd",FTy 5)]),qVar"s"),
6759                          Apply
6760                            (Call
6761                               ("write'GPR",ATy(qTy,qTy),
6762                                TP[Mop(SE F64,
6763                                       Bop(Mod,Var("v",F32),Var("v0",F32))),
6764                                   Var("rd",FTy 5)]),qVar"s"))))))))
6765;
6766val dfn'JAL_def = Def
6767  ("dfn'JAL",TP[Var("rd",FTy 5),Var("imm",FTy 20)],
6768   Close
6769     (qVar"state",
6770      Let(Var("v",F64),
6771          Bop(Add,Apply(Const("PC",ATy(qTy,F64)),qVar"state"),
6772              Bop(Lsl,Mop(SE F64,Var("imm",FTy 20)),LN 1)),
6773          ITE(Mop(Not,EQ(EX(Var("v",F64),LN 1,LN 0,FTy 2),LW(0,2))),
6774              Apply
6775                (Call
6776                   ("signalAddressException",ATy(qTy,qTy),
6777                    TP[LC("Fetch_Misaligned",CTy"ExceptionType"),
6778                       Var("v",F64)]),qVar"state"),
6779              Apply
6780                (Call("branchTo",ATy(qTy,qTy),Var("v",F64)),
6781                 Apply
6782                   (Call
6783                      ("write'GPR",ATy(qTy,qTy),
6784                       TP[Bop(Add,
6785                              Apply(Const("PC",ATy(qTy,F64)),qVar"state"),
6786                              LW(4,64)),Var("rd",FTy 5)]),qVar"state"))))))
6787;
6788val dfn'JALR_def = Def
6789  ("dfn'JALR",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)],
6790   Close
6791     (qVar"state",
6792      Let(Var("v",F64),
6793          Bop(BAnd,
6794              Bop(Add,
6795                  Apply
6796                    (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
6797                  Mop(SE F64,Var("imm",FTy 12))),Mop(SE F64,LW(2,2))),
6798          ITE(Mop(Not,EQ(EX(Var("v",F64),LN 1,LN 0,FTy 2),LW(0,2))),
6799              Apply
6800                (Call
6801                   ("signalAddressException",ATy(qTy,qTy),
6802                    TP[LC("Fetch_Misaligned",CTy"ExceptionType"),
6803                       Var("v",F64)]),qVar"state"),
6804              Apply
6805                (Call("branchTo",ATy(qTy,qTy),Var("v",F64)),
6806                 Apply
6807                   (Call
6808                      ("write'GPR",ATy(qTy,qTy),
6809                       TP[Bop(Add,
6810                              Apply(Const("PC",ATy(qTy,F64)),qVar"state"),
6811                              LW(4,64)),Var("rd",FTy 5)]),qVar"state"))))))
6812;
6813val dfn'BEQ_def = Def
6814  ("dfn'BEQ",TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("offs",FTy 12)],
6815   Close
6816     (qVar"state",
6817      Let(TP[bVar"v",qVar"s"],
6818          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
6819          Let(TP[bVar"v0",qVar"s0"],
6820              Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"),
6821              ITE(EQ(ITE(bVar"v",
6822                         Mop(SE F64,
6823                             EX(Apply
6824                                  (Call
6825                                     ("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
6826                                   qVar"s"),LN 31,LN 0,F32)),
6827                         Apply
6828                           (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
6829                            qVar"s")),
6830                     ITE(bVar"v0",
6831                         Mop(SE F64,
6832                             EX(Apply
6833                                  (Call
6834                                     ("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
6835                                   qVar"s0"),LN 31,LN 0,F32)),
6836                         Apply
6837                           (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
6838                            qVar"s0"))),
6839                  Apply
6840                    (Call
6841                       ("branchTo",ATy(qTy,qTy),
6842                        Bop(Add,Apply(Const("PC",ATy(qTy,F64)),qVar"s0"),
6843                            Bop(Lsl,Mop(SE F64,Var("offs",FTy 12)),LN 1))),
6844                     qVar"s0"),qVar"s0")))))
6845;
6846val dfn'BNE_def = Def
6847  ("dfn'BNE",TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("offs",FTy 12)],
6848   Close
6849     (qVar"state",
6850      Let(TP[bVar"v",qVar"s"],
6851          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
6852          Let(TP[bVar"v0",qVar"s0"],
6853              Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"),
6854              ITE(Mop(Not,
6855                      EQ(ITE(bVar"v",
6856                             Mop(SE F64,
6857                                 EX(Apply
6858                                      (Call
6859                                         ("GPR",ATy(qTy,F64),
6860                                          Var("rs1",FTy 5)),qVar"s"),
6861                                    LN 31,LN 0,F32)),
6862                             Apply
6863                               (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
6864                                qVar"s")),
6865                         ITE(bVar"v0",
6866                             Mop(SE F64,
6867                                 EX(Apply
6868                                      (Call
6869                                         ("GPR",ATy(qTy,F64),
6870                                          Var("rs2",FTy 5)),qVar"s0"),
6871                                    LN 31,LN 0,F32)),
6872                             Apply
6873                               (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
6874                                qVar"s0")))),
6875                  Apply
6876                    (Call
6877                       ("branchTo",ATy(qTy,qTy),
6878                        Bop(Add,Apply(Const("PC",ATy(qTy,F64)),qVar"s0"),
6879                            Bop(Lsl,Mop(SE F64,Var("offs",FTy 12)),LN 1))),
6880                     qVar"s0"),qVar"s0")))))
6881;
6882val dfn'BLT_def = Def
6883  ("dfn'BLT",TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("offs",FTy 12)],
6884   Close
6885     (qVar"state",
6886      Let(TP[bVar"v",qVar"s"],
6887          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
6888          Let(TP[bVar"v0",qVar"s0"],
6889              Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"),
6890              ITE(Bop(Lt,
6891                      ITE(bVar"v",
6892                          Mop(SE F64,
6893                              EX(Apply
6894                                   (Call
6895                                      ("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
6896                                    qVar"s"),LN 31,LN 0,F32)),
6897                          Apply
6898                            (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
6899                             qVar"s")),
6900                      ITE(bVar"v0",
6901                          Mop(SE F64,
6902                              EX(Apply
6903                                   (Call
6904                                      ("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
6905                                    qVar"s0"),LN 31,LN 0,F32)),
6906                          Apply
6907                            (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
6908                             qVar"s0"))),
6909                  Apply
6910                    (Call
6911                       ("branchTo",ATy(qTy,qTy),
6912                        Bop(Add,Apply(Const("PC",ATy(qTy,F64)),qVar"s0"),
6913                            Bop(Lsl,Mop(SE F64,Var("offs",FTy 12)),LN 1))),
6914                     qVar"s0"),qVar"s0")))))
6915;
6916val dfn'BLTU_def = Def
6917  ("dfn'BLTU",TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("offs",FTy 12)],
6918   Close
6919     (qVar"state",
6920      Let(TP[bVar"v",qVar"s"],
6921          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
6922          Let(TP[bVar"v0",qVar"s0"],
6923              Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"),
6924              ITE(Bop(Ult,
6925                      ITE(bVar"v",
6926                          Mop(SE F64,
6927                              EX(Apply
6928                                   (Call
6929                                      ("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
6930                                    qVar"s"),LN 31,LN 0,F32)),
6931                          Apply
6932                            (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
6933                             qVar"s")),
6934                      ITE(bVar"v0",
6935                          Mop(SE F64,
6936                              EX(Apply
6937                                   (Call
6938                                      ("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
6939                                    qVar"s0"),LN 31,LN 0,F32)),
6940                          Apply
6941                            (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
6942                             qVar"s0"))),
6943                  Apply
6944                    (Call
6945                       ("branchTo",ATy(qTy,qTy),
6946                        Bop(Add,Apply(Const("PC",ATy(qTy,F64)),qVar"s0"),
6947                            Bop(Lsl,Mop(SE F64,Var("offs",FTy 12)),LN 1))),
6948                     qVar"s0"),qVar"s0")))))
6949;
6950val dfn'BGE_def = Def
6951  ("dfn'BGE",TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("offs",FTy 12)],
6952   Close
6953     (qVar"state",
6954      Let(TP[bVar"v",qVar"s"],
6955          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
6956          Let(TP[bVar"v0",qVar"s0"],
6957              Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"),
6958              ITE(Bop(Ge,
6959                      ITE(bVar"v",
6960                          Mop(SE F64,
6961                              EX(Apply
6962                                   (Call
6963                                      ("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
6964                                    qVar"s"),LN 31,LN 0,F32)),
6965                          Apply
6966                            (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
6967                             qVar"s")),
6968                      ITE(bVar"v0",
6969                          Mop(SE F64,
6970                              EX(Apply
6971                                   (Call
6972                                      ("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
6973                                    qVar"s0"),LN 31,LN 0,F32)),
6974                          Apply
6975                            (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
6976                             qVar"s0"))),
6977                  Apply
6978                    (Call
6979                       ("branchTo",ATy(qTy,qTy),
6980                        Bop(Add,Apply(Const("PC",ATy(qTy,F64)),qVar"s0"),
6981                            Bop(Lsl,Mop(SE F64,Var("offs",FTy 12)),LN 1))),
6982                     qVar"s0"),qVar"s0")))))
6983;
6984val dfn'BGEU_def = Def
6985  ("dfn'BGEU",TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("offs",FTy 12)],
6986   Close
6987     (qVar"state",
6988      Let(TP[bVar"v",qVar"s"],
6989          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
6990          Let(TP[bVar"v0",qVar"s0"],
6991              Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"),
6992              ITE(Bop(Uge,
6993                      ITE(bVar"v",
6994                          Mop(SE F64,
6995                              EX(Apply
6996                                   (Call
6997                                      ("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
6998                                    qVar"s"),LN 31,LN 0,F32)),
6999                          Apply
7000                            (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
7001                             qVar"s")),
7002                      ITE(bVar"v0",
7003                          Mop(SE F64,
7004                              EX(Apply
7005                                   (Call
7006                                      ("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
7007                                    qVar"s0"),LN 31,LN 0,F32)),
7008                          Apply
7009                            (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
7010                             qVar"s0"))),
7011                  Apply
7012                    (Call
7013                       ("branchTo",ATy(qTy,qTy),
7014                        Bop(Add,Apply(Const("PC",ATy(qTy,F64)),qVar"s0"),
7015                            Bop(Lsl,Mop(SE F64,Var("offs",FTy 12)),LN 1))),
7016                     qVar"s0"),qVar"s0")))))
7017;
7018val dfn'LW_def = Def
7019  ("dfn'LW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("offs",FTy 12)],
7020   Close
7021     (qVar"state",
7022      Let(Var("v",F64),
7023          Bop(Add,
7024              Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
7025              Mop(SE F64,Var("offs",FTy 12))),
7026          Let(TP[Var("v0",OTy F64),qVar"s"],
7027              Apply
7028                (Call
7029                   ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
7030                    TP[Var("v",F64),LC("Data",CTy"fetchType"),
7031                       LC("Read",CTy"accessType")]),qVar"state"),
7032              CS(Var("v0",OTy F64),
7033                 [(Mop(Some,Var("pAddr",F64)),
7034                   Apply
7035                     (Call
7036                        ("write'GPR",ATy(qTy,qTy),
7037                         TP[Mop(SE F64,
7038                                EX(Apply
7039                                     (Call
7040                                        ("rawReadData",ATy(qTy,F64),
7041                                         Var("pAddr",F64)),qVar"s"),LN 31,
7042                                   LN 0,F32)),Var("rd",FTy 5)]),qVar"s")),
7043                  (LO F64,
7044                   Apply
7045                     (Call
7046                        ("signalAddressException",ATy(qTy,qTy),
7047                         TP[LC("Load_Fault",CTy"ExceptionType"),
7048                            Var("v",F64)]),qVar"s"))])))))
7049;
7050val dfn'LWU_def = Def
7051  ("dfn'LWU",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("offs",FTy 12)],
7052   Close
7053     (qVar"state",
7054      Let(TP[bVar"v",qVar"s"],
7055          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
7056          ITE(bVar"v",
7057              Apply
7058                (Call
7059                   ("signalException",ATy(qTy,qTy),
7060                    LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"),
7061              Let(Var("v",F64),
7062                  Bop(Add,
7063                      Apply
7064                        (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"s"),
7065                      Mop(SE F64,Var("offs",FTy 12))),
7066                  Let(TP[Var("v0",OTy F64),qVar"s"],
7067                      Apply
7068                        (Call
7069                           ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
7070                            TP[Var("v",F64),LC("Data",CTy"fetchType"),
7071                               LC("Read",CTy"accessType")]),qVar"s"),
7072                      CS(Var("v0",OTy F64),
7073                         [(Mop(Some,Var("pAddr",F64)),
7074                           Apply
7075                             (Call
7076                                ("write'GPR",ATy(qTy,qTy),
7077                                 TP[Mop(Cast F64,
7078                                        EX(Apply
7079                                             (Call
7080                                                ("rawReadData",
7081                                                 ATy(qTy,F64),
7082                                                 Var("pAddr",F64)),qVar"s"),
7083                                           LN 31,LN 0,F32)),
7084                                    Var("rd",FTy 5)]),qVar"s")),
7085                          (LO F64,
7086                           Apply
7087                             (Call
7088                                ("signalAddressException",ATy(qTy,qTy),
7089                                 TP[LC("Load_Fault",CTy"ExceptionType"),
7090                                    Var("v",F64)]),qVar"s"))])))))))
7091;
7092val dfn'LH_def = Def
7093  ("dfn'LH",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("offs",FTy 12)],
7094   Close
7095     (qVar"state",
7096      Let(Var("v",F64),
7097          Bop(Add,
7098              Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
7099              Mop(SE F64,Var("offs",FTy 12))),
7100          Let(TP[Var("v0",OTy F64),qVar"s"],
7101              Apply
7102                (Call
7103                   ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
7104                    TP[Var("v",F64),LC("Data",CTy"fetchType"),
7105                       LC("Read",CTy"accessType")]),qVar"state"),
7106              CS(Var("v0",OTy F64),
7107                 [(Mop(Some,Var("pAddr",F64)),
7108                   Apply
7109                     (Call
7110                        ("write'GPR",ATy(qTy,qTy),
7111                         TP[Mop(SE F64,
7112                                EX(Apply
7113                                     (Call
7114                                        ("rawReadData",ATy(qTy,F64),
7115                                         Var("pAddr",F64)),qVar"s"),LN 15,
7116                                   LN 0,F16)),Var("rd",FTy 5)]),qVar"s")),
7117                  (LO F64,
7118                   Apply
7119                     (Call
7120                        ("signalAddressException",ATy(qTy,qTy),
7121                         TP[LC("Load_Fault",CTy"ExceptionType"),
7122                            Var("v",F64)]),qVar"s"))])))))
7123;
7124val dfn'LHU_def = Def
7125  ("dfn'LHU",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("offs",FTy 12)],
7126   Close
7127     (qVar"state",
7128      Let(Var("v",F64),
7129          Bop(Add,
7130              Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
7131              Mop(SE F64,Var("offs",FTy 12))),
7132          Let(TP[Var("v0",OTy F64),qVar"s"],
7133              Apply
7134                (Call
7135                   ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
7136                    TP[Var("v",F64),LC("Data",CTy"fetchType"),
7137                       LC("Read",CTy"accessType")]),qVar"state"),
7138              CS(Var("v0",OTy F64),
7139                 [(Mop(Some,Var("pAddr",F64)),
7140                   Apply
7141                     (Call
7142                        ("write'GPR",ATy(qTy,qTy),
7143                         TP[Mop(Cast F64,
7144                                EX(Apply
7145                                     (Call
7146                                        ("rawReadData",ATy(qTy,F64),
7147                                         Var("pAddr",F64)),qVar"s"),LN 15,
7148                                   LN 0,F16)),Var("rd",FTy 5)]),qVar"s")),
7149                  (LO F64,
7150                   Apply
7151                     (Call
7152                        ("signalAddressException",ATy(qTy,qTy),
7153                         TP[LC("Load_Fault",CTy"ExceptionType"),
7154                            Var("v",F64)]),qVar"s"))])))))
7155;
7156val dfn'LB_def = Def
7157  ("dfn'LB",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("offs",FTy 12)],
7158   Close
7159     (qVar"state",
7160      Let(Var("v",F64),
7161          Bop(Add,
7162              Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
7163              Mop(SE F64,Var("offs",FTy 12))),
7164          Let(TP[Var("v0",OTy F64),qVar"s"],
7165              Apply
7166                (Call
7167                   ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
7168                    TP[Var("v",F64),LC("Data",CTy"fetchType"),
7169                       LC("Read",CTy"accessType")]),qVar"state"),
7170              CS(Var("v0",OTy F64),
7171                 [(Mop(Some,Var("pAddr",F64)),
7172                   Apply
7173                     (Call
7174                        ("write'GPR",ATy(qTy,qTy),
7175                         TP[Mop(SE F64,
7176                                EX(Apply
7177                                     (Call
7178                                        ("rawReadData",ATy(qTy,F64),
7179                                         Var("pAddr",F64)),qVar"s"),LN 7,
7180                                   LN 0,F8)),Var("rd",FTy 5)]),qVar"s")),
7181                  (LO F64,
7182                   Apply
7183                     (Call
7184                        ("signalAddressException",ATy(qTy,qTy),
7185                         TP[LC("Load_Fault",CTy"ExceptionType"),
7186                            Var("v",F64)]),qVar"s"))])))))
7187;
7188val dfn'LBU_def = Def
7189  ("dfn'LBU",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("offs",FTy 12)],
7190   Close
7191     (qVar"state",
7192      Let(Var("v",F64),
7193          Bop(Add,
7194              Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
7195              Mop(SE F64,Var("offs",FTy 12))),
7196          Let(TP[Var("v0",OTy F64),qVar"s"],
7197              Apply
7198                (Call
7199                   ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
7200                    TP[Var("v",F64),LC("Data",CTy"fetchType"),
7201                       LC("Read",CTy"accessType")]),qVar"state"),
7202              CS(Var("v0",OTy F64),
7203                 [(Mop(Some,Var("pAddr",F64)),
7204                   Apply
7205                     (Call
7206                        ("write'GPR",ATy(qTy,qTy),
7207                         TP[Mop(Cast F64,
7208                                EX(Apply
7209                                     (Call
7210                                        ("rawReadData",ATy(qTy,F64),
7211                                         Var("pAddr",F64)),qVar"s"),LN 7,
7212                                   LN 0,F8)),Var("rd",FTy 5)]),qVar"s")),
7213                  (LO F64,
7214                   Apply
7215                     (Call
7216                        ("signalAddressException",ATy(qTy,qTy),
7217                         TP[LC("Load_Fault",CTy"ExceptionType"),
7218                            Var("v",F64)]),qVar"s"))])))))
7219;
7220val dfn'LD_def = Def
7221  ("dfn'LD",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("offs",FTy 12)],
7222   Close
7223     (qVar"state",
7224      Let(TP[bVar"v",qVar"s"],
7225          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
7226          ITE(bVar"v",
7227              Apply
7228                (Call
7229                   ("signalException",ATy(qTy,qTy),
7230                    LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"),
7231              Let(Var("v",F64),
7232                  Bop(Add,
7233                      Apply
7234                        (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"s"),
7235                      Mop(SE F64,Var("offs",FTy 12))),
7236                  Let(TP[Var("v0",OTy F64),qVar"s"],
7237                      Apply
7238                        (Call
7239                           ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
7240                            TP[Var("v",F64),LC("Data",CTy"fetchType"),
7241                               LC("Read",CTy"accessType")]),qVar"s"),
7242                      CS(Var("v0",OTy F64),
7243                         [(Mop(Some,Var("pAddr",F64)),
7244                           Apply
7245                             (Call
7246                                ("write'GPR",ATy(qTy,qTy),
7247                                 TP[Apply
7248                                      (Call
7249                                         ("rawReadData",ATy(qTy,F64),
7250                                          Var("pAddr",F64)),qVar"s"),
7251                                    Var("rd",FTy 5)]),qVar"s")),
7252                          (LO F64,
7253                           Apply
7254                             (Call
7255                                ("signalAddressException",ATy(qTy,qTy),
7256                                 TP[LC("Load_Fault",CTy"ExceptionType"),
7257                                    Var("v",F64)]),qVar"s"))])))))))
7258;
7259val dfn'SW_def = Def
7260  ("dfn'SW",TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("offs",FTy 12)],
7261   Close
7262     (qVar"state",
7263      Let(Var("v",F64),
7264          Bop(Add,
7265              Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
7266              Mop(SE F64,Var("offs",FTy 12))),
7267          Let(TP[Var("v0",OTy F64),qVar"s"],
7268              Apply
7269                (Call
7270                   ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
7271                    TP[Var("v",F64),LC("Data",CTy"fetchType"),
7272                       LC("Write",CTy"accessType")]),qVar"state"),
7273              CS(Var("v0",OTy F64),
7274                 [(Mop(Some,Var("pAddr",F64)),
7275                   Apply
7276                     (Call
7277                        ("rawWriteData",ATy(qTy,qTy),
7278                         TP[Var("pAddr",F64),
7279                            Apply
7280                              (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
7281                               qVar"s"),LN 4]),qVar"s")),
7282                  (LO F64,
7283                   Apply
7284                     (Call
7285                        ("signalAddressException",ATy(qTy,qTy),
7286                         TP[LC("Store_AMO_Fault",CTy"ExceptionType"),
7287                            Var("v",F64)]),qVar"s"))])))))
7288;
7289val dfn'SH_def = Def
7290  ("dfn'SH",TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("offs",FTy 12)],
7291   Close
7292     (qVar"state",
7293      Let(Var("v",F64),
7294          Bop(Add,
7295              Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
7296              Mop(SE F64,Var("offs",FTy 12))),
7297          Let(TP[Var("v0",OTy F64),qVar"s"],
7298              Apply
7299                (Call
7300                   ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
7301                    TP[Var("v",F64),LC("Data",CTy"fetchType"),
7302                       LC("Write",CTy"accessType")]),qVar"state"),
7303              CS(Var("v0",OTy F64),
7304                 [(Mop(Some,Var("pAddr",F64)),
7305                   Apply
7306                     (Call
7307                        ("rawWriteData",ATy(qTy,qTy),
7308                         TP[Var("pAddr",F64),
7309                            Apply
7310                              (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
7311                               qVar"s"),LN 2]),qVar"s")),
7312                  (LO F64,
7313                   Apply
7314                     (Call
7315                        ("signalAddressException",ATy(qTy,qTy),
7316                         TP[LC("Store_AMO_Fault",CTy"ExceptionType"),
7317                            Var("v",F64)]),qVar"s"))])))))
7318;
7319val dfn'SB_def = Def
7320  ("dfn'SB",TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("offs",FTy 12)],
7321   Close
7322     (qVar"state",
7323      Let(Var("v",F64),
7324          Bop(Add,
7325              Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
7326              Mop(SE F64,Var("offs",FTy 12))),
7327          Let(TP[Var("v0",OTy F64),qVar"s"],
7328              Apply
7329                (Call
7330                   ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
7331                    TP[Var("v",F64),LC("Data",CTy"fetchType"),
7332                       LC("Write",CTy"accessType")]),qVar"state"),
7333              CS(Var("v0",OTy F64),
7334                 [(Mop(Some,Var("pAddr",F64)),
7335                   Apply
7336                     (Call
7337                        ("rawWriteData",ATy(qTy,qTy),
7338                         TP[Var("pAddr",F64),
7339                            Apply
7340                              (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
7341                               qVar"s"),LN 1]),qVar"s")),
7342                  (LO F64,
7343                   Apply
7344                     (Call
7345                        ("signalAddressException",ATy(qTy,qTy),
7346                         TP[LC("Store_AMO_Fault",CTy"ExceptionType"),
7347                            Var("v",F64)]),qVar"s"))])))))
7348;
7349val dfn'SD_def = Def
7350  ("dfn'SD",TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("offs",FTy 12)],
7351   Close
7352     (qVar"state",
7353      Let(TP[bVar"v",qVar"s"],
7354          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
7355          ITE(bVar"v",
7356              Apply
7357                (Call
7358                   ("signalException",ATy(qTy,qTy),
7359                    LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"),
7360              Let(Var("v",F64),
7361                  Bop(Add,
7362                      Apply
7363                        (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"s"),
7364                      Mop(SE F64,Var("offs",FTy 12))),
7365                  Let(TP[Var("v0",OTy F64),qVar"s"],
7366                      Apply
7367                        (Call
7368                           ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
7369                            TP[Var("v",F64),LC("Data",CTy"fetchType"),
7370                               LC("Write",CTy"accessType")]),qVar"s"),
7371                      CS(Var("v0",OTy F64),
7372                         [(Mop(Some,Var("pAddr",F64)),
7373                           Apply
7374                             (Call
7375                                ("rawWriteData",ATy(qTy,qTy),
7376                                 TP[Var("pAddr",F64),
7377                                    Apply
7378                                      (Call
7379                                         ("GPR",ATy(qTy,F64),
7380                                          Var("rs2",FTy 5)),qVar"s"),LN 8]),
7381                              qVar"s")),
7382                          (LO F64,
7383                           Apply
7384                             (Call
7385                                ("signalAddressException",ATy(qTy,qTy),
7386                                 TP[LC("Store_AMO_Fault",
7387                                       CTy"ExceptionType"),Var("v",F64)]),
7388                              qVar"s"))])))))))
7389;
7390val dfn'FENCE_def = Def
7391  ("dfn'FENCE",
7392   TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("pred",F4),Var("succ",F4)],LU)
7393;
7394val dfn'FENCE_I_def = Def
7395  ("dfn'FENCE_I",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)],LU)
7396;
7397val dfn'LR_W_def = Def
7398  ("dfn'LR_W",
7399   TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5)],
7400   Close
7401     (qVar"state",
7402      Let(Var("v",F64),
7403          Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
7404          ITE(Mop(Not,EQ(EX(Var("v",F64),LN 1,LN 0,FTy 2),LW(0,2))),
7405              Apply
7406                (Call
7407                   ("signalAddressException",ATy(qTy,qTy),
7408                    TP[LC("AMO_Misaligned",CTy"ExceptionType"),
7409                       Var("v",F64)]),qVar"state"),
7410              Let(TP[Var("v0",OTy F64),qVar"s"],
7411                  Apply
7412                    (Call
7413                       ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
7414                        TP[Var("v",F64),LC("Data",CTy"fetchType"),
7415                           LC("Read",CTy"accessType")]),qVar"state"),
7416                  CS(Var("v0",OTy F64),
7417                     [(Mop(Some,Var("pAddr",F64)),
7418                       Apply
7419                         (Call
7420                            ("write'ReserveLoad",ATy(qTy,qTy),
7421                             Mop(Some,Var("v",F64))),
7422                          Apply
7423                            (Call
7424                               ("write'GPR",ATy(qTy,qTy),
7425                                TP[Mop(SE F64,
7426                                       EX(Apply
7427                                            (Call
7428                                               ("rawReadData",
7429                                                ATy(qTy,F64),
7430                                                Var("pAddr",F64)),qVar"s"),
7431                                          LN 31,LN 0,F32)),Var("rd",FTy 5)]),
7432                             qVar"s"))),
7433                      (LO F64,
7434                       Apply
7435                         (Call
7436                            ("signalAddressException",ATy(qTy,qTy),
7437                             TP[LC("Load_Fault",CTy"ExceptionType"),
7438                                Var("v",F64)]),qVar"s"))]))))))
7439;
7440val dfn'LR_D_def = Def
7441  ("dfn'LR_D",
7442   TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5)],
7443   Close
7444     (qVar"state",
7445      Let(TP[bVar"v",qVar"s"],
7446          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
7447          ITE(bVar"v",
7448              Apply
7449                (Call
7450                   ("signalException",ATy(qTy,qTy),
7451                    LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"),
7452              Let(Var("v",F64),
7453                  Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"s"),
7454                  ITE(Mop(Not,EQ(EX(Var("v",F64),LN 2,LN 0,FTy 3),LW(0,3))),
7455                      Apply
7456                        (Call
7457                           ("signalAddressException",ATy(qTy,qTy),
7458                            TP[LC("AMO_Misaligned",CTy"ExceptionType"),
7459                               Var("v",F64)]),qVar"s"),
7460                      Let(TP[Var("v0",OTy F64),qVar"s"],
7461                          Apply
7462                            (Call
7463                               ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
7464                                TP[Var("v",F64),LC("Data",CTy"fetchType"),
7465                                   LC("Read",CTy"accessType")]),qVar"s"),
7466                          CS(Var("v0",OTy F64),
7467                             [(Mop(Some,Var("pAddr",F64)),
7468                               Apply
7469                                 (Call
7470                                    ("write'ReserveLoad",ATy(qTy,qTy),
7471                                     Mop(Some,Var("v",F64))),
7472                                  Apply
7473                                    (Call
7474                                       ("write'GPR",ATy(qTy,qTy),
7475                                        TP[Apply
7476                                             (Call
7477                                                ("rawReadData",
7478                                                 ATy(qTy,F64),
7479                                                 Var("pAddr",F64)),qVar"s"),
7480                                           Var("rd",FTy 5)]),qVar"s"))),
7481                              (LO F64,
7482                               Apply
7483                                 (Call
7484                                    ("signalAddressException",
7485                                     ATy(qTy,qTy),
7486                                     TP[LC("Load_Fault",CTy"ExceptionType"),
7487                                        Var("v",F64)]),qVar"s"))]))))))))
7488;
7489val dfn'SC_W_def = Def
7490  ("dfn'SC_W",
7491   TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5),
7492      Var("rs2",FTy 5)],
7493   Close
7494     (qVar"state",
7495      Let(Var("v",F64),
7496          Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
7497          ITB([(Mop(Not,EQ(EX(Var("v",F64),LN 1,LN 0,FTy 2),LW(0,2))),
7498                Apply
7499                  (Call
7500                     ("signalAddressException",ATy(qTy,qTy),
7501                      TP[LC("AMO_Misaligned",CTy"ExceptionType"),
7502                         Var("v",F64)]),qVar"state")),
7503               (Mop(Not,
7504                    Apply
7505                      (Call
7506                         ("matchLoadReservation",ATy(qTy,bTy),Var("v",F64)),
7507                       qVar"state")),
7508                Apply
7509                  (Call
7510                     ("write'GPR",ATy(qTy,qTy),
7511                      TP[LW(1,64),Var("rd",FTy 5)]),qVar"state"))],
7512              Let(TP[Var("v0",OTy F64),qVar"s"],
7513                  Apply
7514                    (Call
7515                       ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
7516                        TP[Var("v",F64),LC("Data",CTy"fetchType"),
7517                           LC("Read",CTy"accessType")]),qVar"state"),
7518                  CS(Var("v0",OTy F64),
7519                     [(Mop(Some,Var("pAddr",F64)),
7520                       Apply
7521                         (Call("write'ReserveLoad",ATy(qTy,qTy),LO F64),
7522                          Apply
7523                            (Call
7524                               ("write'GPR",ATy(qTy,qTy),
7525                                TP[LW(0,64),Var("rd",FTy 5)]),
7526                             Apply
7527                               (Call
7528                                  ("rawWriteData",ATy(qTy,qTy),
7529                                   TP[Var("pAddr",F64),
7530                                      Apply
7531                                        (Call
7532                                           ("GPR",ATy(qTy,F64),
7533                                            Var("rs2",FTy 5)),qVar"s"),
7534                                      LN 4]),qVar"s")))),
7535                      (LO F64,
7536                       Apply
7537                         (Call
7538                            ("signalAddressException",ATy(qTy,qTy),
7539                             TP[LC("Store_AMO_Fault",CTy"ExceptionType"),
7540                                Var("v",F64)]),qVar"s"))]))))))
7541;
7542val dfn'SC_D_def = Def
7543  ("dfn'SC_D",
7544   TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5),
7545      Var("rs2",FTy 5)],
7546   Close
7547     (qVar"state",
7548      Let(TP[bVar"v",qVar"s"],
7549          Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
7550          ITE(bVar"v",
7551              Apply
7552                (Call
7553                   ("signalException",ATy(qTy,qTy),
7554                    LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"),
7555              Let(Var("v",F64),
7556                  Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"s"),
7557                  ITB([(Mop(Not,
7558                            EQ(EX(Var("v",F64),LN 2,LN 0,FTy 3),LW(0,3))),
7559                        Apply
7560                          (Call
7561                             ("signalAddressException",ATy(qTy,qTy),
7562                              TP[LC("AMO_Misaligned",CTy"ExceptionType"),
7563                                 Var("v",F64)]),qVar"s")),
7564                       (Mop(Not,
7565                            Apply
7566                              (Call
7567                                 ("matchLoadReservation",ATy(qTy,bTy),
7568                                  Var("v",F64)),qVar"s")),
7569                        Apply
7570                          (Call
7571                             ("write'GPR",ATy(qTy,qTy),
7572                              TP[LW(1,64),Var("rd",FTy 5)]),qVar"s"))],
7573                      Let(TP[Var("v0",OTy F64),qVar"s"],
7574                          Apply
7575                            (Call
7576                               ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
7577                                TP[Var("v",F64),LC("Data",CTy"fetchType"),
7578                                   LC("Read",CTy"accessType")]),qVar"s"),
7579                          CS(Var("v0",OTy F64),
7580                             [(Mop(Some,Var("pAddr",F64)),
7581                               Apply
7582                                 (Call
7583                                    ("write'ReserveLoad",ATy(qTy,qTy),
7584                                     LO F64),
7585                                  Apply
7586                                    (Call
7587                                       ("write'GPR",ATy(qTy,qTy),
7588                                        TP[LW(0,64),Var("rd",FTy 5)]),
7589                                     Apply
7590                                       (Call
7591                                          ("rawWriteData",ATy(qTy,qTy),
7592                                           TP[Var("pAddr",F64),
7593                                              Apply
7594                                                (Call
7595                                                   ("GPR",ATy(qTy,F64),
7596                                                    Var("rs2",FTy 5)),
7597                                                 qVar"s"),LN 8]),qVar"s")))),
7598                              (LO F64,
7599                               Apply
7600                                 (Call
7601                                    ("signalAddressException",
7602                                     ATy(qTy,qTy),
7603                                     TP[LC("Store_AMO_Fault",
7604                                           CTy"ExceptionType"),
7605                                        Var("v",F64)]),qVar"s"))]))))))))
7606;
7607val dfn'AMOSWAP_W_def = Def
7608  ("dfn'AMOSWAP_W",
7609   TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5),
7610      Var("rs2",FTy 5)],
7611   Close
7612     (qVar"state",
7613      Let(Var("v",F64),
7614          Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
7615          ITE(Mop(Not,EQ(EX(Var("v",F64),LN 1,LN 0,FTy 2),LW(0,2))),
7616              Apply
7617                (Call
7618                   ("signalAddressException",ATy(qTy,qTy),
7619                    TP[LC("AMO_Misaligned",CTy"ExceptionType"),
7620                       Var("v",F64)]),qVar"state"),
7621              Let(TP[Var("v0",OTy F64),qVar"s"],
7622                  Apply
7623                    (Call
7624                       ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
7625                        TP[Var("v",F64),LC("Data",CTy"fetchType"),
7626                           LC("Write",CTy"accessType")]),qVar"state"),
7627                  CS(Var("v0",OTy F64),
7628                     [(Mop(Some,Var("pAddr",F64)),
7629                       Apply
7630                         (Call
7631                            ("rawWriteData",ATy(qTy,qTy),
7632                             TP[Var("pAddr",F64),
7633                                Apply
7634                                  (Call
7635                                     ("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
7636                                   qVar"s"),LN 4]),
7637                          Apply
7638                            (Call
7639                               ("write'GPR",ATy(qTy,qTy),
7640                                TP[Mop(SE F64,
7641                                       EX(Apply
7642                                            (Call
7643                                               ("rawReadData",
7644                                                ATy(qTy,F64),
7645                                                Var("pAddr",F64)),qVar"s"),
7646                                          LN 31,LN 0,F32)),Var("rd",FTy 5)]),
7647                             qVar"s"))),
7648                      (LO F64,
7649                       Apply
7650                         (Call
7651                            ("signalAddressException",ATy(qTy,qTy),
7652                             TP[LC("Store_AMO_Fault",CTy"ExceptionType"),
7653                                Var("v",F64)]),qVar"s"))]))))))
7654;
7655val dfn'AMOSWAP_D_def = Def
7656  ("dfn'AMOSWAP_D",
7657   TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5),
7658      Var("rs2",FTy 5)],
7659   Close
7660     (qVar"state",
7661      Let(Var("v",F64),
7662          Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
7663          ITE(Mop(Not,EQ(EX(Var("v",F64),LN 2,LN 0,FTy 3),LW(0,3))),
7664              Apply
7665                (Call
7666                   ("signalAddressException",ATy(qTy,qTy),
7667                    TP[LC("AMO_Misaligned",CTy"ExceptionType"),
7668                       Var("v",F64)]),qVar"state"),
7669              Let(TP[Var("v0",OTy F64),qVar"s"],
7670                  Apply
7671                    (Call
7672                       ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
7673                        TP[Var("v",F64),LC("Data",CTy"fetchType"),
7674                           LC("Write",CTy"accessType")]),qVar"state"),
7675                  CS(Var("v0",OTy F64),
7676                     [(Mop(Some,Var("pAddr",F64)),
7677                       Apply
7678                         (Call
7679                            ("rawWriteData",ATy(qTy,qTy),
7680                             TP[Var("pAddr",F64),
7681                                Apply
7682                                  (Call
7683                                     ("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),
7684                                   qVar"s"),LN 8]),
7685                          Apply
7686                            (Call
7687                               ("write'GPR",ATy(qTy,qTy),
7688                                TP[Apply
7689                                     (Call
7690                                        ("rawReadData",ATy(qTy,F64),
7691                                         Var("pAddr",F64)),qVar"s"),
7692                                   Var("rd",FTy 5)]),qVar"s"))),
7693                      (LO F64,
7694                       Apply
7695                         (Call
7696                            ("signalAddressException",ATy(qTy,qTy),
7697                             TP[LC("Store_AMO_Fault",CTy"ExceptionType"),
7698                                Var("v",F64)]),qVar"s"))]))))))
7699;
7700val dfn'AMOADD_W_def = Def
7701  ("dfn'AMOADD_W",
7702   TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5),
7703      Var("rs2",FTy 5)],
7704   Close
7705     (qVar"state",
7706      Let(Var("v",F64),
7707          Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
7708          ITE(Mop(Not,EQ(EX(Var("v",F64),LN 1,LN 0,FTy 2),LW(0,2))),
7709              Apply
7710                (Call
7711                   ("signalAddressException",ATy(qTy,qTy),
7712                    TP[LC("AMO_Misaligned",CTy"ExceptionType"),
7713                       Var("v",F64)]),qVar"state"),
7714              Let(TP[Var("v0",OTy F64),qVar"s"],
7715                  Apply
7716                    (Call
7717                       ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
7718                        TP[Var("v",F64),LC("Data",CTy"fetchType"),
7719                           LC("Write",CTy"accessType")]),qVar"state"),
7720                  CS(Var("v0",OTy F64),
7721                     [(Mop(Some,Var("pAddr",F64)),
7722                       Let(Var("v",F64),
7723                           Mop(SE F64,
7724                               EX(Apply
7725                                    (Call
7726                                       ("rawReadData",ATy(qTy,F64),
7727                                        Var("pAddr",F64)),qVar"s"),LN 31,
7728                                  LN 0,F32)),
7729                           Apply
7730                             (Call
7731                                ("rawWriteData",ATy(qTy,qTy),
7732                                 TP[Var("pAddr",F64),
7733                                    Bop(Add,
7734                                        Apply
7735                                          (Call
7736                                             ("GPR",ATy(qTy,F64),
7737                                              Var("rs2",FTy 5)),qVar"s"),
7738                                        Var("v",F64)),LN 4]),
7739                              Apply
7740                                (Call
7741                                   ("write'GPR",ATy(qTy,qTy),
7742                                    TP[Var("v",F64),Var("rd",FTy 5)]),
7743                                 qVar"s")))),
7744                      (LO F64,
7745                       Apply
7746                         (Call
7747                            ("signalAddressException",ATy(qTy,qTy),
7748                             TP[LC("Store_AMO_Fault",CTy"ExceptionType"),
7749                                Var("v",F64)]),qVar"s"))]))))))
7750;
7751val dfn'AMOADD_D_def = Def
7752  ("dfn'AMOADD_D",
7753   TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5),
7754      Var("rs2",FTy 5)],
7755   Close
7756     (qVar"state",
7757      Let(Var("v",F64),
7758          Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
7759          ITE(Mop(Not,EQ(EX(Var("v",F64),LN 2,LN 0,FTy 3),LW(0,3))),
7760              Apply
7761                (Call
7762                   ("signalAddressException",ATy(qTy,qTy),
7763                    TP[LC("AMO_Misaligned",CTy"ExceptionType"),
7764                       Var("v",F64)]),qVar"state"),
7765              Let(TP[Var("v0",OTy F64),qVar"s"],
7766                  Apply
7767                    (Call
7768                       ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
7769                        TP[Var("v",F64),LC("Data",CTy"fetchType"),
7770                           LC("Write",CTy"accessType")]),qVar"state"),
7771                  CS(Var("v0",OTy F64),
7772                     [(Mop(Some,Var("pAddr",F64)),
7773                       Let(Var("v",F64),
7774                           Apply
7775                             (Call
7776                                ("rawReadData",ATy(qTy,F64),
7777                                 Var("pAddr",F64)),qVar"s"),
7778                           Apply
7779                             (Call
7780                                ("rawWriteData",ATy(qTy,qTy),
7781                                 TP[Var("pAddr",F64),
7782                                    Bop(Add,
7783                                        Apply
7784                                          (Call
7785                                             ("GPR",ATy(qTy,F64),
7786                                              Var("rs2",FTy 5)),qVar"s"),
7787                                        Var("v",F64)),LN 8]),
7788                              Apply
7789                                (Call
7790                                   ("write'GPR",ATy(qTy,qTy),
7791                                    TP[Var("v",F64),Var("rd",FTy 5)]),
7792                                 qVar"s")))),
7793                      (LO F64,
7794                       Apply
7795                         (Call
7796                            ("signalAddressException",ATy(qTy,qTy),
7797                             TP[LC("Store_AMO_Fault",CTy"ExceptionType"),
7798                                Var("v",F64)]),qVar"s"))]))))))
7799;
7800val dfn'AMOXOR_W_def = Def
7801  ("dfn'AMOXOR_W",
7802   TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5),
7803      Var("rs2",FTy 5)],
7804   Close
7805     (qVar"state",
7806      Let(Var("v",F64),
7807          Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
7808          ITE(Mop(Not,EQ(EX(Var("v",F64),LN 1,LN 0,FTy 2),LW(0,2))),
7809              Apply
7810                (Call
7811                   ("signalAddressException",ATy(qTy,qTy),
7812                    TP[LC("AMO_Misaligned",CTy"ExceptionType"),
7813                       Var("v",F64)]),qVar"state"),
7814              Let(TP[Var("v0",OTy F64),qVar"s"],
7815                  Apply
7816                    (Call
7817                       ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
7818                        TP[Var("v",F64),LC("Data",CTy"fetchType"),
7819                           LC("Write",CTy"accessType")]),qVar"state"),
7820                  CS(Var("v0",OTy F64),
7821                     [(Mop(Some,Var("pAddr",F64)),
7822                       Let(Var("v",F64),
7823                           Mop(SE F64,
7824                               EX(Apply
7825                                    (Call
7826                                       ("rawReadData",ATy(qTy,F64),
7827                                        Var("pAddr",F64)),qVar"s"),LN 31,
7828                                  LN 0,F32)),
7829                           Apply
7830                             (Call
7831                                ("rawWriteData",ATy(qTy,qTy),
7832                                 TP[Var("pAddr",F64),
7833                                    Bop(BXor,
7834                                        Apply
7835                                          (Call
7836                                             ("GPR",ATy(qTy,F64),
7837                                              Var("rs2",FTy 5)),qVar"s"),
7838                                        Var("v",F64)),LN 4]),
7839                              Apply
7840                                (Call
7841                                   ("write'GPR",ATy(qTy,qTy),
7842                                    TP[Var("v",F64),Var("rd",FTy 5)]),
7843                                 qVar"s")))),
7844                      (LO F64,
7845                       Apply
7846                         (Call
7847                            ("signalAddressException",ATy(qTy,qTy),
7848                             TP[LC("Store_AMO_Fault",CTy"ExceptionType"),
7849                                Var("v",F64)]),qVar"s"))]))))))
7850;
7851val dfn'AMOXOR_D_def = Def
7852  ("dfn'AMOXOR_D",
7853   TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5),
7854      Var("rs2",FTy 5)],
7855   Close
7856     (qVar"state",
7857      Let(Var("v",F64),
7858          Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
7859          ITE(Mop(Not,EQ(EX(Var("v",F64),LN 2,LN 0,FTy 3),LW(0,3))),
7860              Apply
7861                (Call
7862                   ("signalAddressException",ATy(qTy,qTy),
7863                    TP[LC("AMO_Misaligned",CTy"ExceptionType"),
7864                       Var("v",F64)]),qVar"state"),
7865              Let(TP[Var("v0",OTy F64),qVar"s"],
7866                  Apply
7867                    (Call
7868                       ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
7869                        TP[Var("v",F64),LC("Data",CTy"fetchType"),
7870                           LC("Write",CTy"accessType")]),qVar"state"),
7871                  CS(Var("v0",OTy F64),
7872                     [(Mop(Some,Var("pAddr",F64)),
7873                       Let(Var("v",F64),
7874                           Apply
7875                             (Call
7876                                ("rawReadData",ATy(qTy,F64),
7877                                 Var("pAddr",F64)),qVar"s"),
7878                           Apply
7879                             (Call
7880                                ("rawWriteData",ATy(qTy,qTy),
7881                                 TP[Var("pAddr",F64),
7882                                    Bop(BXor,
7883                                        Apply
7884                                          (Call
7885                                             ("GPR",ATy(qTy,F64),
7886                                              Var("rs2",FTy 5)),qVar"s"),
7887                                        Var("v",F64)),LN 8]),
7888                              Apply
7889                                (Call
7890                                   ("write'GPR",ATy(qTy,qTy),
7891                                    TP[Var("v",F64),Var("rd",FTy 5)]),
7892                                 qVar"s")))),
7893                      (LO F64,
7894                       Apply
7895                         (Call
7896                            ("signalAddressException",ATy(qTy,qTy),
7897                             TP[LC("Store_AMO_Fault",CTy"ExceptionType"),
7898                                Var("v",F64)]),qVar"s"))]))))))
7899;
7900val dfn'AMOAND_W_def = Def
7901  ("dfn'AMOAND_W",
7902   TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5),
7903      Var("rs2",FTy 5)],
7904   Close
7905     (qVar"state",
7906      Let(Var("v",F64),
7907          Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
7908          ITE(Mop(Not,EQ(EX(Var("v",F64),LN 1,LN 0,FTy 2),LW(0,2))),
7909              Apply
7910                (Call
7911                   ("signalAddressException",ATy(qTy,qTy),
7912                    TP[LC("AMO_Misaligned",CTy"ExceptionType"),
7913                       Var("v",F64)]),qVar"state"),
7914              Let(TP[Var("v0",OTy F64),qVar"s"],
7915                  Apply
7916                    (Call
7917                       ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
7918                        TP[Var("v",F64),LC("Data",CTy"fetchType"),
7919                           LC("Write",CTy"accessType")]),qVar"state"),
7920                  CS(Var("v0",OTy F64),
7921                     [(Mop(Some,Var("pAddr",F64)),
7922                       Let(Var("v",F64),
7923                           Mop(SE F64,
7924                               EX(Apply
7925                                    (Call
7926                                       ("rawReadData",ATy(qTy,F64),
7927                                        Var("pAddr",F64)),qVar"s"),LN 31,
7928                                  LN 0,F32)),
7929                           Apply
7930                             (Call
7931                                ("rawWriteData",ATy(qTy,qTy),
7932                                 TP[Var("pAddr",F64),
7933                                    Bop(BAnd,
7934                                        Apply
7935                                          (Call
7936                                             ("GPR",ATy(qTy,F64),
7937                                              Var("rs2",FTy 5)),qVar"s"),
7938                                        Var("v",F64)),LN 4]),
7939                              Apply
7940                                (Call
7941                                   ("write'GPR",ATy(qTy,qTy),
7942                                    TP[Var("v",F64),Var("rd",FTy 5)]),
7943                                 qVar"s")))),
7944                      (LO F64,
7945                       Apply
7946                         (Call
7947                            ("signalAddressException",ATy(qTy,qTy),
7948                             TP[LC("Store_AMO_Fault",CTy"ExceptionType"),
7949                                Var("v",F64)]),qVar"s"))]))))))
7950;
7951val dfn'AMOAND_D_def = Def
7952  ("dfn'AMOAND_D",
7953   TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5),
7954      Var("rs2",FTy 5)],
7955   Close
7956     (qVar"state",
7957      Let(Var("v",F64),
7958          Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
7959          ITE(Mop(Not,EQ(EX(Var("v",F64),LN 2,LN 0,FTy 3),LW(0,3))),
7960              Apply
7961                (Call
7962                   ("signalAddressException",ATy(qTy,qTy),
7963                    TP[LC("AMO_Misaligned",CTy"ExceptionType"),
7964                       Var("v",F64)]),qVar"state"),
7965              Let(TP[Var("v0",OTy F64),qVar"s"],
7966                  Apply
7967                    (Call
7968                       ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
7969                        TP[Var("v",F64),LC("Data",CTy"fetchType"),
7970                           LC("Write",CTy"accessType")]),qVar"state"),
7971                  CS(Var("v0",OTy F64),
7972                     [(Mop(Some,Var("pAddr",F64)),
7973                       Let(Var("v",F64),
7974                           Apply
7975                             (Call
7976                                ("rawReadData",ATy(qTy,F64),
7977                                 Var("pAddr",F64)),qVar"s"),
7978                           Apply
7979                             (Call
7980                                ("rawWriteData",ATy(qTy,qTy),
7981                                 TP[Var("pAddr",F64),
7982                                    Bop(BAnd,
7983                                        Apply
7984                                          (Call
7985                                             ("GPR",ATy(qTy,F64),
7986                                              Var("rs2",FTy 5)),qVar"s"),
7987                                        Var("v",F64)),LN 8]),
7988                              Apply
7989                                (Call
7990                                   ("write'GPR",ATy(qTy,qTy),
7991                                    TP[Var("v",F64),Var("rd",FTy 5)]),
7992                                 qVar"s")))),
7993                      (LO F64,
7994                       Apply
7995                         (Call
7996                            ("signalAddressException",ATy(qTy,qTy),
7997                             TP[LC("Store_AMO_Fault",CTy"ExceptionType"),
7998                                Var("v",F64)]),qVar"s"))]))))))
7999;
8000val dfn'AMOOR_W_def = Def
8001  ("dfn'AMOOR_W",
8002   TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5),
8003      Var("rs2",FTy 5)],
8004   Close
8005     (qVar"state",
8006      Let(Var("v",F64),
8007          Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
8008          ITE(Mop(Not,EQ(EX(Var("v",F64),LN 1,LN 0,FTy 2),LW(0,2))),
8009              Apply
8010                (Call
8011                   ("signalAddressException",ATy(qTy,qTy),
8012                    TP[LC("AMO_Misaligned",CTy"ExceptionType"),
8013                       Var("v",F64)]),qVar"state"),
8014              Let(TP[Var("v0",OTy F64),qVar"s"],
8015                  Apply
8016                    (Call
8017                       ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
8018                        TP[Var("v",F64),LC("Data",CTy"fetchType"),
8019                           LC("Write",CTy"accessType")]),qVar"state"),
8020                  CS(Var("v0",OTy F64),
8021                     [(Mop(Some,Var("pAddr",F64)),
8022                       Let(Var("v",F64),
8023                           Mop(SE F64,
8024                               EX(Apply
8025                                    (Call
8026                                       ("rawReadData",ATy(qTy,F64),
8027                                        Var("pAddr",F64)),qVar"s"),LN 31,
8028                                  LN 0,F32)),
8029                           Apply
8030                             (Call
8031                                ("rawWriteData",ATy(qTy,qTy),
8032                                 TP[Var("pAddr",F64),
8033                                    Bop(BOr,
8034                                        Apply
8035                                          (Call
8036                                             ("GPR",ATy(qTy,F64),
8037                                              Var("rs2",FTy 5)),qVar"s"),
8038                                        Var("v",F64)),LN 4]),
8039                              Apply
8040                                (Call
8041                                   ("write'GPR",ATy(qTy,qTy),
8042                                    TP[Var("v",F64),Var("rd",FTy 5)]),
8043                                 qVar"s")))),
8044                      (LO F64,
8045                       Apply
8046                         (Call
8047                            ("signalAddressException",ATy(qTy,qTy),
8048                             TP[LC("Store_AMO_Fault",CTy"ExceptionType"),
8049                                Var("v",F64)]),qVar"s"))]))))))
8050;
8051val dfn'AMOOR_D_def = Def
8052  ("dfn'AMOOR_D",
8053   TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5),
8054      Var("rs2",FTy 5)],
8055   Close
8056     (qVar"state",
8057      Let(Var("v",F64),
8058          Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
8059          ITE(Mop(Not,EQ(EX(Var("v",F64),LN 2,LN 0,FTy 3),LW(0,3))),
8060              Apply
8061                (Call
8062                   ("signalAddressException",ATy(qTy,qTy),
8063                    TP[LC("AMO_Misaligned",CTy"ExceptionType"),
8064                       Var("v",F64)]),qVar"state"),
8065              Let(TP[Var("v0",OTy F64),qVar"s"],
8066                  Apply
8067                    (Call
8068                       ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
8069                        TP[Var("v",F64),LC("Data",CTy"fetchType"),
8070                           LC("Write",CTy"accessType")]),qVar"state"),
8071                  CS(Var("v0",OTy F64),
8072                     [(Mop(Some,Var("pAddr",F64)),
8073                       Let(Var("v",F64),
8074                           Apply
8075                             (Call
8076                                ("rawReadData",ATy(qTy,F64),
8077                                 Var("pAddr",F64)),qVar"s"),
8078                           Apply
8079                             (Call
8080                                ("rawWriteData",ATy(qTy,qTy),
8081                                 TP[Var("pAddr",F64),
8082                                    Bop(BOr,
8083                                        Apply
8084                                          (Call
8085                                             ("GPR",ATy(qTy,F64),
8086                                              Var("rs2",FTy 5)),qVar"s"),
8087                                        Var("v",F64)),LN 8]),
8088                              Apply
8089                                (Call
8090                                   ("write'GPR",ATy(qTy,qTy),
8091                                    TP[Var("v",F64),Var("rd",FTy 5)]),
8092                                 qVar"s")))),
8093                      (LO F64,
8094                       Apply
8095                         (Call
8096                            ("signalAddressException",ATy(qTy,qTy),
8097                             TP[LC("Store_AMO_Fault",CTy"ExceptionType"),
8098                                Var("v",F64)]),qVar"s"))]))))))
8099;
8100val dfn'AMOMIN_W_def = Def
8101  ("dfn'AMOMIN_W",
8102   TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5),
8103      Var("rs2",FTy 5)],
8104   Close
8105     (qVar"state",
8106      Let(Var("v",F64),
8107          Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
8108          ITE(Mop(Not,EQ(EX(Var("v",F64),LN 1,LN 0,FTy 2),LW(0,2))),
8109              Apply
8110                (Call
8111                   ("signalAddressException",ATy(qTy,qTy),
8112                    TP[LC("AMO_Misaligned",CTy"ExceptionType"),
8113                       Var("v",F64)]),qVar"state"),
8114              Let(TP[Var("v0",OTy F64),qVar"s"],
8115                  Apply
8116                    (Call
8117                       ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
8118                        TP[Var("v",F64),LC("Data",CTy"fetchType"),
8119                           LC("Write",CTy"accessType")]),qVar"state"),
8120                  CS(Var("v0",OTy F64),
8121                     [(Mop(Some,Var("pAddr",F64)),
8122                       Let(Var("v",F64),
8123                           Mop(SE F64,
8124                               EX(Apply
8125                                    (Call
8126                                       ("rawReadData",ATy(qTy,F64),
8127                                        Var("pAddr",F64)),qVar"s"),LN 31,
8128                                  LN 0,F32)),
8129                           Apply
8130                             (Call
8131                                ("rawWriteData",ATy(qTy,qTy),
8132                                 TP[Var("pAddr",F64),
8133                                    Mop(Smin,
8134                                        TP[Apply
8135                                             (Call
8136                                                ("GPR",ATy(qTy,F64),
8137                                                 Var("rs2",FTy 5)),qVar"s"),
8138                                           Var("v",F64)]),LN 4]),
8139                              Apply
8140                                (Call
8141                                   ("write'GPR",ATy(qTy,qTy),
8142                                    TP[Var("v",F64),Var("rd",FTy 5)]),
8143                                 qVar"s")))),
8144                      (LO F64,
8145                       Apply
8146                         (Call
8147                            ("signalAddressException",ATy(qTy,qTy),
8148                             TP[LC("Store_AMO_Fault",CTy"ExceptionType"),
8149                                Var("v",F64)]),qVar"s"))]))))))
8150;
8151val dfn'AMOMIN_D_def = Def
8152  ("dfn'AMOMIN_D",
8153   TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5),
8154      Var("rs2",FTy 5)],
8155   Close
8156     (qVar"state",
8157      Let(Var("v",F64),
8158          Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
8159          ITE(Mop(Not,EQ(EX(Var("v",F64),LN 2,LN 0,FTy 3),LW(0,3))),
8160              Apply
8161                (Call
8162                   ("signalAddressException",ATy(qTy,qTy),
8163                    TP[LC("AMO_Misaligned",CTy"ExceptionType"),
8164                       Var("v",F64)]),qVar"state"),
8165              Let(TP[Var("v0",OTy F64),qVar"s"],
8166                  Apply
8167                    (Call
8168                       ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
8169                        TP[Var("v",F64),LC("Data",CTy"fetchType"),
8170                           LC("Write",CTy"accessType")]),qVar"state"),
8171                  CS(Var("v0",OTy F64),
8172                     [(Mop(Some,Var("pAddr",F64)),
8173                       Let(Var("v",F64),
8174                           Apply
8175                             (Call
8176                                ("rawReadData",ATy(qTy,F64),
8177                                 Var("pAddr",F64)),qVar"s"),
8178                           Apply
8179                             (Call
8180                                ("rawWriteData",ATy(qTy,qTy),
8181                                 TP[Var("pAddr",F64),
8182                                    Mop(Smin,
8183                                        TP[Apply
8184                                             (Call
8185                                                ("GPR",ATy(qTy,F64),
8186                                                 Var("rs2",FTy 5)),qVar"s"),
8187                                           Var("v",F64)]),LN 8]),
8188                              Apply
8189                                (Call
8190                                   ("write'GPR",ATy(qTy,qTy),
8191                                    TP[Var("v",F64),Var("rd",FTy 5)]),
8192                                 qVar"s")))),
8193                      (LO F64,
8194                       Apply
8195                         (Call
8196                            ("signalAddressException",ATy(qTy,qTy),
8197                             TP[LC("Store_AMO_Fault",CTy"ExceptionType"),
8198                                Var("v",F64)]),qVar"s"))]))))))
8199;
8200val dfn'AMOMAX_W_def = Def
8201  ("dfn'AMOMAX_W",
8202   TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5),
8203      Var("rs2",FTy 5)],
8204   Close
8205     (qVar"state",
8206      Let(Var("v",F64),
8207          Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
8208          ITE(Mop(Not,EQ(EX(Var("v",F64),LN 1,LN 0,FTy 2),LW(0,2))),
8209              Apply
8210                (Call
8211                   ("signalAddressException",ATy(qTy,qTy),
8212                    TP[LC("AMO_Misaligned",CTy"ExceptionType"),
8213                       Var("v",F64)]),qVar"state"),
8214              Let(TP[Var("v0",OTy F64),qVar"s"],
8215                  Apply
8216                    (Call
8217                       ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
8218                        TP[Var("v",F64),LC("Data",CTy"fetchType"),
8219                           LC("Write",CTy"accessType")]),qVar"state"),
8220                  CS(Var("v0",OTy F64),
8221                     [(Mop(Some,Var("pAddr",F64)),
8222                       Let(Var("v",F64),
8223                           Mop(SE F64,
8224                               EX(Apply
8225                                    (Call
8226                                       ("rawReadData",ATy(qTy,F64),
8227                                        Var("pAddr",F64)),qVar"s"),LN 31,
8228                                  LN 0,F32)),
8229                           Apply
8230                             (Call
8231                                ("rawWriteData",ATy(qTy,qTy),
8232                                 TP[Var("pAddr",F64),
8233                                    Mop(Smax,
8234                                        TP[Apply
8235                                             (Call
8236                                                ("GPR",ATy(qTy,F64),
8237                                                 Var("rs2",FTy 5)),qVar"s"),
8238                                           Var("v",F64)]),LN 4]),
8239                              Apply
8240                                (Call
8241                                   ("write'GPR",ATy(qTy,qTy),
8242                                    TP[Var("v",F64),Var("rd",FTy 5)]),
8243                                 qVar"s")))),
8244                      (LO F64,
8245                       Apply
8246                         (Call
8247                            ("signalAddressException",ATy(qTy,qTy),
8248                             TP[LC("Store_AMO_Fault",CTy"ExceptionType"),
8249                                Var("v",F64)]),qVar"s"))]))))))
8250;
8251val dfn'AMOMAX_D_def = Def
8252  ("dfn'AMOMAX_D",
8253   TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5),
8254      Var("rs2",FTy 5)],
8255   Close
8256     (qVar"state",
8257      Let(Var("v",F64),
8258          Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
8259          ITE(Mop(Not,EQ(EX(Var("v",F64),LN 2,LN 0,FTy 3),LW(0,3))),
8260              Apply
8261                (Call
8262                   ("signalAddressException",ATy(qTy,qTy),
8263                    TP[LC("AMO_Misaligned",CTy"ExceptionType"),
8264                       Var("v",F64)]),qVar"state"),
8265              Let(TP[Var("v0",OTy F64),qVar"s"],
8266                  Apply
8267                    (Call
8268                       ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
8269                        TP[Var("v",F64),LC("Data",CTy"fetchType"),
8270                           LC("Write",CTy"accessType")]),qVar"state"),
8271                  CS(Var("v0",OTy F64),
8272                     [(Mop(Some,Var("pAddr",F64)),
8273                       Let(Var("v",F64),
8274                           Apply
8275                             (Call
8276                                ("rawReadData",ATy(qTy,F64),
8277                                 Var("pAddr",F64)),qVar"s"),
8278                           Apply
8279                             (Call
8280                                ("rawWriteData",ATy(qTy,qTy),
8281                                 TP[Var("pAddr",F64),
8282                                    Mop(Smax,
8283                                        TP[Apply
8284                                             (Call
8285                                                ("GPR",ATy(qTy,F64),
8286                                                 Var("rs2",FTy 5)),qVar"s"),
8287                                           Var("v",F64)]),LN 8]),
8288                              Apply
8289                                (Call
8290                                   ("write'GPR",ATy(qTy,qTy),
8291                                    TP[Var("v",F64),Var("rd",FTy 5)]),
8292                                 qVar"s")))),
8293                      (LO F64,
8294                       Apply
8295                         (Call
8296                            ("signalAddressException",ATy(qTy,qTy),
8297                             TP[LC("Store_AMO_Fault",CTy"ExceptionType"),
8298                                Var("v",F64)]),qVar"s"))]))))))
8299;
8300val dfn'AMOMINU_W_def = Def
8301  ("dfn'AMOMINU_W",
8302   TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5),
8303      Var("rs2",FTy 5)],
8304   Close
8305     (qVar"state",
8306      Let(Var("v",F64),
8307          Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
8308          ITE(Mop(Not,EQ(EX(Var("v",F64),LN 1,LN 0,FTy 2),LW(0,2))),
8309              Apply
8310                (Call
8311                   ("signalAddressException",ATy(qTy,qTy),
8312                    TP[LC("AMO_Misaligned",CTy"ExceptionType"),
8313                       Var("v",F64)]),qVar"state"),
8314              Let(TP[Var("v0",OTy F64),qVar"s"],
8315                  Apply
8316                    (Call
8317                       ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
8318                        TP[Var("v",F64),LC("Data",CTy"fetchType"),
8319                           LC("Write",CTy"accessType")]),qVar"state"),
8320                  CS(Var("v0",OTy F64),
8321                     [(Mop(Some,Var("pAddr",F64)),
8322                       Let(Var("v",F64),
8323                           Mop(SE F64,
8324                               EX(Apply
8325                                    (Call
8326                                       ("rawReadData",ATy(qTy,F64),
8327                                        Var("pAddr",F64)),qVar"s"),LN 31,
8328                                  LN 0,F32)),
8329                           Apply
8330                             (Call
8331                                ("rawWriteData",ATy(qTy,qTy),
8332                                 TP[Var("pAddr",F64),
8333                                    Mop(Min,
8334                                        TP[Apply
8335                                             (Call
8336                                                ("GPR",ATy(qTy,F64),
8337                                                 Var("rs2",FTy 5)),qVar"s"),
8338                                           Var("v",F64)]),LN 4]),
8339                              Apply
8340                                (Call
8341                                   ("write'GPR",ATy(qTy,qTy),
8342                                    TP[Var("v",F64),Var("rd",FTy 5)]),
8343                                 qVar"s")))),
8344                      (LO F64,
8345                       Apply
8346                         (Call
8347                            ("signalAddressException",ATy(qTy,qTy),
8348                             TP[LC("Store_AMO_Fault",CTy"ExceptionType"),
8349                                Var("v",F64)]),qVar"s"))]))))))
8350;
8351val dfn'AMOMINU_D_def = Def
8352  ("dfn'AMOMINU_D",
8353   TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5),
8354      Var("rs2",FTy 5)],
8355   Close
8356     (qVar"state",
8357      Let(Var("v",F64),
8358          Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
8359          ITE(Mop(Not,EQ(EX(Var("v",F64),LN 2,LN 0,FTy 3),LW(0,3))),
8360              Apply
8361                (Call
8362                   ("signalAddressException",ATy(qTy,qTy),
8363                    TP[LC("AMO_Misaligned",CTy"ExceptionType"),
8364                       Var("v",F64)]),qVar"state"),
8365              Let(TP[Var("v0",OTy F64),qVar"s"],
8366                  Apply
8367                    (Call
8368                       ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
8369                        TP[Var("v",F64),LC("Data",CTy"fetchType"),
8370                           LC("Write",CTy"accessType")]),qVar"state"),
8371                  CS(Var("v0",OTy F64),
8372                     [(Mop(Some,Var("pAddr",F64)),
8373                       Let(Var("v",F64),
8374                           Apply
8375                             (Call
8376                                ("rawReadData",ATy(qTy,F64),
8377                                 Var("pAddr",F64)),qVar"s"),
8378                           Apply
8379                             (Call
8380                                ("rawWriteData",ATy(qTy,qTy),
8381                                 TP[Var("pAddr",F64),
8382                                    Mop(Min,
8383                                        TP[Apply
8384                                             (Call
8385                                                ("GPR",ATy(qTy,F64),
8386                                                 Var("rs2",FTy 5)),qVar"s"),
8387                                           Var("v",F64)]),LN 8]),
8388                              Apply
8389                                (Call
8390                                   ("write'GPR",ATy(qTy,qTy),
8391                                    TP[Var("v",F64),Var("rd",FTy 5)]),
8392                                 qVar"s")))),
8393                      (LO F64,
8394                       Apply
8395                         (Call
8396                            ("signalAddressException",ATy(qTy,qTy),
8397                             TP[LC("Store_AMO_Fault",CTy"ExceptionType"),
8398                                Var("v",F64)]),qVar"s"))]))))))
8399;
8400val dfn'AMOMAXU_W_def = Def
8401  ("dfn'AMOMAXU_W",
8402   TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5),
8403      Var("rs2",FTy 5)],
8404   Close
8405     (qVar"state",
8406      Let(Var("v",F64),
8407          Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
8408          ITE(Mop(Not,EQ(EX(Var("v",F64),LN 1,LN 0,FTy 2),LW(0,2))),
8409              Apply
8410                (Call
8411                   ("signalAddressException",ATy(qTy,qTy),
8412                    TP[LC("AMO_Misaligned",CTy"ExceptionType"),
8413                       Var("v",F64)]),qVar"state"),
8414              Let(TP[Var("v0",OTy F64),qVar"s"],
8415                  Apply
8416                    (Call
8417                       ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
8418                        TP[Var("v",F64),LC("Data",CTy"fetchType"),
8419                           LC("Write",CTy"accessType")]),qVar"state"),
8420                  CS(Var("v0",OTy F64),
8421                     [(Mop(Some,Var("pAddr",F64)),
8422                       Let(Var("v",F64),
8423                           Mop(SE F64,
8424                               EX(Apply
8425                                    (Call
8426                                       ("rawReadData",ATy(qTy,F64),
8427                                        Var("pAddr",F64)),qVar"s"),LN 31,
8428                                  LN 0,F32)),
8429                           Apply
8430                             (Call
8431                                ("rawWriteData",ATy(qTy,qTy),
8432                                 TP[Var("pAddr",F64),
8433                                    Mop(Max,
8434                                        TP[Apply
8435                                             (Call
8436                                                ("GPR",ATy(qTy,F64),
8437                                                 Var("rs2",FTy 5)),qVar"s"),
8438                                           Var("v",F64)]),LN 4]),
8439                              Apply
8440                                (Call
8441                                   ("write'GPR",ATy(qTy,qTy),
8442                                    TP[Var("v",F64),Var("rd",FTy 5)]),
8443                                 qVar"s")))),
8444                      (LO F64,
8445                       Apply
8446                         (Call
8447                            ("signalAddressException",ATy(qTy,qTy),
8448                             TP[LC("Store_AMO_Fault",CTy"ExceptionType"),
8449                                Var("v",F64)]),qVar"s"))]))))))
8450;
8451val dfn'AMOMAXU_D_def = Def
8452  ("dfn'AMOMAXU_D",
8453   TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5),
8454      Var("rs2",FTy 5)],
8455   Close
8456     (qVar"state",
8457      Let(Var("v",F64),
8458          Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
8459          ITE(Mop(Not,EQ(EX(Var("v",F64),LN 2,LN 0,FTy 3),LW(0,3))),
8460              Apply
8461                (Call
8462                   ("signalAddressException",ATy(qTy,qTy),
8463                    TP[LC("AMO_Misaligned",CTy"ExceptionType"),
8464                       Var("v",F64)]),qVar"state"),
8465              Let(TP[Var("v0",OTy F64),qVar"s"],
8466                  Apply
8467                    (Call
8468                       ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
8469                        TP[Var("v",F64),LC("Data",CTy"fetchType"),
8470                           LC("Write",CTy"accessType")]),qVar"state"),
8471                  CS(Var("v0",OTy F64),
8472                     [(Mop(Some,Var("pAddr",F64)),
8473                       Let(Var("v",F64),
8474                           Apply
8475                             (Call
8476                                ("rawReadData",ATy(qTy,F64),
8477                                 Var("pAddr",F64)),qVar"s"),
8478                           Apply
8479                             (Call
8480                                ("rawWriteData",ATy(qTy,qTy),
8481                                 TP[Var("pAddr",F64),
8482                                    Mop(Max,
8483                                        TP[Apply
8484                                             (Call
8485                                                ("GPR",ATy(qTy,F64),
8486                                                 Var("rs2",FTy 5)),qVar"s"),
8487                                           Var("v",F64)]),LN 8]),
8488                              Apply
8489                                (Call
8490                                   ("write'GPR",ATy(qTy,qTy),
8491                                    TP[Var("v",F64),Var("rd",FTy 5)]),
8492                                 qVar"s")))),
8493                      (LO F64,
8494                       Apply
8495                         (Call
8496                            ("signalAddressException",ATy(qTy,qTy),
8497                             TP[LC("Store_AMO_Fault",CTy"ExceptionType"),
8498                                Var("v",F64)]),qVar"s"))]))))))
8499;
8500val dfn'FLW_def = Def
8501  ("dfn'FLW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("offs",FTy 12)],
8502   Close
8503     (qVar"state",
8504      Let(Var("v",F64),
8505          Bop(Add,
8506              Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
8507              Mop(SE F64,Var("offs",FTy 12))),
8508          Let(TP[Var("v0",OTy F64),qVar"s"],
8509              Apply
8510                (Call
8511                   ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
8512                    TP[Var("v",F64),LC("Data",CTy"fetchType"),
8513                       LC("Read",CTy"accessType")]),qVar"state"),
8514              CS(Var("v0",OTy F64),
8515                 [(Mop(Some,Var("pAddr",F64)),
8516                   Apply
8517                     (Call
8518                        ("write'FPRS",ATy(qTy,qTy),
8519                         TP[EX(Apply
8520                                 (Call
8521                                    ("rawReadData",ATy(qTy,F64),
8522                                     Var("pAddr",F64)),qVar"s"),LN 31,
8523                               LN 0,F32),Var("rd",FTy 5)]),qVar"s")),
8524                  (LO F64,
8525                   Apply
8526                     (Call
8527                        ("signalAddressException",ATy(qTy,qTy),
8528                         TP[LC("Load_Fault",CTy"ExceptionType"),
8529                            Var("v",F64)]),qVar"s"))])))))
8530;
8531val dfn'FSW_def = Def
8532  ("dfn'FSW",TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("offs",FTy 12)],
8533   Close
8534     (qVar"state",
8535      Let(Var("v",F64),
8536          Bop(Add,
8537              Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
8538              Mop(SE F64,Var("offs",FTy 12))),
8539          Let(TP[Var("v0",OTy F64),qVar"s"],
8540              Apply
8541                (Call
8542                   ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
8543                    TP[Var("v",F64),LC("Data",CTy"fetchType"),
8544                       LC("Write",CTy"accessType")]),qVar"state"),
8545              CS(Var("v0",OTy F64),
8546                 [(Mop(Some,Var("pAddr",F64)),
8547                   Apply
8548                     (Call
8549                        ("rawWriteData",ATy(qTy,qTy),
8550                         TP[Var("pAddr",F64),
8551                            Mop(Cast F64,
8552                                Apply
8553                                  (Call
8554                                     ("FPRS",ATy(qTy,F32),Var("rs2",FTy 5)),
8555                                   qVar"s")),LN 4]),qVar"s")),
8556                  (LO F64,
8557                   Apply
8558                     (Call
8559                        ("signalAddressException",ATy(qTy,qTy),
8560                         TP[LC("Store_AMO_Fault",CTy"ExceptionType"),
8561                            Var("v",F64)]),qVar"s"))])))))
8562;
8563val dfn'FADD_S_def = Def
8564  ("dfn'FADD_S",
8565   TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("fprnd",FTy 3)],
8566   Close
8567     (qVar"state",
8568      CS(Apply
8569           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
8570         [(Mop(Some,Var("r",rTy)),
8571           Apply
8572             (Call
8573                ("writeFPRS",ATy(qTy,qTy),
8574                 TP[Var("rd",FTy 5),
8575                    Mop(FPAdd 32,
8576                        TP[Var("r",rTy),
8577                           Apply
8578                             (Call("FPRS",ATy(qTy,F32),Var("rs1",FTy 5)),
8579                              qVar"state"),
8580                           Apply
8581                             (Call("FPRS",ATy(qTy,F32),Var("rs2",FTy 5)),
8582                              qVar"state")])]),qVar"state")),
8583          (LO rTy,
8584           Apply
8585             (Call
8586                ("signalException",ATy(qTy,qTy),
8587                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
8588;
8589val dfn'FSUB_S_def = Def
8590  ("dfn'FSUB_S",
8591   TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("fprnd",FTy 3)],
8592   Close
8593     (qVar"state",
8594      CS(Apply
8595           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
8596         [(Mop(Some,Var("r",rTy)),
8597           Apply
8598             (Call
8599                ("writeFPRS",ATy(qTy,qTy),
8600                 TP[Var("rd",FTy 5),
8601                    Mop(FPSub 32,
8602                        TP[Var("r",rTy),
8603                           Apply
8604                             (Call("FPRS",ATy(qTy,F32),Var("rs1",FTy 5)),
8605                              qVar"state"),
8606                           Apply
8607                             (Call("FPRS",ATy(qTy,F32),Var("rs2",FTy 5)),
8608                              qVar"state")])]),qVar"state")),
8609          (LO rTy,
8610           Apply
8611             (Call
8612                ("signalException",ATy(qTy,qTy),
8613                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
8614;
8615val dfn'FMUL_S_def = Def
8616  ("dfn'FMUL_S",
8617   TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("fprnd",FTy 3)],
8618   Close
8619     (qVar"state",
8620      CS(Apply
8621           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
8622         [(Mop(Some,Var("r",rTy)),
8623           Apply
8624             (Call
8625                ("writeFPRS",ATy(qTy,qTy),
8626                 TP[Var("rd",FTy 5),
8627                    Mop(FPMul 32,
8628                        TP[Var("r",rTy),
8629                           Apply
8630                             (Call("FPRS",ATy(qTy,F32),Var("rs1",FTy 5)),
8631                              qVar"state"),
8632                           Apply
8633                             (Call("FPRS",ATy(qTy,F32),Var("rs2",FTy 5)),
8634                              qVar"state")])]),qVar"state")),
8635          (LO rTy,
8636           Apply
8637             (Call
8638                ("signalException",ATy(qTy,qTy),
8639                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
8640;
8641val dfn'FDIV_S_def = Def
8642  ("dfn'FDIV_S",
8643   TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("fprnd",FTy 3)],
8644   Close
8645     (qVar"state",
8646      CS(Apply
8647           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
8648         [(Mop(Some,Var("r",rTy)),
8649           Apply
8650             (Call
8651                ("writeFPRS",ATy(qTy,qTy),
8652                 TP[Var("rd",FTy 5),
8653                    Mop(FPDiv 32,
8654                        TP[Var("r",rTy),
8655                           Apply
8656                             (Call("FPRS",ATy(qTy,F32),Var("rs1",FTy 5)),
8657                              qVar"state"),
8658                           Apply
8659                             (Call("FPRS",ATy(qTy,F32),Var("rs2",FTy 5)),
8660                              qVar"state")])]),qVar"state")),
8661          (LO rTy,
8662           Apply
8663             (Call
8664                ("signalException",ATy(qTy,qTy),
8665                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
8666;
8667val dfn'FSQRT_S_def = Def
8668  ("dfn'FSQRT_S",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)],
8669   Close
8670     (qVar"state",
8671      CS(Apply
8672           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
8673         [(Mop(Some,Var("r",rTy)),
8674           Apply
8675             (Call
8676                ("writeFPRS",ATy(qTy,qTy),
8677                 TP[Var("rd",FTy 5),
8678                    Mop(FPSqrt 32,
8679                        TP[Var("r",rTy),
8680                           Apply
8681                             (Call("FPRS",ATy(qTy,F32),Var("rs",FTy 5)),
8682                              qVar"state")])]),qVar"state")),
8683          (LO rTy,
8684           Apply
8685             (Call
8686                ("signalException",ATy(qTy,qTy),
8687                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
8688;
8689val dfn'FMIN_S_def = Def
8690  ("dfn'FMIN_S",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
8691   Close
8692     (qVar"state",
8693      Let(Var("v",F32),
8694          Apply(Call("FPRS",ATy(qTy,F32),Var("rs1",FTy 5)),qVar"state"),
8695          Let(Var("v0",F32),
8696              Apply
8697                (Call("FPRS",ATy(qTy,F32),Var("rs2",FTy 5)),qVar"state"),
8698              Apply
8699                (Call
8700                   ("writeFPRS",ATy(qTy,qTy),
8701                    TP[Var("rd",FTy 5),
8702                       CS(Mop(FPCmp 32,TP[Var("v",F32),Var("v0",F32)]),
8703                          [(binary_ieeeSyntax.LT_tm,Var("v",F32)),
8704                           (binary_ieeeSyntax.EQ_tm,Var("v",F32)),
8705                           (binary_ieeeSyntax.GT_tm,Var("v0",F32)),
8706                           (binary_ieeeSyntax.UN_tm,
8707                            ITB([(Bop(Or,
8708                                      Bop(Or,
8709                                          Call
8710                                            ("FP32_IsSignalingNan",bTy,
8711                                             Var("v",F32)),
8712                                          Call
8713                                            ("FP32_IsSignalingNan",bTy,
8714                                             Var("v0",F32))),
8715                                      Bop(And,
8716                                          EQ(Var("v",F32),
8717                                             Const
8718                                               ("RV32_CanonicalNan",F32)),
8719                                          EQ(Var("v0",F32),
8720                                             Const
8721                                               ("RV32_CanonicalNan",F32)))),
8722                                  Const("RV32_CanonicalNan",F32)),
8723                                 (EQ(Var("v",F32),
8724                                     Const("RV32_CanonicalNan",F32)),
8725                                  Var("v0",F32))],Var("v",F32)))])]),
8726                 qVar"state")))))
8727;
8728val dfn'FMAX_S_def = Def
8729  ("dfn'FMAX_S",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
8730   Close
8731     (qVar"state",
8732      Let(Var("v",F32),
8733          Apply(Call("FPRS",ATy(qTy,F32),Var("rs1",FTy 5)),qVar"state"),
8734          Let(Var("v0",F32),
8735              Apply
8736                (Call("FPRS",ATy(qTy,F32),Var("rs2",FTy 5)),qVar"state"),
8737              Apply
8738                (Call
8739                   ("writeFPRS",ATy(qTy,qTy),
8740                    TP[Var("rd",FTy 5),
8741                       CS(Mop(FPCmp 32,TP[Var("v",F32),Var("v0",F32)]),
8742                          [(binary_ieeeSyntax.LT_tm,Var("v0",F32)),
8743                           (binary_ieeeSyntax.EQ_tm,Var("v0",F32)),
8744                           (binary_ieeeSyntax.GT_tm,Var("v",F32)),
8745                           (binary_ieeeSyntax.UN_tm,
8746                            ITB([(Bop(Or,
8747                                      Bop(Or,
8748                                          Call
8749                                            ("FP32_IsSignalingNan",bTy,
8750                                             Var("v",F32)),
8751                                          Call
8752                                            ("FP32_IsSignalingNan",bTy,
8753                                             Var("v0",F32))),
8754                                      Bop(And,
8755                                          EQ(Var("v",F32),
8756                                             Const
8757                                               ("RV32_CanonicalNan",F32)),
8758                                          EQ(Var("v0",F32),
8759                                             Const
8760                                               ("RV32_CanonicalNan",F32)))),
8761                                  Const("RV32_CanonicalNan",F32)),
8762                                 (EQ(Var("v",F32),
8763                                     Const("RV32_CanonicalNan",F32)),
8764                                  Var("v0",F32))],Var("v",F32)))])]),
8765                 qVar"state")))))
8766;
8767val dfn'FMADD_S_def = Def
8768  ("dfn'FMADD_S",
8769   TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5),
8770      Var("fprnd",FTy 3)],
8771   Close
8772     (qVar"state",
8773      CS(Apply
8774           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
8775         [(Mop(Some,Var("r",rTy)),
8776           Apply
8777             (Call
8778                ("writeFPRS",ATy(qTy,qTy),
8779                 TP[Var("rd",FTy 5),
8780                    Mop(FPAdd 32,
8781                        TP[Var("r",rTy),
8782                           Mop(FPMul 32,
8783                               TP[Var("r",rTy),
8784                                  Apply
8785                                    (Call
8786                                       ("FPRS",ATy(qTy,F32),
8787                                        Var("rs1",FTy 5)),qVar"state"),
8788                                  Apply
8789                                    (Call
8790                                       ("FPRS",ATy(qTy,F32),
8791                                        Var("rs2",FTy 5)),qVar"state")]),
8792                           Apply
8793                             (Call("FPRS",ATy(qTy,F32),Var("rs3",FTy 5)),
8794                              qVar"state")])]),qVar"state")),
8795          (LO rTy,
8796           Apply
8797             (Call
8798                ("signalException",ATy(qTy,qTy),
8799                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
8800;
8801val dfn'FMSUB_S_def = Def
8802  ("dfn'FMSUB_S",
8803   TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5),
8804      Var("fprnd",FTy 3)],
8805   Close
8806     (qVar"state",
8807      CS(Apply
8808           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
8809         [(Mop(Some,Var("r",rTy)),
8810           Apply
8811             (Call
8812                ("writeFPRS",ATy(qTy,qTy),
8813                 TP[Var("rd",FTy 5),
8814                    Mop(FPSub 32,
8815                        TP[Var("r",rTy),
8816                           Mop(FPMul 32,
8817                               TP[Var("r",rTy),
8818                                  Apply
8819                                    (Call
8820                                       ("FPRS",ATy(qTy,F32),
8821                                        Var("rs1",FTy 5)),qVar"state"),
8822                                  Apply
8823                                    (Call
8824                                       ("FPRS",ATy(qTy,F32),
8825                                        Var("rs2",FTy 5)),qVar"state")]),
8826                           Apply
8827                             (Call("FPRS",ATy(qTy,F32),Var("rs3",FTy 5)),
8828                              qVar"state")])]),qVar"state")),
8829          (LO rTy,
8830           Apply
8831             (Call
8832                ("signalException",ATy(qTy,qTy),
8833                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
8834;
8835val dfn'FNMADD_S_def = Def
8836  ("dfn'FNMADD_S",
8837   TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5),
8838      Var("fprnd",FTy 3)],
8839   Close
8840     (qVar"state",
8841      CS(Apply
8842           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
8843         [(Mop(Some,Var("r",rTy)),
8844           Apply
8845             (Call
8846                ("writeFPRS",ATy(qTy,qTy),
8847                 TP[Var("rd",FTy 5),
8848                    Mop(FPNeg 32,
8849                        Mop(FPAdd 32,
8850                            TP[Var("r",rTy),
8851                               Mop(FPMul 32,
8852                                   TP[Var("r",rTy),
8853                                      Apply
8854                                        (Call
8855                                           ("FPRS",ATy(qTy,F32),
8856                                            Var("rs1",FTy 5)),qVar"state"),
8857                                      Apply
8858                                        (Call
8859                                           ("FPRS",ATy(qTy,F32),
8860                                            Var("rs2",FTy 5)),qVar"state")]),
8861                               Apply
8862                                 (Call
8863                                    ("FPRS",ATy(qTy,F32),Var("rs3",FTy 5)),
8864                                  qVar"state")]))]),qVar"state")),
8865          (LO rTy,
8866           Apply
8867             (Call
8868                ("signalException",ATy(qTy,qTy),
8869                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
8870;
8871val dfn'FNMSUB_S_def = Def
8872  ("dfn'FNMSUB_S",
8873   TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5),
8874      Var("fprnd",FTy 3)],
8875   Close
8876     (qVar"state",
8877      CS(Apply
8878           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
8879         [(Mop(Some,Var("r",rTy)),
8880           Apply
8881             (Call
8882                ("writeFPRS",ATy(qTy,qTy),
8883                 TP[Var("rd",FTy 5),
8884                    Mop(FPNeg 32,
8885                        Mop(FPSub 32,
8886                            TP[Var("r",rTy),
8887                               Mop(FPMul 32,
8888                                   TP[Var("r",rTy),
8889                                      Apply
8890                                        (Call
8891                                           ("FPRS",ATy(qTy,F32),
8892                                            Var("rs1",FTy 5)),qVar"state"),
8893                                      Apply
8894                                        (Call
8895                                           ("FPRS",ATy(qTy,F32),
8896                                            Var("rs2",FTy 5)),qVar"state")]),
8897                               Apply
8898                                 (Call
8899                                    ("FPRS",ATy(qTy,F32),Var("rs3",FTy 5)),
8900                                  qVar"state")]))]),qVar"state")),
8901          (LO rTy,
8902           Apply
8903             (Call
8904                ("signalException",ATy(qTy,qTy),
8905                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
8906;
8907val dfn'FCVT_S_W_def = Def
8908  ("dfn'FCVT_S_W",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)],
8909   Close
8910     (qVar"state",
8911      CS(Apply
8912           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
8913         [(Mop(Some,Var("r",rTy)),
8914           Apply
8915             (Call
8916                ("writeFPRS",ATy(qTy,qTy),
8917                 TP[Var("rd",FTy 5),
8918                    Mop(FPFromInt 32,
8919                        TP[Var("r",rTy),
8920                           Mop(Cast iTy,
8921                               EX(Apply
8922                                    (Call
8923                                       ("GPR",ATy(qTy,F64),Var("rs",FTy 5)),
8924                                     qVar"state"),LN 31,LN 0,F32))])]),
8925              qVar"state")),
8926          (LO rTy,
8927           Apply
8928             (Call
8929                ("signalException",ATy(qTy,qTy),
8930                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
8931;
8932val dfn'FCVT_S_WU_def = Def
8933  ("dfn'FCVT_S_WU",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)],
8934   Close
8935     (qVar"state",
8936      CS(Apply
8937           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
8938         [(Mop(Some,Var("r",rTy)),
8939           Apply
8940             (Call
8941                ("writeFPRS",ATy(qTy,qTy),
8942                 TP[Var("rd",FTy 5),
8943                    Mop(FPFromInt 32,
8944                        TP[Var("r",rTy),
8945                           Mop(Cast iTy,
8946                               CC[LW(0,1),
8947                                  EX(Apply
8948                                       (Call
8949                                          ("GPR",ATy(qTy,F64),
8950                                           Var("rs",FTy 5)),qVar"state"),
8951                                     LN 31,LN 0,F32)])])]),qVar"state")),
8952          (LO rTy,
8953           Apply
8954             (Call
8955                ("signalException",ATy(qTy,qTy),
8956                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
8957;
8958val dfn'FCVT_W_S_def = Def
8959  ("dfn'FCVT_W_S",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)],
8960   Close
8961     (qVar"state",
8962      CS(Apply
8963           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
8964         [(Mop(Some,Var("r",rTy)),
8965           Let(Var("v",F32),
8966               Apply
8967                 (Call("FPRS",ATy(qTy,F32),Var("rs",FTy 5)),qVar"state"),
8968               Let(iVar"val",
8969                   Mop(ValOf,Mop(FPToInt 32,TP[Var("r",rTy),Var("v",F32)])),
8970                   Apply
8971                     (Call
8972                        ("write'GPR",ATy(qTy,qTy),
8973                         TP[ITB([(Bop(Or,Mop(FPIsNan 32,Var("v",F32)),
8974                                      EQ(Var("v",F32),POSINF32)),
8975                                  Mop(Cast F64,
8976                                      Bop(Sub,Bop(Exp,LN 2,LN 31),LN 1))),
8977                                 (EQ(Var("v",F32),NEGINF32),
8978                                  Mop(Neg,
8979                                      Mop(Cast F64,Bop(Exp,LN 2,LN 31)))),
8980                                 (Bop(Gt,iVar"val",
8981                                      Bop(Sub,Bop(Exp,LI 2,LN 31),LI 1)),
8982                                  Mop(Cast F64,
8983                                      Bop(Sub,Bop(Exp,LN 2,LN 31),LN 1))),
8984                                 (Bop(Lt,iVar"val",
8985                                      Mop(Neg,Bop(Exp,LI 2,LN 31))),
8986                                  Mop(Neg,
8987                                      Mop(Cast F64,Bop(Exp,LN 2,LN 31))))],
8988                                Mop(Cast F64,iVar"val")),Var("rd",FTy 5)]),
8989                      qVar"state")))),
8990          (LO rTy,
8991           Apply
8992             (Call
8993                ("signalException",ATy(qTy,qTy),
8994                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
8995;
8996val dfn'FCVT_WU_S_def = Def
8997  ("dfn'FCVT_WU_S",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)],
8998   Close
8999     (qVar"state",
9000      CS(Apply
9001           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
9002         [(Mop(Some,Var("r",rTy)),
9003           Let(Var("v",F32),
9004               Apply
9005                 (Call("FPRS",ATy(qTy,F32),Var("rs",FTy 5)),qVar"state"),
9006               Let(iVar"val",
9007                   Mop(ValOf,Mop(FPToInt 32,TP[Var("r",rTy),Var("v",F32)])),
9008                   Apply
9009                     (Call
9010                        ("write'GPR",ATy(qTy,qTy),
9011                         TP[ITB([(Bop(Or,Mop(FPIsNan 32,Var("v",F32)),
9012                                      EQ(Var("v",F32),POSINF32)),
9013                                  Mop(Cast F64,
9014                                      Bop(Sub,Bop(Exp,LN 2,LN 32),LN 1))),
9015                                 (EQ(Var("v",F32),NEGINF32),LW(0,64)),
9016                                 (Bop(Gt,iVar"val",
9017                                      Bop(Sub,Bop(Exp,LI 2,LN 32),LI 1)),
9018                                  Mop(Cast F64,
9019                                      Bop(Sub,Bop(Exp,LN 2,LN 32),LN 1))),
9020                                 (Bop(Lt,iVar"val",LI 0),LW(0,64))],
9021                                Mop(Cast F64,iVar"val")),Var("rd",FTy 5)]),
9022                      qVar"state")))),
9023          (LO rTy,
9024           Apply
9025             (Call
9026                ("signalException",ATy(qTy,qTy),
9027                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
9028;
9029val dfn'FCVT_S_L_def = Def
9030  ("dfn'FCVT_S_L",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)],
9031   Close
9032     (qVar"state",
9033      CS(Apply
9034           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
9035         [(Mop(Some,Var("r",rTy)),
9036           Apply
9037             (Call
9038                ("writeFPRS",ATy(qTy,qTy),
9039                 TP[Var("rd",FTy 5),
9040                    Mop(FPFromInt 32,
9041                        TP[Var("r",rTy),
9042                           Mop(Cast iTy,
9043                               Apply
9044                                 (Call("GPR",ATy(qTy,F64),Var("rs",FTy 5)),
9045                                  qVar"state"))])]),qVar"state")),
9046          (LO rTy,
9047           Apply
9048             (Call
9049                ("signalException",ATy(qTy,qTy),
9050                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
9051;
9052val dfn'FCVT_S_LU_def = Def
9053  ("dfn'FCVT_S_LU",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)],
9054   Close
9055     (qVar"state",
9056      CS(Apply
9057           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
9058         [(Mop(Some,Var("r",rTy)),
9059           Apply
9060             (Call
9061                ("writeFPRS",ATy(qTy,qTy),
9062                 TP[Var("rd",FTy 5),
9063                    Mop(FPFromInt 32,
9064                        TP[Var("r",rTy),
9065                           Mop(Cast iTy,
9066                               CC[LW(0,1),
9067                                  Apply
9068                                    (Call
9069                                       ("GPR",ATy(qTy,F64),Var("rs",FTy 5)),
9070                                     qVar"state")])])]),qVar"state")),
9071          (LO rTy,
9072           Apply
9073             (Call
9074                ("signalException",ATy(qTy,qTy),
9075                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
9076;
9077val dfn'FCVT_L_S_def = Def
9078  ("dfn'FCVT_L_S",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)],
9079   Close
9080     (qVar"state",
9081      CS(Apply
9082           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
9083         [(Mop(Some,Var("r",rTy)),
9084           Let(Var("v",F32),
9085               Apply
9086                 (Call("FPRS",ATy(qTy,F32),Var("rs",FTy 5)),qVar"state"),
9087               Let(iVar"val",
9088                   Mop(ValOf,Mop(FPToInt 32,TP[Var("r",rTy),Var("v",F32)])),
9089                   Apply
9090                     (Call
9091                        ("write'GPR",ATy(qTy,qTy),
9092                         TP[ITB([(Bop(Or,Mop(FPIsNan 32,Var("v",F32)),
9093                                      EQ(Var("v",F32),POSINF32)),
9094                                  Mop(Cast F64,
9095                                      Bop(Sub,Bop(Exp,LN 2,LN 63),LN 1))),
9096                                 (EQ(Var("v",F32),NEGINF32),
9097                                  Mop(Neg,
9098                                      Mop(Cast F64,Bop(Exp,LN 2,LN 63)))),
9099                                 (Bop(Gt,iVar"val",
9100                                      Bop(Sub,Bop(Exp,LI 2,LN 63),LI 1)),
9101                                  Mop(Cast F64,
9102                                      Bop(Sub,Bop(Exp,LN 2,LN 63),LN 1))),
9103                                 (Bop(Lt,iVar"val",
9104                                      Mop(Neg,Bop(Exp,LI 2,LN 63))),
9105                                  Mop(Neg,
9106                                      Mop(Cast F64,Bop(Exp,LN 2,LN 63))))],
9107                                Mop(Cast F64,iVar"val")),Var("rd",FTy 5)]),
9108                      qVar"state")))),
9109          (LO rTy,
9110           Apply
9111             (Call
9112                ("signalException",ATy(qTy,qTy),
9113                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
9114;
9115val dfn'FCVT_LU_S_def = Def
9116  ("dfn'FCVT_LU_S",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)],
9117   Close
9118     (qVar"state",
9119      CS(Apply
9120           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
9121         [(Mop(Some,Var("r",rTy)),
9122           Let(Var("v",F32),
9123               Apply
9124                 (Call("FPRS",ATy(qTy,F32),Var("rs",FTy 5)),qVar"state"),
9125               Let(iVar"val",
9126                   Mop(ValOf,Mop(FPToInt 32,TP[Var("r",rTy),Var("v",F32)])),
9127                   Apply
9128                     (Call
9129                        ("write'GPR",ATy(qTy,qTy),
9130                         TP[ITB([(Bop(Or,Mop(FPIsNan 32,Var("v",F32)),
9131                                      EQ(Var("v",F32),POSINF32)),
9132                                  Mop(Cast F64,
9133                                      Bop(Sub,Bop(Exp,LN 2,LN 64),LN 1))),
9134                                 (EQ(Var("v",F32),NEGINF32),LW(0,64)),
9135                                 (Bop(Gt,iVar"val",
9136                                      Bop(Sub,Bop(Exp,LI 2,LN 64),LI 1)),
9137                                  Mop(Cast F64,
9138                                      Bop(Sub,Bop(Exp,LN 2,LN 64),LN 1))),
9139                                 (Bop(Lt,iVar"val",LI 0),LW(0,64))],
9140                                Mop(Cast F64,iVar"val")),Var("rd",FTy 5)]),
9141                      qVar"state")))),
9142          (LO rTy,
9143           Apply
9144             (Call
9145                ("signalException",ATy(qTy,qTy),
9146                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
9147;
9148val dfn'FSGNJ_S_def = Def
9149  ("dfn'FSGNJ_S",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
9150   Close
9151     (qVar"state",
9152      Apply
9153        (Call
9154           ("writeFPRS",ATy(qTy,qTy),
9155            TP[Var("rd",FTy 5),
9156               CC[Mop(Cast F1,
9157                      Call
9158                        ("FP32_Sign",bTy,
9159                         Apply
9160                           (Call("FPRS",ATy(qTy,F32),Var("rs2",FTy 5)),
9161                            qVar"state"))),
9162                  EX(Apply
9163                       (Call("FPRS",ATy(qTy,F32),Var("rs1",FTy 5)),
9164                        qVar"state"),LN 30,LN 0,FTy 31)]]),qVar"state")))
9165;
9166val dfn'FSGNJN_S_def = Def
9167  ("dfn'FSGNJN_S",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
9168   Close
9169     (qVar"state",
9170      Apply
9171        (Call
9172           ("writeFPRS",ATy(qTy,qTy),
9173            TP[Var("rd",FTy 5),
9174               CC[Mop(Cast F1,
9175                      Mop(Not,
9176                          Call
9177                            ("FP32_Sign",bTy,
9178                             Apply
9179                               (Call("FPRS",ATy(qTy,F32),Var("rs2",FTy 5)),
9180                                qVar"state")))),
9181                  EX(Apply
9182                       (Call("FPRS",ATy(qTy,F32),Var("rs1",FTy 5)),
9183                        qVar"state"),LN 30,LN 0,FTy 31)]]),qVar"state")))
9184;
9185val dfn'FSGNJX_S_def = Def
9186  ("dfn'FSGNJX_S",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
9187   Close
9188     (qVar"state",
9189      Let(Var("v",F32),
9190          Apply(Call("FPRS",ATy(qTy,F32),Var("rs1",FTy 5)),qVar"state"),
9191          Apply
9192            (Call
9193               ("writeFPRS",ATy(qTy,qTy),
9194                TP[Var("rd",FTy 5),
9195                   CC[Bop(BXor,
9196                          Mop(Cast F1,
9197                              Call
9198                                ("FP32_Sign",bTy,
9199                                 Apply
9200                                   (Call
9201                                      ("FPRS",ATy(qTy,F32),
9202                                       Var("rs2",FTy 5)),qVar"state"))),
9203                          Mop(Cast F1,Call("FP32_Sign",bTy,Var("v",F32)))),
9204                      EX(Var("v",F32),LN 30,LN 0,FTy 31)]]),qVar"state"))))
9205;
9206val dfn'FMV_X_S_def = Def
9207  ("dfn'FMV_X_S",TP[Var("rd",FTy 5),Var("rs",FTy 5)],
9208   Close
9209     (qVar"state",
9210      Apply
9211        (Call
9212           ("write'GPR",ATy(qTy,qTy),
9213            TP[Mop(SE F64,
9214                   Apply
9215                     (Call("FPRS",ATy(qTy,F32),Var("rs",FTy 5)),
9216                      qVar"state")),Var("rd",FTy 5)]),qVar"state")))
9217;
9218val dfn'FMV_S_X_def = Def
9219  ("dfn'FMV_S_X",TP[Var("rd",FTy 5),Var("rs",FTy 5)],
9220   Close
9221     (qVar"state",
9222      Apply
9223        (Call
9224           ("writeFPRS",ATy(qTy,qTy),
9225            TP[Var("rd",FTy 5),
9226               EX(Apply
9227                    (Call("GPR",ATy(qTy,F64),Var("rs",FTy 5)),qVar"state"),
9228                  LN 31,LN 0,F32)]),qVar"state")))
9229;
9230val dfn'FEQ_S_def = Def
9231  ("dfn'FEQ_S",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
9232   Close
9233     (qVar"state",
9234      Let(Var("v",F32),
9235          Apply(Call("FPRS",ATy(qTy,F32),Var("rs1",FTy 5)),qVar"state"),
9236          Let(Var("v0",F32),
9237              Apply
9238                (Call("FPRS",ATy(qTy,F32),Var("rs2",FTy 5)),qVar"state"),
9239              ITE(Bop(Or,Call("FP32_IsSignalingNan",bTy,Var("v",F32)),
9240                      Call("FP32_IsSignalingNan",bTy,Var("v0",F32))),
9241                  Apply
9242                    (Call("setFP_Invalid",ATy(qTy,qTy),LU),
9243                     Apply
9244                       (Call
9245                          ("write'GPR",ATy(qTy,qTy),
9246                           TP[LW(0,64),Var("rd",FTy 5)]),qVar"state")),
9247                  Apply
9248                    (Call
9249                       ("write'GPR",ATy(qTy,qTy),
9250                        TP[CS(Mop(FPCmp 32,TP[Var("v",F32),Var("v0",F32)]),
9251                              [(binary_ieeeSyntax.LT_tm,LW(0,64)),
9252                               (binary_ieeeSyntax.EQ_tm,LW(1,64)),
9253                               (binary_ieeeSyntax.GT_tm,LW(0,64)),
9254                               (binary_ieeeSyntax.UN_tm,LW(0,64))]),
9255                           Var("rd",FTy 5)]),qVar"state"))))))
9256;
9257val dfn'FLT_S_def = Def
9258  ("dfn'FLT_S",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
9259   Close
9260     (qVar"state",
9261      Let(Var("v",F32),
9262          Apply(Call("FPRS",ATy(qTy,F32),Var("rs1",FTy 5)),qVar"state"),
9263          Let(Var("v0",F32),
9264              Apply
9265                (Call("FPRS",ATy(qTy,F32),Var("rs2",FTy 5)),qVar"state"),
9266              ITE(Bop(Or,Mop(FPIsNan 32,Var("v",F32)),
9267                      Mop(FPIsNan 32,Var("v0",F32))),
9268                  Apply
9269                    (Call("setFP_Invalid",ATy(qTy,qTy),LU),
9270                     Apply
9271                       (Call
9272                          ("write'GPR",ATy(qTy,qTy),
9273                           TP[LW(0,64),Var("rd",FTy 5)]),qVar"state")),
9274                  Apply
9275                    (Call
9276                       ("write'GPR",ATy(qTy,qTy),
9277                        TP[CS(Mop(FPCmp 32,TP[Var("v",F32),Var("v0",F32)]),
9278                              [(binary_ieeeSyntax.LT_tm,LW(1,64)),
9279                               (binary_ieeeSyntax.EQ_tm,LW(0,64)),
9280                               (binary_ieeeSyntax.GT_tm,LW(0,64)),
9281                               (binary_ieeeSyntax.UN_tm,LW(0,64))]),
9282                           Var("rd",FTy 5)]),qVar"state"))))))
9283;
9284val dfn'FLE_S_def = Def
9285  ("dfn'FLE_S",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
9286   Close
9287     (qVar"state",
9288      Let(Var("v",F32),
9289          Apply(Call("FPRS",ATy(qTy,F32),Var("rs1",FTy 5)),qVar"state"),
9290          Let(Var("v0",F32),
9291              Apply
9292                (Call("FPRS",ATy(qTy,F32),Var("rs2",FTy 5)),qVar"state"),
9293              ITE(Bop(Or,Mop(FPIsNan 32,Var("v",F32)),
9294                      Mop(FPIsNan 32,Var("v0",F32))),
9295                  Apply
9296                    (Call("setFP_Invalid",ATy(qTy,qTy),LU),
9297                     Apply
9298                       (Call
9299                          ("write'GPR",ATy(qTy,qTy),
9300                           TP[LW(0,64),Var("rd",FTy 5)]),qVar"state")),
9301                  Apply
9302                    (Call
9303                       ("write'GPR",ATy(qTy,qTy),
9304                        TP[CS(Mop(FPCmp 32,TP[Var("v",F32),Var("v0",F32)]),
9305                              [(binary_ieeeSyntax.LT_tm,LW(1,64)),
9306                               (binary_ieeeSyntax.EQ_tm,LW(1,64)),
9307                               (binary_ieeeSyntax.GT_tm,LW(0,64)),
9308                               (binary_ieeeSyntax.UN_tm,LW(0,64))]),
9309                           Var("rd",FTy 5)]),qVar"state"))))))
9310;
9311val dfn'FCLASS_S_def = Def
9312  ("dfn'FCLASS_S",TP[Var("rd",FTy 5),Var("rs",FTy 5)],
9313   Close
9314     (qVar"state",
9315      Let(TP[Var("v",F32),Var("s",PTy(FTy 10,qTy))],
9316          TP[Apply(Call("FPRS",ATy(qTy,F32),Var("rs",FTy 5)),qVar"state"),
9317             LW(0,10),qVar"state"],
9318          Apply
9319            (Call
9320               ("write'GPR",ATy(qTy,qTy),
9321                TP[Mop(Cast F64,
9322                       BFI(LN 9,LN 9,
9323                           Mop(Cast F1,
9324                               EQ(Var("v",F32),
9325                                  Const("RV32_CanonicalNan",F32))),
9326                           BFI(LN 8,LN 8,
9327                               Mop(Cast F1,
9328                                   Call
9329                                     ("FP32_IsSignalingNan",bTy,
9330                                      Var("v",F32))),
9331                               BFI(LN 7,LN 7,
9332                                   Mop(Cast F1,EQ(Var("v",F32),POSINF32)),
9333                                   BFI(LN 6,LN 6,
9334                                       Mop(Cast F1,
9335                                           Bop(And,
9336                                               Mop(Not,
9337                                                   Call
9338                                                     ("FP32_Sign",bTy,
9339                                                      Var("v",F32))),
9340                                               Mop(FPIsNormal 32,
9341                                                   Var("v",F32)))),
9342                                       BFI(LN 5,LN 5,
9343                                           Mop(Cast F1,
9344                                               Bop(And,
9345                                                   Mop(Not,
9346                                                       Call
9347                                                         ("FP32_Sign",bTy,
9348                                                          Var("v",F32))),
9349                                                   Mop(FPIsSubnormal 32,
9350                                                       Var("v",F32)))),
9351                                           BFI(LN 4,LN 4,
9352                                               Mop(Cast F1,
9353                                                   EQ(Var("v",F32),
9354                                                      POSZERO32)),
9355                                               BFI(LN 3,LN 3,
9356                                                   Mop(Cast F1,
9357                                                       EQ(Var("v",F32),
9358                                                          NEGZERO32)),
9359                                                   BFI(LN 2,LN 2,
9360                                                       Mop(Cast F1,
9361                                                           Bop(And,
9362                                                               Call
9363                                                                 ("FP32_Sign",
9364                                                                  bTy,
9365                                                                  Var("v",
9366                                                                      F32)),
9367                                                               Mop(FPIsSubnormal 32,
9368                                                                   Var("v",
9369                                                                       F32)))),
9370                                                       BFI(LN 1,LN 1,
9371                                                           Mop(Cast F1,
9372                                                               Bop(And,
9373                                                                   Call
9374                                                                     ("FP32_Sign",
9375                                                                      bTy,
9376                                                                      Var("v",
9377                                                                          F32)),
9378                                                                   Mop(FPIsNormal 32,
9379                                                                       Var("v",
9380                                                                           F32)))),
9381                                                           BFI(LN 0,LN 0,
9382                                                               Mop(Cast F1,
9383                                                                   EQ(Var("v",
9384                                                                          F32),
9385                                                                      NEGINF32)),
9386                                                               Mop(Fst,
9387                                                                   Var("s",
9388                                                                       PTy(FTy 10,
9389                                                                           qTy)))))))))))))),
9390                   Var("rd",FTy 5)]),Mop(Snd,Var("s",PTy(FTy 10,qTy)))))))
9391;
9392val dfn'FLD_def = Def
9393  ("dfn'FLD",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("offs",FTy 12)],
9394   Close
9395     (qVar"state",
9396      Let(Var("v",F64),
9397          Bop(Add,
9398              Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
9399              Mop(SE F64,Var("offs",FTy 12))),
9400          Let(TP[Var("v0",OTy F64),qVar"s"],
9401              Apply
9402                (Call
9403                   ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
9404                    TP[Var("v",F64),LC("Data",CTy"fetchType"),
9405                       LC("Read",CTy"accessType")]),qVar"state"),
9406              CS(Var("v0",OTy F64),
9407                 [(Mop(Some,Var("pAddr",F64)),
9408                   Apply
9409                     (Call
9410                        ("write'FPRD",ATy(qTy,qTy),
9411                         TP[Apply
9412                              (Call
9413                                 ("rawReadData",ATy(qTy,F64),
9414                                  Var("pAddr",F64)),qVar"s"),
9415                            Var("rd",FTy 5)]),qVar"s")),
9416                  (LO F64,
9417                   Apply
9418                     (Call
9419                        ("signalAddressException",ATy(qTy,qTy),
9420                         TP[LC("Load_Fault",CTy"ExceptionType"),
9421                            Var("v",F64)]),qVar"s"))])))))
9422;
9423val dfn'FSD_def = Def
9424  ("dfn'FSD",TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("offs",FTy 12)],
9425   Close
9426     (qVar"state",
9427      Let(Var("v",F64),
9428          Bop(Add,
9429              Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
9430              Mop(SE F64,Var("offs",FTy 12))),
9431          Let(TP[Var("v0",OTy F64),qVar"s"],
9432              Apply
9433                (Call
9434                   ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
9435                    TP[Var("v",F64),LC("Data",CTy"fetchType"),
9436                       LC("Write",CTy"accessType")]),qVar"state"),
9437              CS(Var("v0",OTy F64),
9438                 [(Mop(Some,Var("pAddr",F64)),
9439                   Apply
9440                     (Call
9441                        ("rawWriteData",ATy(qTy,qTy),
9442                         TP[Var("pAddr",F64),
9443                            Apply
9444                              (Call("FPRD",ATy(qTy,F64),Var("rs2",FTy 5)),
9445                               qVar"s"),LN 8]),qVar"s")),
9446                  (LO F64,
9447                   Apply
9448                     (Call
9449                        ("signalAddressException",ATy(qTy,qTy),
9450                         TP[LC("Store_AMO_Fault",CTy"ExceptionType"),
9451                            Var("v",F64)]),qVar"s"))])))))
9452;
9453val dfn'FADD_D_def = Def
9454  ("dfn'FADD_D",
9455   TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("fprnd",FTy 3)],
9456   Close
9457     (qVar"state",
9458      CS(Apply
9459           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
9460         [(Mop(Some,Var("r",rTy)),
9461           Apply
9462             (Call
9463                ("writeFPRD",ATy(qTy,qTy),
9464                 TP[Var("rd",FTy 5),
9465                    Mop(FPAdd 64,
9466                        TP[Var("r",rTy),
9467                           Apply
9468                             (Call("FPRD",ATy(qTy,F64),Var("rs1",FTy 5)),
9469                              qVar"state"),
9470                           Apply
9471                             (Call("FPRD",ATy(qTy,F64),Var("rs2",FTy 5)),
9472                              qVar"state")])]),qVar"state")),
9473          (LO rTy,
9474           Apply
9475             (Call
9476                ("signalException",ATy(qTy,qTy),
9477                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
9478;
9479val dfn'FSUB_D_def = Def
9480  ("dfn'FSUB_D",
9481   TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("fprnd",FTy 3)],
9482   Close
9483     (qVar"state",
9484      CS(Apply
9485           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
9486         [(Mop(Some,Var("r",rTy)),
9487           Apply
9488             (Call
9489                ("writeFPRD",ATy(qTy,qTy),
9490                 TP[Var("rd",FTy 5),
9491                    Mop(FPSub 64,
9492                        TP[Var("r",rTy),
9493                           Apply
9494                             (Call("FPRD",ATy(qTy,F64),Var("rs1",FTy 5)),
9495                              qVar"state"),
9496                           Apply
9497                             (Call("FPRD",ATy(qTy,F64),Var("rs2",FTy 5)),
9498                              qVar"state")])]),qVar"state")),
9499          (LO rTy,
9500           Apply
9501             (Call
9502                ("signalException",ATy(qTy,qTy),
9503                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
9504;
9505val dfn'FMUL_D_def = Def
9506  ("dfn'FMUL_D",
9507   TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("fprnd",FTy 3)],
9508   Close
9509     (qVar"state",
9510      CS(Apply
9511           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
9512         [(Mop(Some,Var("r",rTy)),
9513           Apply
9514             (Call
9515                ("writeFPRD",ATy(qTy,qTy),
9516                 TP[Var("rd",FTy 5),
9517                    Mop(FPMul 64,
9518                        TP[Var("r",rTy),
9519                           Apply
9520                             (Call("FPRD",ATy(qTy,F64),Var("rs1",FTy 5)),
9521                              qVar"state"),
9522                           Apply
9523                             (Call("FPRD",ATy(qTy,F64),Var("rs2",FTy 5)),
9524                              qVar"state")])]),qVar"state")),
9525          (LO rTy,
9526           Apply
9527             (Call
9528                ("signalException",ATy(qTy,qTy),
9529                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
9530;
9531val dfn'FDIV_D_def = Def
9532  ("dfn'FDIV_D",
9533   TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("fprnd",FTy 3)],
9534   Close
9535     (qVar"state",
9536      CS(Apply
9537           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
9538         [(Mop(Some,Var("r",rTy)),
9539           Apply
9540             (Call
9541                ("writeFPRD",ATy(qTy,qTy),
9542                 TP[Var("rd",FTy 5),
9543                    Mop(FPDiv 64,
9544                        TP[Var("r",rTy),
9545                           Apply
9546                             (Call("FPRD",ATy(qTy,F64),Var("rs1",FTy 5)),
9547                              qVar"state"),
9548                           Apply
9549                             (Call("FPRD",ATy(qTy,F64),Var("rs2",FTy 5)),
9550                              qVar"state")])]),qVar"state")),
9551          (LO rTy,
9552           Apply
9553             (Call
9554                ("signalException",ATy(qTy,qTy),
9555                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
9556;
9557val dfn'FSQRT_D_def = Def
9558  ("dfn'FSQRT_D",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)],
9559   Close
9560     (qVar"state",
9561      CS(Apply
9562           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
9563         [(Mop(Some,Var("r",rTy)),
9564           Apply
9565             (Call
9566                ("writeFPRD",ATy(qTy,qTy),
9567                 TP[Var("rd",FTy 5),
9568                    Mop(FPSqrt 64,
9569                        TP[Var("r",rTy),
9570                           Apply
9571                             (Call("FPRD",ATy(qTy,F64),Var("rs",FTy 5)),
9572                              qVar"state")])]),qVar"state")),
9573          (LO rTy,
9574           Apply
9575             (Call
9576                ("signalException",ATy(qTy,qTy),
9577                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
9578;
9579val dfn'FMIN_D_def = Def
9580  ("dfn'FMIN_D",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
9581   Close
9582     (qVar"state",
9583      Let(Var("v",F64),
9584          Apply(Call("FPRD",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
9585          Let(Var("v0",F64),
9586              Apply
9587                (Call("FPRD",ATy(qTy,F64),Var("rs2",FTy 5)),qVar"state"),
9588              Apply
9589                (Call
9590                   ("writeFPRD",ATy(qTy,qTy),
9591                    TP[Var("rd",FTy 5),
9592                       CS(Mop(FPCmp 64,TP[Var("v",F64),Var("v0",F64)]),
9593                          [(binary_ieeeSyntax.LT_tm,Var("v",F64)),
9594                           (binary_ieeeSyntax.EQ_tm,Var("v",F64)),
9595                           (binary_ieeeSyntax.GT_tm,Var("v0",F64)),
9596                           (binary_ieeeSyntax.UN_tm,
9597                            ITB([(Bop(Or,
9598                                      Bop(Or,
9599                                          Call
9600                                            ("FP64_IsSignalingNan",bTy,
9601                                             Var("v",F64)),
9602                                          Call
9603                                            ("FP64_IsSignalingNan",bTy,
9604                                             Var("v0",F64))),
9605                                      Bop(And,
9606                                          EQ(Var("v",F64),
9607                                             Const
9608                                               ("RV64_CanonicalNan",F64)),
9609                                          EQ(Var("v0",F64),
9610                                             Const
9611                                               ("RV64_CanonicalNan",F64)))),
9612                                  Const("RV64_CanonicalNan",F64)),
9613                                 (EQ(Var("v",F64),
9614                                     Const("RV64_CanonicalNan",F64)),
9615                                  Var("v0",F64))],Var("v",F64)))])]),
9616                 qVar"state")))))
9617;
9618val dfn'FMAX_D_def = Def
9619  ("dfn'FMAX_D",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
9620   Close
9621     (qVar"state",
9622      Let(Var("v",F64),
9623          Apply(Call("FPRD",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
9624          Let(Var("v0",F64),
9625              Apply
9626                (Call("FPRD",ATy(qTy,F64),Var("rs2",FTy 5)),qVar"state"),
9627              Apply
9628                (Call
9629                   ("writeFPRD",ATy(qTy,qTy),
9630                    TP[Var("rd",FTy 5),
9631                       CS(Mop(FPCmp 64,TP[Var("v",F64),Var("v0",F64)]),
9632                          [(binary_ieeeSyntax.LT_tm,Var("v0",F64)),
9633                           (binary_ieeeSyntax.EQ_tm,Var("v0",F64)),
9634                           (binary_ieeeSyntax.GT_tm,Var("v",F64)),
9635                           (binary_ieeeSyntax.UN_tm,
9636                            ITB([(Bop(Or,
9637                                      Bop(Or,
9638                                          Call
9639                                            ("FP64_IsSignalingNan",bTy,
9640                                             Var("v",F64)),
9641                                          Call
9642                                            ("FP64_IsSignalingNan",bTy,
9643                                             Var("v0",F64))),
9644                                      Bop(And,
9645                                          EQ(Var("v",F64),
9646                                             Const
9647                                               ("RV64_CanonicalNan",F64)),
9648                                          EQ(Var("v0",F64),
9649                                             Const
9650                                               ("RV64_CanonicalNan",F64)))),
9651                                  Const("RV64_CanonicalNan",F64)),
9652                                 (EQ(Var("v",F64),
9653                                     Const("RV64_CanonicalNan",F64)),
9654                                  Var("v0",F64))],Var("v",F64)))])]),
9655                 qVar"state")))))
9656;
9657val dfn'FMADD_D_def = Def
9658  ("dfn'FMADD_D",
9659   TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5),
9660      Var("fprnd",FTy 3)],
9661   Close
9662     (qVar"state",
9663      CS(Apply
9664           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
9665         [(Mop(Some,Var("r",rTy)),
9666           Apply
9667             (Call
9668                ("writeFPRD",ATy(qTy,qTy),
9669                 TP[Var("rd",FTy 5),
9670                    Mop(FPAdd 64,
9671                        TP[Var("r",rTy),
9672                           Mop(FPMul 64,
9673                               TP[Var("r",rTy),
9674                                  Apply
9675                                    (Call
9676                                       ("FPRD",ATy(qTy,F64),
9677                                        Var("rs1",FTy 5)),qVar"state"),
9678                                  Apply
9679                                    (Call
9680                                       ("FPRD",ATy(qTy,F64),
9681                                        Var("rs2",FTy 5)),qVar"state")]),
9682                           Apply
9683                             (Call("FPRD",ATy(qTy,F64),Var("rs3",FTy 5)),
9684                              qVar"state")])]),qVar"state")),
9685          (LO rTy,
9686           Apply
9687             (Call
9688                ("signalException",ATy(qTy,qTy),
9689                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
9690;
9691val dfn'FMSUB_D_def = Def
9692  ("dfn'FMSUB_D",
9693   TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5),
9694      Var("fprnd",FTy 3)],
9695   Close
9696     (qVar"state",
9697      CS(Apply
9698           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
9699         [(Mop(Some,Var("r",rTy)),
9700           Apply
9701             (Call
9702                ("writeFPRD",ATy(qTy,qTy),
9703                 TP[Var("rd",FTy 5),
9704                    Mop(FPSub 64,
9705                        TP[Var("r",rTy),
9706                           Mop(FPMul 64,
9707                               TP[Var("r",rTy),
9708                                  Apply
9709                                    (Call
9710                                       ("FPRD",ATy(qTy,F64),
9711                                        Var("rs1",FTy 5)),qVar"state"),
9712                                  Apply
9713                                    (Call
9714                                       ("FPRD",ATy(qTy,F64),
9715                                        Var("rs2",FTy 5)),qVar"state")]),
9716                           Apply
9717                             (Call("FPRD",ATy(qTy,F64),Var("rs3",FTy 5)),
9718                              qVar"state")])]),qVar"state")),
9719          (LO rTy,
9720           Apply
9721             (Call
9722                ("signalException",ATy(qTy,qTy),
9723                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
9724;
9725val dfn'FNMADD_D_def = Def
9726  ("dfn'FNMADD_D",
9727   TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5),
9728      Var("fprnd",FTy 3)],
9729   Close
9730     (qVar"state",
9731      CS(Apply
9732           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
9733         [(Mop(Some,Var("r",rTy)),
9734           Apply
9735             (Call
9736                ("writeFPRD",ATy(qTy,qTy),
9737                 TP[Var("rd",FTy 5),
9738                    Mop(FPNeg 64,
9739                        Mop(FPAdd 64,
9740                            TP[Var("r",rTy),
9741                               Mop(FPMul 64,
9742                                   TP[Var("r",rTy),
9743                                      Apply
9744                                        (Call
9745                                           ("FPRD",ATy(qTy,F64),
9746                                            Var("rs1",FTy 5)),qVar"state"),
9747                                      Apply
9748                                        (Call
9749                                           ("FPRD",ATy(qTy,F64),
9750                                            Var("rs2",FTy 5)),qVar"state")]),
9751                               Apply
9752                                 (Call
9753                                    ("FPRD",ATy(qTy,F64),Var("rs3",FTy 5)),
9754                                  qVar"state")]))]),qVar"state")),
9755          (LO rTy,
9756           Apply
9757             (Call
9758                ("signalException",ATy(qTy,qTy),
9759                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
9760;
9761val dfn'FNMSUB_D_def = Def
9762  ("dfn'FNMSUB_D",
9763   TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5),
9764      Var("fprnd",FTy 3)],
9765   Close
9766     (qVar"state",
9767      CS(Apply
9768           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
9769         [(Mop(Some,Var("r",rTy)),
9770           Apply
9771             (Call
9772                ("writeFPRD",ATy(qTy,qTy),
9773                 TP[Var("rd",FTy 5),
9774                    Mop(FPNeg 64,
9775                        Mop(FPSub 64,
9776                            TP[Var("r",rTy),
9777                               Mop(FPMul 64,
9778                                   TP[Var("r",rTy),
9779                                      Apply
9780                                        (Call
9781                                           ("FPRD",ATy(qTy,F64),
9782                                            Var("rs1",FTy 5)),qVar"state"),
9783                                      Apply
9784                                        (Call
9785                                           ("FPRD",ATy(qTy,F64),
9786                                            Var("rs2",FTy 5)),qVar"state")]),
9787                               Apply
9788                                 (Call
9789                                    ("FPRD",ATy(qTy,F64),Var("rs3",FTy 5)),
9790                                  qVar"state")]))]),qVar"state")),
9791          (LO rTy,
9792           Apply
9793             (Call
9794                ("signalException",ATy(qTy,qTy),
9795                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
9796;
9797val dfn'FCVT_D_W_def = Def
9798  ("dfn'FCVT_D_W",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)],
9799   Close
9800     (qVar"state",
9801      CS(Apply
9802           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
9803         [(Mop(Some,Var("r",rTy)),
9804           Apply
9805             (Call
9806                ("writeFPRD",ATy(qTy,qTy),
9807                 TP[Var("rd",FTy 5),
9808                    Mop(FPFromInt 64,
9809                        TP[Var("r",rTy),
9810                           Mop(Cast iTy,
9811                               EX(Apply
9812                                    (Call
9813                                       ("GPR",ATy(qTy,F64),Var("rs",FTy 5)),
9814                                     qVar"state"),LN 31,LN 0,F32))])]),
9815              qVar"state")),
9816          (LO rTy,
9817           Apply
9818             (Call
9819                ("signalException",ATy(qTy,qTy),
9820                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
9821;
9822val dfn'FCVT_D_WU_def = Def
9823  ("dfn'FCVT_D_WU",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)],
9824   Close
9825     (qVar"state",
9826      CS(Apply
9827           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
9828         [(Mop(Some,Var("r",rTy)),
9829           Apply
9830             (Call
9831                ("writeFPRD",ATy(qTy,qTy),
9832                 TP[Var("rd",FTy 5),
9833                    Mop(FPFromInt 64,
9834                        TP[Var("r",rTy),
9835                           Mop(Cast iTy,
9836                               CC[LW(0,1),
9837                                  EX(Apply
9838                                       (Call
9839                                          ("GPR",ATy(qTy,F64),
9840                                           Var("rs",FTy 5)),qVar"state"),
9841                                     LN 31,LN 0,F32)])])]),qVar"state")),
9842          (LO rTy,
9843           Apply
9844             (Call
9845                ("signalException",ATy(qTy,qTy),
9846                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
9847;
9848val dfn'FCVT_W_D_def = Def
9849  ("dfn'FCVT_W_D",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)],
9850   Close
9851     (qVar"state",
9852      CS(Apply
9853           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
9854         [(Mop(Some,Var("r",rTy)),
9855           Let(Var("v",F64),
9856               Apply
9857                 (Call("FPRD",ATy(qTy,F64),Var("rs",FTy 5)),qVar"state"),
9858               Let(iVar"val",
9859                   Mop(ValOf,Mop(FPToInt 64,TP[Var("r",rTy),Var("v",F64)])),
9860                   Apply
9861                     (Call
9862                        ("write'GPR",ATy(qTy,qTy),
9863                         TP[ITB([(Bop(Or,Mop(FPIsNan 64,Var("v",F64)),
9864                                      EQ(Var("v",F64),POSINF64)),
9865                                  Mop(Cast F64,
9866                                      Bop(Sub,Bop(Exp,LN 2,LN 31),LN 1))),
9867                                 (EQ(Var("v",F64),NEGINF64),
9868                                  Mop(Neg,
9869                                      Mop(Cast F64,Bop(Exp,LN 2,LN 31)))),
9870                                 (Bop(Gt,iVar"val",
9871                                      Bop(Sub,Bop(Exp,LI 2,LN 31),LI 1)),
9872                                  Mop(Cast F64,
9873                                      Bop(Sub,Bop(Exp,LN 2,LN 31),LN 1))),
9874                                 (Bop(Lt,iVar"val",
9875                                      Mop(Neg,Bop(Exp,LI 2,LN 31))),
9876                                  Mop(Neg,
9877                                      Mop(Cast F64,Bop(Exp,LN 2,LN 31))))],
9878                                Mop(Cast F64,iVar"val")),Var("rd",FTy 5)]),
9879                      qVar"state")))),
9880          (LO rTy,
9881           Apply
9882             (Call
9883                ("signalException",ATy(qTy,qTy),
9884                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
9885;
9886val dfn'FCVT_WU_D_def = Def
9887  ("dfn'FCVT_WU_D",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)],
9888   Close
9889     (qVar"state",
9890      CS(Apply
9891           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
9892         [(Mop(Some,Var("r",rTy)),
9893           Let(Var("v",F64),
9894               Apply
9895                 (Call("FPRD",ATy(qTy,F64),Var("rs",FTy 5)),qVar"state"),
9896               Let(iVar"val",
9897                   Mop(ValOf,Mop(FPToInt 64,TP[Var("r",rTy),Var("v",F64)])),
9898                   Apply
9899                     (Call
9900                        ("write'GPR",ATy(qTy,qTy),
9901                         TP[ITB([(Bop(Or,Mop(FPIsNan 64,Var("v",F64)),
9902                                      EQ(Var("v",F64),POSINF64)),
9903                                  Mop(Cast F64,
9904                                      Bop(Sub,Bop(Exp,LN 2,LN 32),LN 1))),
9905                                 (EQ(Var("v",F64),NEGINF64),LW(0,64)),
9906                                 (Bop(Gt,iVar"val",
9907                                      Bop(Sub,Bop(Exp,LI 2,LN 32),LI 1)),
9908                                  Mop(Cast F64,
9909                                      Bop(Sub,Bop(Exp,LN 2,LN 32),LN 1))),
9910                                 (Bop(Lt,iVar"val",LI 0),LW(0,64))],
9911                                Mop(Cast F64,iVar"val")),Var("rd",FTy 5)]),
9912                      qVar"state")))),
9913          (LO rTy,
9914           Apply
9915             (Call
9916                ("signalException",ATy(qTy,qTy),
9917                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
9918;
9919val dfn'FCVT_D_L_def = Def
9920  ("dfn'FCVT_D_L",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)],
9921   Close
9922     (qVar"state",
9923      CS(Apply
9924           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
9925         [(Mop(Some,Var("r",rTy)),
9926           Apply
9927             (Call
9928                ("writeFPRD",ATy(qTy,qTy),
9929                 TP[Var("rd",FTy 5),
9930                    Mop(FPFromInt 64,
9931                        TP[Var("r",rTy),
9932                           Mop(Cast iTy,
9933                               Apply
9934                                 (Call("GPR",ATy(qTy,F64),Var("rs",FTy 5)),
9935                                  qVar"state"))])]),qVar"state")),
9936          (LO rTy,
9937           Apply
9938             (Call
9939                ("signalException",ATy(qTy,qTy),
9940                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
9941;
9942val dfn'FCVT_D_LU_def = Def
9943  ("dfn'FCVT_D_LU",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)],
9944   Close
9945     (qVar"state",
9946      CS(Apply
9947           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
9948         [(Mop(Some,Var("r",rTy)),
9949           Apply
9950             (Call
9951                ("writeFPRD",ATy(qTy,qTy),
9952                 TP[Var("rd",FTy 5),
9953                    Mop(FPFromInt 64,
9954                        TP[Var("r",rTy),
9955                           Mop(Cast iTy,
9956                               CC[LW(0,1),
9957                                  Apply
9958                                    (Call
9959                                       ("GPR",ATy(qTy,F64),Var("rs",FTy 5)),
9960                                     qVar"state")])])]),qVar"state")),
9961          (LO rTy,
9962           Apply
9963             (Call
9964                ("signalException",ATy(qTy,qTy),
9965                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
9966;
9967val dfn'FCVT_L_D_def = Def
9968  ("dfn'FCVT_L_D",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)],
9969   Close
9970     (qVar"state",
9971      CS(Apply
9972           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
9973         [(Mop(Some,Var("r",rTy)),
9974           Let(Var("v",F64),
9975               Apply
9976                 (Call("FPRD",ATy(qTy,F64),Var("rs",FTy 5)),qVar"state"),
9977               Let(iVar"val",
9978                   Mop(ValOf,Mop(FPToInt 64,TP[Var("r",rTy),Var("v",F64)])),
9979                   Apply
9980                     (Call
9981                        ("write'GPR",ATy(qTy,qTy),
9982                         TP[ITB([(Bop(Or,Mop(FPIsNan 64,Var("v",F64)),
9983                                      EQ(Var("v",F64),POSINF64)),
9984                                  Mop(Cast F64,
9985                                      Bop(Sub,Bop(Exp,LN 2,LN 63),LN 1))),
9986                                 (EQ(Var("v",F64),NEGINF64),
9987                                  Mop(Neg,
9988                                      Mop(Cast F64,Bop(Exp,LN 2,LN 63)))),
9989                                 (Bop(Gt,iVar"val",
9990                                      Bop(Sub,Bop(Exp,LI 2,LN 63),LI 1)),
9991                                  Mop(Cast F64,
9992                                      Bop(Sub,Bop(Exp,LN 2,LN 63),LN 1))),
9993                                 (Bop(Lt,iVar"val",
9994                                      Mop(Neg,Bop(Exp,LI 2,LN 63))),
9995                                  Mop(Neg,
9996                                      Mop(Cast F64,Bop(Exp,LN 2,LN 63))))],
9997                                Mop(Cast F64,iVar"val")),Var("rd",FTy 5)]),
9998                      qVar"state")))),
9999          (LO rTy,
10000           Apply
10001             (Call
10002                ("signalException",ATy(qTy,qTy),
10003                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
10004;
10005val dfn'FCVT_LU_D_def = Def
10006  ("dfn'FCVT_LU_D",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)],
10007   Close
10008     (qVar"state",
10009      CS(Apply
10010           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
10011         [(Mop(Some,Var("r",rTy)),
10012           Let(Var("v",F64),
10013               Apply
10014                 (Call("FPRD",ATy(qTy,F64),Var("rs",FTy 5)),qVar"state"),
10015               Let(iVar"val",
10016                   Mop(ValOf,Mop(FPToInt 64,TP[Var("r",rTy),Var("v",F64)])),
10017                   Apply
10018                     (Call
10019                        ("write'GPR",ATy(qTy,qTy),
10020                         TP[ITB([(Bop(Or,Mop(FPIsNan 64,Var("v",F64)),
10021                                      EQ(Var("v",F64),POSINF64)),
10022                                  Mop(Cast F64,
10023                                      Bop(Sub,Bop(Exp,LN 2,LN 64),LN 1))),
10024                                 (EQ(Var("v",F64),NEGINF64),LW(0,64)),
10025                                 (Bop(Gt,iVar"val",
10026                                      Bop(Sub,Bop(Exp,LI 2,LN 64),LI 1)),
10027                                  Mop(Cast F64,
10028                                      Bop(Sub,Bop(Exp,LN 2,LN 64),LN 1))),
10029                                 (Bop(Lt,iVar"val",LI 0),LW(0,64))],
10030                                Mop(Cast F64,iVar"val")),Var("rd",FTy 5)]),
10031                      qVar"state")))),
10032          (LO rTy,
10033           Apply
10034             (Call
10035                ("signalException",ATy(qTy,qTy),
10036                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
10037;
10038val dfn'FCVT_S_D_def = Def
10039  ("dfn'FCVT_S_D",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)],
10040   Close
10041     (qVar"state",
10042      CS(Apply
10043           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
10044         [(Mop(Some,Var("r",rTy)),
10045           Apply
10046             (Call
10047                ("writeFPRS",ATy(qTy,qTy),
10048                 TP[Var("rd",FTy 5),
10049                    Mop(FP64To32,
10050                        TP[Var("r",rTy),
10051                           Apply
10052                             (Call("FPRD",ATy(qTy,F64),Var("rs",FTy 5)),
10053                              qVar"state")])]),qVar"state")),
10054          (LO rTy,
10055           Apply
10056             (Call
10057                ("signalException",ATy(qTy,qTy),
10058                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
10059;
10060val dfn'FCVT_D_S_def = Def
10061  ("dfn'FCVT_D_S",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)],
10062   Close
10063     (qVar"state",
10064      CS(Apply
10065           (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"),
10066         [(Mop(Some,Var("r",rTy)),
10067           Apply
10068             (Call
10069                ("writeFPRD",ATy(qTy,qTy),
10070                 TP[Var("rd",FTy 5),
10071                    Mop(FP32To64,
10072                        Apply
10073                          (Call("FPRS",ATy(qTy,F32),Var("rs",FTy 5)),
10074                           qVar"state"))]),qVar"state")),
10075          (LO rTy,
10076           Apply
10077             (Call
10078                ("signalException",ATy(qTy,qTy),
10079                 LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))])))
10080;
10081val dfn'FSGNJ_D_def = Def
10082  ("dfn'FSGNJ_D",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
10083   Close
10084     (qVar"state",
10085      Apply
10086        (Call
10087           ("writeFPRD",ATy(qTy,qTy),
10088            TP[Var("rd",FTy 5),
10089               CC[Mop(Cast F1,
10090                      Call
10091                        ("FP64_Sign",bTy,
10092                         Apply
10093                           (Call("FPRD",ATy(qTy,F64),Var("rs2",FTy 5)),
10094                            qVar"state"))),
10095                  EX(Apply
10096                       (Call("FPRD",ATy(qTy,F64),Var("rs1",FTy 5)),
10097                        qVar"state"),LN 62,LN 0,FTy 63)]]),qVar"state")))
10098;
10099val dfn'FSGNJN_D_def = Def
10100  ("dfn'FSGNJN_D",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
10101   Close
10102     (qVar"state",
10103      Apply
10104        (Call
10105           ("writeFPRD",ATy(qTy,qTy),
10106            TP[Var("rd",FTy 5),
10107               CC[Mop(Cast F1,
10108                      Mop(Not,
10109                          Call
10110                            ("FP64_Sign",bTy,
10111                             Apply
10112                               (Call("FPRD",ATy(qTy,F64),Var("rs2",FTy 5)),
10113                                qVar"state")))),
10114                  EX(Apply
10115                       (Call("FPRD",ATy(qTy,F64),Var("rs1",FTy 5)),
10116                        qVar"state"),LN 62,LN 0,FTy 63)]]),qVar"state")))
10117;
10118val dfn'FSGNJX_D_def = Def
10119  ("dfn'FSGNJX_D",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
10120   Close
10121     (qVar"state",
10122      Let(Var("v",F64),
10123          Apply(Call("FPRD",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
10124          Apply
10125            (Call
10126               ("writeFPRD",ATy(qTy,qTy),
10127                TP[Var("rd",FTy 5),
10128                   CC[Bop(BXor,
10129                          Mop(Cast F1,
10130                              Call
10131                                ("FP64_Sign",bTy,
10132                                 Apply
10133                                   (Call
10134                                      ("FPRD",ATy(qTy,F64),
10135                                       Var("rs2",FTy 5)),qVar"state"))),
10136                          Mop(Cast F1,Call("FP64_Sign",bTy,Var("v",F64)))),
10137                      EX(Var("v",F64),LN 62,LN 0,FTy 63)]]),qVar"state"))))
10138;
10139val dfn'FMV_X_D_def = Def
10140  ("dfn'FMV_X_D",TP[Var("rd",FTy 5),Var("rs",FTy 5)],
10141   Close
10142     (qVar"state",
10143      Apply
10144        (Call
10145           ("write'GPR",ATy(qTy,qTy),
10146            TP[Mop(SE F64,
10147                   Apply
10148                     (Call("FPRD",ATy(qTy,F64),Var("rs",FTy 5)),
10149                      qVar"state")),Var("rd",FTy 5)]),qVar"state")))
10150;
10151val dfn'FMV_D_X_def = Def
10152  ("dfn'FMV_D_X",TP[Var("rd",FTy 5),Var("rs",FTy 5)],
10153   Close
10154     (qVar"state",
10155      Apply
10156        (Call
10157           ("writeFPRD",ATy(qTy,qTy),
10158            TP[Var("rd",FTy 5),
10159               Apply(Call("GPR",ATy(qTy,F64),Var("rs",FTy 5)),qVar"state")]),
10160         qVar"state")))
10161;
10162val dfn'FEQ_D_def = Def
10163  ("dfn'FEQ_D",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
10164   Close
10165     (qVar"state",
10166      Let(Var("v",F64),
10167          Apply(Call("FPRD",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
10168          Let(Var("v0",F64),
10169              Apply
10170                (Call("FPRD",ATy(qTy,F64),Var("rs2",FTy 5)),qVar"state"),
10171              ITE(Bop(Or,Call("FP64_IsSignalingNan",bTy,Var("v",F64)),
10172                      Call("FP64_IsSignalingNan",bTy,Var("v0",F64))),
10173                  Apply
10174                    (Call("setFP_Invalid",ATy(qTy,qTy),LU),
10175                     Apply
10176                       (Call
10177                          ("write'GPR",ATy(qTy,qTy),
10178                           TP[LW(0,64),Var("rd",FTy 5)]),qVar"state")),
10179                  Apply
10180                    (Call
10181                       ("write'GPR",ATy(qTy,qTy),
10182                        TP[CS(Mop(FPCmp 64,TP[Var("v",F64),Var("v0",F64)]),
10183                              [(binary_ieeeSyntax.LT_tm,LW(0,64)),
10184                               (binary_ieeeSyntax.EQ_tm,LW(1,64)),
10185                               (binary_ieeeSyntax.GT_tm,LW(0,64)),
10186                               (binary_ieeeSyntax.UN_tm,LW(0,64))]),
10187                           Var("rd",FTy 5)]),qVar"state"))))))
10188;
10189val dfn'FLT_D_def = Def
10190  ("dfn'FLT_D",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
10191   Close
10192     (qVar"state",
10193      Let(Var("v",F64),
10194          Apply(Call("FPRD",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
10195          Let(Var("v0",F64),
10196              Apply
10197                (Call("FPRD",ATy(qTy,F64),Var("rs2",FTy 5)),qVar"state"),
10198              ITE(Bop(Or,Mop(FPIsNan 64,Var("v",F64)),
10199                      Mop(FPIsNan 64,Var("v0",F64))),
10200                  Apply
10201                    (Call("setFP_Invalid",ATy(qTy,qTy),LU),
10202                     Apply
10203                       (Call
10204                          ("write'GPR",ATy(qTy,qTy),
10205                           TP[LW(0,64),Var("rd",FTy 5)]),qVar"state")),
10206                  Apply
10207                    (Call
10208                       ("write'GPR",ATy(qTy,qTy),
10209                        TP[CS(Mop(FPCmp 64,TP[Var("v",F64),Var("v0",F64)]),
10210                              [(binary_ieeeSyntax.LT_tm,LW(1,64)),
10211                               (binary_ieeeSyntax.EQ_tm,LW(0,64)),
10212                               (binary_ieeeSyntax.GT_tm,LW(0,64)),
10213                               (binary_ieeeSyntax.UN_tm,LW(0,64))]),
10214                           Var("rd",FTy 5)]),qVar"state"))))))
10215;
10216val dfn'FLE_D_def = Def
10217  ("dfn'FLE_D",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
10218   Close
10219     (qVar"state",
10220      Let(Var("v",F64),
10221          Apply(Call("FPRD",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"),
10222          Let(Var("v0",F64),
10223              Apply
10224                (Call("FPRD",ATy(qTy,F64),Var("rs2",FTy 5)),qVar"state"),
10225              ITE(Bop(Or,Mop(FPIsNan 64,Var("v",F64)),
10226                      Mop(FPIsNan 64,Var("v0",F64))),
10227                  Apply
10228                    (Call("setFP_Invalid",ATy(qTy,qTy),LU),
10229                     Apply
10230                       (Call
10231                          ("write'GPR",ATy(qTy,qTy),
10232                           TP[LW(0,64),Var("rd",FTy 5)]),qVar"state")),
10233                  Apply
10234                    (Call
10235                       ("write'GPR",ATy(qTy,qTy),
10236                        TP[CS(Mop(FPCmp 64,TP[Var("v",F64),Var("v0",F64)]),
10237                              [(binary_ieeeSyntax.LT_tm,LW(1,64)),
10238                               (binary_ieeeSyntax.EQ_tm,LW(1,64)),
10239                               (binary_ieeeSyntax.GT_tm,LW(0,64)),
10240                               (binary_ieeeSyntax.UN_tm,LW(0,64))]),
10241                           Var("rd",FTy 5)]),qVar"state"))))))
10242;
10243val dfn'FCLASS_D_def = Def
10244  ("dfn'FCLASS_D",TP[Var("rd",FTy 5),Var("rs",FTy 5)],
10245   Close
10246     (qVar"state",
10247      Let(TP[Var("v",F64),Var("s",PTy(FTy 10,qTy))],
10248          TP[Apply(Call("FPRD",ATy(qTy,F64),Var("rs",FTy 5)),qVar"state"),
10249             LW(0,10),qVar"state"],
10250          Apply
10251            (Call
10252               ("write'GPR",ATy(qTy,qTy),
10253                TP[Mop(Cast F64,
10254                       BFI(LN 9,LN 9,
10255                           Mop(Cast F1,
10256                               EQ(Var("v",F64),
10257                                  Const("RV64_CanonicalNan",F64))),
10258                           BFI(LN 8,LN 8,
10259                               Mop(Cast F1,
10260                                   Call
10261                                     ("FP64_IsSignalingNan",bTy,
10262                                      Var("v",F64))),
10263                               BFI(LN 7,LN 7,
10264                                   Mop(Cast F1,EQ(Var("v",F64),POSINF64)),
10265                                   BFI(LN 6,LN 6,
10266                                       Mop(Cast F1,
10267                                           Bop(And,
10268                                               Mop(Not,
10269                                                   Call
10270                                                     ("FP64_Sign",bTy,
10271                                                      Var("v",F64))),
10272                                               Mop(FPIsNormal 64,
10273                                                   Var("v",F64)))),
10274                                       BFI(LN 5,LN 5,
10275                                           Mop(Cast F1,
10276                                               Bop(And,
10277                                                   Mop(Not,
10278                                                       Call
10279                                                         ("FP64_Sign",bTy,
10280                                                          Var("v",F64))),
10281                                                   Mop(FPIsSubnormal 64,
10282                                                       Var("v",F64)))),
10283                                           BFI(LN 4,LN 4,
10284                                               Mop(Cast F1,
10285                                                   EQ(Var("v",F64),
10286                                                      POSZERO64)),
10287                                               BFI(LN 3,LN 3,
10288                                                   Mop(Cast F1,
10289                                                       EQ(Var("v",F64),
10290                                                          NEGZERO64)),
10291                                                   BFI(LN 2,LN 2,
10292                                                       Mop(Cast F1,
10293                                                           Bop(And,
10294                                                               Call
10295                                                                 ("FP64_Sign",
10296                                                                  bTy,
10297                                                                  Var("v",
10298                                                                      F64)),
10299                                                               Mop(FPIsSubnormal 64,
10300                                                                   Var("v",
10301                                                                       F64)))),
10302                                                       BFI(LN 1,LN 1,
10303                                                           Mop(Cast F1,
10304                                                               Bop(And,
10305                                                                   Call
10306                                                                     ("FP64_Sign",
10307                                                                      bTy,
10308                                                                      Var("v",
10309                                                                          F64)),
10310                                                                   Mop(FPIsNormal 64,
10311                                                                       Var("v",
10312                                                                           F64)))),
10313                                                           BFI(LN 0,LN 0,
10314                                                               Mop(Cast F1,
10315                                                                   EQ(Var("v",
10316                                                                          F64),
10317                                                                      NEGINF64)),
10318                                                               Mop(Fst,
10319                                                                   Var("s",
10320                                                                       PTy(FTy 10,
10321                                                                           qTy)))))))))))))),
10322                   Var("rd",FTy 5)]),Mop(Snd,Var("s",PTy(FTy 10,qTy)))))))
10323;
10324val dfn'ECALL_def = Def
10325  ("dfn'ECALL",qVar"state",
10326   Apply(Call("signalEnvCall",ATy(qTy,qTy),LU),qVar"state"))
10327;
10328val dfn'EBREAK_def = Def
10329  ("dfn'EBREAK",qVar"state",
10330   Apply
10331     (Call
10332        ("signalException",ATy(qTy,qTy),
10333         LC("Breakpoint",CTy"ExceptionType")),qVar"state"))
10334;
10335val dfn'ERET_def = Def
10336  ("dfn'ERET",qVar"state",
10337   Apply
10338     (Call
10339        ("write'NextFetch",ATy(qTy,qTy),
10340         Mop(Some,Const("Ereturn",CTy"TransferControl"))),qVar"state"))
10341;
10342val dfn'MRTS_def = Def
10343  ("dfn'MRTS",qVar"state",
10344   Let(TP[Var("v",CTy"SupervisorCSR"),qVar"s"],
10345       Let(qVar"s0",
10346           Apply
10347             (Call
10348                ("write'SCSR",ATy(qTy,qTy),
10349                 Rupd
10350                   ("scause",
10351                    TP[Apply
10352                         (Const("SCSR",ATy(qTy,CTy"SupervisorCSR")),
10353                          qVar"state"),
10354                       Dest
10355                         ("mcause",CTy"mcause",
10356                          Apply
10357                            (Const("MCSR",ATy(qTy,CTy"MachineCSR")),
10358                             qVar"state"))])),qVar"state"),
10359           TP[Apply(Const("SCSR",ATy(qTy,CTy"SupervisorCSR")),qVar"s0"),
10360              qVar"s0"]),
10361       Let(TP[Var("v",CTy"SupervisorCSR"),qVar"s"],
10362           Let(qVar"s0",
10363               Apply
10364                 (Call
10365                    ("write'SCSR",ATy(qTy,qTy),
10366                     Rupd
10367                       ("sbadaddr",
10368                        TP[Var("v",CTy"SupervisorCSR"),
10369                           Dest
10370                             ("mbadaddr",F64,
10371                              Apply
10372                                (Const("MCSR",ATy(qTy,CTy"MachineCSR")),
10373                                 qVar"s"))])),qVar"s"),
10374               TP[Apply
10375                    (Const("SCSR",ATy(qTy,CTy"SupervisorCSR")),qVar"s0"),
10376                  qVar"s0"]),
10377           Let(TP[Var("v",CTy"MachineCSR"),qVar"s"],
10378               Let(qVar"s0",
10379                   Apply
10380                     (Call
10381                        ("write'SCSR",ATy(qTy,qTy),
10382                         Rupd
10383                           ("sepc",
10384                            TP[Var("v",CTy"SupervisorCSR"),
10385                               Dest
10386                                 ("mepc",F64,
10387                                  Apply
10388                                    (Const
10389                                       ("MCSR",ATy(qTy,CTy"MachineCSR")),
10390                                     qVar"s"))])),qVar"s"),
10391                   TP[Apply
10392                        (Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"s0"),
10393                      qVar"s0"]),
10394               Apply
10395                 (Call
10396                    ("write'NextFetch",ATy(qTy,qTy),
10397                     Mop(Some,Const("Mrts",CTy"TransferControl"))),
10398                  Apply
10399                    (Call
10400                       ("write'MCSR",ATy(qTy,qTy),
10401                        Rupd
10402                          ("mstatus",
10403                           TP[Var("v",CTy"MachineCSR"),
10404                              Rupd
10405                                ("MPRV",
10406                                 TP[Dest
10407                                      ("mstatus",CTy"mstatus",
10408                                       Var("v",CTy"MachineCSR")),
10409                                    Call
10410                                      ("privLevel",FTy 2,
10411                                       LC("Supervisor",CTy"Privilege"))])])),
10412                     qVar"s"))))))
10413;
10414val dfn'WFI_def = Def0 ("dfn'WFI",LU)
10415;
10416val checkCSROp_def = Def
10417  ("checkCSROp",
10418   TP[Var("csr",FTy 12),Var("rs1",FTy 5),Var("a",CTy"accessType")],
10419   Close
10420     (qVar"state",
10421      Let(TP[bVar"v",qVar"s"],
10422          Apply
10423            (Call
10424               ("is_CSR_defined",ATy(qTy,PTy(bTy,qTy)),Var("csr",FTy 12)),
10425             qVar"state"),
10426          TP[Bop(And,bVar"v",
10427                 Call
10428                   ("check_CSR_access",bTy,
10429                    TP[Call("csrRW",FTy 2,Var("csr",FTy 12)),
10430                       Call("csrPR",FTy 2,Var("csr",FTy 12)),
10431                       Apply
10432                         (Call("curPrivilege",ATy(qTy,CTy"Privilege"),LU),
10433                          qVar"s"),Var("a",CTy"accessType")])),qVar"s"])))
10434;
10435val dfn'CSRRW_def = Def
10436  ("dfn'CSRRW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("csr",FTy 12)],
10437   Close
10438     (qVar"state",
10439      Let(TP[bVar"v",qVar"s"],
10440          Apply
10441            (Call
10442               ("checkCSROp",ATy(qTy,PTy(bTy,qTy)),
10443                TP[Var("csr",FTy 12),Var("rs1",FTy 5),
10444                   LC("Write",CTy"accessType")]),qVar"state"),
10445          ITE(bVar"v",
10446              Let(TP[Var("v",F64),qVar"s"],
10447                  Apply
10448                    (Call("CSR",ATy(qTy,PTy(F64,qTy)),Var("csr",FTy 12)),
10449                     qVar"s"),
10450                  Apply
10451                    (Call
10452                       ("write'GPR",ATy(qTy,qTy),
10453                        TP[Var("v",F64),Var("rd",FTy 5)]),
10454                     Apply
10455                       (Call
10456                          ("writeCSR",ATy(qTy,qTy),
10457                           TP[Var("csr",FTy 12),
10458                              Apply
10459                                (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
10460                                 qVar"s")]),qVar"s"))),
10461              Apply
10462                (Call
10463                   ("signalException",ATy(qTy,qTy),
10464                    LC("Illegal_Instr",CTy"ExceptionType")),qVar"s")))))
10465;
10466val dfn'CSRRS_def = Def
10467  ("dfn'CSRRS",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("csr",FTy 12)],
10468   Close
10469     (qVar"state",
10470      Let(TP[bVar"v",qVar"s"],
10471          Apply
10472            (Call
10473               ("checkCSROp",ATy(qTy,PTy(bTy,qTy)),
10474                TP[Var("csr",FTy 12),Var("rs1",FTy 5),
10475                   ITE(EQ(Var("rs1",FTy 5),LW(0,5)),
10476                       LC("Read",CTy"accessType"),
10477                       LC("Write",CTy"accessType"))]),qVar"state"),
10478          ITE(bVar"v",
10479              Let(TP[Var("v",F64),qVar"s"],
10480                  Apply
10481                    (Call("CSR",ATy(qTy,PTy(F64,qTy)),Var("csr",FTy 12)),
10482                     qVar"s"),
10483                  Apply
10484                    (Call
10485                       ("write'GPR",ATy(qTy,qTy),
10486                        TP[Var("v",F64),Var("rd",FTy 5)]),
10487                     ITE(Mop(Not,EQ(Var("rs1",FTy 5),LW(0,5))),
10488                         Apply
10489                           (Call
10490                              ("writeCSR",ATy(qTy,qTy),
10491                               TP[Var("csr",FTy 12),
10492                                  Bop(BOr,Var("v",F64),
10493                                      Apply
10494                                        (Call
10495                                           ("GPR",ATy(qTy,F64),
10496                                            Var("rs1",FTy 5)),qVar"s"))]),
10497                            qVar"s"),qVar"s"))),
10498              Apply
10499                (Call
10500                   ("signalException",ATy(qTy,qTy),
10501                    LC("Illegal_Instr",CTy"ExceptionType")),qVar"s")))))
10502;
10503val dfn'CSRRC_def = Def
10504  ("dfn'CSRRC",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("csr",FTy 12)],
10505   Close
10506     (qVar"state",
10507      Let(TP[bVar"v",qVar"s"],
10508          Apply
10509            (Call
10510               ("checkCSROp",ATy(qTy,PTy(bTy,qTy)),
10511                TP[Var("csr",FTy 12),Var("rs1",FTy 5),
10512                   ITE(EQ(Var("rs1",FTy 5),LW(0,5)),
10513                       LC("Read",CTy"accessType"),
10514                       LC("Write",CTy"accessType"))]),qVar"state"),
10515          ITE(bVar"v",
10516              Let(TP[Var("v",F64),qVar"s"],
10517                  Apply
10518                    (Call("CSR",ATy(qTy,PTy(F64,qTy)),Var("csr",FTy 12)),
10519                     qVar"s"),
10520                  Apply
10521                    (Call
10522                       ("write'GPR",ATy(qTy,qTy),
10523                        TP[Var("v",F64),Var("rd",FTy 5)]),
10524                     ITE(Mop(Not,EQ(Var("rs1",FTy 5),LW(0,5))),
10525                         Apply
10526                           (Call
10527                              ("writeCSR",ATy(qTy,qTy),
10528                               TP[Var("csr",FTy 12),
10529                                  Bop(BAnd,Var("v",F64),
10530                                      Mop(BNot,
10531                                          Apply
10532                                            (Call
10533                                               ("GPR",ATy(qTy,F64),
10534                                                Var("rs1",FTy 5)),qVar"s")))]),
10535                            qVar"s"),qVar"s"))),
10536              Apply
10537                (Call
10538                   ("signalException",ATy(qTy,qTy),
10539                    LC("Illegal_Instr",CTy"ExceptionType")),qVar"s")))))
10540;
10541val dfn'CSRRWI_def = Def
10542  ("dfn'CSRRWI",TP[Var("rd",FTy 5),Var("zimm",FTy 5),Var("csr",FTy 12)],
10543   Close
10544     (qVar"state",
10545      Let(TP[bVar"v",qVar"s"],
10546          Apply
10547            (Call
10548               ("checkCSROp",ATy(qTy,PTy(bTy,qTy)),
10549                TP[Var("csr",FTy 12),Var("zimm",FTy 5),
10550                   ITE(EQ(Var("zimm",FTy 5),LW(0,5)),
10551                       LC("Read",CTy"accessType"),
10552                       LC("Write",CTy"accessType"))]),qVar"state"),
10553          ITE(bVar"v",
10554              Let(TP[Var("v",F64),qVar"s"],
10555                  Apply
10556                    (Call("CSR",ATy(qTy,PTy(F64,qTy)),Var("csr",FTy 12)),
10557                     qVar"s"),
10558                  Apply
10559                    (Call
10560                       ("write'GPR",ATy(qTy,qTy),
10561                        TP[Var("v",F64),Var("rd",FTy 5)]),
10562                     ITE(Mop(Not,EQ(Var("zimm",FTy 5),LW(0,5))),
10563                         Apply
10564                           (Call
10565                              ("writeCSR",ATy(qTy,qTy),
10566                               TP[Var("csr",FTy 12),
10567                                  Mop(Cast F64,Var("zimm",FTy 5))]),
10568                            qVar"s"),qVar"s"))),
10569              Apply
10570                (Call
10571                   ("signalException",ATy(qTy,qTy),
10572                    LC("Illegal_Instr",CTy"ExceptionType")),qVar"s")))))
10573;
10574val dfn'CSRRSI_def = Def
10575  ("dfn'CSRRSI",TP[Var("rd",FTy 5),Var("zimm",FTy 5),Var("csr",FTy 12)],
10576   Close
10577     (qVar"state",
10578      Let(TP[bVar"v",qVar"s"],
10579          Apply
10580            (Call
10581               ("checkCSROp",ATy(qTy,PTy(bTy,qTy)),
10582                TP[Var("csr",FTy 12),Var("zimm",FTy 5),
10583                   ITE(EQ(Var("zimm",FTy 5),LW(0,5)),
10584                       LC("Read",CTy"accessType"),
10585                       LC("Write",CTy"accessType"))]),qVar"state"),
10586          ITE(bVar"v",
10587              Let(TP[Var("v",F64),qVar"s"],
10588                  Apply
10589                    (Call("CSR",ATy(qTy,PTy(F64,qTy)),Var("csr",FTy 12)),
10590                     qVar"s"),
10591                  Apply
10592                    (Call
10593                       ("write'GPR",ATy(qTy,qTy),
10594                        TP[Var("v",F64),Var("rd",FTy 5)]),
10595                     ITE(Mop(Not,EQ(Var("zimm",FTy 5),LW(0,5))),
10596                         Apply
10597                           (Call
10598                              ("writeCSR",ATy(qTy,qTy),
10599                               TP[Var("csr",FTy 12),
10600                                  Bop(BOr,Var("v",F64),
10601                                      Mop(Cast F64,Var("zimm",FTy 5)))]),
10602                            qVar"s"),qVar"s"))),
10603              Apply
10604                (Call
10605                   ("signalException",ATy(qTy,qTy),
10606                    LC("Illegal_Instr",CTy"ExceptionType")),qVar"s")))))
10607;
10608val dfn'CSRRCI_def = Def
10609  ("dfn'CSRRCI",TP[Var("rd",FTy 5),Var("zimm",FTy 5),Var("csr",FTy 12)],
10610   Close
10611     (qVar"state",
10612      Let(TP[bVar"v",qVar"s"],
10613          Apply
10614            (Call
10615               ("checkCSROp",ATy(qTy,PTy(bTy,qTy)),
10616                TP[Var("csr",FTy 12),Var("zimm",FTy 5),
10617                   ITE(EQ(Var("zimm",FTy 5),LW(0,5)),
10618                       LC("Read",CTy"accessType"),
10619                       LC("Write",CTy"accessType"))]),qVar"state"),
10620          ITE(bVar"v",
10621              Let(TP[Var("v",F64),qVar"s"],
10622                  Apply
10623                    (Call("CSR",ATy(qTy,PTy(F64,qTy)),Var("csr",FTy 12)),
10624                     qVar"s"),
10625                  Apply
10626                    (Call
10627                       ("write'GPR",ATy(qTy,qTy),
10628                        TP[Var("v",F64),Var("rd",FTy 5)]),
10629                     ITE(Mop(Not,EQ(Var("zimm",FTy 5),LW(0,5))),
10630                         Apply
10631                           (Call
10632                              ("writeCSR",ATy(qTy,qTy),
10633                               TP[Var("csr",FTy 12),
10634                                  Bop(BAnd,Var("v",F64),
10635                                      Mop(BNot,
10636                                          Mop(Cast F64,Var("zimm",FTy 5))))]),
10637                            qVar"s"),qVar"s"))),
10638              Apply
10639                (Call
10640                   ("signalException",ATy(qTy,qTy),
10641                    LC("Illegal_Instr",CTy"ExceptionType")),qVar"s")))))
10642;
10643val dfn'SFENCE_VM_def = Def
10644  ("dfn'SFENCE_VM",Var("rs1",FTy 5),
10645   Close
10646     (qVar"state",
10647      Apply
10648        (Call
10649           ("write'TLB",ATy(qTy,qTy),
10650            Call
10651              ("flushTLB",ATy(F4,OTy(CTy"TLBEntry")),
10652               TP[Apply(Call("curASID",ATy(qTy,FTy 6),LU),qVar"state"),
10653                  ITE(EQ(Var("rs1",FTy 5),LW(0,5)),LO F64,
10654                      Mop(Some,
10655                          Apply
10656                            (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),
10657                             qVar"state"))),
10658                  Apply
10659                    (Const("TLB",ATy(qTy,ATy(F4,OTy(CTy"TLBEntry")))),
10660                     qVar"state")])),qVar"state")))
10661;
10662val dfn'UnknownInstruction_def = Def
10663  ("dfn'UnknownInstruction",qVar"state",
10664   Apply
10665     (Call
10666        ("signalException",ATy(qTy,qTy),
10667         LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))
10668;
10669val dfn'FETCH_MISALIGNED_def = Def
10670  ("dfn'FETCH_MISALIGNED",Var("addr",F64),
10671   Close
10672     (qVar"state",
10673      Apply
10674        (Call
10675           ("signalAddressException",ATy(qTy,qTy),
10676            TP[LC("Fetch_Misaligned",CTy"ExceptionType"),Var("addr",F64)]),
10677         qVar"state")))
10678;
10679val dfn'FETCH_FAULT_def = Def
10680  ("dfn'FETCH_FAULT",Var("addr",F64),
10681   Close
10682     (qVar"state",
10683      Apply
10684        (Call
10685           ("signalAddressException",ATy(qTy,qTy),
10686            TP[LC("Fetch_Fault",CTy"ExceptionType"),Var("addr",F64)]),
10687         qVar"state")))
10688;
10689val Run_def = Def
10690  ("Run",Var("v0",CTy"instruction"),
10691   Close
10692     (qVar"state",
10693      CS(Var("v0",CTy"instruction"),
10694         [(Const("UnknownInstruction",CTy"instruction"),
10695           Apply(Const("dfn'UnknownInstruction",ATy(qTy,qTy)),qVar"state")),
10696          (Call
10697             ("FENCE",CTy"instruction",
10698              Var("v170",PTy(FTy 5,PTy(FTy 5,PTy(F4,F4))))),qVar"state"),
10699          (Call
10700             ("FENCE_I",CTy"instruction",
10701              Var("v171",PTy(FTy 5,PTy(FTy 5,FTy 12)))),qVar"state"),
10702          (Call("AMO",CTy"instruction",Var("v1",CTy"AMO")),
10703           CS(Var("v1",CTy"AMO"),
10704              [(Call
10705                  ("AMOADD_D",CTy"AMO",
10706                   Var("v2",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10707                Apply
10708                  (Call
10709                     ("dfn'AMOADD_D",ATy(qTy,qTy),
10710                      Var("v2",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10711                   qVar"state")),
10712               (Call
10713                  ("AMOADD_W",CTy"AMO",
10714                   Var("v3",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10715                Apply
10716                  (Call
10717                     ("dfn'AMOADD_W",ATy(qTy,qTy),
10718                      Var("v3",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10719                   qVar"state")),
10720               (Call
10721                  ("AMOAND_D",CTy"AMO",
10722                   Var("v4",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10723                Apply
10724                  (Call
10725                     ("dfn'AMOAND_D",ATy(qTy,qTy),
10726                      Var("v4",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10727                   qVar"state")),
10728               (Call
10729                  ("AMOAND_W",CTy"AMO",
10730                   Var("v5",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10731                Apply
10732                  (Call
10733                     ("dfn'AMOAND_W",ATy(qTy,qTy),
10734                      Var("v5",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10735                   qVar"state")),
10736               (Call
10737                  ("AMOMAXU_D",CTy"AMO",
10738                   Var("v6",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10739                Apply
10740                  (Call
10741                     ("dfn'AMOMAXU_D",ATy(qTy,qTy),
10742                      Var("v6",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10743                   qVar"state")),
10744               (Call
10745                  ("AMOMAXU_W",CTy"AMO",
10746                   Var("v7",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10747                Apply
10748                  (Call
10749                     ("dfn'AMOMAXU_W",ATy(qTy,qTy),
10750                      Var("v7",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10751                   qVar"state")),
10752               (Call
10753                  ("AMOMAX_D",CTy"AMO",
10754                   Var("v8",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10755                Apply
10756                  (Call
10757                     ("dfn'AMOMAX_D",ATy(qTy,qTy),
10758                      Var("v8",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10759                   qVar"state")),
10760               (Call
10761                  ("AMOMAX_W",CTy"AMO",
10762                   Var("v9",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10763                Apply
10764                  (Call
10765                     ("dfn'AMOMAX_W",ATy(qTy,qTy),
10766                      Var("v9",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10767                   qVar"state")),
10768               (Call
10769                  ("AMOMINU_D",CTy"AMO",
10770                   Var("v10",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10771                Apply
10772                  (Call
10773                     ("dfn'AMOMINU_D",ATy(qTy,qTy),
10774                      Var("v10",
10775                          PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10776                   qVar"state")),
10777               (Call
10778                  ("AMOMINU_W",CTy"AMO",
10779                   Var("v11",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10780                Apply
10781                  (Call
10782                     ("dfn'AMOMINU_W",ATy(qTy,qTy),
10783                      Var("v11",
10784                          PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10785                   qVar"state")),
10786               (Call
10787                  ("AMOMIN_D",CTy"AMO",
10788                   Var("v12",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10789                Apply
10790                  (Call
10791                     ("dfn'AMOMIN_D",ATy(qTy,qTy),
10792                      Var("v12",
10793                          PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10794                   qVar"state")),
10795               (Call
10796                  ("AMOMIN_W",CTy"AMO",
10797                   Var("v13",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10798                Apply
10799                  (Call
10800                     ("dfn'AMOMIN_W",ATy(qTy,qTy),
10801                      Var("v13",
10802                          PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10803                   qVar"state")),
10804               (Call
10805                  ("AMOOR_D",CTy"AMO",
10806                   Var("v14",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10807                Apply
10808                  (Call
10809                     ("dfn'AMOOR_D",ATy(qTy,qTy),
10810                      Var("v14",
10811                          PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10812                   qVar"state")),
10813               (Call
10814                  ("AMOOR_W",CTy"AMO",
10815                   Var("v15",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10816                Apply
10817                  (Call
10818                     ("dfn'AMOOR_W",ATy(qTy,qTy),
10819                      Var("v15",
10820                          PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10821                   qVar"state")),
10822               (Call
10823                  ("AMOSWAP_D",CTy"AMO",
10824                   Var("v16",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10825                Apply
10826                  (Call
10827                     ("dfn'AMOSWAP_D",ATy(qTy,qTy),
10828                      Var("v16",
10829                          PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10830                   qVar"state")),
10831               (Call
10832                  ("AMOSWAP_W",CTy"AMO",
10833                   Var("v17",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10834                Apply
10835                  (Call
10836                     ("dfn'AMOSWAP_W",ATy(qTy,qTy),
10837                      Var("v17",
10838                          PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10839                   qVar"state")),
10840               (Call
10841                  ("AMOXOR_D",CTy"AMO",
10842                   Var("v18",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10843                Apply
10844                  (Call
10845                     ("dfn'AMOXOR_D",ATy(qTy,qTy),
10846                      Var("v18",
10847                          PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10848                   qVar"state")),
10849               (Call
10850                  ("AMOXOR_W",CTy"AMO",
10851                   Var("v19",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10852                Apply
10853                  (Call
10854                     ("dfn'AMOXOR_W",ATy(qTy,qTy),
10855                      Var("v19",
10856                          PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10857                   qVar"state")),
10858               (Call
10859                  ("LR_D",CTy"AMO",
10860                   Var("v20",PTy(F1,PTy(F1,PTy(FTy 5,FTy 5))))),
10861                Apply
10862                  (Call
10863                     ("dfn'LR_D",ATy(qTy,qTy),
10864                      Var("v20",PTy(F1,PTy(F1,PTy(FTy 5,FTy 5))))),
10865                   qVar"state")),
10866               (Call
10867                  ("LR_W",CTy"AMO",
10868                   Var("v21",PTy(F1,PTy(F1,PTy(FTy 5,FTy 5))))),
10869                Apply
10870                  (Call
10871                     ("dfn'LR_W",ATy(qTy,qTy),
10872                      Var("v21",PTy(F1,PTy(F1,PTy(FTy 5,FTy 5))))),
10873                   qVar"state")),
10874               (Call
10875                  ("SC_D",CTy"AMO",
10876                   Var("v22",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10877                Apply
10878                  (Call
10879                     ("dfn'SC_D",ATy(qTy,qTy),
10880                      Var("v22",
10881                          PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10882                   qVar"state")),
10883               (Call
10884                  ("SC_W",CTy"AMO",
10885                   Var("v23",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10886                Apply
10887                  (Call
10888                     ("dfn'SC_W",ATy(qTy,qTy),
10889                      Var("v23",
10890                          PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
10891                   qVar"state"))])),
10892          (Call("ArithI",CTy"instruction",Var("v24",CTy"ArithI")),
10893           CS(Var("v24",CTy"ArithI"),
10894              [(Call
10895                  ("ADDI",CTy"ArithI",
10896                   Var("v25",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
10897                Apply
10898                  (Call
10899                     ("dfn'ADDI",ATy(qTy,qTy),
10900                      Var("v25",PTy(FTy 5,PTy(FTy 5,FTy 12)))),qVar"state")),
10901               (Call
10902                  ("ADDIW",CTy"ArithI",
10903                   Var("v26",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
10904                Apply
10905                  (Call
10906                     ("dfn'ADDIW",ATy(qTy,qTy),
10907                      Var("v26",PTy(FTy 5,PTy(FTy 5,FTy 12)))),qVar"state")),
10908               (Call
10909                  ("ANDI",CTy"ArithI",
10910                   Var("v27",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
10911                Apply
10912                  (Call
10913                     ("dfn'ANDI",ATy(qTy,qTy),
10914                      Var("v27",PTy(FTy 5,PTy(FTy 5,FTy 12)))),qVar"state")),
10915               (Call("AUIPC",CTy"ArithI",Var("v28",PTy(FTy 5,FTy 20))),
10916                Apply
10917                  (Call
10918                     ("dfn'AUIPC",ATy(qTy,qTy),
10919                      Var("v28",PTy(FTy 5,FTy 20))),qVar"state")),
10920               (Call("LUI",CTy"ArithI",Var("v29",PTy(FTy 5,FTy 20))),
10921                Apply
10922                  (Call
10923                     ("dfn'LUI",ATy(qTy,qTy),Var("v29",PTy(FTy 5,FTy 20))),
10924                   qVar"state")),
10925               (Call
10926                  ("ORI",CTy"ArithI",
10927                   Var("v30",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
10928                Apply
10929                  (Call
10930                     ("dfn'ORI",ATy(qTy,qTy),
10931                      Var("v30",PTy(FTy 5,PTy(FTy 5,FTy 12)))),qVar"state")),
10932               (Call
10933                  ("SLTI",CTy"ArithI",
10934                   Var("v31",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
10935                Apply
10936                  (Call
10937                     ("dfn'SLTI",ATy(qTy,qTy),
10938                      Var("v31",PTy(FTy 5,PTy(FTy 5,FTy 12)))),qVar"state")),
10939               (Call
10940                  ("SLTIU",CTy"ArithI",
10941                   Var("v32",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
10942                Apply
10943                  (Call
10944                     ("dfn'SLTIU",ATy(qTy,qTy),
10945                      Var("v32",PTy(FTy 5,PTy(FTy 5,FTy 12)))),qVar"state")),
10946               (Call
10947                  ("XORI",CTy"ArithI",
10948                   Var("v33",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
10949                Apply
10950                  (Call
10951                     ("dfn'XORI",ATy(qTy,qTy),
10952                      Var("v33",PTy(FTy 5,PTy(FTy 5,FTy 12)))),qVar"state"))])),
10953          (Call("ArithR",CTy"instruction",Var("v34",CTy"ArithR")),
10954           CS(Var("v34",CTy"ArithR"),
10955              [(Call
10956                  ("ADD",CTy"ArithR",
10957                   Var("v35",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
10958                Apply
10959                  (Call
10960                     ("dfn'ADD",ATy(qTy,qTy),
10961                      Var("v35",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
10962               (Call
10963                  ("ADDW",CTy"ArithR",
10964                   Var("v36",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
10965                Apply
10966                  (Call
10967                     ("dfn'ADDW",ATy(qTy,qTy),
10968                      Var("v36",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
10969               (Call
10970                  ("AND",CTy"ArithR",
10971                   Var("v37",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
10972                Apply
10973                  (Call
10974                     ("dfn'AND",ATy(qTy,qTy),
10975                      Var("v37",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
10976               (Call
10977                  ("OR",CTy"ArithR",Var("v38",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
10978                Apply
10979                  (Call
10980                     ("dfn'OR",ATy(qTy,qTy),
10981                      Var("v38",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
10982               (Call
10983                  ("SLT",CTy"ArithR",
10984                   Var("v39",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
10985                Apply
10986                  (Call
10987                     ("dfn'SLT",ATy(qTy,qTy),
10988                      Var("v39",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
10989               (Call
10990                  ("SLTU",CTy"ArithR",
10991                   Var("v40",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
10992                Apply
10993                  (Call
10994                     ("dfn'SLTU",ATy(qTy,qTy),
10995                      Var("v40",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
10996               (Call
10997                  ("SUB",CTy"ArithR",
10998                   Var("v41",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
10999                Apply
11000                  (Call
11001                     ("dfn'SUB",ATy(qTy,qTy),
11002                      Var("v41",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11003               (Call
11004                  ("SUBW",CTy"ArithR",
11005                   Var("v42",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11006                Apply
11007                  (Call
11008                     ("dfn'SUBW",ATy(qTy,qTy),
11009                      Var("v42",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11010               (Call
11011                  ("XOR",CTy"ArithR",
11012                   Var("v43",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11013                Apply
11014                  (Call
11015                     ("dfn'XOR",ATy(qTy,qTy),
11016                      Var("v43",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state"))])),
11017          (Call("Branch",CTy"instruction",Var("v44",CTy"Branch")),
11018           CS(Var("v44",CTy"Branch"),
11019              [(Call
11020                  ("BEQ",CTy"Branch",
11021                   Var("v45",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11022                Apply
11023                  (Call
11024                     ("dfn'BEQ",ATy(qTy,qTy),
11025                      Var("v45",PTy(FTy 5,PTy(FTy 5,FTy 12)))),qVar"state")),
11026               (Call
11027                  ("BGE",CTy"Branch",
11028                   Var("v46",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11029                Apply
11030                  (Call
11031                     ("dfn'BGE",ATy(qTy,qTy),
11032                      Var("v46",PTy(FTy 5,PTy(FTy 5,FTy 12)))),qVar"state")),
11033               (Call
11034                  ("BGEU",CTy"Branch",
11035                   Var("v47",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11036                Apply
11037                  (Call
11038                     ("dfn'BGEU",ATy(qTy,qTy),
11039                      Var("v47",PTy(FTy 5,PTy(FTy 5,FTy 12)))),qVar"state")),
11040               (Call
11041                  ("BLT",CTy"Branch",
11042                   Var("v48",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11043                Apply
11044                  (Call
11045                     ("dfn'BLT",ATy(qTy,qTy),
11046                      Var("v48",PTy(FTy 5,PTy(FTy 5,FTy 12)))),qVar"state")),
11047               (Call
11048                  ("BLTU",CTy"Branch",
11049                   Var("v49",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11050                Apply
11051                  (Call
11052                     ("dfn'BLTU",ATy(qTy,qTy),
11053                      Var("v49",PTy(FTy 5,PTy(FTy 5,FTy 12)))),qVar"state")),
11054               (Call
11055                  ("BNE",CTy"Branch",
11056                   Var("v50",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11057                Apply
11058                  (Call
11059                     ("dfn'BNE",ATy(qTy,qTy),
11060                      Var("v50",PTy(FTy 5,PTy(FTy 5,FTy 12)))),qVar"state")),
11061               (Call("JAL",CTy"Branch",Var("v51",PTy(FTy 5,FTy 20))),
11062                Apply
11063                  (Call
11064                     ("dfn'JAL",ATy(qTy,qTy),Var("v51",PTy(FTy 5,FTy 20))),
11065                   qVar"state")),
11066               (Call
11067                  ("JALR",CTy"Branch",
11068                   Var("v52",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11069                Apply
11070                  (Call
11071                     ("dfn'JALR",ATy(qTy,qTy),
11072                      Var("v52",PTy(FTy 5,PTy(FTy 5,FTy 12)))),qVar"state"))])),
11073          (Call("FArith",CTy"instruction",Var("v53",CTy"FArith")),
11074           CS(Var("v53",CTy"FArith"),
11075              [(Call
11076                  ("FADD_D",CTy"FArith",
11077                   Var("v54",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))),
11078                Apply
11079                  (Call
11080                     ("dfn'FADD_D",ATy(qTy,qTy),
11081                      Var("v54",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))),
11082                   qVar"state")),
11083               (Call
11084                  ("FADD_S",CTy"FArith",
11085                   Var("v55",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))),
11086                Apply
11087                  (Call
11088                     ("dfn'FADD_S",ATy(qTy,qTy),
11089                      Var("v55",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))),
11090                   qVar"state")),
11091               (Call
11092                  ("FDIV_D",CTy"FArith",
11093                   Var("v56",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))),
11094                Apply
11095                  (Call
11096                     ("dfn'FDIV_D",ATy(qTy,qTy),
11097                      Var("v56",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))),
11098                   qVar"state")),
11099               (Call
11100                  ("FDIV_S",CTy"FArith",
11101                   Var("v57",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))),
11102                Apply
11103                  (Call
11104                     ("dfn'FDIV_S",ATy(qTy,qTy),
11105                      Var("v57",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))),
11106                   qVar"state")),
11107               (Call
11108                  ("FEQ_D",CTy"FArith",
11109                   Var("v58",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11110                Apply
11111                  (Call
11112                     ("dfn'FEQ_D",ATy(qTy,qTy),
11113                      Var("v58",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11114               (Call
11115                  ("FEQ_S",CTy"FArith",
11116                   Var("v59",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11117                Apply
11118                  (Call
11119                     ("dfn'FEQ_S",ATy(qTy,qTy),
11120                      Var("v59",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11121               (Call
11122                  ("FLE_D",CTy"FArith",
11123                   Var("v60",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11124                Apply
11125                  (Call
11126                     ("dfn'FLE_D",ATy(qTy,qTy),
11127                      Var("v60",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11128               (Call
11129                  ("FLE_S",CTy"FArith",
11130                   Var("v61",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11131                Apply
11132                  (Call
11133                     ("dfn'FLE_S",ATy(qTy,qTy),
11134                      Var("v61",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11135               (Call
11136                  ("FLT_D",CTy"FArith",
11137                   Var("v62",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11138                Apply
11139                  (Call
11140                     ("dfn'FLT_D",ATy(qTy,qTy),
11141                      Var("v62",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11142               (Call
11143                  ("FLT_S",CTy"FArith",
11144                   Var("v63",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11145                Apply
11146                  (Call
11147                     ("dfn'FLT_S",ATy(qTy,qTy),
11148                      Var("v63",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11149               (Call
11150                  ("FMADD_D",CTy"FArith",
11151                   Var("v64",
11152                       PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))),
11153                Apply
11154                  (Call
11155                     ("dfn'FMADD_D",ATy(qTy,qTy),
11156                      Var("v64",
11157                          PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))),
11158                   qVar"state")),
11159               (Call
11160                  ("FMADD_S",CTy"FArith",
11161                   Var("v65",
11162                       PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))),
11163                Apply
11164                  (Call
11165                     ("dfn'FMADD_S",ATy(qTy,qTy),
11166                      Var("v65",
11167                          PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))),
11168                   qVar"state")),
11169               (Call
11170                  ("FMAX_D",CTy"FArith",
11171                   Var("v66",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11172                Apply
11173                  (Call
11174                     ("dfn'FMAX_D",ATy(qTy,qTy),
11175                      Var("v66",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11176               (Call
11177                  ("FMAX_S",CTy"FArith",
11178                   Var("v67",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11179                Apply
11180                  (Call
11181                     ("dfn'FMAX_S",ATy(qTy,qTy),
11182                      Var("v67",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11183               (Call
11184                  ("FMIN_D",CTy"FArith",
11185                   Var("v68",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11186                Apply
11187                  (Call
11188                     ("dfn'FMIN_D",ATy(qTy,qTy),
11189                      Var("v68",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11190               (Call
11191                  ("FMIN_S",CTy"FArith",
11192                   Var("v69",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11193                Apply
11194                  (Call
11195                     ("dfn'FMIN_S",ATy(qTy,qTy),
11196                      Var("v69",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11197               (Call
11198                  ("FMSUB_D",CTy"FArith",
11199                   Var("v70",
11200                       PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))),
11201                Apply
11202                  (Call
11203                     ("dfn'FMSUB_D",ATy(qTy,qTy),
11204                      Var("v70",
11205                          PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))),
11206                   qVar"state")),
11207               (Call
11208                  ("FMSUB_S",CTy"FArith",
11209                   Var("v71",
11210                       PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))),
11211                Apply
11212                  (Call
11213                     ("dfn'FMSUB_S",ATy(qTy,qTy),
11214                      Var("v71",
11215                          PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))),
11216                   qVar"state")),
11217               (Call
11218                  ("FMUL_D",CTy"FArith",
11219                   Var("v72",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))),
11220                Apply
11221                  (Call
11222                     ("dfn'FMUL_D",ATy(qTy,qTy),
11223                      Var("v72",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))),
11224                   qVar"state")),
11225               (Call
11226                  ("FMUL_S",CTy"FArith",
11227                   Var("v73",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))),
11228                Apply
11229                  (Call
11230                     ("dfn'FMUL_S",ATy(qTy,qTy),
11231                      Var("v73",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))),
11232                   qVar"state")),
11233               (Call
11234                  ("FNMADD_D",CTy"FArith",
11235                   Var("v74",
11236                       PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))),
11237                Apply
11238                  (Call
11239                     ("dfn'FNMADD_D",ATy(qTy,qTy),
11240                      Var("v74",
11241                          PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))),
11242                   qVar"state")),
11243               (Call
11244                  ("FNMADD_S",CTy"FArith",
11245                   Var("v75",
11246                       PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))),
11247                Apply
11248                  (Call
11249                     ("dfn'FNMADD_S",ATy(qTy,qTy),
11250                      Var("v75",
11251                          PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))),
11252                   qVar"state")),
11253               (Call
11254                  ("FNMSUB_D",CTy"FArith",
11255                   Var("v76",
11256                       PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))),
11257                Apply
11258                  (Call
11259                     ("dfn'FNMSUB_D",ATy(qTy,qTy),
11260                      Var("v76",
11261                          PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))),
11262                   qVar"state")),
11263               (Call
11264                  ("FNMSUB_S",CTy"FArith",
11265                   Var("v77",
11266                       PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))),
11267                Apply
11268                  (Call
11269                     ("dfn'FNMSUB_S",ATy(qTy,qTy),
11270                      Var("v77",
11271                          PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))),
11272                   qVar"state")),
11273               (Call
11274                  ("FSQRT_D",CTy"FArith",
11275                   Var("v78",PTy(FTy 5,PTy(FTy 5,FTy 3)))),
11276                Apply
11277                  (Call
11278                     ("dfn'FSQRT_D",ATy(qTy,qTy),
11279                      Var("v78",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")),
11280               (Call
11281                  ("FSQRT_S",CTy"FArith",
11282                   Var("v79",PTy(FTy 5,PTy(FTy 5,FTy 3)))),
11283                Apply
11284                  (Call
11285                     ("dfn'FSQRT_S",ATy(qTy,qTy),
11286                      Var("v79",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")),
11287               (Call
11288                  ("FSUB_D",CTy"FArith",
11289                   Var("v80",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))),
11290                Apply
11291                  (Call
11292                     ("dfn'FSUB_D",ATy(qTy,qTy),
11293                      Var("v80",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))),
11294                   qVar"state")),
11295               (Call
11296                  ("FSUB_S",CTy"FArith",
11297                   Var("v81",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))),
11298                Apply
11299                  (Call
11300                     ("dfn'FSUB_S",ATy(qTy,qTy),
11301                      Var("v81",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))),
11302                   qVar"state"))])),
11303          (Call("FConv",CTy"instruction",Var("v82",CTy"FConv")),
11304           CS(Var("v82",CTy"FConv"),
11305              [(Call("FCLASS_D",CTy"FConv",Var("v83",PTy(FTy 5,FTy 5))),
11306                Apply
11307                  (Call
11308                     ("dfn'FCLASS_D",ATy(qTy,qTy),
11309                      Var("v83",PTy(FTy 5,FTy 5))),qVar"state")),
11310               (Call("FCLASS_S",CTy"FConv",Var("v84",PTy(FTy 5,FTy 5))),
11311                Apply
11312                  (Call
11313                     ("dfn'FCLASS_S",ATy(qTy,qTy),
11314                      Var("v84",PTy(FTy 5,FTy 5))),qVar"state")),
11315               (Call
11316                  ("FCVT_D_L",CTy"FConv",
11317                   Var("v85",PTy(FTy 5,PTy(FTy 5,FTy 3)))),
11318                Apply
11319                  (Call
11320                     ("dfn'FCVT_D_L",ATy(qTy,qTy),
11321                      Var("v85",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")),
11322               (Call
11323                  ("FCVT_D_LU",CTy"FConv",
11324                   Var("v86",PTy(FTy 5,PTy(FTy 5,FTy 3)))),
11325                Apply
11326                  (Call
11327                     ("dfn'FCVT_D_LU",ATy(qTy,qTy),
11328                      Var("v86",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")),
11329               (Call
11330                  ("FCVT_D_S",CTy"FConv",
11331                   Var("v87",PTy(FTy 5,PTy(FTy 5,FTy 3)))),
11332                Apply
11333                  (Call
11334                     ("dfn'FCVT_D_S",ATy(qTy,qTy),
11335                      Var("v87",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")),
11336               (Call
11337                  ("FCVT_D_W",CTy"FConv",
11338                   Var("v88",PTy(FTy 5,PTy(FTy 5,FTy 3)))),
11339                Apply
11340                  (Call
11341                     ("dfn'FCVT_D_W",ATy(qTy,qTy),
11342                      Var("v88",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")),
11343               (Call
11344                  ("FCVT_D_WU",CTy"FConv",
11345                   Var("v89",PTy(FTy 5,PTy(FTy 5,FTy 3)))),
11346                Apply
11347                  (Call
11348                     ("dfn'FCVT_D_WU",ATy(qTy,qTy),
11349                      Var("v89",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")),
11350               (Call
11351                  ("FCVT_LU_D",CTy"FConv",
11352                   Var("v90",PTy(FTy 5,PTy(FTy 5,FTy 3)))),
11353                Apply
11354                  (Call
11355                     ("dfn'FCVT_LU_D",ATy(qTy,qTy),
11356                      Var("v90",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")),
11357               (Call
11358                  ("FCVT_LU_S",CTy"FConv",
11359                   Var("v91",PTy(FTy 5,PTy(FTy 5,FTy 3)))),
11360                Apply
11361                  (Call
11362                     ("dfn'FCVT_LU_S",ATy(qTy,qTy),
11363                      Var("v91",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")),
11364               (Call
11365                  ("FCVT_L_D",CTy"FConv",
11366                   Var("v92",PTy(FTy 5,PTy(FTy 5,FTy 3)))),
11367                Apply
11368                  (Call
11369                     ("dfn'FCVT_L_D",ATy(qTy,qTy),
11370                      Var("v92",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")),
11371               (Call
11372                  ("FCVT_L_S",CTy"FConv",
11373                   Var("v93",PTy(FTy 5,PTy(FTy 5,FTy 3)))),
11374                Apply
11375                  (Call
11376                     ("dfn'FCVT_L_S",ATy(qTy,qTy),
11377                      Var("v93",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")),
11378               (Call
11379                  ("FCVT_S_D",CTy"FConv",
11380                   Var("v94",PTy(FTy 5,PTy(FTy 5,FTy 3)))),
11381                Apply
11382                  (Call
11383                     ("dfn'FCVT_S_D",ATy(qTy,qTy),
11384                      Var("v94",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")),
11385               (Call
11386                  ("FCVT_S_L",CTy"FConv",
11387                   Var("v95",PTy(FTy 5,PTy(FTy 5,FTy 3)))),
11388                Apply
11389                  (Call
11390                     ("dfn'FCVT_S_L",ATy(qTy,qTy),
11391                      Var("v95",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")),
11392               (Call
11393                  ("FCVT_S_LU",CTy"FConv",
11394                   Var("v96",PTy(FTy 5,PTy(FTy 5,FTy 3)))),
11395                Apply
11396                  (Call
11397                     ("dfn'FCVT_S_LU",ATy(qTy,qTy),
11398                      Var("v96",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")),
11399               (Call
11400                  ("FCVT_S_W",CTy"FConv",
11401                   Var("v97",PTy(FTy 5,PTy(FTy 5,FTy 3)))),
11402                Apply
11403                  (Call
11404                     ("dfn'FCVT_S_W",ATy(qTy,qTy),
11405                      Var("v97",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")),
11406               (Call
11407                  ("FCVT_S_WU",CTy"FConv",
11408                   Var("v98",PTy(FTy 5,PTy(FTy 5,FTy 3)))),
11409                Apply
11410                  (Call
11411                     ("dfn'FCVT_S_WU",ATy(qTy,qTy),
11412                      Var("v98",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")),
11413               (Call
11414                  ("FCVT_WU_D",CTy"FConv",
11415                   Var("v99",PTy(FTy 5,PTy(FTy 5,FTy 3)))),
11416                Apply
11417                  (Call
11418                     ("dfn'FCVT_WU_D",ATy(qTy,qTy),
11419                      Var("v99",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")),
11420               (Call
11421                  ("FCVT_WU_S",CTy"FConv",
11422                   Var("v100",PTy(FTy 5,PTy(FTy 5,FTy 3)))),
11423                Apply
11424                  (Call
11425                     ("dfn'FCVT_WU_S",ATy(qTy,qTy),
11426                      Var("v100",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")),
11427               (Call
11428                  ("FCVT_W_D",CTy"FConv",
11429                   Var("v101",PTy(FTy 5,PTy(FTy 5,FTy 3)))),
11430                Apply
11431                  (Call
11432                     ("dfn'FCVT_W_D",ATy(qTy,qTy),
11433                      Var("v101",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")),
11434               (Call
11435                  ("FCVT_W_S",CTy"FConv",
11436                   Var("v102",PTy(FTy 5,PTy(FTy 5,FTy 3)))),
11437                Apply
11438                  (Call
11439                     ("dfn'FCVT_W_S",ATy(qTy,qTy),
11440                      Var("v102",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")),
11441               (Call("FMV_D_X",CTy"FConv",Var("v103",PTy(FTy 5,FTy 5))),
11442                Apply
11443                  (Call
11444                     ("dfn'FMV_D_X",ATy(qTy,qTy),
11445                      Var("v103",PTy(FTy 5,FTy 5))),qVar"state")),
11446               (Call("FMV_S_X",CTy"FConv",Var("v104",PTy(FTy 5,FTy 5))),
11447                Apply
11448                  (Call
11449                     ("dfn'FMV_S_X",ATy(qTy,qTy),
11450                      Var("v104",PTy(FTy 5,FTy 5))),qVar"state")),
11451               (Call("FMV_X_D",CTy"FConv",Var("v105",PTy(FTy 5,FTy 5))),
11452                Apply
11453                  (Call
11454                     ("dfn'FMV_X_D",ATy(qTy,qTy),
11455                      Var("v105",PTy(FTy 5,FTy 5))),qVar"state")),
11456               (Call("FMV_X_S",CTy"FConv",Var("v106",PTy(FTy 5,FTy 5))),
11457                Apply
11458                  (Call
11459                     ("dfn'FMV_X_S",ATy(qTy,qTy),
11460                      Var("v106",PTy(FTy 5,FTy 5))),qVar"state")),
11461               (Call
11462                  ("FSGNJN_D",CTy"FConv",
11463                   Var("v107",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11464                Apply
11465                  (Call
11466                     ("dfn'FSGNJN_D",ATy(qTy,qTy),
11467                      Var("v107",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11468               (Call
11469                  ("FSGNJN_S",CTy"FConv",
11470                   Var("v108",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11471                Apply
11472                  (Call
11473                     ("dfn'FSGNJN_S",ATy(qTy,qTy),
11474                      Var("v108",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11475               (Call
11476                  ("FSGNJX_D",CTy"FConv",
11477                   Var("v109",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11478                Apply
11479                  (Call
11480                     ("dfn'FSGNJX_D",ATy(qTy,qTy),
11481                      Var("v109",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11482               (Call
11483                  ("FSGNJX_S",CTy"FConv",
11484                   Var("v110",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11485                Apply
11486                  (Call
11487                     ("dfn'FSGNJX_S",ATy(qTy,qTy),
11488                      Var("v110",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11489               (Call
11490                  ("FSGNJ_D",CTy"FConv",
11491                   Var("v111",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11492                Apply
11493                  (Call
11494                     ("dfn'FSGNJ_D",ATy(qTy,qTy),
11495                      Var("v111",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11496               (Call
11497                  ("FSGNJ_S",CTy"FConv",
11498                   Var("v112",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11499                Apply
11500                  (Call
11501                     ("dfn'FSGNJ_S",ATy(qTy,qTy),
11502                      Var("v112",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state"))])),
11503          (Call("FPLoad",CTy"instruction",Var("v113",CTy"FPLoad")),
11504           CS(Var("v113",CTy"FPLoad"),
11505              [(Call
11506                  ("FLD",CTy"FPLoad",
11507                   Var("v114",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11508                Apply
11509                  (Call
11510                     ("dfn'FLD",ATy(qTy,qTy),
11511                      Var("v114",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11512                   qVar"state")),
11513               (Call
11514                  ("FLW",CTy"FPLoad",
11515                   Var("v115",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11516                Apply
11517                  (Call
11518                     ("dfn'FLW",ATy(qTy,qTy),
11519                      Var("v115",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11520                   qVar"state"))])),
11521          (Call("FPStore",CTy"instruction",Var("v116",CTy"FPStore")),
11522           CS(Var("v116",CTy"FPStore"),
11523              [(Call
11524                  ("FSD",CTy"FPStore",
11525                   Var("v117",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11526                Apply
11527                  (Call
11528                     ("dfn'FSD",ATy(qTy,qTy),
11529                      Var("v117",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11530                   qVar"state")),
11531               (Call
11532                  ("FSW",CTy"FPStore",
11533                   Var("v118",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11534                Apply
11535                  (Call
11536                     ("dfn'FSW",ATy(qTy,qTy),
11537                      Var("v118",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11538                   qVar"state"))])),
11539          (Call("Internal",CTy"instruction",Var("v119",CTy"Internal")),
11540           CS(Var("v119",CTy"Internal"),
11541              [(Call("FETCH_FAULT",CTy"Internal",Var("v120",F64)),
11542                Apply
11543                  (Call("dfn'FETCH_FAULT",ATy(qTy,qTy),Var("v120",F64)),
11544                   qVar"state")),
11545               (Call("FETCH_MISALIGNED",CTy"Internal",Var("v121",F64)),
11546                Apply
11547                  (Call
11548                     ("dfn'FETCH_MISALIGNED",ATy(qTy,qTy),Var("v121",F64)),
11549                   qVar"state"))])),
11550          (Call("Load",CTy"instruction",Var("v122",CTy"Load")),
11551           CS(Var("v122",CTy"Load"),
11552              [(Call
11553                  ("LB",CTy"Load",Var("v123",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11554                Apply
11555                  (Call
11556                     ("dfn'LB",ATy(qTy,qTy),
11557                      Var("v123",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11558                   qVar"state")),
11559               (Call
11560                  ("LBU",CTy"Load",
11561                   Var("v124",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11562                Apply
11563                  (Call
11564                     ("dfn'LBU",ATy(qTy,qTy),
11565                      Var("v124",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11566                   qVar"state")),
11567               (Call
11568                  ("LD",CTy"Load",Var("v125",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11569                Apply
11570                  (Call
11571                     ("dfn'LD",ATy(qTy,qTy),
11572                      Var("v125",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11573                   qVar"state")),
11574               (Call
11575                  ("LH",CTy"Load",Var("v126",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11576                Apply
11577                  (Call
11578                     ("dfn'LH",ATy(qTy,qTy),
11579                      Var("v126",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11580                   qVar"state")),
11581               (Call
11582                  ("LHU",CTy"Load",
11583                   Var("v127",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11584                Apply
11585                  (Call
11586                     ("dfn'LHU",ATy(qTy,qTy),
11587                      Var("v127",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11588                   qVar"state")),
11589               (Call
11590                  ("LW",CTy"Load",Var("v128",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11591                Apply
11592                  (Call
11593                     ("dfn'LW",ATy(qTy,qTy),
11594                      Var("v128",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11595                   qVar"state")),
11596               (Call
11597                  ("LWU",CTy"Load",
11598                   Var("v129",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11599                Apply
11600                  (Call
11601                     ("dfn'LWU",ATy(qTy,qTy),
11602                      Var("v129",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11603                   qVar"state"))])),
11604          (Call("MulDiv",CTy"instruction",Var("v130",CTy"MulDiv")),
11605           CS(Var("v130",CTy"MulDiv"),
11606              [(Call
11607                  ("DIV",CTy"MulDiv",
11608                   Var("v131",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11609                Apply
11610                  (Call
11611                     ("dfn'DIV",ATy(qTy,qTy),
11612                      Var("v131",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11613               (Call
11614                  ("DIVU",CTy"MulDiv",
11615                   Var("v132",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11616                Apply
11617                  (Call
11618                     ("dfn'DIVU",ATy(qTy,qTy),
11619                      Var("v132",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11620               (Call
11621                  ("DIVUW",CTy"MulDiv",
11622                   Var("v133",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11623                Apply
11624                  (Call
11625                     ("dfn'DIVUW",ATy(qTy,qTy),
11626                      Var("v133",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11627               (Call
11628                  ("DIVW",CTy"MulDiv",
11629                   Var("v134",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11630                Apply
11631                  (Call
11632                     ("dfn'DIVW",ATy(qTy,qTy),
11633                      Var("v134",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11634               (Call
11635                  ("MUL",CTy"MulDiv",
11636                   Var("v135",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11637                Apply
11638                  (Call
11639                     ("dfn'MUL",ATy(qTy,qTy),
11640                      Var("v135",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11641               (Call
11642                  ("MULH",CTy"MulDiv",
11643                   Var("v136",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11644                Apply
11645                  (Call
11646                     ("dfn'MULH",ATy(qTy,qTy),
11647                      Var("v136",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11648               (Call
11649                  ("MULHSU",CTy"MulDiv",
11650                   Var("v137",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11651                Apply
11652                  (Call
11653                     ("dfn'MULHSU",ATy(qTy,qTy),
11654                      Var("v137",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11655               (Call
11656                  ("MULHU",CTy"MulDiv",
11657                   Var("v138",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11658                Apply
11659                  (Call
11660                     ("dfn'MULHU",ATy(qTy,qTy),
11661                      Var("v138",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11662               (Call
11663                  ("MULW",CTy"MulDiv",
11664                   Var("v139",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11665                Apply
11666                  (Call
11667                     ("dfn'MULW",ATy(qTy,qTy),
11668                      Var("v139",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11669               (Call
11670                  ("REM",CTy"MulDiv",
11671                   Var("v140",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11672                Apply
11673                  (Call
11674                     ("dfn'REM",ATy(qTy,qTy),
11675                      Var("v140",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11676               (Call
11677                  ("REMU",CTy"MulDiv",
11678                   Var("v141",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11679                Apply
11680                  (Call
11681                     ("dfn'REMU",ATy(qTy,qTy),
11682                      Var("v141",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11683               (Call
11684                  ("REMUW",CTy"MulDiv",
11685                   Var("v142",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11686                Apply
11687                  (Call
11688                     ("dfn'REMUW",ATy(qTy,qTy),
11689                      Var("v142",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11690               (Call
11691                  ("REMW",CTy"MulDiv",
11692                   Var("v143",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11693                Apply
11694                  (Call
11695                     ("dfn'REMW",ATy(qTy,qTy),
11696                      Var("v143",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state"))])),
11697          (Call("Shift",CTy"instruction",Var("v144",CTy"Shift")),
11698           CS(Var("v144",CTy"Shift"),
11699              [(Call
11700                  ("SLL",CTy"Shift",
11701                   Var("v145",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11702                Apply
11703                  (Call
11704                     ("dfn'SLL",ATy(qTy,qTy),
11705                      Var("v145",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11706               (Call
11707                  ("SLLI",CTy"Shift",
11708                   Var("v146",PTy(FTy 5,PTy(FTy 5,FTy 6)))),
11709                Apply
11710                  (Call
11711                     ("dfn'SLLI",ATy(qTy,qTy),
11712                      Var("v146",PTy(FTy 5,PTy(FTy 5,FTy 6)))),qVar"state")),
11713               (Call
11714                  ("SLLIW",CTy"Shift",
11715                   Var("v147",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11716                Apply
11717                  (Call
11718                     ("dfn'SLLIW",ATy(qTy,qTy),
11719                      Var("v147",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11720               (Call
11721                  ("SLLW",CTy"Shift",
11722                   Var("v148",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11723                Apply
11724                  (Call
11725                     ("dfn'SLLW",ATy(qTy,qTy),
11726                      Var("v148",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11727               (Call
11728                  ("SRA",CTy"Shift",
11729                   Var("v149",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11730                Apply
11731                  (Call
11732                     ("dfn'SRA",ATy(qTy,qTy),
11733                      Var("v149",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11734               (Call
11735                  ("SRAI",CTy"Shift",
11736                   Var("v150",PTy(FTy 5,PTy(FTy 5,FTy 6)))),
11737                Apply
11738                  (Call
11739                     ("dfn'SRAI",ATy(qTy,qTy),
11740                      Var("v150",PTy(FTy 5,PTy(FTy 5,FTy 6)))),qVar"state")),
11741               (Call
11742                  ("SRAIW",CTy"Shift",
11743                   Var("v151",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11744                Apply
11745                  (Call
11746                     ("dfn'SRAIW",ATy(qTy,qTy),
11747                      Var("v151",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11748               (Call
11749                  ("SRAW",CTy"Shift",
11750                   Var("v152",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11751                Apply
11752                  (Call
11753                     ("dfn'SRAW",ATy(qTy,qTy),
11754                      Var("v152",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11755               (Call
11756                  ("SRL",CTy"Shift",
11757                   Var("v153",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11758                Apply
11759                  (Call
11760                     ("dfn'SRL",ATy(qTy,qTy),
11761                      Var("v153",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11762               (Call
11763                  ("SRLI",CTy"Shift",
11764                   Var("v154",PTy(FTy 5,PTy(FTy 5,FTy 6)))),
11765                Apply
11766                  (Call
11767                     ("dfn'SRLI",ATy(qTy,qTy),
11768                      Var("v154",PTy(FTy 5,PTy(FTy 5,FTy 6)))),qVar"state")),
11769               (Call
11770                  ("SRLIW",CTy"Shift",
11771                   Var("v155",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11772                Apply
11773                  (Call
11774                     ("dfn'SRLIW",ATy(qTy,qTy),
11775                      Var("v155",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")),
11776               (Call
11777                  ("SRLW",CTy"Shift",
11778                   Var("v156",PTy(FTy 5,PTy(FTy 5,FTy 5)))),
11779                Apply
11780                  (Call
11781                     ("dfn'SRLW",ATy(qTy,qTy),
11782                      Var("v156",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state"))])),
11783          (Call("Store",CTy"instruction",Var("v157",CTy"Store")),
11784           CS(Var("v157",CTy"Store"),
11785              [(Call
11786                  ("SB",CTy"Store",
11787                   Var("v158",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11788                Apply
11789                  (Call
11790                     ("dfn'SB",ATy(qTy,qTy),
11791                      Var("v158",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11792                   qVar"state")),
11793               (Call
11794                  ("SD",CTy"Store",
11795                   Var("v159",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11796                Apply
11797                  (Call
11798                     ("dfn'SD",ATy(qTy,qTy),
11799                      Var("v159",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11800                   qVar"state")),
11801               (Call
11802                  ("SH",CTy"Store",
11803                   Var("v160",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11804                Apply
11805                  (Call
11806                     ("dfn'SH",ATy(qTy,qTy),
11807                      Var("v160",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11808                   qVar"state")),
11809               (Call
11810                  ("SW",CTy"Store",
11811                   Var("v161",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11812                Apply
11813                  (Call
11814                     ("dfn'SW",ATy(qTy,qTy),
11815                      Var("v161",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11816                   qVar"state"))])),
11817          (Call("System",CTy"instruction",Var("v162",CTy"System")),
11818           CS(Var("v162",CTy"System"),
11819              [(Const("EBREAK",CTy"System"),
11820                Apply(Const("dfn'EBREAK",ATy(qTy,qTy)),qVar"state")),
11821               (Const("ECALL",CTy"System"),
11822                Apply(Const("dfn'ECALL",ATy(qTy,qTy)),qVar"state")),
11823               (Const("ERET",CTy"System"),
11824                Apply(Const("dfn'ERET",ATy(qTy,qTy)),qVar"state")),
11825               (Const("MRTS",CTy"System"),
11826                Apply(Const("dfn'MRTS",ATy(qTy,qTy)),qVar"state")),
11827               (Const("WFI",CTy"System"),qVar"state"),
11828               (Call
11829                  ("CSRRC",CTy"System",
11830                   Var("v163",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11831                Apply
11832                  (Call
11833                     ("dfn'CSRRC",ATy(qTy,qTy),
11834                      Var("v163",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11835                   qVar"state")),
11836               (Call
11837                  ("CSRRCI",CTy"System",
11838                   Var("v164",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11839                Apply
11840                  (Call
11841                     ("dfn'CSRRCI",ATy(qTy,qTy),
11842                      Var("v164",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11843                   qVar"state")),
11844               (Call
11845                  ("CSRRS",CTy"System",
11846                   Var("v165",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11847                Apply
11848                  (Call
11849                     ("dfn'CSRRS",ATy(qTy,qTy),
11850                      Var("v165",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11851                   qVar"state")),
11852               (Call
11853                  ("CSRRSI",CTy"System",
11854                   Var("v166",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11855                Apply
11856                  (Call
11857                     ("dfn'CSRRSI",ATy(qTy,qTy),
11858                      Var("v166",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11859                   qVar"state")),
11860               (Call
11861                  ("CSRRW",CTy"System",
11862                   Var("v167",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11863                Apply
11864                  (Call
11865                     ("dfn'CSRRW",ATy(qTy,qTy),
11866                      Var("v167",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11867                   qVar"state")),
11868               (Call
11869                  ("CSRRWI",CTy"System",
11870                   Var("v168",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11871                Apply
11872                  (Call
11873                     ("dfn'CSRRWI",ATy(qTy,qTy),
11874                      Var("v168",PTy(FTy 5,PTy(FTy 5,FTy 12)))),
11875                   qVar"state")),
11876               (Call("SFENCE_VM",CTy"System",Var("v169",FTy 5)),
11877                Apply
11878                  (Call("dfn'SFENCE_VM",ATy(qTy,qTy),Var("v169",FTy 5)),
11879                   qVar"state"))]))])))
11880;
11881val Fetch_def = Def
11882  ("Fetch",AVar uTy,
11883   Close
11884     (qVar"state",
11885      Let(Var("v",F64),Apply(Const("PC",ATy(qTy,F64)),qVar"state"),
11886          ITE(Mop(Not,EQ(EX(Var("v",F64),LN 1,LN 0,FTy 2),LW(0,2))),
11887              TP[Call
11888                   ("F_Error",CTy"FetchResult",
11889                    Call
11890                      ("Internal",CTy"instruction",
11891                       Call("FETCH_MISALIGNED",CTy"Internal",Var("v",F64)))),
11892                 qVar"state"],
11893              Let(TP[Var("v0",OTy F64),qVar"s"],
11894                  Apply
11895                    (Call
11896                       ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)),
11897                        TP[Var("v",F64),LC("Instruction",CTy"fetchType"),
11898                           LC("Read",CTy"accessType")]),qVar"state"),
11899                  CS(Var("v0",OTy F64),
11900                     [(Mop(Some,Var("pPC",F64)),
11901                       Let(Var("v0",F32),
11902                           Apply
11903                             (Call
11904                                ("rawReadInst",ATy(qTy,F32),Var("pPC",F64)),
11905                              qVar"s"),
11906                           TP[Call
11907                                ("F_Result",CTy"FetchResult",Var("v0",F32)),
11908                              Let(TP[Var("v1",CTy"StateDelta"),qVar"s"],
11909                                  Let(qVar"s0",
11910                                      Apply
11911                                        (Call
11912                                           ("write'Delta",ATy(qTy,qTy),
11913                                            Rupd
11914                                              ("exc_taken",
11915                                               TP[Apply
11916                                                    (Const
11917                                                       ("Delta",
11918                                                        ATy(qTy,
11919                                                            CTy"StateDelta")),
11920                                                     qVar"s"),LF])),
11921                                         qVar"s"),
11922                                      TP[Apply
11923                                           (Const
11924                                              ("Delta",
11925                                               ATy(qTy,CTy"StateDelta")),
11926                                            qVar"s0"),qVar"s0"]),
11927                                  Let(TP[Var("v1",CTy"StateDelta"),qVar"s"],
11928                                      Let(qVar"s0",
11929                                          Apply
11930                                            (Call
11931                                               ("write'Delta",
11932                                                ATy(qTy,qTy),
11933                                                Rupd
11934                                                  ("fetch_exc",
11935                                                   TP[Var("v1",
11936                                                          CTy"StateDelta"),
11937                                                      LF])),qVar"s"),
11938                                          TP[Apply
11939                                               (Const
11940                                                  ("Delta",
11941                                                   ATy(qTy,CTy"StateDelta")),
11942                                                qVar"s0"),qVar"s0"]),
11943                                      Let(TP[Var("v1",CTy"StateDelta"),
11944                                             qVar"s"],
11945                                          Let(qVar"s0",
11946                                              Apply
11947                                                (Call
11948                                                   ("write'Delta",
11949                                                    ATy(qTy,qTy),
11950                                                    Rupd
11951                                                      ("pc",
11952                                                       TP[Var("v1",
11953                                                              CTy"StateDelta"),
11954                                                          Var("v",F64)])),
11955                                                 qVar"s"),
11956                                              TP[Apply
11957                                                   (Const
11958                                                      ("Delta",
11959                                                       ATy(qTy,
11960                                                           CTy"StateDelta")),
11961                                                    qVar"s0"),qVar"s0"]),
11962                                          Let(TP[Var("v",CTy"StateDelta"),
11963                                                 qVar"s"],
11964                                              Let(qVar"s0",
11965                                                  Apply
11966                                                    (Call
11967                                                       ("write'Delta",
11968                                                        ATy(qTy,qTy),
11969                                                        Rupd
11970                                                          ("rinstr",
11971                                                           TP[Var("v1",
11972                                                                  CTy"StateDelta"),
11973                                                              Var("v0",F32)])),
11974                                                     qVar"s"),
11975                                                  TP[Apply
11976                                                       (Const
11977                                                          ("Delta",
11978                                                           ATy(qTy,
11979                                                               CTy"StateDelta")),
11980                                                        qVar"s0"),qVar"s0"]),
11981                                              Let(TP[Var("v",
11982                                                         CTy"StateDelta"),
11983                                                     qVar"s"],
11984                                                  Let(qVar"s0",
11985                                                      Apply
11986                                                        (Call
11987                                                           ("write'Delta",
11988                                                            ATy(qTy,qTy),
11989                                                            Rupd
11990                                                              ("addr",
11991                                                               TP[Var("v",
11992                                                                      CTy"StateDelta"),
11993                                                                  LO F64])),
11994                                                         qVar"s"),
11995                                                      TP[Apply
11996                                                           (Const
11997                                                              ("Delta",
11998                                                               ATy(qTy,
11999                                                                   CTy"StateDelta")),
12000                                                            qVar"s0"),
12001                                                         qVar"s0"]),
12002                                                  Let(TP[Var("v",
12003                                                             CTy"StateDelta"),
12004                                                         qVar"s"],
12005                                                      Let(qVar"s0",
12006                                                          Apply
12007                                                            (Call
12008                                                               ("write'Delta",
12009                                                                ATy(qTy,
12010                                                                    qTy),
12011                                                                Rupd
12012                                                                  ("data1",
12013                                                                   TP[Var("v",
12014                                                                          CTy"StateDelta"),
12015                                                                      LO F64])),
12016                                                             qVar"s"),
12017                                                          TP[Apply
12018                                                               (Const
12019                                                                  ("Delta",
12020                                                                   ATy(qTy,
12021                                                                       CTy"StateDelta")),
12022                                                                qVar"s0"),
12023                                                             qVar"s0"]),
12024                                                      Let(TP[Var("v",
12025                                                                 CTy"StateDelta"),
12026                                                             qVar"s"],
12027                                                          Let(qVar"s0",
12028                                                              Apply
12029                                                                (Call
12030                                                                   ("write'Delta",
12031                                                                    ATy(qTy,
12032                                                                        qTy),
12033                                                                    Rupd
12034                                                                      ("data2",
12035                                                                       TP[Var("v",
12036                                                                              CTy"StateDelta"),
12037                                                                          LO F64])),
12038                                                                 qVar"s"),
12039                                                              TP[Apply
12040                                                                   (Const
12041                                                                      ("Delta",
12042                                                                       ATy(qTy,
12043                                                                           CTy"StateDelta")),
12044                                                                    qVar"s0"),
12045                                                                 qVar"s0"]),
12046                                                          Let(TP[Var("v",
12047                                                                     CTy"StateDelta"),
12048                                                                 qVar"s"],
12049                                                              Let(qVar"s0",
12050                                                                  Apply
12051                                                                    (Call
12052                                                                       ("write'Delta",
12053                                                                        ATy(qTy,
12054                                                                            qTy),
12055                                                                        Rupd
12056                                                                          ("fp_data",
12057                                                                           TP[Var("v",
12058                                                                                  CTy"StateDelta"),
12059                                                                              LO F64])),
12060                                                                     qVar"s"),
12061                                                                  TP[Apply
12062                                                                       (Const
12063                                                                          ("Delta",
12064                                                                           ATy(qTy,
12065                                                                               CTy"StateDelta")),
12066                                                                        qVar"s0"),
12067                                                                     qVar"s0"]),
12068                                                              Apply
12069                                                                (Call
12070                                                                   ("write'Delta",
12071                                                                    ATy(qTy,
12072                                                                        qTy),
12073                                                                    Rupd
12074                                                                      ("st_width",
12075                                                                       TP[Var("v",
12076                                                                              CTy"StateDelta"),
12077                                                                          LO F32])),
12078                                                                 qVar"s")))))))))])),
12079                      (LO F64,
12080                       TP[Call
12081                            ("F_Error",CTy"FetchResult",
12082                             Call
12083                               ("Internal",CTy"instruction",
12084                                Call
12085                                  ("FETCH_FAULT",CTy"Internal",
12086                                   Var("v",F64)))),qVar"s"])]))))))
12087;
12088val asImm12_def = Def
12089  ("asImm12",
12090   TP[Var("imm12",F1),Var("imm11",F1),Var("immhi",FTy 6),Var("immlo",F4)],
12091   CC[Var("imm12",F1),Var("imm11",F1),Var("immhi",FTy 6),Var("immlo",F4)])
12092;
12093val asImm20_def = Def
12094  ("asImm20",
12095   TP[Var("imm20",F1),Var("immhi",F8),Var("imm11",F1),Var("immlo",FTy 10)],
12096   CC[Var("imm20",F1),Var("immhi",F8),Var("imm11",F1),Var("immlo",FTy 10)])
12097;
12098val asSImm12_def = Def
12099  ("asSImm12",TP[Var("immhi",FTy 7),Var("immlo",FTy 5)],
12100   CC[Var("immhi",FTy 7),Var("immlo",FTy 5)])
12101;
12102val Decode_def = Def
12103  ("Decode",Var("w",F32),
12104   Let(TP[bVar"b'31",bVar"b'30",bVar"b'29",bVar"b'28",bVar"b'27",
12105          bVar"b'26",bVar"b'25",bVar"b'24",bVar"b'23",bVar"b'22",
12106          bVar"b'21",bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17",
12107          bVar"b'16",bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12",
12108          bVar"b'11",bVar"b'10",bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
12109          bVar"b'5",bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",bVar"b'0"],
12110       BL(32,Var("w",F32)),
12111       ITB([(bVar"b'6",
12112             ITE(Bop(And,bVar"b'1",bVar"b'0"),
12113                 ITB([(Bop(And,Mop(Not,bVar"b'14"),
12114                           Bop(And,Mop(Not,bVar"b'13"),
12115                               Bop(And,Mop(Not,bVar"b'12"),
12116                                   Bop(And,bVar"b'5",
12117                                       Bop(And,Mop(Not,bVar"b'4"),
12118                                           Bop(And,Mop(Not,bVar"b'3"),
12119                                               Mop(Not,bVar"b'2"))))))),
12120                       Call
12121                         ("Branch",CTy"instruction",
12122                          Call
12123                            ("BEQ",CTy"Branch",
12124                             TP[Mop(Cast(FTy 5),
12125                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
12126                                       bVar"b'16",bVar"b'15"]),
12127                                Mop(Cast(FTy 5),
12128                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
12129                                       bVar"b'21",bVar"b'20"]),
12130                                Call
12131                                  ("asImm12",FTy 12,
12132                                   TP[Mop(Cast F1,LL[bVar"b'31"]),
12133                                      Mop(Cast F1,LL[bVar"b'7"]),
12134                                      Mop(Cast(FTy 6),
12135                                          LL[bVar"b'30",bVar"b'29",
12136                                             bVar"b'28",bVar"b'27",
12137                                             bVar"b'26",bVar"b'25"]),
12138                                      Mop(Cast F4,
12139                                          LL[bVar"b'11",bVar"b'10",
12140                                             bVar"b'9",bVar"b'8"])])]))),
12141                      (Bop(And,Mop(Not,bVar"b'14"),
12142                           Bop(And,Mop(Not,bVar"b'13"),
12143                               Bop(And,bVar"b'12",
12144                                   Bop(And,bVar"b'5",
12145                                       Bop(And,Mop(Not,bVar"b'4"),
12146                                           Bop(And,Mop(Not,bVar"b'3"),
12147                                               Mop(Not,bVar"b'2"))))))),
12148                       Call
12149                         ("Branch",CTy"instruction",
12150                          Call
12151                            ("BNE",CTy"Branch",
12152                             TP[Mop(Cast(FTy 5),
12153                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
12154                                       bVar"b'16",bVar"b'15"]),
12155                                Mop(Cast(FTy 5),
12156                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
12157                                       bVar"b'21",bVar"b'20"]),
12158                                Call
12159                                  ("asImm12",FTy 12,
12160                                   TP[Mop(Cast F1,LL[bVar"b'31"]),
12161                                      Mop(Cast F1,LL[bVar"b'7"]),
12162                                      Mop(Cast(FTy 6),
12163                                          LL[bVar"b'30",bVar"b'29",
12164                                             bVar"b'28",bVar"b'27",
12165                                             bVar"b'26",bVar"b'25"]),
12166                                      Mop(Cast F4,
12167                                          LL[bVar"b'11",bVar"b'10",
12168                                             bVar"b'9",bVar"b'8"])])]))),
12169                      (Bop(And,bVar"b'14",
12170                           Bop(And,Mop(Not,bVar"b'13"),
12171                               Bop(And,Mop(Not,bVar"b'12"),
12172                                   Bop(And,bVar"b'5",
12173                                       Bop(And,Mop(Not,bVar"b'4"),
12174                                           Bop(And,Mop(Not,bVar"b'3"),
12175                                               Mop(Not,bVar"b'2"))))))),
12176                       Call
12177                         ("Branch",CTy"instruction",
12178                          Call
12179                            ("BLT",CTy"Branch",
12180                             TP[Mop(Cast(FTy 5),
12181                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
12182                                       bVar"b'16",bVar"b'15"]),
12183                                Mop(Cast(FTy 5),
12184                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
12185                                       bVar"b'21",bVar"b'20"]),
12186                                Call
12187                                  ("asImm12",FTy 12,
12188                                   TP[Mop(Cast F1,LL[bVar"b'31"]),
12189                                      Mop(Cast F1,LL[bVar"b'7"]),
12190                                      Mop(Cast(FTy 6),
12191                                          LL[bVar"b'30",bVar"b'29",
12192                                             bVar"b'28",bVar"b'27",
12193                                             bVar"b'26",bVar"b'25"]),
12194                                      Mop(Cast F4,
12195                                          LL[bVar"b'11",bVar"b'10",
12196                                             bVar"b'9",bVar"b'8"])])]))),
12197                      (Bop(And,bVar"b'14",
12198                           Bop(And,Mop(Not,bVar"b'13"),
12199                               Bop(And,bVar"b'12",
12200                                   Bop(And,bVar"b'5",
12201                                       Bop(And,Mop(Not,bVar"b'4"),
12202                                           Bop(And,Mop(Not,bVar"b'3"),
12203                                               Mop(Not,bVar"b'2"))))))),
12204                       Call
12205                         ("Branch",CTy"instruction",
12206                          Call
12207                            ("BGE",CTy"Branch",
12208                             TP[Mop(Cast(FTy 5),
12209                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
12210                                       bVar"b'16",bVar"b'15"]),
12211                                Mop(Cast(FTy 5),
12212                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
12213                                       bVar"b'21",bVar"b'20"]),
12214                                Call
12215                                  ("asImm12",FTy 12,
12216                                   TP[Mop(Cast F1,LL[bVar"b'31"]),
12217                                      Mop(Cast F1,LL[bVar"b'7"]),
12218                                      Mop(Cast(FTy 6),
12219                                          LL[bVar"b'30",bVar"b'29",
12220                                             bVar"b'28",bVar"b'27",
12221                                             bVar"b'26",bVar"b'25"]),
12222                                      Mop(Cast F4,
12223                                          LL[bVar"b'11",bVar"b'10",
12224                                             bVar"b'9",bVar"b'8"])])]))),
12225                      (Bop(And,bVar"b'14",
12226                           Bop(And,bVar"b'13",
12227                               Bop(And,Mop(Not,bVar"b'12"),
12228                                   Bop(And,bVar"b'5",
12229                                       Bop(And,Mop(Not,bVar"b'4"),
12230                                           Bop(And,Mop(Not,bVar"b'3"),
12231                                               Mop(Not,bVar"b'2"))))))),
12232                       Call
12233                         ("Branch",CTy"instruction",
12234                          Call
12235                            ("BLTU",CTy"Branch",
12236                             TP[Mop(Cast(FTy 5),
12237                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
12238                                       bVar"b'16",bVar"b'15"]),
12239                                Mop(Cast(FTy 5),
12240                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
12241                                       bVar"b'21",bVar"b'20"]),
12242                                Call
12243                                  ("asImm12",FTy 12,
12244                                   TP[Mop(Cast F1,LL[bVar"b'31"]),
12245                                      Mop(Cast F1,LL[bVar"b'7"]),
12246                                      Mop(Cast(FTy 6),
12247                                          LL[bVar"b'30",bVar"b'29",
12248                                             bVar"b'28",bVar"b'27",
12249                                             bVar"b'26",bVar"b'25"]),
12250                                      Mop(Cast F4,
12251                                          LL[bVar"b'11",bVar"b'10",
12252                                             bVar"b'9",bVar"b'8"])])]))),
12253                      (Bop(And,bVar"b'14",
12254                           Bop(And,bVar"b'13",
12255                               Bop(And,bVar"b'12",
12256                                   Bop(And,bVar"b'5",
12257                                       Bop(And,Mop(Not,bVar"b'4"),
12258                                           Bop(And,Mop(Not,bVar"b'3"),
12259                                               Mop(Not,bVar"b'2"))))))),
12260                       Call
12261                         ("Branch",CTy"instruction",
12262                          Call
12263                            ("BGEU",CTy"Branch",
12264                             TP[Mop(Cast(FTy 5),
12265                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
12266                                       bVar"b'16",bVar"b'15"]),
12267                                Mop(Cast(FTy 5),
12268                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
12269                                       bVar"b'21",bVar"b'20"]),
12270                                Call
12271                                  ("asImm12",FTy 12,
12272                                   TP[Mop(Cast F1,LL[bVar"b'31"]),
12273                                      Mop(Cast F1,LL[bVar"b'7"]),
12274                                      Mop(Cast(FTy 6),
12275                                          LL[bVar"b'30",bVar"b'29",
12276                                             bVar"b'28",bVar"b'27",
12277                                             bVar"b'26",bVar"b'25"]),
12278                                      Mop(Cast F4,
12279                                          LL[bVar"b'11",bVar"b'10",
12280                                             bVar"b'9",bVar"b'8"])])]))),
12281                      (Bop(And,Mop(Not,bVar"b'14"),
12282                           Bop(And,Mop(Not,bVar"b'13"),
12283                               Bop(And,Mop(Not,bVar"b'12"),
12284                                   Bop(And,bVar"b'5",
12285                                       Bop(And,Mop(Not,bVar"b'4"),
12286                                           Bop(And,Mop(Not,bVar"b'3"),
12287                                               bVar"b'2")))))),
12288                       Call
12289                         ("Branch",CTy"instruction",
12290                          Call
12291                            ("JALR",CTy"Branch",
12292                             TP[Mop(Cast(FTy 5),
12293                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
12294                                       bVar"b'8",bVar"b'7"]),
12295                                Mop(Cast(FTy 5),
12296                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
12297                                       bVar"b'16",bVar"b'15"]),
12298                                Mop(Cast(FTy 12),
12299                                    LL[bVar"b'31",bVar"b'30",bVar"b'29",
12300                                       bVar"b'28",bVar"b'27",bVar"b'26",
12301                                       bVar"b'25",bVar"b'24",bVar"b'23",
12302                                       bVar"b'22",bVar"b'21",bVar"b'20"])]))),
12303                      (Bop(And,bVar"b'5",
12304                           Bop(And,Mop(Not,bVar"b'4"),
12305                               Bop(And,bVar"b'3",bVar"b'2"))),
12306                       Call
12307                         ("Branch",CTy"instruction",
12308                          Call
12309                            ("JAL",CTy"Branch",
12310                             TP[Mop(Cast(FTy 5),
12311                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
12312                                       bVar"b'8",bVar"b'7"]),
12313                                Call
12314                                  ("asImm20",FTy 20,
12315                                   TP[Mop(Cast F1,LL[bVar"b'31"]),
12316                                      Mop(Cast F8,
12317                                          LL[bVar"b'19",bVar"b'18",
12318                                             bVar"b'17",bVar"b'16",
12319                                             bVar"b'15",bVar"b'14",
12320                                             bVar"b'13",bVar"b'12"]),
12321                                      Mop(Cast F1,LL[bVar"b'20"]),
12322                                      Mop(Cast(FTy 10),
12323                                          LL[bVar"b'30",bVar"b'29",
12324                                             bVar"b'28",bVar"b'27",
12325                                             bVar"b'26",bVar"b'25",
12326                                             bVar"b'24",bVar"b'23",
12327                                             bVar"b'22",bVar"b'21"])])]))),
12328                      (Bop(And,Mop(Not,bVar"b'26"),
12329                           Bop(And,Mop(Not,bVar"b'25"),
12330                               Bop(And,Mop(Not,bVar"b'5"),
12331                                   Bop(And,Mop(Not,bVar"b'4"),
12332                                       Bop(And,Mop(Not,bVar"b'3"),
12333                                           Mop(Not,bVar"b'2")))))),
12334                       Call
12335                         ("FArith",CTy"instruction",
12336                          Call
12337                            ("FMADD_S",CTy"FArith",
12338                             TP[Mop(Cast(FTy 5),
12339                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
12340                                       bVar"b'8",bVar"b'7"]),
12341                                Mop(Cast(FTy 5),
12342                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
12343                                       bVar"b'16",bVar"b'15"]),
12344                                Mop(Cast(FTy 5),
12345                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
12346                                       bVar"b'21",bVar"b'20"]),
12347                                Mop(Cast(FTy 5),
12348                                    LL[bVar"b'31",bVar"b'30",bVar"b'29",
12349                                       bVar"b'28",bVar"b'27"]),
12350                                Mop(Cast(FTy 3),
12351                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
12352                      (Bop(And,Mop(Not,bVar"b'26"),
12353                           Bop(And,Mop(Not,bVar"b'25"),
12354                               Bop(And,Mop(Not,bVar"b'5"),
12355                                   Bop(And,Mop(Not,bVar"b'4"),
12356                                       Bop(And,Mop(Not,bVar"b'3"),
12357                                           bVar"b'2"))))),
12358                       Call
12359                         ("FArith",CTy"instruction",
12360                          Call
12361                            ("FMSUB_S",CTy"FArith",
12362                             TP[Mop(Cast(FTy 5),
12363                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
12364                                       bVar"b'8",bVar"b'7"]),
12365                                Mop(Cast(FTy 5),
12366                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
12367                                       bVar"b'16",bVar"b'15"]),
12368                                Mop(Cast(FTy 5),
12369                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
12370                                       bVar"b'21",bVar"b'20"]),
12371                                Mop(Cast(FTy 5),
12372                                    LL[bVar"b'31",bVar"b'30",bVar"b'29",
12373                                       bVar"b'28",bVar"b'27"]),
12374                                Mop(Cast(FTy 3),
12375                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
12376                      (Bop(And,Mop(Not,bVar"b'26"),
12377                           Bop(And,Mop(Not,bVar"b'25"),
12378                               Bop(And,Mop(Not,bVar"b'5"),
12379                                   Bop(And,Mop(Not,bVar"b'4"),
12380                                       Bop(And,bVar"b'3",
12381                                           Mop(Not,bVar"b'2")))))),
12382                       Call
12383                         ("FArith",CTy"instruction",
12384                          Call
12385                            ("FNMSUB_S",CTy"FArith",
12386                             TP[Mop(Cast(FTy 5),
12387                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
12388                                       bVar"b'8",bVar"b'7"]),
12389                                Mop(Cast(FTy 5),
12390                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
12391                                       bVar"b'16",bVar"b'15"]),
12392                                Mop(Cast(FTy 5),
12393                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
12394                                       bVar"b'21",bVar"b'20"]),
12395                                Mop(Cast(FTy 5),
12396                                    LL[bVar"b'31",bVar"b'30",bVar"b'29",
12397                                       bVar"b'28",bVar"b'27"]),
12398                                Mop(Cast(FTy 3),
12399                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
12400                      (Bop(And,Mop(Not,bVar"b'26"),
12401                           Bop(And,Mop(Not,bVar"b'25"),
12402                               Bop(And,Mop(Not,bVar"b'5"),
12403                                   Bop(And,Mop(Not,bVar"b'4"),
12404                                       Bop(And,bVar"b'3",bVar"b'2"))))),
12405                       Call
12406                         ("FArith",CTy"instruction",
12407                          Call
12408                            ("FNMADD_S",CTy"FArith",
12409                             TP[Mop(Cast(FTy 5),
12410                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
12411                                       bVar"b'8",bVar"b'7"]),
12412                                Mop(Cast(FTy 5),
12413                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
12414                                       bVar"b'16",bVar"b'15"]),
12415                                Mop(Cast(FTy 5),
12416                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
12417                                       bVar"b'21",bVar"b'20"]),
12418                                Mop(Cast(FTy 5),
12419                                    LL[bVar"b'31",bVar"b'30",bVar"b'29",
12420                                       bVar"b'28",bVar"b'27"]),
12421                                Mop(Cast(FTy 3),
12422                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
12423                      (Bop(And,Mop(Not,bVar"b'31"),
12424                           Bop(And,Mop(Not,bVar"b'30"),
12425                               Bop(And,Mop(Not,bVar"b'29"),
12426                                   Bop(And,Mop(Not,bVar"b'28"),
12427                                       Bop(And,Mop(Not,bVar"b'27"),
12428                                           Bop(And,Mop(Not,bVar"b'26"),
12429                                               Bop(And,
12430                                                   Mop(Not,bVar"b'25"),
12431                                                   Bop(And,
12432                                                       Mop(Not,bVar"b'5"),
12433                                                       Bop(And,bVar"b'4",
12434                                                           Bop(And,
12435                                                               Mop(Not,
12436                                                                   bVar"b'3"),
12437                                                               Mop(Not,
12438                                                                   bVar"b'2"))))))))))),
12439                       Call
12440                         ("FArith",CTy"instruction",
12441                          Call
12442                            ("FADD_S",CTy"FArith",
12443                             TP[Mop(Cast(FTy 5),
12444                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
12445                                       bVar"b'8",bVar"b'7"]),
12446                                Mop(Cast(FTy 5),
12447                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
12448                                       bVar"b'16",bVar"b'15"]),
12449                                Mop(Cast(FTy 5),
12450                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
12451                                       bVar"b'21",bVar"b'20"]),
12452                                Mop(Cast(FTy 3),
12453                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
12454                      (Bop(And,Mop(Not,bVar"b'31"),
12455                           Bop(And,Mop(Not,bVar"b'30"),
12456                               Bop(And,Mop(Not,bVar"b'29"),
12457                                   Bop(And,Mop(Not,bVar"b'28"),
12458                                       Bop(And,bVar"b'27",
12459                                           Bop(And,Mop(Not,bVar"b'26"),
12460                                               Bop(And,
12461                                                   Mop(Not,bVar"b'25"),
12462                                                   Bop(And,
12463                                                       Mop(Not,bVar"b'5"),
12464                                                       Bop(And,bVar"b'4",
12465                                                           Bop(And,
12466                                                               Mop(Not,
12467                                                                   bVar"b'3"),
12468                                                               Mop(Not,
12469                                                                   bVar"b'2"))))))))))),
12470                       Call
12471                         ("FArith",CTy"instruction",
12472                          Call
12473                            ("FSUB_S",CTy"FArith",
12474                             TP[Mop(Cast(FTy 5),
12475                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
12476                                       bVar"b'8",bVar"b'7"]),
12477                                Mop(Cast(FTy 5),
12478                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
12479                                       bVar"b'16",bVar"b'15"]),
12480                                Mop(Cast(FTy 5),
12481                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
12482                                       bVar"b'21",bVar"b'20"]),
12483                                Mop(Cast(FTy 3),
12484                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
12485                      (Bop(And,Mop(Not,bVar"b'31"),
12486                           Bop(And,Mop(Not,bVar"b'30"),
12487                               Bop(And,Mop(Not,bVar"b'29"),
12488                                   Bop(And,bVar"b'28",
12489                                       Bop(And,Mop(Not,bVar"b'27"),
12490                                           Bop(And,Mop(Not,bVar"b'26"),
12491                                               Bop(And,
12492                                                   Mop(Not,bVar"b'25"),
12493                                                   Bop(And,
12494                                                       Mop(Not,bVar"b'5"),
12495                                                       Bop(And,bVar"b'4",
12496                                                           Bop(And,
12497                                                               Mop(Not,
12498                                                                   bVar"b'3"),
12499                                                               Mop(Not,
12500                                                                   bVar"b'2"))))))))))),
12501                       Call
12502                         ("FArith",CTy"instruction",
12503                          Call
12504                            ("FMUL_S",CTy"FArith",
12505                             TP[Mop(Cast(FTy 5),
12506                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
12507                                       bVar"b'8",bVar"b'7"]),
12508                                Mop(Cast(FTy 5),
12509                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
12510                                       bVar"b'16",bVar"b'15"]),
12511                                Mop(Cast(FTy 5),
12512                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
12513                                       bVar"b'21",bVar"b'20"]),
12514                                Mop(Cast(FTy 3),
12515                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
12516                      (Bop(And,Mop(Not,bVar"b'31"),
12517                           Bop(And,Mop(Not,bVar"b'30"),
12518                               Bop(And,Mop(Not,bVar"b'29"),
12519                                   Bop(And,bVar"b'28",
12520                                       Bop(And,bVar"b'27",
12521                                           Bop(And,Mop(Not,bVar"b'26"),
12522                                               Bop(And,
12523                                                   Mop(Not,bVar"b'25"),
12524                                                   Bop(And,
12525                                                       Mop(Not,bVar"b'5"),
12526                                                       Bop(And,bVar"b'4",
12527                                                           Bop(And,
12528                                                               Mop(Not,
12529                                                                   bVar"b'3"),
12530                                                               Mop(Not,
12531                                                                   bVar"b'2"))))))))))),
12532                       Call
12533                         ("FArith",CTy"instruction",
12534                          Call
12535                            ("FDIV_S",CTy"FArith",
12536                             TP[Mop(Cast(FTy 5),
12537                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
12538                                       bVar"b'8",bVar"b'7"]),
12539                                Mop(Cast(FTy 5),
12540                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
12541                                       bVar"b'16",bVar"b'15"]),
12542                                Mop(Cast(FTy 5),
12543                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
12544                                       bVar"b'21",bVar"b'20"]),
12545                                Mop(Cast(FTy 3),
12546                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
12547                      (Bop(And,Mop(Not,bVar"b'31"),
12548                           Bop(And,bVar"b'30",
12549                               Bop(And,Mop(Not,bVar"b'29"),
12550                                   Bop(And,bVar"b'28",
12551                                       Bop(And,bVar"b'27",
12552                                           Bop(And,Mop(Not,bVar"b'26"),
12553                                               Bop(And,
12554                                                   Mop(Not,bVar"b'25"),
12555                                                   Bop(And,
12556                                                       Mop(Not,bVar"b'24"),
12557                                                       Bop(And,
12558                                                           Mop(Not,
12559                                                               bVar"b'23"),
12560                                                           Bop(And,
12561                                                               Mop(Not,
12562                                                                   bVar"b'22"),
12563                                                               Bop(And,
12564                                                                   Mop(Not,
12565                                                                       bVar"b'21"),
12566                                                                   Bop(And,
12567                                                                       Mop(Not,
12568                                                                           bVar"b'20"),
12569                                                                       Bop(And,
12570                                                                           Mop(Not,
12571                                                                               bVar"b'5"),
12572                                                                           Bop(And,
12573                                                                               bVar"b'4",
12574                                                                               Bop(And,
12575                                                                                   Mop(Not,
12576                                                                                       bVar"b'3"),
12577                                                                                   Mop(Not,
12578                                                                                       bVar"b'2")))))))))))))))),
12579                       Call
12580                         ("FArith",CTy"instruction",
12581                          Call
12582                            ("FSQRT_S",CTy"FArith",
12583                             TP[Mop(Cast(FTy 5),
12584                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
12585                                       bVar"b'8",bVar"b'7"]),
12586                                Mop(Cast(FTy 5),
12587                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
12588                                       bVar"b'16",bVar"b'15"]),
12589                                Mop(Cast(FTy 3),
12590                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
12591                      (Bop(And,Mop(Not,bVar"b'31"),
12592                           Bop(And,Mop(Not,bVar"b'30"),
12593                               Bop(And,bVar"b'29",
12594                                   Bop(And,Mop(Not,bVar"b'28"),
12595                                       Bop(And,bVar"b'27",
12596                                           Bop(And,Mop(Not,bVar"b'26"),
12597                                               Bop(And,
12598                                                   Mop(Not,bVar"b'25"),
12599                                                   Bop(And,
12600                                                       Mop(Not,bVar"b'14"),
12601                                                       Bop(And,
12602                                                           Mop(Not,
12603                                                               bVar"b'13"),
12604                                                           Bop(And,
12605                                                               Mop(Not,
12606                                                                   bVar"b'12"),
12607                                                               Bop(And,
12608                                                                   Mop(Not,
12609                                                                       bVar"b'5"),
12610                                                                   Bop(And,
12611                                                                       bVar"b'4",
12612                                                                       Bop(And,
12613                                                                           Mop(Not,
12614                                                                               bVar"b'3"),
12615                                                                           Mop(Not,
12616                                                                               bVar"b'2")))))))))))))),
12617                       Call
12618                         ("FArith",CTy"instruction",
12619                          Call
12620                            ("FMIN_S",CTy"FArith",
12621                             TP[Mop(Cast(FTy 5),
12622                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
12623                                       bVar"b'8",bVar"b'7"]),
12624                                Mop(Cast(FTy 5),
12625                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
12626                                       bVar"b'16",bVar"b'15"]),
12627                                Mop(Cast(FTy 5),
12628                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
12629                                       bVar"b'21",bVar"b'20"])]))),
12630                      (Bop(And,Mop(Not,bVar"b'31"),
12631                           Bop(And,Mop(Not,bVar"b'30"),
12632                               Bop(And,bVar"b'29",
12633                                   Bop(And,Mop(Not,bVar"b'28"),
12634                                       Bop(And,bVar"b'27",
12635                                           Bop(And,Mop(Not,bVar"b'26"),
12636                                               Bop(And,
12637                                                   Mop(Not,bVar"b'25"),
12638                                                   Bop(And,
12639                                                       Mop(Not,bVar"b'14"),
12640                                                       Bop(And,
12641                                                           Mop(Not,
12642                                                               bVar"b'13"),
12643                                                           Bop(And,
12644                                                               bVar"b'12",
12645                                                               Bop(And,
12646                                                                   Mop(Not,
12647                                                                       bVar"b'5"),
12648                                                                   Bop(And,
12649                                                                       bVar"b'4",
12650                                                                       Bop(And,
12651                                                                           Mop(Not,
12652                                                                               bVar"b'3"),
12653                                                                           Mop(Not,
12654                                                                               bVar"b'2")))))))))))))),
12655                       Call
12656                         ("FArith",CTy"instruction",
12657                          Call
12658                            ("FMAX_S",CTy"FArith",
12659                             TP[Mop(Cast(FTy 5),
12660                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
12661                                       bVar"b'8",bVar"b'7"]),
12662                                Mop(Cast(FTy 5),
12663                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
12664                                       bVar"b'16",bVar"b'15"]),
12665                                Mop(Cast(FTy 5),
12666                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
12667                                       bVar"b'21",bVar"b'20"])]))),
12668                      (Bop(And,bVar"b'31",
12669                           Bop(And,Mop(Not,bVar"b'30"),
12670                               Bop(And,bVar"b'29",
12671                                   Bop(And,Mop(Not,bVar"b'28"),
12672                                       Bop(And,Mop(Not,bVar"b'27"),
12673                                           Bop(And,Mop(Not,bVar"b'26"),
12674                                               Bop(And,
12675                                                   Mop(Not,bVar"b'25"),
12676                                                   Bop(And,
12677                                                       Mop(Not,bVar"b'14"),
12678                                                       Bop(And,bVar"b'13",
12679                                                           Bop(And,
12680                                                               Mop(Not,
12681                                                                   bVar"b'12"),
12682                                                               Bop(And,
12683                                                                   Mop(Not,
12684                                                                       bVar"b'5"),
12685                                                                   Bop(And,
12686                                                                       bVar"b'4",
12687                                                                       Bop(And,
12688                                                                           Mop(Not,
12689                                                                               bVar"b'3"),
12690                                                                           Mop(Not,
12691                                                                               bVar"b'2")))))))))))))),
12692                       Call
12693                         ("FArith",CTy"instruction",
12694                          Call
12695                            ("FEQ_S",CTy"FArith",
12696                             TP[Mop(Cast(FTy 5),
12697                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
12698                                       bVar"b'8",bVar"b'7"]),
12699                                Mop(Cast(FTy 5),
12700                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
12701                                       bVar"b'16",bVar"b'15"]),
12702                                Mop(Cast(FTy 5),
12703                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
12704                                       bVar"b'21",bVar"b'20"])]))),
12705                      (Bop(And,bVar"b'31",
12706                           Bop(And,Mop(Not,bVar"b'30"),
12707                               Bop(And,bVar"b'29",
12708                                   Bop(And,Mop(Not,bVar"b'28"),
12709                                       Bop(And,Mop(Not,bVar"b'27"),
12710                                           Bop(And,Mop(Not,bVar"b'26"),
12711                                               Bop(And,
12712                                                   Mop(Not,bVar"b'25"),
12713                                                   Bop(And,
12714                                                       Mop(Not,bVar"b'14"),
12715                                                       Bop(And,
12716                                                           Mop(Not,
12717                                                               bVar"b'13"),
12718                                                           Bop(And,
12719                                                               bVar"b'12",
12720                                                               Bop(And,
12721                                                                   Mop(Not,
12722                                                                       bVar"b'5"),
12723                                                                   Bop(And,
12724                                                                       bVar"b'4",
12725                                                                       Bop(And,
12726                                                                           Mop(Not,
12727                                                                               bVar"b'3"),
12728                                                                           Mop(Not,
12729                                                                               bVar"b'2")))))))))))))),
12730                       Call
12731                         ("FArith",CTy"instruction",
12732                          Call
12733                            ("FLT_S",CTy"FArith",
12734                             TP[Mop(Cast(FTy 5),
12735                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
12736                                       bVar"b'8",bVar"b'7"]),
12737                                Mop(Cast(FTy 5),
12738                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
12739                                       bVar"b'16",bVar"b'15"]),
12740                                Mop(Cast(FTy 5),
12741                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
12742                                       bVar"b'21",bVar"b'20"])]))),
12743                      (Bop(And,bVar"b'31",
12744                           Bop(And,Mop(Not,bVar"b'30"),
12745                               Bop(And,bVar"b'29",
12746                                   Bop(And,Mop(Not,bVar"b'28"),
12747                                       Bop(And,Mop(Not,bVar"b'27"),
12748                                           Bop(And,Mop(Not,bVar"b'26"),
12749                                               Bop(And,
12750                                                   Mop(Not,bVar"b'25"),
12751                                                   Bop(And,
12752                                                       Mop(Not,bVar"b'14"),
12753                                                       Bop(And,
12754                                                           Mop(Not,
12755                                                               bVar"b'13"),
12756                                                           Bop(And,
12757                                                               Mop(Not,
12758                                                                   bVar"b'12"),
12759                                                               Bop(And,
12760                                                                   Mop(Not,
12761                                                                       bVar"b'5"),
12762                                                                   Bop(And,
12763                                                                       bVar"b'4",
12764                                                                       Bop(And,
12765                                                                           Mop(Not,
12766                                                                               bVar"b'3"),
12767                                                                           Mop(Not,
12768                                                                               bVar"b'2")))))))))))))),
12769                       Call
12770                         ("FArith",CTy"instruction",
12771                          Call
12772                            ("FLE_S",CTy"FArith",
12773                             TP[Mop(Cast(FTy 5),
12774                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
12775                                       bVar"b'8",bVar"b'7"]),
12776                                Mop(Cast(FTy 5),
12777                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
12778                                       bVar"b'16",bVar"b'15"]),
12779                                Mop(Cast(FTy 5),
12780                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
12781                                       bVar"b'21",bVar"b'20"])]))),
12782                      (Bop(And,Mop(Not,bVar"b'31"),
12783                           Bop(And,Mop(Not,bVar"b'30"),
12784                               Bop(And,bVar"b'29",
12785                                   Bop(And,Mop(Not,bVar"b'28"),
12786                                       Bop(And,Mop(Not,bVar"b'27"),
12787                                           Bop(And,Mop(Not,bVar"b'26"),
12788                                               Bop(And,
12789                                                   Mop(Not,bVar"b'25"),
12790                                                   Bop(And,
12791                                                       Mop(Not,bVar"b'14"),
12792                                                       Bop(And,
12793                                                           Mop(Not,
12794                                                               bVar"b'13"),
12795                                                           Bop(And,
12796                                                               Mop(Not,
12797                                                                   bVar"b'12"),
12798                                                               Bop(And,
12799                                                                   Mop(Not,
12800                                                                       bVar"b'5"),
12801                                                                   Bop(And,
12802                                                                       bVar"b'4",
12803                                                                       Bop(And,
12804                                                                           Mop(Not,
12805                                                                               bVar"b'3"),
12806                                                                           Mop(Not,
12807                                                                               bVar"b'2")))))))))))))),
12808                       Call
12809                         ("FConv",CTy"instruction",
12810                          Call
12811                            ("FSGNJ_S",CTy"FConv",
12812                             TP[Mop(Cast(FTy 5),
12813                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
12814                                       bVar"b'8",bVar"b'7"]),
12815                                Mop(Cast(FTy 5),
12816                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
12817                                       bVar"b'16",bVar"b'15"]),
12818                                Mop(Cast(FTy 5),
12819                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
12820                                       bVar"b'21",bVar"b'20"])]))),
12821                      (Bop(And,Mop(Not,bVar"b'31"),
12822                           Bop(And,Mop(Not,bVar"b'30"),
12823                               Bop(And,bVar"b'29",
12824                                   Bop(And,Mop(Not,bVar"b'28"),
12825                                       Bop(And,Mop(Not,bVar"b'27"),
12826                                           Bop(And,Mop(Not,bVar"b'26"),
12827                                               Bop(And,
12828                                                   Mop(Not,bVar"b'25"),
12829                                                   Bop(And,
12830                                                       Mop(Not,bVar"b'14"),
12831                                                       Bop(And,
12832                                                           Mop(Not,
12833                                                               bVar"b'13"),
12834                                                           Bop(And,
12835                                                               bVar"b'12",
12836                                                               Bop(And,
12837                                                                   Mop(Not,
12838                                                                       bVar"b'5"),
12839                                                                   Bop(And,
12840                                                                       bVar"b'4",
12841                                                                       Bop(And,
12842                                                                           Mop(Not,
12843                                                                               bVar"b'3"),
12844                                                                           Mop(Not,
12845                                                                               bVar"b'2")))))))))))))),
12846                       Call
12847                         ("FConv",CTy"instruction",
12848                          Call
12849                            ("FSGNJN_S",CTy"FConv",
12850                             TP[Mop(Cast(FTy 5),
12851                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
12852                                       bVar"b'8",bVar"b'7"]),
12853                                Mop(Cast(FTy 5),
12854                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
12855                                       bVar"b'16",bVar"b'15"]),
12856                                Mop(Cast(FTy 5),
12857                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
12858                                       bVar"b'21",bVar"b'20"])]))),
12859                      (Bop(And,Mop(Not,bVar"b'31"),
12860                           Bop(And,Mop(Not,bVar"b'30"),
12861                               Bop(And,bVar"b'29",
12862                                   Bop(And,Mop(Not,bVar"b'28"),
12863                                       Bop(And,Mop(Not,bVar"b'27"),
12864                                           Bop(And,Mop(Not,bVar"b'26"),
12865                                               Bop(And,
12866                                                   Mop(Not,bVar"b'25"),
12867                                                   Bop(And,
12868                                                       Mop(Not,bVar"b'14"),
12869                                                       Bop(And,bVar"b'13",
12870                                                           Bop(And,
12871                                                               Mop(Not,
12872                                                                   bVar"b'12"),
12873                                                               Bop(And,
12874                                                                   Mop(Not,
12875                                                                       bVar"b'5"),
12876                                                                   Bop(And,
12877                                                                       bVar"b'4",
12878                                                                       Bop(And,
12879                                                                           Mop(Not,
12880                                                                               bVar"b'3"),
12881                                                                           Mop(Not,
12882                                                                               bVar"b'2")))))))))))))),
12883                       Call
12884                         ("FConv",CTy"instruction",
12885                          Call
12886                            ("FSGNJX_S",CTy"FConv",
12887                             TP[Mop(Cast(FTy 5),
12888                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
12889                                       bVar"b'8",bVar"b'7"]),
12890                                Mop(Cast(FTy 5),
12891                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
12892                                       bVar"b'16",bVar"b'15"]),
12893                                Mop(Cast(FTy 5),
12894                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
12895                                       bVar"b'21",bVar"b'20"])]))),
12896                      (Bop(And,bVar"b'31",
12897                           Bop(And,bVar"b'30",
12898                               Bop(And,Mop(Not,bVar"b'29"),
12899                                   Bop(And,Mop(Not,bVar"b'28"),
12900                                       Bop(And,Mop(Not,bVar"b'27"),
12901                                           Bop(And,Mop(Not,bVar"b'26"),
12902                                               Bop(And,
12903                                                   Mop(Not,bVar"b'25"),
12904                                                   Bop(And,
12905                                                       Mop(Not,bVar"b'24"),
12906                                                       Bop(And,
12907                                                           Mop(Not,
12908                                                               bVar"b'23"),
12909                                                           Bop(And,
12910                                                               Mop(Not,
12911                                                                   bVar"b'22"),
12912                                                               Bop(And,
12913                                                                   Mop(Not,
12914                                                                       bVar"b'21"),
12915                                                                   Bop(And,
12916                                                                       Mop(Not,
12917                                                                           bVar"b'20"),
12918                                                                       Bop(And,
12919                                                                           Mop(Not,
12920                                                                               bVar"b'5"),
12921                                                                           Bop(And,
12922                                                                               bVar"b'4",
12923                                                                               Bop(And,
12924                                                                                   Mop(Not,
12925                                                                                       bVar"b'3"),
12926                                                                                   Mop(Not,
12927                                                                                       bVar"b'2")))))))))))))))),
12928                       Call
12929                         ("FConv",CTy"instruction",
12930                          Call
12931                            ("FCVT_W_S",CTy"FConv",
12932                             TP[Mop(Cast(FTy 5),
12933                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
12934                                       bVar"b'8",bVar"b'7"]),
12935                                Mop(Cast(FTy 5),
12936                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
12937                                       bVar"b'16",bVar"b'15"]),
12938                                Mop(Cast(FTy 3),
12939                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
12940                      (Bop(And,bVar"b'31",
12941                           Bop(And,bVar"b'30",
12942                               Bop(And,Mop(Not,bVar"b'29"),
12943                                   Bop(And,Mop(Not,bVar"b'28"),
12944                                       Bop(And,Mop(Not,bVar"b'27"),
12945                                           Bop(And,Mop(Not,bVar"b'26"),
12946                                               Bop(And,
12947                                                   Mop(Not,bVar"b'25"),
12948                                                   Bop(And,
12949                                                       Mop(Not,bVar"b'24"),
12950                                                       Bop(And,
12951                                                           Mop(Not,
12952                                                               bVar"b'23"),
12953                                                           Bop(And,
12954                                                               Mop(Not,
12955                                                                   bVar"b'22"),
12956                                                               Bop(And,
12957                                                                   Mop(Not,
12958                                                                       bVar"b'21"),
12959                                                                   Bop(And,
12960                                                                       bVar"b'20",
12961                                                                       Bop(And,
12962                                                                           Mop(Not,
12963                                                                               bVar"b'5"),
12964                                                                           Bop(And,
12965                                                                               bVar"b'4",
12966                                                                               Bop(And,
12967                                                                                   Mop(Not,
12968                                                                                       bVar"b'3"),
12969                                                                                   Mop(Not,
12970                                                                                       bVar"b'2")))))))))))))))),
12971                       Call
12972                         ("FConv",CTy"instruction",
12973                          Call
12974                            ("FCVT_WU_S",CTy"FConv",
12975                             TP[Mop(Cast(FTy 5),
12976                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
12977                                       bVar"b'8",bVar"b'7"]),
12978                                Mop(Cast(FTy 5),
12979                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
12980                                       bVar"b'16",bVar"b'15"]),
12981                                Mop(Cast(FTy 3),
12982                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
12983                      (Bop(And,bVar"b'31",
12984                           Bop(And,bVar"b'30",
12985                               Bop(And,bVar"b'29",
12986                                   Bop(And,Mop(Not,bVar"b'28"),
12987                                       Bop(And,Mop(Not,bVar"b'27"),
12988                                           Bop(And,Mop(Not,bVar"b'26"),
12989                                               Bop(And,
12990                                                   Mop(Not,bVar"b'25"),
12991                                                   Bop(And,
12992                                                       Mop(Not,bVar"b'24"),
12993                                                       Bop(And,
12994                                                           Mop(Not,
12995                                                               bVar"b'23"),
12996                                                           Bop(And,
12997                                                               Mop(Not,
12998                                                                   bVar"b'22"),
12999                                                               Bop(And,
13000                                                                   Mop(Not,
13001                                                                       bVar"b'21"),
13002                                                                   Bop(And,
13003                                                                       Mop(Not,
13004                                                                           bVar"b'20"),
13005                                                                       Bop(And,
13006                                                                           Mop(Not,
13007                                                                               bVar"b'14"),
13008                                                                           Bop(And,
13009                                                                               Mop(Not,
13010                                                                                   bVar"b'13"),
13011                                                                               Bop(And,
13012                                                                                   Mop(Not,
13013                                                                                       bVar"b'12"),
13014                                                                                   Bop(And,
13015                                                                                       Mop(Not,
13016                                                                                           bVar"b'5"),
13017                                                                                       Bop(And,
13018                                                                                           bVar"b'4",
13019                                                                                           Bop(And,
13020                                                                                               Mop(Not,
13021                                                                                                   bVar"b'3"),
13022                                                                                               Mop(Not,
13023                                                                                                   bVar"b'2"))))))))))))))))))),
13024                       Call
13025                         ("FConv",CTy"instruction",
13026                          Call
13027                            ("FMV_X_S",CTy"FConv",
13028                             TP[Mop(Cast(FTy 5),
13029                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
13030                                       bVar"b'8",bVar"b'7"]),
13031                                Mop(Cast(FTy 5),
13032                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
13033                                       bVar"b'16",bVar"b'15"])]))),
13034                      (Bop(And,bVar"b'31",
13035                           Bop(And,bVar"b'30",
13036                               Bop(And,bVar"b'29",
13037                                   Bop(And,Mop(Not,bVar"b'28"),
13038                                       Bop(And,Mop(Not,bVar"b'27"),
13039                                           Bop(And,Mop(Not,bVar"b'26"),
13040                                               Bop(And,
13041                                                   Mop(Not,bVar"b'25"),
13042                                                   Bop(And,
13043                                                       Mop(Not,bVar"b'24"),
13044                                                       Bop(And,
13045                                                           Mop(Not,
13046                                                               bVar"b'23"),
13047                                                           Bop(And,
13048                                                               Mop(Not,
13049                                                                   bVar"b'22"),
13050                                                               Bop(And,
13051                                                                   Mop(Not,
13052                                                                       bVar"b'21"),
13053                                                                   Bop(And,
13054                                                                       Mop(Not,
13055                                                                           bVar"b'20"),
13056                                                                       Bop(And,
13057                                                                           Mop(Not,
13058                                                                               bVar"b'14"),
13059                                                                           Bop(And,
13060                                                                               Mop(Not,
13061                                                                                   bVar"b'13"),
13062                                                                               Bop(And,
13063                                                                                   bVar"b'12",
13064                                                                                   Bop(And,
13065                                                                                       Mop(Not,
13066                                                                                           bVar"b'5"),
13067                                                                                       Bop(And,
13068                                                                                           bVar"b'4",
13069                                                                                           Bop(And,
13070                                                                                               Mop(Not,
13071                                                                                                   bVar"b'3"),
13072                                                                                               Mop(Not,
13073                                                                                                   bVar"b'2"))))))))))))))))))),
13074                       Call
13075                         ("FConv",CTy"instruction",
13076                          Call
13077                            ("FCLASS_S",CTy"FConv",
13078                             TP[Mop(Cast(FTy 5),
13079                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
13080                                       bVar"b'8",bVar"b'7"]),
13081                                Mop(Cast(FTy 5),
13082                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
13083                                       bVar"b'16",bVar"b'15"])]))),
13084                      (Bop(And,bVar"b'31",
13085                           Bop(And,bVar"b'30",
13086                               Bop(And,Mop(Not,bVar"b'29"),
13087                                   Bop(And,bVar"b'28",
13088                                       Bop(And,Mop(Not,bVar"b'27"),
13089                                           Bop(And,Mop(Not,bVar"b'26"),
13090                                               Bop(And,
13091                                                   Mop(Not,bVar"b'25"),
13092                                                   Bop(And,
13093                                                       Mop(Not,bVar"b'24"),
13094                                                       Bop(And,
13095                                                           Mop(Not,
13096                                                               bVar"b'23"),
13097                                                           Bop(And,
13098                                                               Mop(Not,
13099                                                                   bVar"b'22"),
13100                                                               Bop(And,
13101                                                                   Mop(Not,
13102                                                                       bVar"b'21"),
13103                                                                   Bop(And,
13104                                                                       Mop(Not,
13105                                                                           bVar"b'20"),
13106                                                                       Bop(And,
13107                                                                           Mop(Not,
13108                                                                               bVar"b'5"),
13109                                                                           Bop(And,
13110                                                                               bVar"b'4",
13111                                                                               Bop(And,
13112                                                                                   Mop(Not,
13113                                                                                       bVar"b'3"),
13114                                                                                   Mop(Not,
13115                                                                                       bVar"b'2")))))))))))))))),
13116                       Call
13117                         ("FConv",CTy"instruction",
13118                          Call
13119                            ("FCVT_S_W",CTy"FConv",
13120                             TP[Mop(Cast(FTy 5),
13121                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
13122                                       bVar"b'8",bVar"b'7"]),
13123                                Mop(Cast(FTy 5),
13124                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
13125                                       bVar"b'16",bVar"b'15"]),
13126                                Mop(Cast(FTy 3),
13127                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
13128                      (Bop(And,bVar"b'31",
13129                           Bop(And,bVar"b'30",
13130                               Bop(And,Mop(Not,bVar"b'29"),
13131                                   Bop(And,bVar"b'28",
13132                                       Bop(And,Mop(Not,bVar"b'27"),
13133                                           Bop(And,Mop(Not,bVar"b'26"),
13134                                               Bop(And,
13135                                                   Mop(Not,bVar"b'25"),
13136                                                   Bop(And,
13137                                                       Mop(Not,bVar"b'24"),
13138                                                       Bop(And,
13139                                                           Mop(Not,
13140                                                               bVar"b'23"),
13141                                                           Bop(And,
13142                                                               Mop(Not,
13143                                                                   bVar"b'22"),
13144                                                               Bop(And,
13145                                                                   Mop(Not,
13146                                                                       bVar"b'21"),
13147                                                                   Bop(And,
13148                                                                       bVar"b'20",
13149                                                                       Bop(And,
13150                                                                           Mop(Not,
13151                                                                               bVar"b'5"),
13152                                                                           Bop(And,
13153                                                                               bVar"b'4",
13154                                                                               Bop(And,
13155                                                                                   Mop(Not,
13156                                                                                       bVar"b'3"),
13157                                                                                   Mop(Not,
13158                                                                                       bVar"b'2")))))))))))))))),
13159                       Call
13160                         ("FConv",CTy"instruction",
13161                          Call
13162                            ("FCVT_S_WU",CTy"FConv",
13163                             TP[Mop(Cast(FTy 5),
13164                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
13165                                       bVar"b'8",bVar"b'7"]),
13166                                Mop(Cast(FTy 5),
13167                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
13168                                       bVar"b'16",bVar"b'15"]),
13169                                Mop(Cast(FTy 3),
13170                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
13171                      (Bop(And,bVar"b'31",
13172                           Bop(And,bVar"b'30",
13173                               Bop(And,bVar"b'29",
13174                                   Bop(And,bVar"b'28",
13175                                       Bop(And,Mop(Not,bVar"b'27"),
13176                                           Bop(And,Mop(Not,bVar"b'26"),
13177                                               Bop(And,
13178                                                   Mop(Not,bVar"b'25"),
13179                                                   Bop(And,
13180                                                       Mop(Not,bVar"b'24"),
13181                                                       Bop(And,
13182                                                           Mop(Not,
13183                                                               bVar"b'23"),
13184                                                           Bop(And,
13185                                                               Mop(Not,
13186                                                                   bVar"b'22"),
13187                                                               Bop(And,
13188                                                                   Mop(Not,
13189                                                                       bVar"b'21"),
13190                                                                   Bop(And,
13191                                                                       Mop(Not,
13192                                                                           bVar"b'20"),
13193                                                                       Bop(And,
13194                                                                           Mop(Not,
13195                                                                               bVar"b'14"),
13196                                                                           Bop(And,
13197                                                                               Mop(Not,
13198                                                                                   bVar"b'13"),
13199                                                                               Bop(And,
13200                                                                                   Mop(Not,
13201                                                                                       bVar"b'12"),
13202                                                                                   Bop(And,
13203                                                                                       Mop(Not,
13204                                                                                           bVar"b'5"),
13205                                                                                       Bop(And,
13206                                                                                           bVar"b'4",
13207                                                                                           Bop(And,
13208                                                                                               Mop(Not,
13209                                                                                                   bVar"b'3"),
13210                                                                                               Mop(Not,
13211                                                                                                   bVar"b'2"))))))))))))))))))),
13212                       Call
13213                         ("FConv",CTy"instruction",
13214                          Call
13215                            ("FMV_S_X",CTy"FConv",
13216                             TP[Mop(Cast(FTy 5),
13217                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
13218                                       bVar"b'8",bVar"b'7"]),
13219                                Mop(Cast(FTy 5),
13220                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
13221                                       bVar"b'16",bVar"b'15"])]))),
13222                      (Bop(And,Mop(Not,bVar"b'26"),
13223                           Bop(And,bVar"b'25",
13224                               Bop(And,Mop(Not,bVar"b'5"),
13225                                   Bop(And,Mop(Not,bVar"b'4"),
13226                                       Bop(And,Mop(Not,bVar"b'3"),
13227                                           Mop(Not,bVar"b'2")))))),
13228                       Call
13229                         ("FArith",CTy"instruction",
13230                          Call
13231                            ("FMADD_D",CTy"FArith",
13232                             TP[Mop(Cast(FTy 5),
13233                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
13234                                       bVar"b'8",bVar"b'7"]),
13235                                Mop(Cast(FTy 5),
13236                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
13237                                       bVar"b'16",bVar"b'15"]),
13238                                Mop(Cast(FTy 5),
13239                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
13240                                       bVar"b'21",bVar"b'20"]),
13241                                Mop(Cast(FTy 5),
13242                                    LL[bVar"b'31",bVar"b'30",bVar"b'29",
13243                                       bVar"b'28",bVar"b'27"]),
13244                                Mop(Cast(FTy 3),
13245                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
13246                      (Bop(And,Mop(Not,bVar"b'26"),
13247                           Bop(And,bVar"b'25",
13248                               Bop(And,Mop(Not,bVar"b'5"),
13249                                   Bop(And,Mop(Not,bVar"b'4"),
13250                                       Bop(And,Mop(Not,bVar"b'3"),
13251                                           bVar"b'2"))))),
13252                       Call
13253                         ("FArith",CTy"instruction",
13254                          Call
13255                            ("FMSUB_D",CTy"FArith",
13256                             TP[Mop(Cast(FTy 5),
13257                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
13258                                       bVar"b'8",bVar"b'7"]),
13259                                Mop(Cast(FTy 5),
13260                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
13261                                       bVar"b'16",bVar"b'15"]),
13262                                Mop(Cast(FTy 5),
13263                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
13264                                       bVar"b'21",bVar"b'20"]),
13265                                Mop(Cast(FTy 5),
13266                                    LL[bVar"b'31",bVar"b'30",bVar"b'29",
13267                                       bVar"b'28",bVar"b'27"]),
13268                                Mop(Cast(FTy 3),
13269                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
13270                      (Bop(And,Mop(Not,bVar"b'26"),
13271                           Bop(And,bVar"b'25",
13272                               Bop(And,Mop(Not,bVar"b'5"),
13273                                   Bop(And,Mop(Not,bVar"b'4"),
13274                                       Bop(And,bVar"b'3",
13275                                           Mop(Not,bVar"b'2")))))),
13276                       Call
13277                         ("FArith",CTy"instruction",
13278                          Call
13279                            ("FNMSUB_D",CTy"FArith",
13280                             TP[Mop(Cast(FTy 5),
13281                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
13282                                       bVar"b'8",bVar"b'7"]),
13283                                Mop(Cast(FTy 5),
13284                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
13285                                       bVar"b'16",bVar"b'15"]),
13286                                Mop(Cast(FTy 5),
13287                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
13288                                       bVar"b'21",bVar"b'20"]),
13289                                Mop(Cast(FTy 5),
13290                                    LL[bVar"b'31",bVar"b'30",bVar"b'29",
13291                                       bVar"b'28",bVar"b'27"]),
13292                                Mop(Cast(FTy 3),
13293                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
13294                      (Bop(And,Mop(Not,bVar"b'26"),
13295                           Bop(And,bVar"b'25",
13296                               Bop(And,Mop(Not,bVar"b'5"),
13297                                   Bop(And,Mop(Not,bVar"b'4"),
13298                                       Bop(And,bVar"b'3",bVar"b'2"))))),
13299                       Call
13300                         ("FArith",CTy"instruction",
13301                          Call
13302                            ("FNMADD_D",CTy"FArith",
13303                             TP[Mop(Cast(FTy 5),
13304                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
13305                                       bVar"b'8",bVar"b'7"]),
13306                                Mop(Cast(FTy 5),
13307                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
13308                                       bVar"b'16",bVar"b'15"]),
13309                                Mop(Cast(FTy 5),
13310                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
13311                                       bVar"b'21",bVar"b'20"]),
13312                                Mop(Cast(FTy 5),
13313                                    LL[bVar"b'31",bVar"b'30",bVar"b'29",
13314                                       bVar"b'28",bVar"b'27"]),
13315                                Mop(Cast(FTy 3),
13316                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
13317                      (Bop(And,Mop(Not,bVar"b'31"),
13318                           Bop(And,Mop(Not,bVar"b'30"),
13319                               Bop(And,Mop(Not,bVar"b'29"),
13320                                   Bop(And,Mop(Not,bVar"b'28"),
13321                                       Bop(And,Mop(Not,bVar"b'27"),
13322                                           Bop(And,Mop(Not,bVar"b'26"),
13323                                               Bop(And,bVar"b'25",
13324                                                   Bop(And,
13325                                                       Mop(Not,bVar"b'5"),
13326                                                       Bop(And,bVar"b'4",
13327                                                           Bop(And,
13328                                                               Mop(Not,
13329                                                                   bVar"b'3"),
13330                                                               Mop(Not,
13331                                                                   bVar"b'2"))))))))))),
13332                       Call
13333                         ("FArith",CTy"instruction",
13334                          Call
13335                            ("FADD_D",CTy"FArith",
13336                             TP[Mop(Cast(FTy 5),
13337                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
13338                                       bVar"b'8",bVar"b'7"]),
13339                                Mop(Cast(FTy 5),
13340                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
13341                                       bVar"b'16",bVar"b'15"]),
13342                                Mop(Cast(FTy 5),
13343                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
13344                                       bVar"b'21",bVar"b'20"]),
13345                                Mop(Cast(FTy 3),
13346                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
13347                      (Bop(And,Mop(Not,bVar"b'31"),
13348                           Bop(And,Mop(Not,bVar"b'30"),
13349                               Bop(And,Mop(Not,bVar"b'29"),
13350                                   Bop(And,Mop(Not,bVar"b'28"),
13351                                       Bop(And,bVar"b'27",
13352                                           Bop(And,Mop(Not,bVar"b'26"),
13353                                               Bop(And,bVar"b'25",
13354                                                   Bop(And,
13355                                                       Mop(Not,bVar"b'5"),
13356                                                       Bop(And,bVar"b'4",
13357                                                           Bop(And,
13358                                                               Mop(Not,
13359                                                                   bVar"b'3"),
13360                                                               Mop(Not,
13361                                                                   bVar"b'2"))))))))))),
13362                       Call
13363                         ("FArith",CTy"instruction",
13364                          Call
13365                            ("FSUB_D",CTy"FArith",
13366                             TP[Mop(Cast(FTy 5),
13367                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
13368                                       bVar"b'8",bVar"b'7"]),
13369                                Mop(Cast(FTy 5),
13370                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
13371                                       bVar"b'16",bVar"b'15"]),
13372                                Mop(Cast(FTy 5),
13373                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
13374                                       bVar"b'21",bVar"b'20"]),
13375                                Mop(Cast(FTy 3),
13376                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
13377                      (Bop(And,Mop(Not,bVar"b'31"),
13378                           Bop(And,Mop(Not,bVar"b'30"),
13379                               Bop(And,Mop(Not,bVar"b'29"),
13380                                   Bop(And,bVar"b'28",
13381                                       Bop(And,Mop(Not,bVar"b'27"),
13382                                           Bop(And,Mop(Not,bVar"b'26"),
13383                                               Bop(And,bVar"b'25",
13384                                                   Bop(And,
13385                                                       Mop(Not,bVar"b'5"),
13386                                                       Bop(And,bVar"b'4",
13387                                                           Bop(And,
13388                                                               Mop(Not,
13389                                                                   bVar"b'3"),
13390                                                               Mop(Not,
13391                                                                   bVar"b'2"))))))))))),
13392                       Call
13393                         ("FArith",CTy"instruction",
13394                          Call
13395                            ("FMUL_D",CTy"FArith",
13396                             TP[Mop(Cast(FTy 5),
13397                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
13398                                       bVar"b'8",bVar"b'7"]),
13399                                Mop(Cast(FTy 5),
13400                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
13401                                       bVar"b'16",bVar"b'15"]),
13402                                Mop(Cast(FTy 5),
13403                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
13404                                       bVar"b'21",bVar"b'20"]),
13405                                Mop(Cast(FTy 3),
13406                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
13407                      (Bop(And,Mop(Not,bVar"b'31"),
13408                           Bop(And,Mop(Not,bVar"b'30"),
13409                               Bop(And,Mop(Not,bVar"b'29"),
13410                                   Bop(And,bVar"b'28",
13411                                       Bop(And,bVar"b'27",
13412                                           Bop(And,Mop(Not,bVar"b'26"),
13413                                               Bop(And,bVar"b'25",
13414                                                   Bop(And,
13415                                                       Mop(Not,bVar"b'5"),
13416                                                       Bop(And,bVar"b'4",
13417                                                           Bop(And,
13418                                                               Mop(Not,
13419                                                                   bVar"b'3"),
13420                                                               Mop(Not,
13421                                                                   bVar"b'2"))))))))))),
13422                       Call
13423                         ("FArith",CTy"instruction",
13424                          Call
13425                            ("FDIV_D",CTy"FArith",
13426                             TP[Mop(Cast(FTy 5),
13427                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
13428                                       bVar"b'8",bVar"b'7"]),
13429                                Mop(Cast(FTy 5),
13430                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
13431                                       bVar"b'16",bVar"b'15"]),
13432                                Mop(Cast(FTy 5),
13433                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
13434                                       bVar"b'21",bVar"b'20"]),
13435                                Mop(Cast(FTy 3),
13436                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
13437                      (Bop(And,Mop(Not,bVar"b'31"),
13438                           Bop(And,bVar"b'30",
13439                               Bop(And,Mop(Not,bVar"b'29"),
13440                                   Bop(And,bVar"b'28",
13441                                       Bop(And,bVar"b'27",
13442                                           Bop(And,Mop(Not,bVar"b'26"),
13443                                               Bop(And,bVar"b'25",
13444                                                   Bop(And,
13445                                                       Mop(Not,bVar"b'24"),
13446                                                       Bop(And,
13447                                                           Mop(Not,
13448                                                               bVar"b'23"),
13449                                                           Bop(And,
13450                                                               Mop(Not,
13451                                                                   bVar"b'22"),
13452                                                               Bop(And,
13453                                                                   Mop(Not,
13454                                                                       bVar"b'21"),
13455                                                                   Bop(And,
13456                                                                       Mop(Not,
13457                                                                           bVar"b'20"),
13458                                                                       Bop(And,
13459                                                                           Mop(Not,
13460                                                                               bVar"b'5"),
13461                                                                           Bop(And,
13462                                                                               bVar"b'4",
13463                                                                               Bop(And,
13464                                                                                   Mop(Not,
13465                                                                                       bVar"b'3"),
13466                                                                                   Mop(Not,
13467                                                                                       bVar"b'2")))))))))))))))),
13468                       Call
13469                         ("FArith",CTy"instruction",
13470                          Call
13471                            ("FSQRT_D",CTy"FArith",
13472                             TP[Mop(Cast(FTy 5),
13473                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
13474                                       bVar"b'8",bVar"b'7"]),
13475                                Mop(Cast(FTy 5),
13476                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
13477                                       bVar"b'16",bVar"b'15"]),
13478                                Mop(Cast(FTy 3),
13479                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
13480                      (Bop(And,Mop(Not,bVar"b'31"),
13481                           Bop(And,Mop(Not,bVar"b'30"),
13482                               Bop(And,bVar"b'29",
13483                                   Bop(And,Mop(Not,bVar"b'28"),
13484                                       Bop(And,bVar"b'27",
13485                                           Bop(And,Mop(Not,bVar"b'26"),
13486                                               Bop(And,bVar"b'25",
13487                                                   Bop(And,
13488                                                       Mop(Not,bVar"b'14"),
13489                                                       Bop(And,
13490                                                           Mop(Not,
13491                                                               bVar"b'13"),
13492                                                           Bop(And,
13493                                                               Mop(Not,
13494                                                                   bVar"b'12"),
13495                                                               Bop(And,
13496                                                                   Mop(Not,
13497                                                                       bVar"b'5"),
13498                                                                   Bop(And,
13499                                                                       bVar"b'4",
13500                                                                       Bop(And,
13501                                                                           Mop(Not,
13502                                                                               bVar"b'3"),
13503                                                                           Mop(Not,
13504                                                                               bVar"b'2")))))))))))))),
13505                       Call
13506                         ("FArith",CTy"instruction",
13507                          Call
13508                            ("FMIN_D",CTy"FArith",
13509                             TP[Mop(Cast(FTy 5),
13510                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
13511                                       bVar"b'8",bVar"b'7"]),
13512                                Mop(Cast(FTy 5),
13513                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
13514                                       bVar"b'16",bVar"b'15"]),
13515                                Mop(Cast(FTy 5),
13516                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
13517                                       bVar"b'21",bVar"b'20"])]))),
13518                      (Bop(And,Mop(Not,bVar"b'31"),
13519                           Bop(And,Mop(Not,bVar"b'30"),
13520                               Bop(And,bVar"b'29",
13521                                   Bop(And,Mop(Not,bVar"b'28"),
13522                                       Bop(And,bVar"b'27",
13523                                           Bop(And,Mop(Not,bVar"b'26"),
13524                                               Bop(And,bVar"b'25",
13525                                                   Bop(And,
13526                                                       Mop(Not,bVar"b'14"),
13527                                                       Bop(And,
13528                                                           Mop(Not,
13529                                                               bVar"b'13"),
13530                                                           Bop(And,
13531                                                               bVar"b'12",
13532                                                               Bop(And,
13533                                                                   Mop(Not,
13534                                                                       bVar"b'5"),
13535                                                                   Bop(And,
13536                                                                       bVar"b'4",
13537                                                                       Bop(And,
13538                                                                           Mop(Not,
13539                                                                               bVar"b'3"),
13540                                                                           Mop(Not,
13541                                                                               bVar"b'2")))))))))))))),
13542                       Call
13543                         ("FArith",CTy"instruction",
13544                          Call
13545                            ("FMAX_D",CTy"FArith",
13546                             TP[Mop(Cast(FTy 5),
13547                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
13548                                       bVar"b'8",bVar"b'7"]),
13549                                Mop(Cast(FTy 5),
13550                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
13551                                       bVar"b'16",bVar"b'15"]),
13552                                Mop(Cast(FTy 5),
13553                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
13554                                       bVar"b'21",bVar"b'20"])]))),
13555                      (Bop(And,bVar"b'31",
13556                           Bop(And,Mop(Not,bVar"b'30"),
13557                               Bop(And,bVar"b'29",
13558                                   Bop(And,Mop(Not,bVar"b'28"),
13559                                       Bop(And,Mop(Not,bVar"b'27"),
13560                                           Bop(And,Mop(Not,bVar"b'26"),
13561                                               Bop(And,bVar"b'25",
13562                                                   Bop(And,
13563                                                       Mop(Not,bVar"b'14"),
13564                                                       Bop(And,bVar"b'13",
13565                                                           Bop(And,
13566                                                               Mop(Not,
13567                                                                   bVar"b'12"),
13568                                                               Bop(And,
13569                                                                   Mop(Not,
13570                                                                       bVar"b'5"),
13571                                                                   Bop(And,
13572                                                                       bVar"b'4",
13573                                                                       Bop(And,
13574                                                                           Mop(Not,
13575                                                                               bVar"b'3"),
13576                                                                           Mop(Not,
13577                                                                               bVar"b'2")))))))))))))),
13578                       Call
13579                         ("FArith",CTy"instruction",
13580                          Call
13581                            ("FEQ_D",CTy"FArith",
13582                             TP[Mop(Cast(FTy 5),
13583                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
13584                                       bVar"b'8",bVar"b'7"]),
13585                                Mop(Cast(FTy 5),
13586                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
13587                                       bVar"b'16",bVar"b'15"]),
13588                                Mop(Cast(FTy 5),
13589                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
13590                                       bVar"b'21",bVar"b'20"])]))),
13591                      (Bop(And,bVar"b'31",
13592                           Bop(And,Mop(Not,bVar"b'30"),
13593                               Bop(And,bVar"b'29",
13594                                   Bop(And,Mop(Not,bVar"b'28"),
13595                                       Bop(And,Mop(Not,bVar"b'27"),
13596                                           Bop(And,Mop(Not,bVar"b'26"),
13597                                               Bop(And,bVar"b'25",
13598                                                   Bop(And,
13599                                                       Mop(Not,bVar"b'14"),
13600                                                       Bop(And,
13601                                                           Mop(Not,
13602                                                               bVar"b'13"),
13603                                                           Bop(And,
13604                                                               bVar"b'12",
13605                                                               Bop(And,
13606                                                                   Mop(Not,
13607                                                                       bVar"b'5"),
13608                                                                   Bop(And,
13609                                                                       bVar"b'4",
13610                                                                       Bop(And,
13611                                                                           Mop(Not,
13612                                                                               bVar"b'3"),
13613                                                                           Mop(Not,
13614                                                                               bVar"b'2")))))))))))))),
13615                       Call
13616                         ("FArith",CTy"instruction",
13617                          Call
13618                            ("FLT_D",CTy"FArith",
13619                             TP[Mop(Cast(FTy 5),
13620                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
13621                                       bVar"b'8",bVar"b'7"]),
13622                                Mop(Cast(FTy 5),
13623                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
13624                                       bVar"b'16",bVar"b'15"]),
13625                                Mop(Cast(FTy 5),
13626                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
13627                                       bVar"b'21",bVar"b'20"])]))),
13628                      (Bop(And,bVar"b'31",
13629                           Bop(And,Mop(Not,bVar"b'30"),
13630                               Bop(And,bVar"b'29",
13631                                   Bop(And,Mop(Not,bVar"b'28"),
13632                                       Bop(And,Mop(Not,bVar"b'27"),
13633                                           Bop(And,Mop(Not,bVar"b'26"),
13634                                               Bop(And,bVar"b'25",
13635                                                   Bop(And,
13636                                                       Mop(Not,bVar"b'14"),
13637                                                       Bop(And,
13638                                                           Mop(Not,
13639                                                               bVar"b'13"),
13640                                                           Bop(And,
13641                                                               Mop(Not,
13642                                                                   bVar"b'12"),
13643                                                               Bop(And,
13644                                                                   Mop(Not,
13645                                                                       bVar"b'5"),
13646                                                                   Bop(And,
13647                                                                       bVar"b'4",
13648                                                                       Bop(And,
13649                                                                           Mop(Not,
13650                                                                               bVar"b'3"),
13651                                                                           Mop(Not,
13652                                                                               bVar"b'2")))))))))))))),
13653                       Call
13654                         ("FArith",CTy"instruction",
13655                          Call
13656                            ("FLE_D",CTy"FArith",
13657                             TP[Mop(Cast(FTy 5),
13658                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
13659                                       bVar"b'8",bVar"b'7"]),
13660                                Mop(Cast(FTy 5),
13661                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
13662                                       bVar"b'16",bVar"b'15"]),
13663                                Mop(Cast(FTy 5),
13664                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
13665                                       bVar"b'21",bVar"b'20"])]))),
13666                      (Bop(And,Mop(Not,bVar"b'31"),
13667                           Bop(And,Mop(Not,bVar"b'30"),
13668                               Bop(And,bVar"b'29",
13669                                   Bop(And,Mop(Not,bVar"b'28"),
13670                                       Bop(And,Mop(Not,bVar"b'27"),
13671                                           Bop(And,Mop(Not,bVar"b'26"),
13672                                               Bop(And,bVar"b'25",
13673                                                   Bop(And,
13674                                                       Mop(Not,bVar"b'14"),
13675                                                       Bop(And,
13676                                                           Mop(Not,
13677                                                               bVar"b'13"),
13678                                                           Bop(And,
13679                                                               Mop(Not,
13680                                                                   bVar"b'12"),
13681                                                               Bop(And,
13682                                                                   Mop(Not,
13683                                                                       bVar"b'5"),
13684                                                                   Bop(And,
13685                                                                       bVar"b'4",
13686                                                                       Bop(And,
13687                                                                           Mop(Not,
13688                                                                               bVar"b'3"),
13689                                                                           Mop(Not,
13690                                                                               bVar"b'2")))))))))))))),
13691                       Call
13692                         ("FConv",CTy"instruction",
13693                          Call
13694                            ("FSGNJ_D",CTy"FConv",
13695                             TP[Mop(Cast(FTy 5),
13696                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
13697                                       bVar"b'8",bVar"b'7"]),
13698                                Mop(Cast(FTy 5),
13699                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
13700                                       bVar"b'16",bVar"b'15"]),
13701                                Mop(Cast(FTy 5),
13702                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
13703                                       bVar"b'21",bVar"b'20"])]))),
13704                      (Bop(And,Mop(Not,bVar"b'31"),
13705                           Bop(And,Mop(Not,bVar"b'30"),
13706                               Bop(And,bVar"b'29",
13707                                   Bop(And,Mop(Not,bVar"b'28"),
13708                                       Bop(And,Mop(Not,bVar"b'27"),
13709                                           Bop(And,Mop(Not,bVar"b'26"),
13710                                               Bop(And,bVar"b'25",
13711                                                   Bop(And,
13712                                                       Mop(Not,bVar"b'14"),
13713                                                       Bop(And,
13714                                                           Mop(Not,
13715                                                               bVar"b'13"),
13716                                                           Bop(And,
13717                                                               bVar"b'12",
13718                                                               Bop(And,
13719                                                                   Mop(Not,
13720                                                                       bVar"b'5"),
13721                                                                   Bop(And,
13722                                                                       bVar"b'4",
13723                                                                       Bop(And,
13724                                                                           Mop(Not,
13725                                                                               bVar"b'3"),
13726                                                                           Mop(Not,
13727                                                                               bVar"b'2")))))))))))))),
13728                       Call
13729                         ("FConv",CTy"instruction",
13730                          Call
13731                            ("FSGNJN_D",CTy"FConv",
13732                             TP[Mop(Cast(FTy 5),
13733                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
13734                                       bVar"b'8",bVar"b'7"]),
13735                                Mop(Cast(FTy 5),
13736                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
13737                                       bVar"b'16",bVar"b'15"]),
13738                                Mop(Cast(FTy 5),
13739                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
13740                                       bVar"b'21",bVar"b'20"])]))),
13741                      (Bop(And,Mop(Not,bVar"b'31"),
13742                           Bop(And,Mop(Not,bVar"b'30"),
13743                               Bop(And,bVar"b'29",
13744                                   Bop(And,Mop(Not,bVar"b'28"),
13745                                       Bop(And,Mop(Not,bVar"b'27"),
13746                                           Bop(And,Mop(Not,bVar"b'26"),
13747                                               Bop(And,bVar"b'25",
13748                                                   Bop(And,
13749                                                       Mop(Not,bVar"b'14"),
13750                                                       Bop(And,bVar"b'13",
13751                                                           Bop(And,
13752                                                               Mop(Not,
13753                                                                   bVar"b'12"),
13754                                                               Bop(And,
13755                                                                   Mop(Not,
13756                                                                       bVar"b'5"),
13757                                                                   Bop(And,
13758                                                                       bVar"b'4",
13759                                                                       Bop(And,
13760                                                                           Mop(Not,
13761                                                                               bVar"b'3"),
13762                                                                           Mop(Not,
13763                                                                               bVar"b'2")))))))))))))),
13764                       Call
13765                         ("FConv",CTy"instruction",
13766                          Call
13767                            ("FSGNJX_D",CTy"FConv",
13768                             TP[Mop(Cast(FTy 5),
13769                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
13770                                       bVar"b'8",bVar"b'7"]),
13771                                Mop(Cast(FTy 5),
13772                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
13773                                       bVar"b'16",bVar"b'15"]),
13774                                Mop(Cast(FTy 5),
13775                                    LL[bVar"b'24",bVar"b'23",bVar"b'22",
13776                                       bVar"b'21",bVar"b'20"])]))),
13777                      (Bop(And,bVar"b'31",
13778                           Bop(And,bVar"b'30",
13779                               Bop(And,Mop(Not,bVar"b'29"),
13780                                   Bop(And,Mop(Not,bVar"b'28"),
13781                                       Bop(And,Mop(Not,bVar"b'27"),
13782                                           Bop(And,Mop(Not,bVar"b'26"),
13783                                               Bop(And,bVar"b'25",
13784                                                   Bop(And,
13785                                                       Mop(Not,bVar"b'24"),
13786                                                       Bop(And,
13787                                                           Mop(Not,
13788                                                               bVar"b'23"),
13789                                                           Bop(And,
13790                                                               Mop(Not,
13791                                                                   bVar"b'22"),
13792                                                               Bop(And,
13793                                                                   Mop(Not,
13794                                                                       bVar"b'21"),
13795                                                                   Bop(And,
13796                                                                       Mop(Not,
13797                                                                           bVar"b'20"),
13798                                                                       Bop(And,
13799                                                                           Mop(Not,
13800                                                                               bVar"b'5"),
13801                                                                           Bop(And,
13802                                                                               bVar"b'4",
13803                                                                               Bop(And,
13804                                                                                   Mop(Not,
13805                                                                                       bVar"b'3"),
13806                                                                                   Mop(Not,
13807                                                                                       bVar"b'2")))))))))))))))),
13808                       Call
13809                         ("FConv",CTy"instruction",
13810                          Call
13811                            ("FCVT_W_D",CTy"FConv",
13812                             TP[Mop(Cast(FTy 5),
13813                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
13814                                       bVar"b'8",bVar"b'7"]),
13815                                Mop(Cast(FTy 5),
13816                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
13817                                       bVar"b'16",bVar"b'15"]),
13818                                Mop(Cast(FTy 3),
13819                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
13820                      (Bop(And,bVar"b'31",
13821                           Bop(And,bVar"b'30",
13822                               Bop(And,Mop(Not,bVar"b'29"),
13823                                   Bop(And,Mop(Not,bVar"b'28"),
13824                                       Bop(And,Mop(Not,bVar"b'27"),
13825                                           Bop(And,Mop(Not,bVar"b'26"),
13826                                               Bop(And,bVar"b'25",
13827                                                   Bop(And,
13828                                                       Mop(Not,bVar"b'24"),
13829                                                       Bop(And,
13830                                                           Mop(Not,
13831                                                               bVar"b'23"),
13832                                                           Bop(And,
13833                                                               Mop(Not,
13834                                                                   bVar"b'22"),
13835                                                               Bop(And,
13836                                                                   Mop(Not,
13837                                                                       bVar"b'21"),
13838                                                                   Bop(And,
13839                                                                       bVar"b'20",
13840                                                                       Bop(And,
13841                                                                           Mop(Not,
13842                                                                               bVar"b'5"),
13843                                                                           Bop(And,
13844                                                                               bVar"b'4",
13845                                                                               Bop(And,
13846                                                                                   Mop(Not,
13847                                                                                       bVar"b'3"),
13848                                                                                   Mop(Not,
13849                                                                                       bVar"b'2")))))))))))))))),
13850                       Call
13851                         ("FConv",CTy"instruction",
13852                          Call
13853                            ("FCVT_WU_D",CTy"FConv",
13854                             TP[Mop(Cast(FTy 5),
13855                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
13856                                       bVar"b'8",bVar"b'7"]),
13857                                Mop(Cast(FTy 5),
13858                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
13859                                       bVar"b'16",bVar"b'15"]),
13860                                Mop(Cast(FTy 3),
13861                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
13862                      (Bop(And,bVar"b'31",
13863                           Bop(And,bVar"b'30",
13864                               Bop(And,bVar"b'29",
13865                                   Bop(And,Mop(Not,bVar"b'28"),
13866                                       Bop(And,Mop(Not,bVar"b'27"),
13867                                           Bop(And,Mop(Not,bVar"b'26"),
13868                                               Bop(And,bVar"b'25",
13869                                                   Bop(And,
13870                                                       Mop(Not,bVar"b'24"),
13871                                                       Bop(And,
13872                                                           Mop(Not,
13873                                                               bVar"b'23"),
13874                                                           Bop(And,
13875                                                               Mop(Not,
13876                                                                   bVar"b'22"),
13877                                                               Bop(And,
13878                                                                   Mop(Not,
13879                                                                       bVar"b'21"),
13880                                                                   Bop(And,
13881                                                                       Mop(Not,
13882                                                                           bVar"b'20"),
13883                                                                       Bop(And,
13884                                                                           Mop(Not,
13885                                                                               bVar"b'14"),
13886                                                                           Bop(And,
13887                                                                               Mop(Not,
13888                                                                                   bVar"b'13"),
13889                                                                               Bop(And,
13890                                                                                   bVar"b'12",
13891                                                                                   Bop(And,
13892                                                                                       Mop(Not,
13893                                                                                           bVar"b'5"),
13894                                                                                       Bop(And,
13895                                                                                           bVar"b'4",
13896                                                                                           Bop(And,
13897                                                                                               Mop(Not,
13898                                                                                                   bVar"b'3"),
13899                                                                                               Mop(Not,
13900                                                                                                   bVar"b'2"))))))))))))))))))),
13901                       Call
13902                         ("FConv",CTy"instruction",
13903                          Call
13904                            ("FCLASS_D",CTy"FConv",
13905                             TP[Mop(Cast(FTy 5),
13906                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
13907                                       bVar"b'8",bVar"b'7"]),
13908                                Mop(Cast(FTy 5),
13909                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
13910                                       bVar"b'16",bVar"b'15"])]))),
13911                      (Bop(And,bVar"b'31",
13912                           Bop(And,bVar"b'30",
13913                               Bop(And,Mop(Not,bVar"b'29"),
13914                                   Bop(And,bVar"b'28",
13915                                       Bop(And,Mop(Not,bVar"b'27"),
13916                                           Bop(And,Mop(Not,bVar"b'26"),
13917                                               Bop(And,bVar"b'25",
13918                                                   Bop(And,
13919                                                       Mop(Not,bVar"b'24"),
13920                                                       Bop(And,
13921                                                           Mop(Not,
13922                                                               bVar"b'23"),
13923                                                           Bop(And,
13924                                                               Mop(Not,
13925                                                                   bVar"b'22"),
13926                                                               Bop(And,
13927                                                                   Mop(Not,
13928                                                                       bVar"b'21"),
13929                                                                   Bop(And,
13930                                                                       Mop(Not,
13931                                                                           bVar"b'20"),
13932                                                                       Bop(And,
13933                                                                           Mop(Not,
13934                                                                               bVar"b'5"),
13935                                                                           Bop(And,
13936                                                                               bVar"b'4",
13937                                                                               Bop(And,
13938                                                                                   Mop(Not,
13939                                                                                       bVar"b'3"),
13940                                                                                   Mop(Not,
13941                                                                                       bVar"b'2")))))))))))))))),
13942                       Call
13943                         ("FConv",CTy"instruction",
13944                          Call
13945                            ("FCVT_D_W",CTy"FConv",
13946                             TP[Mop(Cast(FTy 5),
13947                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
13948                                       bVar"b'8",bVar"b'7"]),
13949                                Mop(Cast(FTy 5),
13950                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
13951                                       bVar"b'16",bVar"b'15"]),
13952                                Mop(Cast(FTy 3),
13953                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
13954                      (Bop(And,bVar"b'31",
13955                           Bop(And,bVar"b'30",
13956                               Bop(And,Mop(Not,bVar"b'29"),
13957                                   Bop(And,bVar"b'28",
13958                                       Bop(And,Mop(Not,bVar"b'27"),
13959                                           Bop(And,Mop(Not,bVar"b'26"),
13960                                               Bop(And,bVar"b'25",
13961                                                   Bop(And,
13962                                                       Mop(Not,bVar"b'24"),
13963                                                       Bop(And,
13964                                                           Mop(Not,
13965                                                               bVar"b'23"),
13966                                                           Bop(And,
13967                                                               Mop(Not,
13968                                                                   bVar"b'22"),
13969                                                               Bop(And,
13970                                                                   Mop(Not,
13971                                                                       bVar"b'21"),
13972                                                                   Bop(And,
13973                                                                       bVar"b'20",
13974                                                                       Bop(And,
13975                                                                           Mop(Not,
13976                                                                               bVar"b'5"),
13977                                                                           Bop(And,
13978                                                                               bVar"b'4",
13979                                                                               Bop(And,
13980                                                                                   Mop(Not,
13981                                                                                       bVar"b'3"),
13982                                                                                   Mop(Not,
13983                                                                                       bVar"b'2")))))))))))))))),
13984                       Call
13985                         ("FConv",CTy"instruction",
13986                          Call
13987                            ("FCVT_D_WU",CTy"FConv",
13988                             TP[Mop(Cast(FTy 5),
13989                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
13990                                       bVar"b'8",bVar"b'7"]),
13991                                Mop(Cast(FTy 5),
13992                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
13993                                       bVar"b'16",bVar"b'15"]),
13994                                Mop(Cast(FTy 3),
13995                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
13996                      (Bop(And,bVar"b'31",
13997                           Bop(And,bVar"b'30",
13998                               Bop(And,Mop(Not,bVar"b'29"),
13999                                   Bop(And,Mop(Not,bVar"b'28"),
14000                                       Bop(And,Mop(Not,bVar"b'27"),
14001                                           Bop(And,Mop(Not,bVar"b'26"),
14002                                               Bop(And,
14003                                                   Mop(Not,bVar"b'25"),
14004                                                   Bop(And,
14005                                                       Mop(Not,bVar"b'24"),
14006                                                       Bop(And,
14007                                                           Mop(Not,
14008                                                               bVar"b'23"),
14009                                                           Bop(And,
14010                                                               Mop(Not,
14011                                                                   bVar"b'22"),
14012                                                               Bop(And,
14013                                                                   bVar"b'21",
14014                                                                   Bop(And,
14015                                                                       Mop(Not,
14016                                                                           bVar"b'20"),
14017                                                                       Bop(And,
14018                                                                           Mop(Not,
14019                                                                               bVar"b'5"),
14020                                                                           Bop(And,
14021                                                                               bVar"b'4",
14022                                                                               Bop(And,
14023                                                                                   Mop(Not,
14024                                                                                       bVar"b'3"),
14025                                                                                   Mop(Not,
14026                                                                                       bVar"b'2")))))))))))))))),
14027                       Call
14028                         ("FConv",CTy"instruction",
14029                          Call
14030                            ("FCVT_L_S",CTy"FConv",
14031                             TP[Mop(Cast(FTy 5),
14032                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
14033                                       bVar"b'8",bVar"b'7"]),
14034                                Mop(Cast(FTy 5),
14035                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
14036                                       bVar"b'16",bVar"b'15"]),
14037                                Mop(Cast(FTy 3),
14038                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
14039                      (Bop(And,bVar"b'31",
14040                           Bop(And,bVar"b'30",
14041                               Bop(And,Mop(Not,bVar"b'29"),
14042                                   Bop(And,Mop(Not,bVar"b'28"),
14043                                       Bop(And,Mop(Not,bVar"b'27"),
14044                                           Bop(And,Mop(Not,bVar"b'26"),
14045                                               Bop(And,
14046                                                   Mop(Not,bVar"b'25"),
14047                                                   Bop(And,
14048                                                       Mop(Not,bVar"b'24"),
14049                                                       Bop(And,
14050                                                           Mop(Not,
14051                                                               bVar"b'23"),
14052                                                           Bop(And,
14053                                                               Mop(Not,
14054                                                                   bVar"b'22"),
14055                                                               Bop(And,
14056                                                                   bVar"b'21",
14057                                                                   Bop(And,
14058                                                                       bVar"b'20",
14059                                                                       Bop(And,
14060                                                                           Mop(Not,
14061                                                                               bVar"b'5"),
14062                                                                           Bop(And,
14063                                                                               bVar"b'4",
14064                                                                               Bop(And,
14065                                                                                   Mop(Not,
14066                                                                                       bVar"b'3"),
14067                                                                                   Mop(Not,
14068                                                                                       bVar"b'2")))))))))))))))),
14069                       Call
14070                         ("FConv",CTy"instruction",
14071                          Call
14072                            ("FCVT_LU_S",CTy"FConv",
14073                             TP[Mop(Cast(FTy 5),
14074                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
14075                                       bVar"b'8",bVar"b'7"]),
14076                                Mop(Cast(FTy 5),
14077                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
14078                                       bVar"b'16",bVar"b'15"]),
14079                                Mop(Cast(FTy 3),
14080                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
14081                      (Bop(And,bVar"b'31",
14082                           Bop(And,bVar"b'30",
14083                               Bop(And,Mop(Not,bVar"b'29"),
14084                                   Bop(And,bVar"b'28",
14085                                       Bop(And,Mop(Not,bVar"b'27"),
14086                                           Bop(And,Mop(Not,bVar"b'26"),
14087                                               Bop(And,
14088                                                   Mop(Not,bVar"b'25"),
14089                                                   Bop(And,
14090                                                       Mop(Not,bVar"b'24"),
14091                                                       Bop(And,
14092                                                           Mop(Not,
14093                                                               bVar"b'23"),
14094                                                           Bop(And,
14095                                                               Mop(Not,
14096                                                                   bVar"b'22"),
14097                                                               Bop(And,
14098                                                                   bVar"b'21",
14099                                                                   Bop(And,
14100                                                                       Mop(Not,
14101                                                                           bVar"b'20"),
14102                                                                       Bop(And,
14103                                                                           Mop(Not,
14104                                                                               bVar"b'5"),
14105                                                                           Bop(And,
14106                                                                               bVar"b'4",
14107                                                                               Bop(And,
14108                                                                                   Mop(Not,
14109                                                                                       bVar"b'3"),
14110                                                                                   Mop(Not,
14111                                                                                       bVar"b'2")))))))))))))))),
14112                       Call
14113                         ("FConv",CTy"instruction",
14114                          Call
14115                            ("FCVT_S_L",CTy"FConv",
14116                             TP[Mop(Cast(FTy 5),
14117                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
14118                                       bVar"b'8",bVar"b'7"]),
14119                                Mop(Cast(FTy 5),
14120                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
14121                                       bVar"b'16",bVar"b'15"]),
14122                                Mop(Cast(FTy 3),
14123                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
14124                      (Bop(And,bVar"b'31",
14125                           Bop(And,bVar"b'30",
14126                               Bop(And,Mop(Not,bVar"b'29"),
14127                                   Bop(And,bVar"b'28",
14128                                       Bop(And,Mop(Not,bVar"b'27"),
14129                                           Bop(And,Mop(Not,bVar"b'26"),
14130                                               Bop(And,
14131                                                   Mop(Not,bVar"b'25"),
14132                                                   Bop(And,
14133                                                       Mop(Not,bVar"b'24"),
14134                                                       Bop(And,
14135                                                           Mop(Not,
14136                                                               bVar"b'23"),
14137                                                           Bop(And,
14138                                                               Mop(Not,
14139                                                                   bVar"b'22"),
14140                                                               Bop(And,
14141                                                                   bVar"b'21",
14142                                                                   Bop(And,
14143                                                                       bVar"b'20",
14144                                                                       Bop(And,
14145                                                                           Mop(Not,
14146                                                                               bVar"b'5"),
14147                                                                           Bop(And,
14148                                                                               bVar"b'4",
14149                                                                               Bop(And,
14150                                                                                   Mop(Not,
14151                                                                                       bVar"b'3"),
14152                                                                                   Mop(Not,
14153                                                                                       bVar"b'2")))))))))))))))),
14154                       Call
14155                         ("FConv",CTy"instruction",
14156                          Call
14157                            ("FCVT_S_LU",CTy"FConv",
14158                             TP[Mop(Cast(FTy 5),
14159                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
14160                                       bVar"b'8",bVar"b'7"]),
14161                                Mop(Cast(FTy 5),
14162                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
14163                                       bVar"b'16",bVar"b'15"]),
14164                                Mop(Cast(FTy 3),
14165                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
14166                      (Bop(And,bVar"b'31",
14167                           Bop(And,bVar"b'30",
14168                               Bop(And,Mop(Not,bVar"b'29"),
14169                                   Bop(And,Mop(Not,bVar"b'28"),
14170                                       Bop(And,Mop(Not,bVar"b'27"),
14171                                           Bop(And,Mop(Not,bVar"b'26"),
14172                                               Bop(And,bVar"b'25",
14173                                                   Bop(And,
14174                                                       Mop(Not,bVar"b'24"),
14175                                                       Bop(And,
14176                                                           Mop(Not,
14177                                                               bVar"b'23"),
14178                                                           Bop(And,
14179                                                               Mop(Not,
14180                                                                   bVar"b'22"),
14181                                                               Bop(And,
14182                                                                   bVar"b'21",
14183                                                                   Bop(And,
14184                                                                       Mop(Not,
14185                                                                           bVar"b'20"),
14186                                                                       Bop(And,
14187                                                                           Mop(Not,
14188                                                                               bVar"b'5"),
14189                                                                           Bop(And,
14190                                                                               bVar"b'4",
14191                                                                               Bop(And,
14192                                                                                   Mop(Not,
14193                                                                                       bVar"b'3"),
14194                                                                                   Mop(Not,
14195                                                                                       bVar"b'2")))))))))))))))),
14196                       Call
14197                         ("FConv",CTy"instruction",
14198                          Call
14199                            ("FCVT_L_D",CTy"FConv",
14200                             TP[Mop(Cast(FTy 5),
14201                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
14202                                       bVar"b'8",bVar"b'7"]),
14203                                Mop(Cast(FTy 5),
14204                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
14205                                       bVar"b'16",bVar"b'15"]),
14206                                Mop(Cast(FTy 3),
14207                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
14208                      (Bop(And,bVar"b'31",
14209                           Bop(And,bVar"b'30",
14210                               Bop(And,Mop(Not,bVar"b'29"),
14211                                   Bop(And,Mop(Not,bVar"b'28"),
14212                                       Bop(And,Mop(Not,bVar"b'27"),
14213                                           Bop(And,Mop(Not,bVar"b'26"),
14214                                               Bop(And,bVar"b'25",
14215                                                   Bop(And,
14216                                                       Mop(Not,bVar"b'24"),
14217                                                       Bop(And,
14218                                                           Mop(Not,
14219                                                               bVar"b'23"),
14220                                                           Bop(And,
14221                                                               Mop(Not,
14222                                                                   bVar"b'22"),
14223                                                               Bop(And,
14224                                                                   bVar"b'21",
14225                                                                   Bop(And,
14226                                                                       bVar"b'20",
14227                                                                       Bop(And,
14228                                                                           Mop(Not,
14229                                                                               bVar"b'5"),
14230                                                                           Bop(And,
14231                                                                               bVar"b'4",
14232                                                                               Bop(And,
14233                                                                                   Mop(Not,
14234                                                                                       bVar"b'3"),
14235                                                                                   Mop(Not,
14236                                                                                       bVar"b'2")))))))))))))))),
14237                       Call
14238                         ("FConv",CTy"instruction",
14239                          Call
14240                            ("FCVT_LU_D",CTy"FConv",
14241                             TP[Mop(Cast(FTy 5),
14242                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
14243                                       bVar"b'8",bVar"b'7"]),
14244                                Mop(Cast(FTy 5),
14245                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
14246                                       bVar"b'16",bVar"b'15"]),
14247                                Mop(Cast(FTy 3),
14248                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
14249                      (Bop(And,bVar"b'31",
14250                           Bop(And,bVar"b'30",
14251                               Bop(And,Mop(Not,bVar"b'29"),
14252                                   Bop(And,bVar"b'28",
14253                                       Bop(And,Mop(Not,bVar"b'27"),
14254                                           Bop(And,Mop(Not,bVar"b'26"),
14255                                               Bop(And,bVar"b'25",
14256                                                   Bop(And,
14257                                                       Mop(Not,bVar"b'24"),
14258                                                       Bop(And,
14259                                                           Mop(Not,
14260                                                               bVar"b'23"),
14261                                                           Bop(And,
14262                                                               Mop(Not,
14263                                                                   bVar"b'22"),
14264                                                               Bop(And,
14265                                                                   bVar"b'21",
14266                                                                   Bop(And,
14267                                                                       Mop(Not,
14268                                                                           bVar"b'20"),
14269                                                                       Bop(And,
14270                                                                           Mop(Not,
14271                                                                               bVar"b'5"),
14272                                                                           Bop(And,
14273                                                                               bVar"b'4",
14274                                                                               Bop(And,
14275                                                                                   Mop(Not,
14276                                                                                       bVar"b'3"),
14277                                                                                   Mop(Not,
14278                                                                                       bVar"b'2")))))))))))))))),
14279                       Call
14280                         ("FConv",CTy"instruction",
14281                          Call
14282                            ("FCVT_D_L",CTy"FConv",
14283                             TP[Mop(Cast(FTy 5),
14284                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
14285                                       bVar"b'8",bVar"b'7"]),
14286                                Mop(Cast(FTy 5),
14287                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
14288                                       bVar"b'16",bVar"b'15"]),
14289                                Mop(Cast(FTy 3),
14290                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
14291                      (Bop(And,bVar"b'31",
14292                           Bop(And,bVar"b'30",
14293                               Bop(And,Mop(Not,bVar"b'29"),
14294                                   Bop(And,bVar"b'28",
14295                                       Bop(And,Mop(Not,bVar"b'27"),
14296                                           Bop(And,Mop(Not,bVar"b'26"),
14297                                               Bop(And,bVar"b'25",
14298                                                   Bop(And,
14299                                                       Mop(Not,bVar"b'24"),
14300                                                       Bop(And,
14301                                                           Mop(Not,
14302                                                               bVar"b'23"),
14303                                                           Bop(And,
14304                                                               Mop(Not,
14305                                                                   bVar"b'22"),
14306                                                               Bop(And,
14307                                                                   bVar"b'21",
14308                                                                   Bop(And,
14309                                                                       bVar"b'20",
14310                                                                       Bop(And,
14311                                                                           Mop(Not,
14312                                                                               bVar"b'5"),
14313                                                                           Bop(And,
14314                                                                               bVar"b'4",
14315                                                                               Bop(And,
14316                                                                                   Mop(Not,
14317                                                                                       bVar"b'3"),
14318                                                                                   Mop(Not,
14319                                                                                       bVar"b'2")))))))))))))))),
14320                       Call
14321                         ("FConv",CTy"instruction",
14322                          Call
14323                            ("FCVT_D_LU",CTy"FConv",
14324                             TP[Mop(Cast(FTy 5),
14325                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
14326                                       bVar"b'8",bVar"b'7"]),
14327                                Mop(Cast(FTy 5),
14328                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
14329                                       bVar"b'16",bVar"b'15"]),
14330                                Mop(Cast(FTy 3),
14331                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
14332                      (Bop(And,bVar"b'31",
14333                           Bop(And,bVar"b'30",
14334                               Bop(And,bVar"b'29",
14335                                   Bop(And,Mop(Not,bVar"b'28"),
14336                                       Bop(And,Mop(Not,bVar"b'27"),
14337                                           Bop(And,Mop(Not,bVar"b'26"),
14338                                               Bop(And,bVar"b'25",
14339                                                   Bop(And,
14340                                                       Mop(Not,bVar"b'24"),
14341                                                       Bop(And,
14342                                                           Mop(Not,
14343                                                               bVar"b'23"),
14344                                                           Bop(And,
14345                                                               Mop(Not,
14346                                                                   bVar"b'22"),
14347                                                               Bop(And,
14348                                                                   Mop(Not,
14349                                                                       bVar"b'21"),
14350                                                                   Bop(And,
14351                                                                       Mop(Not,
14352                                                                           bVar"b'20"),
14353                                                                       Bop(And,
14354                                                                           Mop(Not,
14355                                                                               bVar"b'14"),
14356                                                                           Bop(And,
14357                                                                               Mop(Not,
14358                                                                                   bVar"b'13"),
14359                                                                               Bop(And,
14360                                                                                   Mop(Not,
14361                                                                                       bVar"b'12"),
14362                                                                                   Bop(And,
14363                                                                                       Mop(Not,
14364                                                                                           bVar"b'5"),
14365                                                                                       Bop(And,
14366                                                                                           bVar"b'4",
14367                                                                                           Bop(And,
14368                                                                                               Mop(Not,
14369                                                                                                   bVar"b'3"),
14370                                                                                               Mop(Not,
14371                                                                                                   bVar"b'2"))))))))))))))))))),
14372                       Call
14373                         ("FConv",CTy"instruction",
14374                          Call
14375                            ("FMV_X_D",CTy"FConv",
14376                             TP[Mop(Cast(FTy 5),
14377                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
14378                                       bVar"b'8",bVar"b'7"]),
14379                                Mop(Cast(FTy 5),
14380                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
14381                                       bVar"b'16",bVar"b'15"])]))),
14382                      (Bop(And,bVar"b'31",
14383                           Bop(And,bVar"b'30",
14384                               Bop(And,bVar"b'29",
14385                                   Bop(And,bVar"b'28",
14386                                       Bop(And,Mop(Not,bVar"b'27"),
14387                                           Bop(And,Mop(Not,bVar"b'26"),
14388                                               Bop(And,bVar"b'25",
14389                                                   Bop(And,
14390                                                       Mop(Not,bVar"b'24"),
14391                                                       Bop(And,
14392                                                           Mop(Not,
14393                                                               bVar"b'23"),
14394                                                           Bop(And,
14395                                                               Mop(Not,
14396                                                                   bVar"b'22"),
14397                                                               Bop(And,
14398                                                                   Mop(Not,
14399                                                                       bVar"b'21"),
14400                                                                   Bop(And,
14401                                                                       Mop(Not,
14402                                                                           bVar"b'20"),
14403                                                                       Bop(And,
14404                                                                           Mop(Not,
14405                                                                               bVar"b'14"),
14406                                                                           Bop(And,
14407                                                                               Mop(Not,
14408                                                                                   bVar"b'13"),
14409                                                                               Bop(And,
14410                                                                                   Mop(Not,
14411                                                                                       bVar"b'12"),
14412                                                                                   Bop(And,
14413                                                                                       Mop(Not,
14414                                                                                           bVar"b'5"),
14415                                                                                       Bop(And,
14416                                                                                           bVar"b'4",
14417                                                                                           Bop(And,
14418                                                                                               Mop(Not,
14419                                                                                                   bVar"b'3"),
14420                                                                                               Mop(Not,
14421                                                                                                   bVar"b'2"))))))))))))))))))),
14422                       Call
14423                         ("FConv",CTy"instruction",
14424                          Call
14425                            ("FMV_D_X",CTy"FConv",
14426                             TP[Mop(Cast(FTy 5),
14427                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
14428                                       bVar"b'8",bVar"b'7"]),
14429                                Mop(Cast(FTy 5),
14430                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
14431                                       bVar"b'16",bVar"b'15"])]))),
14432                      (Bop(And,Mop(Not,bVar"b'31"),
14433                           Bop(And,bVar"b'30",
14434                               Bop(And,Mop(Not,bVar"b'29"),
14435                                   Bop(And,Mop(Not,bVar"b'28"),
14436                                       Bop(And,Mop(Not,bVar"b'27"),
14437                                           Bop(And,Mop(Not,bVar"b'26"),
14438                                               Bop(And,
14439                                                   Mop(Not,bVar"b'25"),
14440                                                   Bop(And,
14441                                                       Mop(Not,bVar"b'24"),
14442                                                       Bop(And,
14443                                                           Mop(Not,
14444                                                               bVar"b'23"),
14445                                                           Bop(And,
14446                                                               Mop(Not,
14447                                                                   bVar"b'22"),
14448                                                               Bop(And,
14449                                                                   Mop(Not,
14450                                                                       bVar"b'21"),
14451                                                                   Bop(And,
14452                                                                       bVar"b'20",
14453                                                                       Bop(And,
14454                                                                           Mop(Not,
14455                                                                               bVar"b'5"),
14456                                                                           Bop(And,
14457                                                                               bVar"b'4",
14458                                                                               Bop(And,
14459                                                                                   Mop(Not,
14460                                                                                       bVar"b'3"),
14461                                                                                   Mop(Not,
14462                                                                                       bVar"b'2")))))))))))))))),
14463                       Call
14464                         ("FConv",CTy"instruction",
14465                          Call
14466                            ("FCVT_S_D",CTy"FConv",
14467                             TP[Mop(Cast(FTy 5),
14468                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
14469                                       bVar"b'8",bVar"b'7"]),
14470                                Mop(Cast(FTy 5),
14471                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
14472                                       bVar"b'16",bVar"b'15"]),
14473                                Mop(Cast(FTy 3),
14474                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
14475                      (Bop(And,Mop(Not,bVar"b'31"),
14476                           Bop(And,bVar"b'30",
14477                               Bop(And,Mop(Not,bVar"b'29"),
14478                                   Bop(And,Mop(Not,bVar"b'28"),
14479                                       Bop(And,Mop(Not,bVar"b'27"),
14480                                           Bop(And,Mop(Not,bVar"b'26"),
14481                                               Bop(And,bVar"b'25",
14482                                                   Bop(And,
14483                                                       Mop(Not,bVar"b'24"),
14484                                                       Bop(And,
14485                                                           Mop(Not,
14486                                                               bVar"b'23"),
14487                                                           Bop(And,
14488                                                               Mop(Not,
14489                                                                   bVar"b'22"),
14490                                                               Bop(And,
14491                                                                   Mop(Not,
14492                                                                       bVar"b'21"),
14493                                                                   Bop(And,
14494                                                                       Mop(Not,
14495                                                                           bVar"b'20"),
14496                                                                       Bop(And,
14497                                                                           Mop(Not,
14498                                                                               bVar"b'5"),
14499                                                                           Bop(And,
14500                                                                               bVar"b'4",
14501                                                                               Bop(And,
14502                                                                                   Mop(Not,
14503                                                                                       bVar"b'3"),
14504                                                                                   Mop(Not,
14505                                                                                       bVar"b'2")))))))))))))))),
14506                       Call
14507                         ("FConv",CTy"instruction",
14508                          Call
14509                            ("FCVT_D_S",CTy"FConv",
14510                             TP[Mop(Cast(FTy 5),
14511                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
14512                                       bVar"b'8",bVar"b'7"]),
14513                                Mop(Cast(FTy 5),
14514                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
14515                                       bVar"b'16",bVar"b'15"]),
14516                                Mop(Cast(FTy 3),
14517                                    LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))),
14518                      (Bop(And,Mop(Not,bVar"b'14"),
14519                           Bop(And,Mop(Not,bVar"b'13"),
14520                               Bop(And,bVar"b'12",
14521                                   Bop(And,bVar"b'5",
14522                                       Bop(And,bVar"b'4",
14523                                           Bop(And,Mop(Not,bVar"b'3"),
14524                                               Mop(Not,bVar"b'2"))))))),
14525                       Call
14526                         ("System",CTy"instruction",
14527                          Call
14528                            ("CSRRW",CTy"System",
14529                             TP[Mop(Cast(FTy 5),
14530                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
14531                                       bVar"b'8",bVar"b'7"]),
14532                                Mop(Cast(FTy 5),
14533                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
14534                                       bVar"b'16",bVar"b'15"]),
14535                                Mop(Cast(FTy 12),
14536                                    LL[bVar"b'31",bVar"b'30",bVar"b'29",
14537                                       bVar"b'28",bVar"b'27",bVar"b'26",
14538                                       bVar"b'25",bVar"b'24",bVar"b'23",
14539                                       bVar"b'22",bVar"b'21",bVar"b'20"])]))),
14540                      (Bop(And,Mop(Not,bVar"b'14"),
14541                           Bop(And,bVar"b'13",
14542                               Bop(And,Mop(Not,bVar"b'12"),
14543                                   Bop(And,bVar"b'5",
14544                                       Bop(And,bVar"b'4",
14545                                           Bop(And,Mop(Not,bVar"b'3"),
14546                                               Mop(Not,bVar"b'2"))))))),
14547                       Call
14548                         ("System",CTy"instruction",
14549                          Call
14550                            ("CSRRS",CTy"System",
14551                             TP[Mop(Cast(FTy 5),
14552                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
14553                                       bVar"b'8",bVar"b'7"]),
14554                                Mop(Cast(FTy 5),
14555                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
14556                                       bVar"b'16",bVar"b'15"]),
14557                                Mop(Cast(FTy 12),
14558                                    LL[bVar"b'31",bVar"b'30",bVar"b'29",
14559                                       bVar"b'28",bVar"b'27",bVar"b'26",
14560                                       bVar"b'25",bVar"b'24",bVar"b'23",
14561                                       bVar"b'22",bVar"b'21",bVar"b'20"])]))),
14562                      (Bop(And,Mop(Not,bVar"b'14"),
14563                           Bop(And,bVar"b'13",
14564                               Bop(And,bVar"b'12",
14565                                   Bop(And,bVar"b'5",
14566                                       Bop(And,bVar"b'4",
14567                                           Bop(And,Mop(Not,bVar"b'3"),
14568                                               Mop(Not,bVar"b'2"))))))),
14569                       Call
14570                         ("System",CTy"instruction",
14571                          Call
14572                            ("CSRRC",CTy"System",
14573                             TP[Mop(Cast(FTy 5),
14574                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
14575                                       bVar"b'8",bVar"b'7"]),
14576                                Mop(Cast(FTy 5),
14577                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
14578                                       bVar"b'16",bVar"b'15"]),
14579                                Mop(Cast(FTy 12),
14580                                    LL[bVar"b'31",bVar"b'30",bVar"b'29",
14581                                       bVar"b'28",bVar"b'27",bVar"b'26",
14582                                       bVar"b'25",bVar"b'24",bVar"b'23",
14583                                       bVar"b'22",bVar"b'21",bVar"b'20"])]))),
14584                      (Bop(And,bVar"b'14",
14585                           Bop(And,Mop(Not,bVar"b'13"),
14586                               Bop(And,bVar"b'12",
14587                                   Bop(And,bVar"b'5",
14588                                       Bop(And,bVar"b'4",
14589                                           Bop(And,Mop(Not,bVar"b'3"),
14590                                               Mop(Not,bVar"b'2"))))))),
14591                       Call
14592                         ("System",CTy"instruction",
14593                          Call
14594                            ("CSRRWI",CTy"System",
14595                             TP[Mop(Cast(FTy 5),
14596                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
14597                                       bVar"b'8",bVar"b'7"]),
14598                                Mop(Cast(FTy 5),
14599                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
14600                                       bVar"b'16",bVar"b'15"]),
14601                                Mop(Cast(FTy 12),
14602                                    LL[bVar"b'31",bVar"b'30",bVar"b'29",
14603                                       bVar"b'28",bVar"b'27",bVar"b'26",
14604                                       bVar"b'25",bVar"b'24",bVar"b'23",
14605                                       bVar"b'22",bVar"b'21",bVar"b'20"])]))),
14606                      (Bop(And,bVar"b'14",
14607                           Bop(And,bVar"b'13",
14608                               Bop(And,Mop(Not,bVar"b'12"),
14609                                   Bop(And,bVar"b'5",
14610                                       Bop(And,bVar"b'4",
14611                                           Bop(And,Mop(Not,bVar"b'3"),
14612                                               Mop(Not,bVar"b'2"))))))),
14613                       Call
14614                         ("System",CTy"instruction",
14615                          Call
14616                            ("CSRRSI",CTy"System",
14617                             TP[Mop(Cast(FTy 5),
14618                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
14619                                       bVar"b'8",bVar"b'7"]),
14620                                Mop(Cast(FTy 5),
14621                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
14622                                       bVar"b'16",bVar"b'15"]),
14623                                Mop(Cast(FTy 12),
14624                                    LL[bVar"b'31",bVar"b'30",bVar"b'29",
14625                                       bVar"b'28",bVar"b'27",bVar"b'26",
14626                                       bVar"b'25",bVar"b'24",bVar"b'23",
14627                                       bVar"b'22",bVar"b'21",bVar"b'20"])]))),
14628                      (Bop(And,bVar"b'14",
14629                           Bop(And,bVar"b'13",
14630                               Bop(And,bVar"b'12",
14631                                   Bop(And,bVar"b'5",
14632                                       Bop(And,bVar"b'4",
14633                                           Bop(And,Mop(Not,bVar"b'3"),
14634                                               Mop(Not,bVar"b'2"))))))),
14635                       Call
14636                         ("System",CTy"instruction",
14637                          Call
14638                            ("CSRRCI",CTy"System",
14639                             TP[Mop(Cast(FTy 5),
14640                                    LL[bVar"b'11",bVar"b'10",bVar"b'9",
14641                                       bVar"b'8",bVar"b'7"]),
14642                                Mop(Cast(FTy 5),
14643                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
14644                                       bVar"b'16",bVar"b'15"]),
14645                                Mop(Cast(FTy 12),
14646                                    LL[bVar"b'31",bVar"b'30",bVar"b'29",
14647                                       bVar"b'28",bVar"b'27",bVar"b'26",
14648                                       bVar"b'25",bVar"b'24",bVar"b'23",
14649                                       bVar"b'22",bVar"b'21",bVar"b'20"])]))),
14650                      (Bop(And,Mop(Not,bVar"b'31"),
14651                           Bop(And,Mop(Not,bVar"b'30"),
14652                               Bop(And,Mop(Not,bVar"b'29"),
14653                                   Bop(And,Mop(Not,bVar"b'28"),
14654                                       Bop(And,Mop(Not,bVar"b'27"),
14655                                           Bop(And,Mop(Not,bVar"b'26"),
14656                                               Bop(And,
14657                                                   Mop(Not,bVar"b'25"),
14658                                                   Bop(And,
14659                                                       Mop(Not,bVar"b'24"),
14660                                                       Bop(And,
14661                                                           Mop(Not,
14662                                                               bVar"b'23"),
14663                                                           Bop(And,
14664                                                               Mop(Not,
14665                                                                   bVar"b'22"),
14666                                                               Bop(And,
14667                                                                   Mop(Not,
14668                                                                       bVar"b'21"),
14669                                                                   Bop(And,
14670                                                                       Mop(Not,
14671                                                                           bVar"b'20"),
14672                                                                       Bop(And,
14673                                                                           Mop(Not,
14674                                                                               bVar"b'19"),
14675                                                                           Bop(And,
14676                                                                               Mop(Not,
14677                                                                                   bVar"b'18"),
14678                                                                               Bop(And,
14679                                                                                   Mop(Not,
14680                                                                                       bVar"b'17"),
14681                                                                                   Bop(And,
14682                                                                                       Mop(Not,
14683                                                                                           bVar"b'16"),
14684                                                                                       Bop(And,
14685                                                                                           Mop(Not,
14686                                                                                               bVar"b'15"),
14687                                                                                           Bop(And,
14688                                                                                               Mop(Not,
14689                                                                                                   bVar"b'14"),
14690                                                                                               Bop(And,
14691                                                                                                   Mop(Not,
14692                                                                                                       bVar"b'13"),
14693                                                                                                   Bop(And,
14694                                                                                                       Mop(Not,
14695                                                                                                           bVar"b'12"),
14696                                                                                                       Bop(And,
14697                                                                                                           Mop(Not,
14698                                                                                                               bVar"b'11"),
14699                                                                                                           Bop(And,
14700                                                                                                               Mop(Not,
14701                                                                                                                   bVar"b'10"),
14702                                                                                                               Bop(And,
14703                                                                                                                   Mop(Not,
14704                                                                                                                       bVar"b'9"),
14705                                                                                                                   Bop(And,
14706                                                                                                                       Mop(Not,
14707                                                                                                                           bVar"b'8"),
14708                                                                                                                       Bop(And,
14709                                                                                                                           Mop(Not,
14710                                                                                                                               bVar"b'7"),
14711                                                                                                                           Bop(And,
14712                                                                                                                               bVar"b'5",
14713                                                                                                                               Bop(And,
14714                                                                                                                                   bVar"b'4",
14715                                                                                                                                   Bop(And,
14716                                                                                                                                       Mop(Not,
14717                                                                                                                                           bVar"b'3"),
14718                                                                                                                                       Mop(Not,
14719                                                                                                                                           bVar"b'2"))))))))))))))))))))))))))))),
14720                       Call
14721                         ("System",CTy"instruction",
14722                          Const("ECALL",CTy"System"))),
14723                      (Bop(And,Mop(Not,bVar"b'31"),
14724                           Bop(And,Mop(Not,bVar"b'30"),
14725                               Bop(And,Mop(Not,bVar"b'29"),
14726                                   Bop(And,Mop(Not,bVar"b'28"),
14727                                       Bop(And,Mop(Not,bVar"b'27"),
14728                                           Bop(And,Mop(Not,bVar"b'26"),
14729                                               Bop(And,
14730                                                   Mop(Not,bVar"b'25"),
14731                                                   Bop(And,
14732                                                       Mop(Not,bVar"b'24"),
14733                                                       Bop(And,
14734                                                           Mop(Not,
14735                                                               bVar"b'23"),
14736                                                           Bop(And,
14737                                                               Mop(Not,
14738                                                                   bVar"b'22"),
14739                                                               Bop(And,
14740                                                                   Mop(Not,
14741                                                                       bVar"b'21"),
14742                                                                   Bop(And,
14743                                                                       bVar"b'20",
14744                                                                       Bop(And,
14745                                                                           Mop(Not,
14746                                                                               bVar"b'19"),
14747                                                                           Bop(And,
14748                                                                               Mop(Not,
14749                                                                                   bVar"b'18"),
14750                                                                               Bop(And,
14751                                                                                   Mop(Not,
14752                                                                                       bVar"b'17"),
14753                                                                                   Bop(And,
14754                                                                                       Mop(Not,
14755                                                                                           bVar"b'16"),
14756                                                                                       Bop(And,
14757                                                                                           Mop(Not,
14758                                                                                               bVar"b'15"),
14759                                                                                           Bop(And,
14760                                                                                               Mop(Not,
14761                                                                                                   bVar"b'14"),
14762                                                                                               Bop(And,
14763                                                                                                   Mop(Not,
14764                                                                                                       bVar"b'13"),
14765                                                                                                   Bop(And,
14766                                                                                                       Mop(Not,
14767                                                                                                           bVar"b'12"),
14768                                                                                                       Bop(And,
14769                                                                                                           Mop(Not,
14770                                                                                                               bVar"b'11"),
14771                                                                                                           Bop(And,
14772                                                                                                               Mop(Not,
14773                                                                                                                   bVar"b'10"),
14774                                                                                                               Bop(And,
14775                                                                                                                   Mop(Not,
14776                                                                                                                       bVar"b'9"),
14777                                                                                                                   Bop(And,
14778                                                                                                                       Mop(Not,
14779                                                                                                                           bVar"b'8"),
14780                                                                                                                       Bop(And,
14781                                                                                                                           Mop(Not,
14782                                                                                                                               bVar"b'7"),
14783                                                                                                                           Bop(And,
14784                                                                                                                               bVar"b'5",
14785                                                                                                                               Bop(And,
14786                                                                                                                                   bVar"b'4",
14787                                                                                                                                   Bop(And,
14788                                                                                                                                       Mop(Not,
14789                                                                                                                                           bVar"b'3"),
14790                                                                                                                                       Mop(Not,
14791                                                                                                                                           bVar"b'2"))))))))))))))))))))))))))))),
14792                       Call
14793                         ("System",CTy"instruction",
14794                          Const("EBREAK",CTy"System"))),
14795                      (Bop(And,Mop(Not,bVar"b'31"),
14796                           Bop(And,Mop(Not,bVar"b'30"),
14797                               Bop(And,Mop(Not,bVar"b'29"),
14798                                   Bop(And,bVar"b'28",
14799                                       Bop(And,Mop(Not,bVar"b'27"),
14800                                           Bop(And,Mop(Not,bVar"b'26"),
14801                                               Bop(And,
14802                                                   Mop(Not,bVar"b'25"),
14803                                                   Bop(And,
14804                                                       Mop(Not,bVar"b'24"),
14805                                                       Bop(And,
14806                                                           Mop(Not,
14807                                                               bVar"b'23"),
14808                                                           Bop(And,
14809                                                               Mop(Not,
14810                                                                   bVar"b'22"),
14811                                                               Bop(And,
14812                                                                   Mop(Not,
14813                                                                       bVar"b'21"),
14814                                                                   Bop(And,
14815                                                                       Mop(Not,
14816                                                                           bVar"b'20"),
14817                                                                       Bop(And,
14818                                                                           Mop(Not,
14819                                                                               bVar"b'19"),
14820                                                                           Bop(And,
14821                                                                               Mop(Not,
14822                                                                                   bVar"b'18"),
14823                                                                               Bop(And,
14824                                                                                   Mop(Not,
14825                                                                                       bVar"b'17"),
14826                                                                                   Bop(And,
14827                                                                                       Mop(Not,
14828                                                                                           bVar"b'16"),
14829                                                                                       Bop(And,
14830                                                                                           Mop(Not,
14831                                                                                               bVar"b'15"),
14832                                                                                           Bop(And,
14833                                                                                               Mop(Not,
14834                                                                                                   bVar"b'14"),
14835                                                                                               Bop(And,
14836                                                                                                   Mop(Not,
14837                                                                                                       bVar"b'13"),
14838                                                                                                   Bop(And,
14839                                                                                                       Mop(Not,
14840                                                                                                           bVar"b'12"),
14841                                                                                                       Bop(And,
14842                                                                                                           Mop(Not,
14843                                                                                                               bVar"b'11"),
14844                                                                                                           Bop(And,
14845                                                                                                               Mop(Not,
14846                                                                                                                   bVar"b'10"),
14847                                                                                                               Bop(And,
14848                                                                                                                   Mop(Not,
14849                                                                                                                       bVar"b'9"),
14850                                                                                                                   Bop(And,
14851                                                                                                                       Mop(Not,
14852                                                                                                                           bVar"b'8"),
14853                                                                                                                       Bop(And,
14854                                                                                                                           Mop(Not,
14855                                                                                                                               bVar"b'7"),
14856                                                                                                                           Bop(And,
14857                                                                                                                               bVar"b'5",
14858                                                                                                                               Bop(And,
14859                                                                                                                                   bVar"b'4",
14860                                                                                                                                   Bop(And,
14861                                                                                                                                       Mop(Not,
14862                                                                                                                                           bVar"b'3"),
14863                                                                                                                                       Mop(Not,
14864                                                                                                                                           bVar"b'2"))))))))))))))))))))))))))))),
14865                       Call
14866                         ("System",CTy"instruction",
14867                          Const("ERET",CTy"System"))),
14868                      (Bop(And,Mop(Not,bVar"b'31"),
14869                           Bop(And,Mop(Not,bVar"b'30"),
14870                               Bop(And,bVar"b'29",
14871                                   Bop(And,bVar"b'28",
14872                                       Bop(And,Mop(Not,bVar"b'27"),
14873                                           Bop(And,Mop(Not,bVar"b'26"),
14874                                               Bop(And,
14875                                                   Mop(Not,bVar"b'25"),
14876                                                   Bop(And,
14877                                                       Mop(Not,bVar"b'24"),
14878                                                       Bop(And,
14879                                                           Mop(Not,
14880                                                               bVar"b'23"),
14881                                                           Bop(And,
14882                                                               bVar"b'22",
14883                                                               Bop(And,
14884                                                                   Mop(Not,
14885                                                                       bVar"b'21"),
14886                                                                   Bop(And,
14887                                                                       bVar"b'20",
14888                                                                       Bop(And,
14889                                                                           Mop(Not,
14890                                                                               bVar"b'19"),
14891                                                                           Bop(And,
14892                                                                               Mop(Not,
14893                                                                                   bVar"b'18"),
14894                                                                               Bop(And,
14895                                                                                   Mop(Not,
14896                                                                                       bVar"b'17"),
14897                                                                                   Bop(And,
14898                                                                                       Mop(Not,
14899                                                                                           bVar"b'16"),
14900                                                                                       Bop(And,
14901                                                                                           Mop(Not,
14902                                                                                               bVar"b'15"),
14903                                                                                           Bop(And,
14904                                                                                               Mop(Not,
14905                                                                                                   bVar"b'14"),
14906                                                                                               Bop(And,
14907                                                                                                   Mop(Not,
14908                                                                                                       bVar"b'13"),
14909                                                                                                   Bop(And,
14910                                                                                                       Mop(Not,
14911                                                                                                           bVar"b'12"),
14912                                                                                                       Bop(And,
14913                                                                                                           Mop(Not,
14914                                                                                                               bVar"b'11"),
14915                                                                                                           Bop(And,
14916                                                                                                               Mop(Not,
14917                                                                                                                   bVar"b'10"),
14918                                                                                                               Bop(And,
14919                                                                                                                   Mop(Not,
14920                                                                                                                       bVar"b'9"),
14921                                                                                                                   Bop(And,
14922                                                                                                                       Mop(Not,
14923                                                                                                                           bVar"b'8"),
14924                                                                                                                       Bop(And,
14925                                                                                                                           Mop(Not,
14926                                                                                                                               bVar"b'7"),
14927                                                                                                                           Bop(And,
14928                                                                                                                               bVar"b'5",
14929                                                                                                                               Bop(And,
14930                                                                                                                                   bVar"b'4",
14931                                                                                                                                   Bop(And,
14932                                                                                                                                       Mop(Not,
14933                                                                                                                                           bVar"b'3"),
14934                                                                                                                                       Mop(Not,
14935                                                                                                                                           bVar"b'2"))))))))))))))))))))))))))))),
14936                       Call
14937                         ("System",CTy"instruction",
14938                          Const("MRTS",CTy"System"))),
14939                      (Bop(And,Mop(Not,bVar"b'31"),
14940                           Bop(And,Mop(Not,bVar"b'30"),
14941                               Bop(And,Mop(Not,bVar"b'29"),
14942                                   Bop(And,bVar"b'28",
14943                                       Bop(And,Mop(Not,bVar"b'27"),
14944                                           Bop(And,Mop(Not,bVar"b'26"),
14945                                               Bop(And,
14946                                                   Mop(Not,bVar"b'25"),
14947                                                   Bop(And,
14948                                                       Mop(Not,bVar"b'24"),
14949                                                       Bop(And,
14950                                                           Mop(Not,
14951                                                               bVar"b'23"),
14952                                                           Bop(And,
14953                                                               Mop(Not,
14954                                                                   bVar"b'22"),
14955                                                               Bop(And,
14956                                                                   bVar"b'21",
14957                                                                   Bop(And,
14958                                                                       Mop(Not,
14959                                                                           bVar"b'20"),
14960                                                                       Bop(And,
14961                                                                           Mop(Not,
14962                                                                               bVar"b'19"),
14963                                                                           Bop(And,
14964                                                                               Mop(Not,
14965                                                                                   bVar"b'18"),
14966                                                                               Bop(And,
14967                                                                                   Mop(Not,
14968                                                                                       bVar"b'17"),
14969                                                                                   Bop(And,
14970                                                                                       Mop(Not,
14971                                                                                           bVar"b'16"),
14972                                                                                       Bop(And,
14973                                                                                           Mop(Not,
14974                                                                                               bVar"b'15"),
14975                                                                                           Bop(And,
14976                                                                                               Mop(Not,
14977                                                                                                   bVar"b'14"),
14978                                                                                               Bop(And,
14979                                                                                                   Mop(Not,
14980                                                                                                       bVar"b'13"),
14981                                                                                                   Bop(And,
14982                                                                                                       Mop(Not,
14983                                                                                                           bVar"b'12"),
14984                                                                                                       Bop(And,
14985                                                                                                           Mop(Not,
14986                                                                                                               bVar"b'11"),
14987                                                                                                           Bop(And,
14988                                                                                                               Mop(Not,
14989                                                                                                                   bVar"b'10"),
14990                                                                                                               Bop(And,
14991                                                                                                                   Mop(Not,
14992                                                                                                                       bVar"b'9"),
14993                                                                                                                   Bop(And,
14994                                                                                                                       Mop(Not,
14995                                                                                                                           bVar"b'8"),
14996                                                                                                                       Bop(And,
14997                                                                                                                           Mop(Not,
14998                                                                                                                               bVar"b'7"),
14999                                                                                                                           Bop(And,
15000                                                                                                                               bVar"b'5",
15001                                                                                                                               Bop(And,
15002                                                                                                                                   bVar"b'4",
15003                                                                                                                                   Bop(And,
15004                                                                                                                                       Mop(Not,
15005                                                                                                                                           bVar"b'3"),
15006                                                                                                                                       Mop(Not,
15007                                                                                                                                           bVar"b'2"))))))))))))))))))))))))))))),
15008                       Call
15009                         ("System",CTy"instruction",
15010                          Const("WFI",CTy"System"))),
15011                      (Bop(And,Mop(Not,bVar"b'31"),
15012                           Bop(And,Mop(Not,bVar"b'30"),
15013                               Bop(And,Mop(Not,bVar"b'29"),
15014                                   Bop(And,bVar"b'28",
15015                                       Bop(And,Mop(Not,bVar"b'27"),
15016                                           Bop(And,Mop(Not,bVar"b'26"),
15017                                               Bop(And,
15018                                                   Mop(Not,bVar"b'25"),
15019                                                   Bop(And,
15020                                                       Mop(Not,bVar"b'24"),
15021                                                       Bop(And,
15022                                                           Mop(Not,
15023                                                               bVar"b'23"),
15024                                                           Bop(And,
15025                                                               Mop(Not,
15026                                                                   bVar"b'22"),
15027                                                               Bop(And,
15028                                                                   Mop(Not,
15029                                                                       bVar"b'21"),
15030                                                                   Bop(And,
15031                                                                       bVar"b'20",
15032                                                                       Bop(And,
15033                                                                           Mop(Not,
15034                                                                               bVar"b'14"),
15035                                                                           Bop(And,
15036                                                                               Mop(Not,
15037                                                                                   bVar"b'13"),
15038                                                                               Bop(And,
15039                                                                                   Mop(Not,
15040                                                                                       bVar"b'12"),
15041                                                                                   Bop(And,
15042                                                                                       Mop(Not,
15043                                                                                           bVar"b'11"),
15044                                                                                       Bop(And,
15045                                                                                           Mop(Not,
15046                                                                                               bVar"b'10"),
15047                                                                                           Bop(And,
15048                                                                                               Mop(Not,
15049                                                                                                   bVar"b'9"),
15050                                                                                               Bop(And,
15051                                                                                                   Mop(Not,
15052                                                                                                       bVar"b'8"),
15053                                                                                                   Bop(And,
15054                                                                                                       Mop(Not,
15055                                                                                                           bVar"b'7"),
15056                                                                                                       Bop(And,
15057                                                                                                           bVar"b'5",
15058                                                                                                           Bop(And,
15059                                                                                                               bVar"b'4",
15060                                                                                                               Bop(And,
15061                                                                                                                   Mop(Not,
15062                                                                                                                       bVar"b'3"),
15063                                                                                                                   Mop(Not,
15064                                                                                                                       bVar"b'2")))))))))))))))))))))))),
15065                       Call
15066                         ("System",CTy"instruction",
15067                          Call
15068                            ("SFENCE_VM",CTy"System",
15069                             Mop(Cast(FTy 5),
15070                                 LL[bVar"b'19",bVar"b'18",bVar"b'17",
15071                                    bVar"b'16",bVar"b'15"]))))],
15072                     Const("UnknownInstruction",CTy"instruction")),
15073                 Const("UnknownInstruction",CTy"instruction"))),
15074            (Bop(And,bVar"b'1",bVar"b'0"),
15075             ITB([(Bop(And,bVar"b'5",
15076                       Bop(And,bVar"b'4",
15077                           Bop(And,Mop(Not,bVar"b'3"),bVar"b'2"))),
15078                   Call
15079                     ("ArithI",CTy"instruction",
15080                      Call
15081                        ("LUI",CTy"ArithI",
15082                         TP[Mop(Cast(FTy 5),
15083                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
15084                                   bVar"b'8",bVar"b'7"]),
15085                            Mop(Cast(FTy 20),
15086                                LL[bVar"b'31",bVar"b'30",bVar"b'29",
15087                                   bVar"b'28",bVar"b'27",bVar"b'26",
15088                                   bVar"b'25",bVar"b'24",bVar"b'23",
15089                                   bVar"b'22",bVar"b'21",bVar"b'20",
15090                                   bVar"b'19",bVar"b'18",bVar"b'17",
15091                                   bVar"b'16",bVar"b'15",bVar"b'14",
15092                                   bVar"b'13",bVar"b'12"])]))),
15093                  (Bop(And,Mop(Not,bVar"b'5"),
15094                       Bop(And,bVar"b'4",
15095                           Bop(And,Mop(Not,bVar"b'3"),bVar"b'2"))),
15096                   Call
15097                     ("ArithI",CTy"instruction",
15098                      Call
15099                        ("AUIPC",CTy"ArithI",
15100                         TP[Mop(Cast(FTy 5),
15101                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
15102                                   bVar"b'8",bVar"b'7"]),
15103                            Mop(Cast(FTy 20),
15104                                LL[bVar"b'31",bVar"b'30",bVar"b'29",
15105                                   bVar"b'28",bVar"b'27",bVar"b'26",
15106                                   bVar"b'25",bVar"b'24",bVar"b'23",
15107                                   bVar"b'22",bVar"b'21",bVar"b'20",
15108                                   bVar"b'19",bVar"b'18",bVar"b'17",
15109                                   bVar"b'16",bVar"b'15",bVar"b'14",
15110                                   bVar"b'13",bVar"b'12"])]))),
15111                  (Bop(And,Mop(Not,bVar"b'14"),
15112                       Bop(And,Mop(Not,bVar"b'13"),
15113                           Bop(And,Mop(Not,bVar"b'12"),
15114                               Bop(And,Mop(Not,bVar"b'5"),
15115                                   Bop(And,bVar"b'4",
15116                                       Bop(And,Mop(Not,bVar"b'3"),
15117                                           Mop(Not,bVar"b'2"))))))),
15118                   Call
15119                     ("ArithI",CTy"instruction",
15120                      Call
15121                        ("ADDI",CTy"ArithI",
15122                         TP[Mop(Cast(FTy 5),
15123                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
15124                                   bVar"b'8",bVar"b'7"]),
15125                            Mop(Cast(FTy 5),
15126                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
15127                                   bVar"b'16",bVar"b'15"]),
15128                            Mop(Cast(FTy 12),
15129                                LL[bVar"b'31",bVar"b'30",bVar"b'29",
15130                                   bVar"b'28",bVar"b'27",bVar"b'26",
15131                                   bVar"b'25",bVar"b'24",bVar"b'23",
15132                                   bVar"b'22",bVar"b'21",bVar"b'20"])]))),
15133                  (Bop(And,Mop(Not,bVar"b'31"),
15134                       Bop(And,Mop(Not,bVar"b'30"),
15135                           Bop(And,Mop(Not,bVar"b'29"),
15136                               Bop(And,Mop(Not,bVar"b'28"),
15137                                   Bop(And,Mop(Not,bVar"b'27"),
15138                                       Bop(And,Mop(Not,bVar"b'26"),
15139                                           Bop(And,Mop(Not,bVar"b'14"),
15140                                               Bop(And,
15141                                                   Mop(Not,bVar"b'13"),
15142                                                   Bop(And,bVar"b'12",
15143                                                       Bop(And,
15144                                                           Mop(Not,
15145                                                               bVar"b'5"),
15146                                                           Bop(And,
15147                                                               bVar"b'4",
15148                                                               Bop(And,
15149                                                                   Mop(Not,
15150                                                                       bVar"b'3"),
15151                                                                   Mop(Not,
15152                                                                       bVar"b'2"))))))))))))),
15153                   Call
15154                     ("Shift",CTy"instruction",
15155                      Call
15156                        ("SLLI",CTy"Shift",
15157                         TP[Mop(Cast(FTy 5),
15158                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
15159                                   bVar"b'8",bVar"b'7"]),
15160                            Mop(Cast(FTy 5),
15161                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
15162                                   bVar"b'16",bVar"b'15"]),
15163                            Mop(Cast(FTy 6),
15164                                LL[bVar"b'25",bVar"b'24",bVar"b'23",
15165                                   bVar"b'22",bVar"b'21",bVar"b'20"])]))),
15166                  (Bop(And,Mop(Not,bVar"b'14"),
15167                       Bop(And,bVar"b'13",
15168                           Bop(And,Mop(Not,bVar"b'12"),
15169                               Bop(And,Mop(Not,bVar"b'5"),
15170                                   Bop(And,bVar"b'4",
15171                                       Bop(And,Mop(Not,bVar"b'3"),
15172                                           Mop(Not,bVar"b'2"))))))),
15173                   Call
15174                     ("ArithI",CTy"instruction",
15175                      Call
15176                        ("SLTI",CTy"ArithI",
15177                         TP[Mop(Cast(FTy 5),
15178                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
15179                                   bVar"b'8",bVar"b'7"]),
15180                            Mop(Cast(FTy 5),
15181                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
15182                                   bVar"b'16",bVar"b'15"]),
15183                            Mop(Cast(FTy 12),
15184                                LL[bVar"b'31",bVar"b'30",bVar"b'29",
15185                                   bVar"b'28",bVar"b'27",bVar"b'26",
15186                                   bVar"b'25",bVar"b'24",bVar"b'23",
15187                                   bVar"b'22",bVar"b'21",bVar"b'20"])]))),
15188                  (Bop(And,Mop(Not,bVar"b'14"),
15189                       Bop(And,bVar"b'13",
15190                           Bop(And,bVar"b'12",
15191                               Bop(And,Mop(Not,bVar"b'5"),
15192                                   Bop(And,bVar"b'4",
15193                                       Bop(And,Mop(Not,bVar"b'3"),
15194                                           Mop(Not,bVar"b'2"))))))),
15195                   Call
15196                     ("ArithI",CTy"instruction",
15197                      Call
15198                        ("SLTIU",CTy"ArithI",
15199                         TP[Mop(Cast(FTy 5),
15200                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
15201                                   bVar"b'8",bVar"b'7"]),
15202                            Mop(Cast(FTy 5),
15203                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
15204                                   bVar"b'16",bVar"b'15"]),
15205                            Mop(Cast(FTy 12),
15206                                LL[bVar"b'31",bVar"b'30",bVar"b'29",
15207                                   bVar"b'28",bVar"b'27",bVar"b'26",
15208                                   bVar"b'25",bVar"b'24",bVar"b'23",
15209                                   bVar"b'22",bVar"b'21",bVar"b'20"])]))),
15210                  (Bop(And,bVar"b'14",
15211                       Bop(And,Mop(Not,bVar"b'13"),
15212                           Bop(And,Mop(Not,bVar"b'12"),
15213                               Bop(And,Mop(Not,bVar"b'5"),
15214                                   Bop(And,bVar"b'4",
15215                                       Bop(And,Mop(Not,bVar"b'3"),
15216                                           Mop(Not,bVar"b'2"))))))),
15217                   Call
15218                     ("ArithI",CTy"instruction",
15219                      Call
15220                        ("XORI",CTy"ArithI",
15221                         TP[Mop(Cast(FTy 5),
15222                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
15223                                   bVar"b'8",bVar"b'7"]),
15224                            Mop(Cast(FTy 5),
15225                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
15226                                   bVar"b'16",bVar"b'15"]),
15227                            Mop(Cast(FTy 12),
15228                                LL[bVar"b'31",bVar"b'30",bVar"b'29",
15229                                   bVar"b'28",bVar"b'27",bVar"b'26",
15230                                   bVar"b'25",bVar"b'24",bVar"b'23",
15231                                   bVar"b'22",bVar"b'21",bVar"b'20"])]))),
15232                  (Bop(And,Mop(Not,bVar"b'31"),
15233                       Bop(And,Mop(Not,bVar"b'30"),
15234                           Bop(And,Mop(Not,bVar"b'29"),
15235                               Bop(And,Mop(Not,bVar"b'28"),
15236                                   Bop(And,Mop(Not,bVar"b'27"),
15237                                       Bop(And,Mop(Not,bVar"b'26"),
15238                                           Bop(And,bVar"b'14",
15239                                               Bop(And,
15240                                                   Mop(Not,bVar"b'13"),
15241                                                   Bop(And,bVar"b'12",
15242                                                       Bop(And,
15243                                                           Mop(Not,
15244                                                               bVar"b'5"),
15245                                                           Bop(And,
15246                                                               bVar"b'4",
15247                                                               Bop(And,
15248                                                                   Mop(Not,
15249                                                                       bVar"b'3"),
15250                                                                   Mop(Not,
15251                                                                       bVar"b'2"))))))))))))),
15252                   Call
15253                     ("Shift",CTy"instruction",
15254                      Call
15255                        ("SRLI",CTy"Shift",
15256                         TP[Mop(Cast(FTy 5),
15257                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
15258                                   bVar"b'8",bVar"b'7"]),
15259                            Mop(Cast(FTy 5),
15260                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
15261                                   bVar"b'16",bVar"b'15"]),
15262                            Mop(Cast(FTy 6),
15263                                LL[bVar"b'25",bVar"b'24",bVar"b'23",
15264                                   bVar"b'22",bVar"b'21",bVar"b'20"])]))),
15265                  (Bop(And,Mop(Not,bVar"b'31"),
15266                       Bop(And,bVar"b'30",
15267                           Bop(And,Mop(Not,bVar"b'29"),
15268                               Bop(And,Mop(Not,bVar"b'28"),
15269                                   Bop(And,Mop(Not,bVar"b'27"),
15270                                       Bop(And,Mop(Not,bVar"b'26"),
15271                                           Bop(And,bVar"b'14",
15272                                               Bop(And,
15273                                                   Mop(Not,bVar"b'13"),
15274                                                   Bop(And,bVar"b'12",
15275                                                       Bop(And,
15276                                                           Mop(Not,
15277                                                               bVar"b'5"),
15278                                                           Bop(And,
15279                                                               bVar"b'4",
15280                                                               Bop(And,
15281                                                                   Mop(Not,
15282                                                                       bVar"b'3"),
15283                                                                   Mop(Not,
15284                                                                       bVar"b'2"))))))))))))),
15285                   Call
15286                     ("Shift",CTy"instruction",
15287                      Call
15288                        ("SRAI",CTy"Shift",
15289                         TP[Mop(Cast(FTy 5),
15290                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
15291                                   bVar"b'8",bVar"b'7"]),
15292                            Mop(Cast(FTy 5),
15293                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
15294                                   bVar"b'16",bVar"b'15"]),
15295                            Mop(Cast(FTy 6),
15296                                LL[bVar"b'25",bVar"b'24",bVar"b'23",
15297                                   bVar"b'22",bVar"b'21",bVar"b'20"])]))),
15298                  (Bop(And,bVar"b'14",
15299                       Bop(And,bVar"b'13",
15300                           Bop(And,Mop(Not,bVar"b'12"),
15301                               Bop(And,Mop(Not,bVar"b'5"),
15302                                   Bop(And,bVar"b'4",
15303                                       Bop(And,Mop(Not,bVar"b'3"),
15304                                           Mop(Not,bVar"b'2"))))))),
15305                   Call
15306                     ("ArithI",CTy"instruction",
15307                      Call
15308                        ("ORI",CTy"ArithI",
15309                         TP[Mop(Cast(FTy 5),
15310                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
15311                                   bVar"b'8",bVar"b'7"]),
15312                            Mop(Cast(FTy 5),
15313                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
15314                                   bVar"b'16",bVar"b'15"]),
15315                            Mop(Cast(FTy 12),
15316                                LL[bVar"b'31",bVar"b'30",bVar"b'29",
15317                                   bVar"b'28",bVar"b'27",bVar"b'26",
15318                                   bVar"b'25",bVar"b'24",bVar"b'23",
15319                                   bVar"b'22",bVar"b'21",bVar"b'20"])]))),
15320                  (Bop(And,bVar"b'14",
15321                       Bop(And,bVar"b'13",
15322                           Bop(And,bVar"b'12",
15323                               Bop(And,Mop(Not,bVar"b'5"),
15324                                   Bop(And,bVar"b'4",
15325                                       Bop(And,Mop(Not,bVar"b'3"),
15326                                           Mop(Not,bVar"b'2"))))))),
15327                   Call
15328                     ("ArithI",CTy"instruction",
15329                      Call
15330                        ("ANDI",CTy"ArithI",
15331                         TP[Mop(Cast(FTy 5),
15332                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
15333                                   bVar"b'8",bVar"b'7"]),
15334                            Mop(Cast(FTy 5),
15335                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
15336                                   bVar"b'16",bVar"b'15"]),
15337                            Mop(Cast(FTy 12),
15338                                LL[bVar"b'31",bVar"b'30",bVar"b'29",
15339                                   bVar"b'28",bVar"b'27",bVar"b'26",
15340                                   bVar"b'25",bVar"b'24",bVar"b'23",
15341                                   bVar"b'22",bVar"b'21",bVar"b'20"])]))),
15342                  (Bop(And,Mop(Not,bVar"b'31"),
15343                       Bop(And,Mop(Not,bVar"b'30"),
15344                           Bop(And,Mop(Not,bVar"b'29"),
15345                               Bop(And,Mop(Not,bVar"b'28"),
15346                                   Bop(And,Mop(Not,bVar"b'27"),
15347                                       Bop(And,Mop(Not,bVar"b'26"),
15348                                           Bop(And,Mop(Not,bVar"b'25"),
15349                                               Bop(And,
15350                                                   Mop(Not,bVar"b'14"),
15351                                                   Bop(And,
15352                                                       Mop(Not,bVar"b'13"),
15353                                                       Bop(And,
15354                                                           Mop(Not,
15355                                                               bVar"b'12"),
15356                                                           Bop(And,
15357                                                               bVar"b'5",
15358                                                               Bop(And,
15359                                                                   bVar"b'4",
15360                                                                   Bop(And,
15361                                                                       Mop(Not,
15362                                                                           bVar"b'3"),
15363                                                                       Mop(Not,
15364                                                                           bVar"b'2")))))))))))))),
15365                   Call
15366                     ("ArithR",CTy"instruction",
15367                      Call
15368                        ("ADD",CTy"ArithR",
15369                         TP[Mop(Cast(FTy 5),
15370                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
15371                                   bVar"b'8",bVar"b'7"]),
15372                            Mop(Cast(FTy 5),
15373                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
15374                                   bVar"b'16",bVar"b'15"]),
15375                            Mop(Cast(FTy 5),
15376                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
15377                                   bVar"b'21",bVar"b'20"])]))),
15378                  (Bop(And,Mop(Not,bVar"b'31"),
15379                       Bop(And,bVar"b'30",
15380                           Bop(And,Mop(Not,bVar"b'29"),
15381                               Bop(And,Mop(Not,bVar"b'28"),
15382                                   Bop(And,Mop(Not,bVar"b'27"),
15383                                       Bop(And,Mop(Not,bVar"b'26"),
15384                                           Bop(And,Mop(Not,bVar"b'25"),
15385                                               Bop(And,
15386                                                   Mop(Not,bVar"b'14"),
15387                                                   Bop(And,
15388                                                       Mop(Not,bVar"b'13"),
15389                                                       Bop(And,
15390                                                           Mop(Not,
15391                                                               bVar"b'12"),
15392                                                           Bop(And,
15393                                                               bVar"b'5",
15394                                                               Bop(And,
15395                                                                   bVar"b'4",
15396                                                                   Bop(And,
15397                                                                       Mop(Not,
15398                                                                           bVar"b'3"),
15399                                                                       Mop(Not,
15400                                                                           bVar"b'2")))))))))))))),
15401                   Call
15402                     ("ArithR",CTy"instruction",
15403                      Call
15404                        ("SUB",CTy"ArithR",
15405                         TP[Mop(Cast(FTy 5),
15406                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
15407                                   bVar"b'8",bVar"b'7"]),
15408                            Mop(Cast(FTy 5),
15409                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
15410                                   bVar"b'16",bVar"b'15"]),
15411                            Mop(Cast(FTy 5),
15412                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
15413                                   bVar"b'21",bVar"b'20"])]))),
15414                  (Bop(And,Mop(Not,bVar"b'31"),
15415                       Bop(And,Mop(Not,bVar"b'30"),
15416                           Bop(And,Mop(Not,bVar"b'29"),
15417                               Bop(And,Mop(Not,bVar"b'28"),
15418                                   Bop(And,Mop(Not,bVar"b'27"),
15419                                       Bop(And,Mop(Not,bVar"b'26"),
15420                                           Bop(And,Mop(Not,bVar"b'25"),
15421                                               Bop(And,
15422                                                   Mop(Not,bVar"b'14"),
15423                                                   Bop(And,
15424                                                       Mop(Not,bVar"b'13"),
15425                                                       Bop(And,bVar"b'12",
15426                                                           Bop(And,
15427                                                               bVar"b'5",
15428                                                               Bop(And,
15429                                                                   bVar"b'4",
15430                                                                   Bop(And,
15431                                                                       Mop(Not,
15432                                                                           bVar"b'3"),
15433                                                                       Mop(Not,
15434                                                                           bVar"b'2")))))))))))))),
15435                   Call
15436                     ("Shift",CTy"instruction",
15437                      Call
15438                        ("SLL",CTy"Shift",
15439                         TP[Mop(Cast(FTy 5),
15440                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
15441                                   bVar"b'8",bVar"b'7"]),
15442                            Mop(Cast(FTy 5),
15443                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
15444                                   bVar"b'16",bVar"b'15"]),
15445                            Mop(Cast(FTy 5),
15446                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
15447                                   bVar"b'21",bVar"b'20"])]))),
15448                  (Bop(And,Mop(Not,bVar"b'31"),
15449                       Bop(And,Mop(Not,bVar"b'30"),
15450                           Bop(And,Mop(Not,bVar"b'29"),
15451                               Bop(And,Mop(Not,bVar"b'28"),
15452                                   Bop(And,Mop(Not,bVar"b'27"),
15453                                       Bop(And,Mop(Not,bVar"b'26"),
15454                                           Bop(And,Mop(Not,bVar"b'25"),
15455                                               Bop(And,
15456                                                   Mop(Not,bVar"b'14"),
15457                                                   Bop(And,bVar"b'13",
15458                                                       Bop(And,
15459                                                           Mop(Not,
15460                                                               bVar"b'12"),
15461                                                           Bop(And,
15462                                                               bVar"b'5",
15463                                                               Bop(And,
15464                                                                   bVar"b'4",
15465                                                                   Bop(And,
15466                                                                       Mop(Not,
15467                                                                           bVar"b'3"),
15468                                                                       Mop(Not,
15469                                                                           bVar"b'2")))))))))))))),
15470                   Call
15471                     ("ArithR",CTy"instruction",
15472                      Call
15473                        ("SLT",CTy"ArithR",
15474                         TP[Mop(Cast(FTy 5),
15475                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
15476                                   bVar"b'8",bVar"b'7"]),
15477                            Mop(Cast(FTy 5),
15478                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
15479                                   bVar"b'16",bVar"b'15"]),
15480                            Mop(Cast(FTy 5),
15481                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
15482                                   bVar"b'21",bVar"b'20"])]))),
15483                  (Bop(And,Mop(Not,bVar"b'31"),
15484                       Bop(And,Mop(Not,bVar"b'30"),
15485                           Bop(And,Mop(Not,bVar"b'29"),
15486                               Bop(And,Mop(Not,bVar"b'28"),
15487                                   Bop(And,Mop(Not,bVar"b'27"),
15488                                       Bop(And,Mop(Not,bVar"b'26"),
15489                                           Bop(And,Mop(Not,bVar"b'25"),
15490                                               Bop(And,
15491                                                   Mop(Not,bVar"b'14"),
15492                                                   Bop(And,bVar"b'13",
15493                                                       Bop(And,bVar"b'12",
15494                                                           Bop(And,
15495                                                               bVar"b'5",
15496                                                               Bop(And,
15497                                                                   bVar"b'4",
15498                                                                   Bop(And,
15499                                                                       Mop(Not,
15500                                                                           bVar"b'3"),
15501                                                                       Mop(Not,
15502                                                                           bVar"b'2")))))))))))))),
15503                   Call
15504                     ("ArithR",CTy"instruction",
15505                      Call
15506                        ("SLTU",CTy"ArithR",
15507                         TP[Mop(Cast(FTy 5),
15508                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
15509                                   bVar"b'8",bVar"b'7"]),
15510                            Mop(Cast(FTy 5),
15511                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
15512                                   bVar"b'16",bVar"b'15"]),
15513                            Mop(Cast(FTy 5),
15514                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
15515                                   bVar"b'21",bVar"b'20"])]))),
15516                  (Bop(And,Mop(Not,bVar"b'31"),
15517                       Bop(And,Mop(Not,bVar"b'30"),
15518                           Bop(And,Mop(Not,bVar"b'29"),
15519                               Bop(And,Mop(Not,bVar"b'28"),
15520                                   Bop(And,Mop(Not,bVar"b'27"),
15521                                       Bop(And,Mop(Not,bVar"b'26"),
15522                                           Bop(And,Mop(Not,bVar"b'25"),
15523                                               Bop(And,bVar"b'14",
15524                                                   Bop(And,
15525                                                       Mop(Not,bVar"b'13"),
15526                                                       Bop(And,
15527                                                           Mop(Not,
15528                                                               bVar"b'12"),
15529                                                           Bop(And,
15530                                                               bVar"b'5",
15531                                                               Bop(And,
15532                                                                   bVar"b'4",
15533                                                                   Bop(And,
15534                                                                       Mop(Not,
15535                                                                           bVar"b'3"),
15536                                                                       Mop(Not,
15537                                                                           bVar"b'2")))))))))))))),
15538                   Call
15539                     ("ArithR",CTy"instruction",
15540                      Call
15541                        ("XOR",CTy"ArithR",
15542                         TP[Mop(Cast(FTy 5),
15543                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
15544                                   bVar"b'8",bVar"b'7"]),
15545                            Mop(Cast(FTy 5),
15546                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
15547                                   bVar"b'16",bVar"b'15"]),
15548                            Mop(Cast(FTy 5),
15549                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
15550                                   bVar"b'21",bVar"b'20"])]))),
15551                  (Bop(And,Mop(Not,bVar"b'31"),
15552                       Bop(And,Mop(Not,bVar"b'30"),
15553                           Bop(And,Mop(Not,bVar"b'29"),
15554                               Bop(And,Mop(Not,bVar"b'28"),
15555                                   Bop(And,Mop(Not,bVar"b'27"),
15556                                       Bop(And,Mop(Not,bVar"b'26"),
15557                                           Bop(And,Mop(Not,bVar"b'25"),
15558                                               Bop(And,bVar"b'14",
15559                                                   Bop(And,
15560                                                       Mop(Not,bVar"b'13"),
15561                                                       Bop(And,bVar"b'12",
15562                                                           Bop(And,
15563                                                               bVar"b'5",
15564                                                               Bop(And,
15565                                                                   bVar"b'4",
15566                                                                   Bop(And,
15567                                                                       Mop(Not,
15568                                                                           bVar"b'3"),
15569                                                                       Mop(Not,
15570                                                                           bVar"b'2")))))))))))))),
15571                   Call
15572                     ("Shift",CTy"instruction",
15573                      Call
15574                        ("SRL",CTy"Shift",
15575                         TP[Mop(Cast(FTy 5),
15576                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
15577                                   bVar"b'8",bVar"b'7"]),
15578                            Mop(Cast(FTy 5),
15579                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
15580                                   bVar"b'16",bVar"b'15"]),
15581                            Mop(Cast(FTy 5),
15582                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
15583                                   bVar"b'21",bVar"b'20"])]))),
15584                  (Bop(And,Mop(Not,bVar"b'31"),
15585                       Bop(And,bVar"b'30",
15586                           Bop(And,Mop(Not,bVar"b'29"),
15587                               Bop(And,Mop(Not,bVar"b'28"),
15588                                   Bop(And,Mop(Not,bVar"b'27"),
15589                                       Bop(And,Mop(Not,bVar"b'26"),
15590                                           Bop(And,Mop(Not,bVar"b'25"),
15591                                               Bop(And,bVar"b'14",
15592                                                   Bop(And,
15593                                                       Mop(Not,bVar"b'13"),
15594                                                       Bop(And,bVar"b'12",
15595                                                           Bop(And,
15596                                                               bVar"b'5",
15597                                                               Bop(And,
15598                                                                   bVar"b'4",
15599                                                                   Bop(And,
15600                                                                       Mop(Not,
15601                                                                           bVar"b'3"),
15602                                                                       Mop(Not,
15603                                                                           bVar"b'2")))))))))))))),
15604                   Call
15605                     ("Shift",CTy"instruction",
15606                      Call
15607                        ("SRA",CTy"Shift",
15608                         TP[Mop(Cast(FTy 5),
15609                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
15610                                   bVar"b'8",bVar"b'7"]),
15611                            Mop(Cast(FTy 5),
15612                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
15613                                   bVar"b'16",bVar"b'15"]),
15614                            Mop(Cast(FTy 5),
15615                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
15616                                   bVar"b'21",bVar"b'20"])]))),
15617                  (Bop(And,Mop(Not,bVar"b'31"),
15618                       Bop(And,Mop(Not,bVar"b'30"),
15619                           Bop(And,Mop(Not,bVar"b'29"),
15620                               Bop(And,Mop(Not,bVar"b'28"),
15621                                   Bop(And,Mop(Not,bVar"b'27"),
15622                                       Bop(And,Mop(Not,bVar"b'26"),
15623                                           Bop(And,Mop(Not,bVar"b'25"),
15624                                               Bop(And,bVar"b'14",
15625                                                   Bop(And,bVar"b'13",
15626                                                       Bop(And,
15627                                                           Mop(Not,
15628                                                               bVar"b'12"),
15629                                                           Bop(And,
15630                                                               bVar"b'5",
15631                                                               Bop(And,
15632                                                                   bVar"b'4",
15633                                                                   Bop(And,
15634                                                                       Mop(Not,
15635                                                                           bVar"b'3"),
15636                                                                       Mop(Not,
15637                                                                           bVar"b'2")))))))))))))),
15638                   Call
15639                     ("ArithR",CTy"instruction",
15640                      Call
15641                        ("OR",CTy"ArithR",
15642                         TP[Mop(Cast(FTy 5),
15643                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
15644                                   bVar"b'8",bVar"b'7"]),
15645                            Mop(Cast(FTy 5),
15646                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
15647                                   bVar"b'16",bVar"b'15"]),
15648                            Mop(Cast(FTy 5),
15649                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
15650                                   bVar"b'21",bVar"b'20"])]))),
15651                  (Bop(And,Mop(Not,bVar"b'31"),
15652                       Bop(And,Mop(Not,bVar"b'30"),
15653                           Bop(And,Mop(Not,bVar"b'29"),
15654                               Bop(And,Mop(Not,bVar"b'28"),
15655                                   Bop(And,Mop(Not,bVar"b'27"),
15656                                       Bop(And,Mop(Not,bVar"b'26"),
15657                                           Bop(And,Mop(Not,bVar"b'25"),
15658                                               Bop(And,bVar"b'14",
15659                                                   Bop(And,bVar"b'13",
15660                                                       Bop(And,bVar"b'12",
15661                                                           Bop(And,
15662                                                               bVar"b'5",
15663                                                               Bop(And,
15664                                                                   bVar"b'4",
15665                                                                   Bop(And,
15666                                                                       Mop(Not,
15667                                                                           bVar"b'3"),
15668                                                                       Mop(Not,
15669                                                                           bVar"b'2")))))))))))))),
15670                   Call
15671                     ("ArithR",CTy"instruction",
15672                      Call
15673                        ("AND",CTy"ArithR",
15674                         TP[Mop(Cast(FTy 5),
15675                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
15676                                   bVar"b'8",bVar"b'7"]),
15677                            Mop(Cast(FTy 5),
15678                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
15679                                   bVar"b'16",bVar"b'15"]),
15680                            Mop(Cast(FTy 5),
15681                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
15682                                   bVar"b'21",bVar"b'20"])]))),
15683                  (Bop(And,Mop(Not,bVar"b'14"),
15684                       Bop(And,Mop(Not,bVar"b'13"),
15685                           Bop(And,Mop(Not,bVar"b'12"),
15686                               Bop(And,Mop(Not,bVar"b'5"),
15687                                   Bop(And,bVar"b'4",
15688                                       Bop(And,bVar"b'3",
15689                                           Mop(Not,bVar"b'2"))))))),
15690                   Call
15691                     ("ArithI",CTy"instruction",
15692                      Call
15693                        ("ADDIW",CTy"ArithI",
15694                         TP[Mop(Cast(FTy 5),
15695                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
15696                                   bVar"b'8",bVar"b'7"]),
15697                            Mop(Cast(FTy 5),
15698                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
15699                                   bVar"b'16",bVar"b'15"]),
15700                            Mop(Cast(FTy 12),
15701                                LL[bVar"b'31",bVar"b'30",bVar"b'29",
15702                                   bVar"b'28",bVar"b'27",bVar"b'26",
15703                                   bVar"b'25",bVar"b'24",bVar"b'23",
15704                                   bVar"b'22",bVar"b'21",bVar"b'20"])]))),
15705                  (Bop(And,Mop(Not,bVar"b'31"),
15706                       Bop(And,Mop(Not,bVar"b'30"),
15707                           Bop(And,Mop(Not,bVar"b'29"),
15708                               Bop(And,Mop(Not,bVar"b'28"),
15709                                   Bop(And,Mop(Not,bVar"b'27"),
15710                                       Bop(And,Mop(Not,bVar"b'26"),
15711                                           Bop(And,Mop(Not,bVar"b'25"),
15712                                               Bop(And,
15713                                                   Mop(Not,bVar"b'14"),
15714                                                   Bop(And,
15715                                                       Mop(Not,bVar"b'13"),
15716                                                       Bop(And,bVar"b'12",
15717                                                           Bop(And,
15718                                                               Mop(Not,
15719                                                                   bVar"b'5"),
15720                                                               Bop(And,
15721                                                                   bVar"b'4",
15722                                                                   Bop(And,
15723                                                                       bVar"b'3",
15724                                                                       Mop(Not,
15725                                                                           bVar"b'2")))))))))))))),
15726                   Call
15727                     ("Shift",CTy"instruction",
15728                      Call
15729                        ("SLLIW",CTy"Shift",
15730                         TP[Mop(Cast(FTy 5),
15731                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
15732                                   bVar"b'8",bVar"b'7"]),
15733                            Mop(Cast(FTy 5),
15734                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
15735                                   bVar"b'16",bVar"b'15"]),
15736                            Mop(Cast(FTy 5),
15737                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
15738                                   bVar"b'21",bVar"b'20"])]))),
15739                  (Bop(And,Mop(Not,bVar"b'31"),
15740                       Bop(And,Mop(Not,bVar"b'30"),
15741                           Bop(And,Mop(Not,bVar"b'29"),
15742                               Bop(And,Mop(Not,bVar"b'28"),
15743                                   Bop(And,Mop(Not,bVar"b'27"),
15744                                       Bop(And,Mop(Not,bVar"b'26"),
15745                                           Bop(And,Mop(Not,bVar"b'25"),
15746                                               Bop(And,bVar"b'14",
15747                                                   Bop(And,
15748                                                       Mop(Not,bVar"b'13"),
15749                                                       Bop(And,bVar"b'12",
15750                                                           Bop(And,
15751                                                               Mop(Not,
15752                                                                   bVar"b'5"),
15753                                                               Bop(And,
15754                                                                   bVar"b'4",
15755                                                                   Bop(And,
15756                                                                       bVar"b'3",
15757                                                                       Mop(Not,
15758                                                                           bVar"b'2")))))))))))))),
15759                   Call
15760                     ("Shift",CTy"instruction",
15761                      Call
15762                        ("SRLIW",CTy"Shift",
15763                         TP[Mop(Cast(FTy 5),
15764                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
15765                                   bVar"b'8",bVar"b'7"]),
15766                            Mop(Cast(FTy 5),
15767                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
15768                                   bVar"b'16",bVar"b'15"]),
15769                            Mop(Cast(FTy 5),
15770                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
15771                                   bVar"b'21",bVar"b'20"])]))),
15772                  (Bop(And,Mop(Not,bVar"b'31"),
15773                       Bop(And,bVar"b'30",
15774                           Bop(And,Mop(Not,bVar"b'29"),
15775                               Bop(And,Mop(Not,bVar"b'28"),
15776                                   Bop(And,Mop(Not,bVar"b'27"),
15777                                       Bop(And,Mop(Not,bVar"b'26"),
15778                                           Bop(And,Mop(Not,bVar"b'25"),
15779                                               Bop(And,bVar"b'14",
15780                                                   Bop(And,
15781                                                       Mop(Not,bVar"b'13"),
15782                                                       Bop(And,bVar"b'12",
15783                                                           Bop(And,
15784                                                               Mop(Not,
15785                                                                   bVar"b'5"),
15786                                                               Bop(And,
15787                                                                   bVar"b'4",
15788                                                                   Bop(And,
15789                                                                       bVar"b'3",
15790                                                                       Mop(Not,
15791                                                                           bVar"b'2")))))))))))))),
15792                   Call
15793                     ("Shift",CTy"instruction",
15794                      Call
15795                        ("SRAIW",CTy"Shift",
15796                         TP[Mop(Cast(FTy 5),
15797                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
15798                                   bVar"b'8",bVar"b'7"]),
15799                            Mop(Cast(FTy 5),
15800                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
15801                                   bVar"b'16",bVar"b'15"]),
15802                            Mop(Cast(FTy 5),
15803                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
15804                                   bVar"b'21",bVar"b'20"])]))),
15805                  (Bop(And,Mop(Not,bVar"b'31"),
15806                       Bop(And,Mop(Not,bVar"b'30"),
15807                           Bop(And,Mop(Not,bVar"b'29"),
15808                               Bop(And,Mop(Not,bVar"b'28"),
15809                                   Bop(And,Mop(Not,bVar"b'27"),
15810                                       Bop(And,Mop(Not,bVar"b'26"),
15811                                           Bop(And,Mop(Not,bVar"b'25"),
15812                                               Bop(And,
15813                                                   Mop(Not,bVar"b'14"),
15814                                                   Bop(And,
15815                                                       Mop(Not,bVar"b'13"),
15816                                                       Bop(And,
15817                                                           Mop(Not,
15818                                                               bVar"b'12"),
15819                                                           Bop(And,
15820                                                               bVar"b'5",
15821                                                               Bop(And,
15822                                                                   bVar"b'4",
15823                                                                   Bop(And,
15824                                                                       bVar"b'3",
15825                                                                       Mop(Not,
15826                                                                           bVar"b'2")))))))))))))),
15827                   Call
15828                     ("ArithR",CTy"instruction",
15829                      Call
15830                        ("ADDW",CTy"ArithR",
15831                         TP[Mop(Cast(FTy 5),
15832                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
15833                                   bVar"b'8",bVar"b'7"]),
15834                            Mop(Cast(FTy 5),
15835                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
15836                                   bVar"b'16",bVar"b'15"]),
15837                            Mop(Cast(FTy 5),
15838                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
15839                                   bVar"b'21",bVar"b'20"])]))),
15840                  (Bop(And,Mop(Not,bVar"b'31"),
15841                       Bop(And,bVar"b'30",
15842                           Bop(And,Mop(Not,bVar"b'29"),
15843                               Bop(And,Mop(Not,bVar"b'28"),
15844                                   Bop(And,Mop(Not,bVar"b'27"),
15845                                       Bop(And,Mop(Not,bVar"b'26"),
15846                                           Bop(And,Mop(Not,bVar"b'25"),
15847                                               Bop(And,
15848                                                   Mop(Not,bVar"b'14"),
15849                                                   Bop(And,
15850                                                       Mop(Not,bVar"b'13"),
15851                                                       Bop(And,
15852                                                           Mop(Not,
15853                                                               bVar"b'12"),
15854                                                           Bop(And,
15855                                                               bVar"b'5",
15856                                                               Bop(And,
15857                                                                   bVar"b'4",
15858                                                                   Bop(And,
15859                                                                       bVar"b'3",
15860                                                                       Mop(Not,
15861                                                                           bVar"b'2")))))))))))))),
15862                   Call
15863                     ("ArithR",CTy"instruction",
15864                      Call
15865                        ("SUBW",CTy"ArithR",
15866                         TP[Mop(Cast(FTy 5),
15867                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
15868                                   bVar"b'8",bVar"b'7"]),
15869                            Mop(Cast(FTy 5),
15870                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
15871                                   bVar"b'16",bVar"b'15"]),
15872                            Mop(Cast(FTy 5),
15873                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
15874                                   bVar"b'21",bVar"b'20"])]))),
15875                  (Bop(And,Mop(Not,bVar"b'31"),
15876                       Bop(And,Mop(Not,bVar"b'30"),
15877                           Bop(And,Mop(Not,bVar"b'29"),
15878                               Bop(And,Mop(Not,bVar"b'28"),
15879                                   Bop(And,Mop(Not,bVar"b'27"),
15880                                       Bop(And,Mop(Not,bVar"b'26"),
15881                                           Bop(And,Mop(Not,bVar"b'25"),
15882                                               Bop(And,
15883                                                   Mop(Not,bVar"b'14"),
15884                                                   Bop(And,
15885                                                       Mop(Not,bVar"b'13"),
15886                                                       Bop(And,bVar"b'12",
15887                                                           Bop(And,
15888                                                               bVar"b'5",
15889                                                               Bop(And,
15890                                                                   bVar"b'4",
15891                                                                   Bop(And,
15892                                                                       bVar"b'3",
15893                                                                       Mop(Not,
15894                                                                           bVar"b'2")))))))))))))),
15895                   Call
15896                     ("Shift",CTy"instruction",
15897                      Call
15898                        ("SLLW",CTy"Shift",
15899                         TP[Mop(Cast(FTy 5),
15900                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
15901                                   bVar"b'8",bVar"b'7"]),
15902                            Mop(Cast(FTy 5),
15903                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
15904                                   bVar"b'16",bVar"b'15"]),
15905                            Mop(Cast(FTy 5),
15906                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
15907                                   bVar"b'21",bVar"b'20"])]))),
15908                  (Bop(And,Mop(Not,bVar"b'31"),
15909                       Bop(And,Mop(Not,bVar"b'30"),
15910                           Bop(And,Mop(Not,bVar"b'29"),
15911                               Bop(And,Mop(Not,bVar"b'28"),
15912                                   Bop(And,Mop(Not,bVar"b'27"),
15913                                       Bop(And,Mop(Not,bVar"b'26"),
15914                                           Bop(And,Mop(Not,bVar"b'25"),
15915                                               Bop(And,bVar"b'14",
15916                                                   Bop(And,
15917                                                       Mop(Not,bVar"b'13"),
15918                                                       Bop(And,bVar"b'12",
15919                                                           Bop(And,
15920                                                               bVar"b'5",
15921                                                               Bop(And,
15922                                                                   bVar"b'4",
15923                                                                   Bop(And,
15924                                                                       bVar"b'3",
15925                                                                       Mop(Not,
15926                                                                           bVar"b'2")))))))))))))),
15927                   Call
15928                     ("Shift",CTy"instruction",
15929                      Call
15930                        ("SRLW",CTy"Shift",
15931                         TP[Mop(Cast(FTy 5),
15932                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
15933                                   bVar"b'8",bVar"b'7"]),
15934                            Mop(Cast(FTy 5),
15935                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
15936                                   bVar"b'16",bVar"b'15"]),
15937                            Mop(Cast(FTy 5),
15938                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
15939                                   bVar"b'21",bVar"b'20"])]))),
15940                  (Bop(And,Mop(Not,bVar"b'31"),
15941                       Bop(And,bVar"b'30",
15942                           Bop(And,Mop(Not,bVar"b'29"),
15943                               Bop(And,Mop(Not,bVar"b'28"),
15944                                   Bop(And,Mop(Not,bVar"b'27"),
15945                                       Bop(And,Mop(Not,bVar"b'26"),
15946                                           Bop(And,Mop(Not,bVar"b'25"),
15947                                               Bop(And,bVar"b'14",
15948                                                   Bop(And,
15949                                                       Mop(Not,bVar"b'13"),
15950                                                       Bop(And,bVar"b'12",
15951                                                           Bop(And,
15952                                                               bVar"b'5",
15953                                                               Bop(And,
15954                                                                   bVar"b'4",
15955                                                                   Bop(And,
15956                                                                       bVar"b'3",
15957                                                                       Mop(Not,
15958                                                                           bVar"b'2")))))))))))))),
15959                   Call
15960                     ("Shift",CTy"instruction",
15961                      Call
15962                        ("SRAW",CTy"Shift",
15963                         TP[Mop(Cast(FTy 5),
15964                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
15965                                   bVar"b'8",bVar"b'7"]),
15966                            Mop(Cast(FTy 5),
15967                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
15968                                   bVar"b'16",bVar"b'15"]),
15969                            Mop(Cast(FTy 5),
15970                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
15971                                   bVar"b'21",bVar"b'20"])]))),
15972                  (Bop(And,Mop(Not,bVar"b'31"),
15973                       Bop(And,Mop(Not,bVar"b'30"),
15974                           Bop(And,Mop(Not,bVar"b'29"),
15975                               Bop(And,Mop(Not,bVar"b'28"),
15976                                   Bop(And,Mop(Not,bVar"b'27"),
15977                                       Bop(And,Mop(Not,bVar"b'26"),
15978                                           Bop(And,bVar"b'25",
15979                                               Bop(And,
15980                                                   Mop(Not,bVar"b'14"),
15981                                                   Bop(And,
15982                                                       Mop(Not,bVar"b'13"),
15983                                                       Bop(And,
15984                                                           Mop(Not,
15985                                                               bVar"b'12"),
15986                                                           Bop(And,
15987                                                               bVar"b'5",
15988                                                               Bop(And,
15989                                                                   bVar"b'4",
15990                                                                   Bop(And,
15991                                                                       Mop(Not,
15992                                                                           bVar"b'3"),
15993                                                                       Mop(Not,
15994                                                                           bVar"b'2")))))))))))))),
15995                   Call
15996                     ("MulDiv",CTy"instruction",
15997                      Call
15998                        ("MUL",CTy"MulDiv",
15999                         TP[Mop(Cast(FTy 5),
16000                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
16001                                   bVar"b'8",bVar"b'7"]),
16002                            Mop(Cast(FTy 5),
16003                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16004                                   bVar"b'16",bVar"b'15"]),
16005                            Mop(Cast(FTy 5),
16006                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
16007                                   bVar"b'21",bVar"b'20"])]))),
16008                  (Bop(And,Mop(Not,bVar"b'31"),
16009                       Bop(And,Mop(Not,bVar"b'30"),
16010                           Bop(And,Mop(Not,bVar"b'29"),
16011                               Bop(And,Mop(Not,bVar"b'28"),
16012                                   Bop(And,Mop(Not,bVar"b'27"),
16013                                       Bop(And,Mop(Not,bVar"b'26"),
16014                                           Bop(And,bVar"b'25",
16015                                               Bop(And,
16016                                                   Mop(Not,bVar"b'14"),
16017                                                   Bop(And,
16018                                                       Mop(Not,bVar"b'13"),
16019                                                       Bop(And,bVar"b'12",
16020                                                           Bop(And,
16021                                                               bVar"b'5",
16022                                                               Bop(And,
16023                                                                   bVar"b'4",
16024                                                                   Bop(And,
16025                                                                       Mop(Not,
16026                                                                           bVar"b'3"),
16027                                                                       Mop(Not,
16028                                                                           bVar"b'2")))))))))))))),
16029                   Call
16030                     ("MulDiv",CTy"instruction",
16031                      Call
16032                        ("MULH",CTy"MulDiv",
16033                         TP[Mop(Cast(FTy 5),
16034                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
16035                                   bVar"b'8",bVar"b'7"]),
16036                            Mop(Cast(FTy 5),
16037                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16038                                   bVar"b'16",bVar"b'15"]),
16039                            Mop(Cast(FTy 5),
16040                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
16041                                   bVar"b'21",bVar"b'20"])]))),
16042                  (Bop(And,Mop(Not,bVar"b'31"),
16043                       Bop(And,Mop(Not,bVar"b'30"),
16044                           Bop(And,Mop(Not,bVar"b'29"),
16045                               Bop(And,Mop(Not,bVar"b'28"),
16046                                   Bop(And,Mop(Not,bVar"b'27"),
16047                                       Bop(And,Mop(Not,bVar"b'26"),
16048                                           Bop(And,bVar"b'25",
16049                                               Bop(And,
16050                                                   Mop(Not,bVar"b'14"),
16051                                                   Bop(And,bVar"b'13",
16052                                                       Bop(And,
16053                                                           Mop(Not,
16054                                                               bVar"b'12"),
16055                                                           Bop(And,
16056                                                               bVar"b'5",
16057                                                               Bop(And,
16058                                                                   bVar"b'4",
16059                                                                   Bop(And,
16060                                                                       Mop(Not,
16061                                                                           bVar"b'3"),
16062                                                                       Mop(Not,
16063                                                                           bVar"b'2")))))))))))))),
16064                   Call
16065                     ("MulDiv",CTy"instruction",
16066                      Call
16067                        ("MULHSU",CTy"MulDiv",
16068                         TP[Mop(Cast(FTy 5),
16069                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
16070                                   bVar"b'8",bVar"b'7"]),
16071                            Mop(Cast(FTy 5),
16072                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16073                                   bVar"b'16",bVar"b'15"]),
16074                            Mop(Cast(FTy 5),
16075                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
16076                                   bVar"b'21",bVar"b'20"])]))),
16077                  (Bop(And,Mop(Not,bVar"b'31"),
16078                       Bop(And,Mop(Not,bVar"b'30"),
16079                           Bop(And,Mop(Not,bVar"b'29"),
16080                               Bop(And,Mop(Not,bVar"b'28"),
16081                                   Bop(And,Mop(Not,bVar"b'27"),
16082                                       Bop(And,Mop(Not,bVar"b'26"),
16083                                           Bop(And,bVar"b'25",
16084                                               Bop(And,
16085                                                   Mop(Not,bVar"b'14"),
16086                                                   Bop(And,bVar"b'13",
16087                                                       Bop(And,bVar"b'12",
16088                                                           Bop(And,
16089                                                               bVar"b'5",
16090                                                               Bop(And,
16091                                                                   bVar"b'4",
16092                                                                   Bop(And,
16093                                                                       Mop(Not,
16094                                                                           bVar"b'3"),
16095                                                                       Mop(Not,
16096                                                                           bVar"b'2")))))))))))))),
16097                   Call
16098                     ("MulDiv",CTy"instruction",
16099                      Call
16100                        ("MULHU",CTy"MulDiv",
16101                         TP[Mop(Cast(FTy 5),
16102                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
16103                                   bVar"b'8",bVar"b'7"]),
16104                            Mop(Cast(FTy 5),
16105                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16106                                   bVar"b'16",bVar"b'15"]),
16107                            Mop(Cast(FTy 5),
16108                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
16109                                   bVar"b'21",bVar"b'20"])]))),
16110                  (Bop(And,Mop(Not,bVar"b'31"),
16111                       Bop(And,Mop(Not,bVar"b'30"),
16112                           Bop(And,Mop(Not,bVar"b'29"),
16113                               Bop(And,Mop(Not,bVar"b'28"),
16114                                   Bop(And,Mop(Not,bVar"b'27"),
16115                                       Bop(And,Mop(Not,bVar"b'26"),
16116                                           Bop(And,bVar"b'25",
16117                                               Bop(And,bVar"b'14",
16118                                                   Bop(And,
16119                                                       Mop(Not,bVar"b'13"),
16120                                                       Bop(And,
16121                                                           Mop(Not,
16122                                                               bVar"b'12"),
16123                                                           Bop(And,
16124                                                               bVar"b'5",
16125                                                               Bop(And,
16126                                                                   bVar"b'4",
16127                                                                   Bop(And,
16128                                                                       Mop(Not,
16129                                                                           bVar"b'3"),
16130                                                                       Mop(Not,
16131                                                                           bVar"b'2")))))))))))))),
16132                   Call
16133                     ("MulDiv",CTy"instruction",
16134                      Call
16135                        ("DIV",CTy"MulDiv",
16136                         TP[Mop(Cast(FTy 5),
16137                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
16138                                   bVar"b'8",bVar"b'7"]),
16139                            Mop(Cast(FTy 5),
16140                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16141                                   bVar"b'16",bVar"b'15"]),
16142                            Mop(Cast(FTy 5),
16143                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
16144                                   bVar"b'21",bVar"b'20"])]))),
16145                  (Bop(And,Mop(Not,bVar"b'31"),
16146                       Bop(And,Mop(Not,bVar"b'30"),
16147                           Bop(And,Mop(Not,bVar"b'29"),
16148                               Bop(And,Mop(Not,bVar"b'28"),
16149                                   Bop(And,Mop(Not,bVar"b'27"),
16150                                       Bop(And,Mop(Not,bVar"b'26"),
16151                                           Bop(And,bVar"b'25",
16152                                               Bop(And,bVar"b'14",
16153                                                   Bop(And,
16154                                                       Mop(Not,bVar"b'13"),
16155                                                       Bop(And,bVar"b'12",
16156                                                           Bop(And,
16157                                                               bVar"b'5",
16158                                                               Bop(And,
16159                                                                   bVar"b'4",
16160                                                                   Bop(And,
16161                                                                       Mop(Not,
16162                                                                           bVar"b'3"),
16163                                                                       Mop(Not,
16164                                                                           bVar"b'2")))))))))))))),
16165                   Call
16166                     ("MulDiv",CTy"instruction",
16167                      Call
16168                        ("DIVU",CTy"MulDiv",
16169                         TP[Mop(Cast(FTy 5),
16170                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
16171                                   bVar"b'8",bVar"b'7"]),
16172                            Mop(Cast(FTy 5),
16173                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16174                                   bVar"b'16",bVar"b'15"]),
16175                            Mop(Cast(FTy 5),
16176                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
16177                                   bVar"b'21",bVar"b'20"])]))),
16178                  (Bop(And,Mop(Not,bVar"b'31"),
16179                       Bop(And,Mop(Not,bVar"b'30"),
16180                           Bop(And,Mop(Not,bVar"b'29"),
16181                               Bop(And,Mop(Not,bVar"b'28"),
16182                                   Bop(And,Mop(Not,bVar"b'27"),
16183                                       Bop(And,Mop(Not,bVar"b'26"),
16184                                           Bop(And,bVar"b'25",
16185                                               Bop(And,bVar"b'14",
16186                                                   Bop(And,bVar"b'13",
16187                                                       Bop(And,
16188                                                           Mop(Not,
16189                                                               bVar"b'12"),
16190                                                           Bop(And,
16191                                                               bVar"b'5",
16192                                                               Bop(And,
16193                                                                   bVar"b'4",
16194                                                                   Bop(And,
16195                                                                       Mop(Not,
16196                                                                           bVar"b'3"),
16197                                                                       Mop(Not,
16198                                                                           bVar"b'2")))))))))))))),
16199                   Call
16200                     ("MulDiv",CTy"instruction",
16201                      Call
16202                        ("REM",CTy"MulDiv",
16203                         TP[Mop(Cast(FTy 5),
16204                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
16205                                   bVar"b'8",bVar"b'7"]),
16206                            Mop(Cast(FTy 5),
16207                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16208                                   bVar"b'16",bVar"b'15"]),
16209                            Mop(Cast(FTy 5),
16210                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
16211                                   bVar"b'21",bVar"b'20"])]))),
16212                  (Bop(And,Mop(Not,bVar"b'31"),
16213                       Bop(And,Mop(Not,bVar"b'30"),
16214                           Bop(And,Mop(Not,bVar"b'29"),
16215                               Bop(And,Mop(Not,bVar"b'28"),
16216                                   Bop(And,Mop(Not,bVar"b'27"),
16217                                       Bop(And,Mop(Not,bVar"b'26"),
16218                                           Bop(And,bVar"b'25",
16219                                               Bop(And,bVar"b'14",
16220                                                   Bop(And,bVar"b'13",
16221                                                       Bop(And,bVar"b'12",
16222                                                           Bop(And,
16223                                                               bVar"b'5",
16224                                                               Bop(And,
16225                                                                   bVar"b'4",
16226                                                                   Bop(And,
16227                                                                       Mop(Not,
16228                                                                           bVar"b'3"),
16229                                                                       Mop(Not,
16230                                                                           bVar"b'2")))))))))))))),
16231                   Call
16232                     ("MulDiv",CTy"instruction",
16233                      Call
16234                        ("REMU",CTy"MulDiv",
16235                         TP[Mop(Cast(FTy 5),
16236                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
16237                                   bVar"b'8",bVar"b'7"]),
16238                            Mop(Cast(FTy 5),
16239                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16240                                   bVar"b'16",bVar"b'15"]),
16241                            Mop(Cast(FTy 5),
16242                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
16243                                   bVar"b'21",bVar"b'20"])]))),
16244                  (Bop(And,Mop(Not,bVar"b'31"),
16245                       Bop(And,Mop(Not,bVar"b'30"),
16246                           Bop(And,Mop(Not,bVar"b'29"),
16247                               Bop(And,Mop(Not,bVar"b'28"),
16248                                   Bop(And,Mop(Not,bVar"b'27"),
16249                                       Bop(And,Mop(Not,bVar"b'26"),
16250                                           Bop(And,bVar"b'25",
16251                                               Bop(And,
16252                                                   Mop(Not,bVar"b'14"),
16253                                                   Bop(And,
16254                                                       Mop(Not,bVar"b'13"),
16255                                                       Bop(And,
16256                                                           Mop(Not,
16257                                                               bVar"b'12"),
16258                                                           Bop(And,
16259                                                               bVar"b'5",
16260                                                               Bop(And,
16261                                                                   bVar"b'4",
16262                                                                   Bop(And,
16263                                                                       bVar"b'3",
16264                                                                       Mop(Not,
16265                                                                           bVar"b'2")))))))))))))),
16266                   Call
16267                     ("MulDiv",CTy"instruction",
16268                      Call
16269                        ("MULW",CTy"MulDiv",
16270                         TP[Mop(Cast(FTy 5),
16271                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
16272                                   bVar"b'8",bVar"b'7"]),
16273                            Mop(Cast(FTy 5),
16274                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16275                                   bVar"b'16",bVar"b'15"]),
16276                            Mop(Cast(FTy 5),
16277                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
16278                                   bVar"b'21",bVar"b'20"])]))),
16279                  (Bop(And,Mop(Not,bVar"b'31"),
16280                       Bop(And,Mop(Not,bVar"b'30"),
16281                           Bop(And,Mop(Not,bVar"b'29"),
16282                               Bop(And,Mop(Not,bVar"b'28"),
16283                                   Bop(And,Mop(Not,bVar"b'27"),
16284                                       Bop(And,Mop(Not,bVar"b'26"),
16285                                           Bop(And,bVar"b'25",
16286                                               Bop(And,bVar"b'14",
16287                                                   Bop(And,
16288                                                       Mop(Not,bVar"b'13"),
16289                                                       Bop(And,
16290                                                           Mop(Not,
16291                                                               bVar"b'12"),
16292                                                           Bop(And,
16293                                                               bVar"b'5",
16294                                                               Bop(And,
16295                                                                   bVar"b'4",
16296                                                                   Bop(And,
16297                                                                       bVar"b'3",
16298                                                                       Mop(Not,
16299                                                                           bVar"b'2")))))))))))))),
16300                   Call
16301                     ("MulDiv",CTy"instruction",
16302                      Call
16303                        ("DIVW",CTy"MulDiv",
16304                         TP[Mop(Cast(FTy 5),
16305                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
16306                                   bVar"b'8",bVar"b'7"]),
16307                            Mop(Cast(FTy 5),
16308                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16309                                   bVar"b'16",bVar"b'15"]),
16310                            Mop(Cast(FTy 5),
16311                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
16312                                   bVar"b'21",bVar"b'20"])]))),
16313                  (Bop(And,Mop(Not,bVar"b'31"),
16314                       Bop(And,Mop(Not,bVar"b'30"),
16315                           Bop(And,Mop(Not,bVar"b'29"),
16316                               Bop(And,Mop(Not,bVar"b'28"),
16317                                   Bop(And,Mop(Not,bVar"b'27"),
16318                                       Bop(And,Mop(Not,bVar"b'26"),
16319                                           Bop(And,bVar"b'25",
16320                                               Bop(And,bVar"b'14",
16321                                                   Bop(And,
16322                                                       Mop(Not,bVar"b'13"),
16323                                                       Bop(And,bVar"b'12",
16324                                                           Bop(And,
16325                                                               bVar"b'5",
16326                                                               Bop(And,
16327                                                                   bVar"b'4",
16328                                                                   Bop(And,
16329                                                                       bVar"b'3",
16330                                                                       Mop(Not,
16331                                                                           bVar"b'2")))))))))))))),
16332                   Call
16333                     ("MulDiv",CTy"instruction",
16334                      Call
16335                        ("DIVUW",CTy"MulDiv",
16336                         TP[Mop(Cast(FTy 5),
16337                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
16338                                   bVar"b'8",bVar"b'7"]),
16339                            Mop(Cast(FTy 5),
16340                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16341                                   bVar"b'16",bVar"b'15"]),
16342                            Mop(Cast(FTy 5),
16343                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
16344                                   bVar"b'21",bVar"b'20"])]))),
16345                  (Bop(And,Mop(Not,bVar"b'31"),
16346                       Bop(And,Mop(Not,bVar"b'30"),
16347                           Bop(And,Mop(Not,bVar"b'29"),
16348                               Bop(And,Mop(Not,bVar"b'28"),
16349                                   Bop(And,Mop(Not,bVar"b'27"),
16350                                       Bop(And,Mop(Not,bVar"b'26"),
16351                                           Bop(And,bVar"b'25",
16352                                               Bop(And,bVar"b'14",
16353                                                   Bop(And,bVar"b'13",
16354                                                       Bop(And,
16355                                                           Mop(Not,
16356                                                               bVar"b'12"),
16357                                                           Bop(And,
16358                                                               bVar"b'5",
16359                                                               Bop(And,
16360                                                                   bVar"b'4",
16361                                                                   Bop(And,
16362                                                                       bVar"b'3",
16363                                                                       Mop(Not,
16364                                                                           bVar"b'2")))))))))))))),
16365                   Call
16366                     ("MulDiv",CTy"instruction",
16367                      Call
16368                        ("REMW",CTy"MulDiv",
16369                         TP[Mop(Cast(FTy 5),
16370                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
16371                                   bVar"b'8",bVar"b'7"]),
16372                            Mop(Cast(FTy 5),
16373                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16374                                   bVar"b'16",bVar"b'15"]),
16375                            Mop(Cast(FTy 5),
16376                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
16377                                   bVar"b'21",bVar"b'20"])]))),
16378                  (Bop(And,Mop(Not,bVar"b'31"),
16379                       Bop(And,Mop(Not,bVar"b'30"),
16380                           Bop(And,Mop(Not,bVar"b'29"),
16381                               Bop(And,Mop(Not,bVar"b'28"),
16382                                   Bop(And,Mop(Not,bVar"b'27"),
16383                                       Bop(And,Mop(Not,bVar"b'26"),
16384                                           Bop(And,bVar"b'25",
16385                                               Bop(And,bVar"b'14",
16386                                                   Bop(And,bVar"b'13",
16387                                                       Bop(And,bVar"b'12",
16388                                                           Bop(And,
16389                                                               bVar"b'5",
16390                                                               Bop(And,
16391                                                                   bVar"b'4",
16392                                                                   Bop(And,
16393                                                                       bVar"b'3",
16394                                                                       Mop(Not,
16395                                                                           bVar"b'2")))))))))))))),
16396                   Call
16397                     ("MulDiv",CTy"instruction",
16398                      Call
16399                        ("REMUW",CTy"MulDiv",
16400                         TP[Mop(Cast(FTy 5),
16401                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
16402                                   bVar"b'8",bVar"b'7"]),
16403                            Mop(Cast(FTy 5),
16404                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16405                                   bVar"b'16",bVar"b'15"]),
16406                            Mop(Cast(FTy 5),
16407                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
16408                                   bVar"b'21",bVar"b'20"])]))),
16409                  (Bop(And,Mop(Not,bVar"b'14"),
16410                       Bop(And,Mop(Not,bVar"b'13"),
16411                           Bop(And,Mop(Not,bVar"b'12"),
16412                               Bop(And,Mop(Not,bVar"b'5"),
16413                                   Bop(And,Mop(Not,bVar"b'4"),
16414                                       Bop(And,Mop(Not,bVar"b'3"),
16415                                           Mop(Not,bVar"b'2"))))))),
16416                   Call
16417                     ("Load",CTy"instruction",
16418                      Call
16419                        ("LB",CTy"Load",
16420                         TP[Mop(Cast(FTy 5),
16421                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
16422                                   bVar"b'8",bVar"b'7"]),
16423                            Mop(Cast(FTy 5),
16424                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16425                                   bVar"b'16",bVar"b'15"]),
16426                            Mop(Cast(FTy 12),
16427                                LL[bVar"b'31",bVar"b'30",bVar"b'29",
16428                                   bVar"b'28",bVar"b'27",bVar"b'26",
16429                                   bVar"b'25",bVar"b'24",bVar"b'23",
16430                                   bVar"b'22",bVar"b'21",bVar"b'20"])]))),
16431                  (Bop(And,Mop(Not,bVar"b'14"),
16432                       Bop(And,Mop(Not,bVar"b'13"),
16433                           Bop(And,bVar"b'12",
16434                               Bop(And,Mop(Not,bVar"b'5"),
16435                                   Bop(And,Mop(Not,bVar"b'4"),
16436                                       Bop(And,Mop(Not,bVar"b'3"),
16437                                           Mop(Not,bVar"b'2"))))))),
16438                   Call
16439                     ("Load",CTy"instruction",
16440                      Call
16441                        ("LH",CTy"Load",
16442                         TP[Mop(Cast(FTy 5),
16443                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
16444                                   bVar"b'8",bVar"b'7"]),
16445                            Mop(Cast(FTy 5),
16446                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16447                                   bVar"b'16",bVar"b'15"]),
16448                            Mop(Cast(FTy 12),
16449                                LL[bVar"b'31",bVar"b'30",bVar"b'29",
16450                                   bVar"b'28",bVar"b'27",bVar"b'26",
16451                                   bVar"b'25",bVar"b'24",bVar"b'23",
16452                                   bVar"b'22",bVar"b'21",bVar"b'20"])]))),
16453                  (Bop(And,Mop(Not,bVar"b'14"),
16454                       Bop(And,bVar"b'13",
16455                           Bop(And,Mop(Not,bVar"b'12"),
16456                               Bop(And,Mop(Not,bVar"b'5"),
16457                                   Bop(And,Mop(Not,bVar"b'4"),
16458                                       Bop(And,Mop(Not,bVar"b'3"),
16459                                           Mop(Not,bVar"b'2"))))))),
16460                   Call
16461                     ("Load",CTy"instruction",
16462                      Call
16463                        ("LW",CTy"Load",
16464                         TP[Mop(Cast(FTy 5),
16465                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
16466                                   bVar"b'8",bVar"b'7"]),
16467                            Mop(Cast(FTy 5),
16468                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16469                                   bVar"b'16",bVar"b'15"]),
16470                            Mop(Cast(FTy 12),
16471                                LL[bVar"b'31",bVar"b'30",bVar"b'29",
16472                                   bVar"b'28",bVar"b'27",bVar"b'26",
16473                                   bVar"b'25",bVar"b'24",bVar"b'23",
16474                                   bVar"b'22",bVar"b'21",bVar"b'20"])]))),
16475                  (Bop(And,Mop(Not,bVar"b'14"),
16476                       Bop(And,bVar"b'13",
16477                           Bop(And,bVar"b'12",
16478                               Bop(And,Mop(Not,bVar"b'5"),
16479                                   Bop(And,Mop(Not,bVar"b'4"),
16480                                       Bop(And,Mop(Not,bVar"b'3"),
16481                                           Mop(Not,bVar"b'2"))))))),
16482                   Call
16483                     ("Load",CTy"instruction",
16484                      Call
16485                        ("LD",CTy"Load",
16486                         TP[Mop(Cast(FTy 5),
16487                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
16488                                   bVar"b'8",bVar"b'7"]),
16489                            Mop(Cast(FTy 5),
16490                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16491                                   bVar"b'16",bVar"b'15"]),
16492                            Mop(Cast(FTy 12),
16493                                LL[bVar"b'31",bVar"b'30",bVar"b'29",
16494                                   bVar"b'28",bVar"b'27",bVar"b'26",
16495                                   bVar"b'25",bVar"b'24",bVar"b'23",
16496                                   bVar"b'22",bVar"b'21",bVar"b'20"])]))),
16497                  (Bop(And,bVar"b'14",
16498                       Bop(And,Mop(Not,bVar"b'13"),
16499                           Bop(And,Mop(Not,bVar"b'12"),
16500                               Bop(And,Mop(Not,bVar"b'5"),
16501                                   Bop(And,Mop(Not,bVar"b'4"),
16502                                       Bop(And,Mop(Not,bVar"b'3"),
16503                                           Mop(Not,bVar"b'2"))))))),
16504                   Call
16505                     ("Load",CTy"instruction",
16506                      Call
16507                        ("LBU",CTy"Load",
16508                         TP[Mop(Cast(FTy 5),
16509                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
16510                                   bVar"b'8",bVar"b'7"]),
16511                            Mop(Cast(FTy 5),
16512                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16513                                   bVar"b'16",bVar"b'15"]),
16514                            Mop(Cast(FTy 12),
16515                                LL[bVar"b'31",bVar"b'30",bVar"b'29",
16516                                   bVar"b'28",bVar"b'27",bVar"b'26",
16517                                   bVar"b'25",bVar"b'24",bVar"b'23",
16518                                   bVar"b'22",bVar"b'21",bVar"b'20"])]))),
16519                  (Bop(And,bVar"b'14",
16520                       Bop(And,Mop(Not,bVar"b'13"),
16521                           Bop(And,bVar"b'12",
16522                               Bop(And,Mop(Not,bVar"b'5"),
16523                                   Bop(And,Mop(Not,bVar"b'4"),
16524                                       Bop(And,Mop(Not,bVar"b'3"),
16525                                           Mop(Not,bVar"b'2"))))))),
16526                   Call
16527                     ("Load",CTy"instruction",
16528                      Call
16529                        ("LHU",CTy"Load",
16530                         TP[Mop(Cast(FTy 5),
16531                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
16532                                   bVar"b'8",bVar"b'7"]),
16533                            Mop(Cast(FTy 5),
16534                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16535                                   bVar"b'16",bVar"b'15"]),
16536                            Mop(Cast(FTy 12),
16537                                LL[bVar"b'31",bVar"b'30",bVar"b'29",
16538                                   bVar"b'28",bVar"b'27",bVar"b'26",
16539                                   bVar"b'25",bVar"b'24",bVar"b'23",
16540                                   bVar"b'22",bVar"b'21",bVar"b'20"])]))),
16541                  (Bop(And,bVar"b'14",
16542                       Bop(And,bVar"b'13",
16543                           Bop(And,Mop(Not,bVar"b'12"),
16544                               Bop(And,Mop(Not,bVar"b'5"),
16545                                   Bop(And,Mop(Not,bVar"b'4"),
16546                                       Bop(And,Mop(Not,bVar"b'3"),
16547                                           Mop(Not,bVar"b'2"))))))),
16548                   Call
16549                     ("Load",CTy"instruction",
16550                      Call
16551                        ("LWU",CTy"Load",
16552                         TP[Mop(Cast(FTy 5),
16553                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
16554                                   bVar"b'8",bVar"b'7"]),
16555                            Mop(Cast(FTy 5),
16556                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16557                                   bVar"b'16",bVar"b'15"]),
16558                            Mop(Cast(FTy 12),
16559                                LL[bVar"b'31",bVar"b'30",bVar"b'29",
16560                                   bVar"b'28",bVar"b'27",bVar"b'26",
16561                                   bVar"b'25",bVar"b'24",bVar"b'23",
16562                                   bVar"b'22",bVar"b'21",bVar"b'20"])]))),
16563                  (Bop(And,Mop(Not,bVar"b'14"),
16564                       Bop(And,Mop(Not,bVar"b'13"),
16565                           Bop(And,Mop(Not,bVar"b'12"),
16566                               Bop(And,bVar"b'5",
16567                                   Bop(And,Mop(Not,bVar"b'4"),
16568                                       Bop(And,Mop(Not,bVar"b'3"),
16569                                           Mop(Not,bVar"b'2"))))))),
16570                   Call
16571                     ("Store",CTy"instruction",
16572                      Call
16573                        ("SB",CTy"Store",
16574                         TP[Mop(Cast(FTy 5),
16575                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16576                                   bVar"b'16",bVar"b'15"]),
16577                            Mop(Cast(FTy 5),
16578                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
16579                                   bVar"b'21",bVar"b'20"]),
16580                            Call
16581                              ("asSImm12",FTy 12,
16582                               TP[Mop(Cast(FTy 7),
16583                                      LL[bVar"b'31",bVar"b'30",bVar"b'29",
16584                                         bVar"b'28",bVar"b'27",bVar"b'26",
16585                                         bVar"b'25"]),
16586                                  Mop(Cast(FTy 5),
16587                                      LL[bVar"b'11",bVar"b'10",bVar"b'9",
16588                                         bVar"b'8",bVar"b'7"])])]))),
16589                  (Bop(And,Mop(Not,bVar"b'14"),
16590                       Bop(And,Mop(Not,bVar"b'13"),
16591                           Bop(And,bVar"b'12",
16592                               Bop(And,bVar"b'5",
16593                                   Bop(And,Mop(Not,bVar"b'4"),
16594                                       Bop(And,Mop(Not,bVar"b'3"),
16595                                           Mop(Not,bVar"b'2"))))))),
16596                   Call
16597                     ("Store",CTy"instruction",
16598                      Call
16599                        ("SH",CTy"Store",
16600                         TP[Mop(Cast(FTy 5),
16601                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16602                                   bVar"b'16",bVar"b'15"]),
16603                            Mop(Cast(FTy 5),
16604                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
16605                                   bVar"b'21",bVar"b'20"]),
16606                            Call
16607                              ("asSImm12",FTy 12,
16608                               TP[Mop(Cast(FTy 7),
16609                                      LL[bVar"b'31",bVar"b'30",bVar"b'29",
16610                                         bVar"b'28",bVar"b'27",bVar"b'26",
16611                                         bVar"b'25"]),
16612                                  Mop(Cast(FTy 5),
16613                                      LL[bVar"b'11",bVar"b'10",bVar"b'9",
16614                                         bVar"b'8",bVar"b'7"])])]))),
16615                  (Bop(And,Mop(Not,bVar"b'14"),
16616                       Bop(And,bVar"b'13",
16617                           Bop(And,Mop(Not,bVar"b'12"),
16618                               Bop(And,bVar"b'5",
16619                                   Bop(And,Mop(Not,bVar"b'4"),
16620                                       Bop(And,Mop(Not,bVar"b'3"),
16621                                           Mop(Not,bVar"b'2"))))))),
16622                   Call
16623                     ("Store",CTy"instruction",
16624                      Call
16625                        ("SW",CTy"Store",
16626                         TP[Mop(Cast(FTy 5),
16627                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16628                                   bVar"b'16",bVar"b'15"]),
16629                            Mop(Cast(FTy 5),
16630                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
16631                                   bVar"b'21",bVar"b'20"]),
16632                            Call
16633                              ("asSImm12",FTy 12,
16634                               TP[Mop(Cast(FTy 7),
16635                                      LL[bVar"b'31",bVar"b'30",bVar"b'29",
16636                                         bVar"b'28",bVar"b'27",bVar"b'26",
16637                                         bVar"b'25"]),
16638                                  Mop(Cast(FTy 5),
16639                                      LL[bVar"b'11",bVar"b'10",bVar"b'9",
16640                                         bVar"b'8",bVar"b'7"])])]))),
16641                  (Bop(And,Mop(Not,bVar"b'14"),
16642                       Bop(And,bVar"b'13",
16643                           Bop(And,bVar"b'12",
16644                               Bop(And,bVar"b'5",
16645                                   Bop(And,Mop(Not,bVar"b'4"),
16646                                       Bop(And,Mop(Not,bVar"b'3"),
16647                                           Mop(Not,bVar"b'2"))))))),
16648                   Call
16649                     ("Store",CTy"instruction",
16650                      Call
16651                        ("SD",CTy"Store",
16652                         TP[Mop(Cast(FTy 5),
16653                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16654                                   bVar"b'16",bVar"b'15"]),
16655                            Mop(Cast(FTy 5),
16656                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
16657                                   bVar"b'21",bVar"b'20"]),
16658                            Call
16659                              ("asSImm12",FTy 12,
16660                               TP[Mop(Cast(FTy 7),
16661                                      LL[bVar"b'31",bVar"b'30",bVar"b'29",
16662                                         bVar"b'28",bVar"b'27",bVar"b'26",
16663                                         bVar"b'25"]),
16664                                  Mop(Cast(FTy 5),
16665                                      LL[bVar"b'11",bVar"b'10",bVar"b'9",
16666                                         bVar"b'8",bVar"b'7"])])]))),
16667                  (Bop(And,Mop(Not,bVar"b'14"),
16668                       Bop(And,Mop(Not,bVar"b'13"),
16669                           Bop(And,Mop(Not,bVar"b'12"),
16670                               Bop(And,Mop(Not,bVar"b'5"),
16671                                   Bop(And,Mop(Not,bVar"b'4"),
16672                                       Bop(And,bVar"b'3",bVar"b'2")))))),
16673                   Call
16674                     ("FENCE",CTy"instruction",
16675                      TP[Mop(Cast(FTy 5),
16676                             LL[bVar"b'11",bVar"b'10",bVar"b'9",bVar"b'8",
16677                                bVar"b'7"]),
16678                         Mop(Cast(FTy 5),
16679                             LL[bVar"b'19",bVar"b'18",bVar"b'17",
16680                                bVar"b'16",bVar"b'15"]),
16681                         Mop(Cast F4,
16682                             LL[bVar"b'27",bVar"b'26",bVar"b'25",
16683                                bVar"b'24"]),
16684                         Mop(Cast F4,
16685                             LL[bVar"b'23",bVar"b'22",bVar"b'21",
16686                                bVar"b'20"])])),
16687                  (Bop(And,Mop(Not,bVar"b'14"),
16688                       Bop(And,Mop(Not,bVar"b'13"),
16689                           Bop(And,bVar"b'12",
16690                               Bop(And,Mop(Not,bVar"b'5"),
16691                                   Bop(And,Mop(Not,bVar"b'4"),
16692                                       Bop(And,bVar"b'3",bVar"b'2")))))),
16693                   Call
16694                     ("FENCE_I",CTy"instruction",
16695                      TP[Mop(Cast(FTy 5),
16696                             LL[bVar"b'11",bVar"b'10",bVar"b'9",bVar"b'8",
16697                                bVar"b'7"]),
16698                         Mop(Cast(FTy 5),
16699                             LL[bVar"b'19",bVar"b'18",bVar"b'17",
16700                                bVar"b'16",bVar"b'15"]),
16701                         Mop(Cast(FTy 12),
16702                             LL[bVar"b'31",bVar"b'30",bVar"b'29",
16703                                bVar"b'28",bVar"b'27",bVar"b'26",
16704                                bVar"b'25",bVar"b'24",bVar"b'23",
16705                                bVar"b'22",bVar"b'21",bVar"b'20"])])),
16706                  (Bop(And,Mop(Not,bVar"b'14"),
16707                       Bop(And,bVar"b'13",
16708                           Bop(And,Mop(Not,bVar"b'12"),
16709                               Bop(And,Mop(Not,bVar"b'5"),
16710                                   Bop(And,Mop(Not,bVar"b'4"),
16711                                       Bop(And,Mop(Not,bVar"b'3"),
16712                                           bVar"b'2")))))),
16713                   Call
16714                     ("FPLoad",CTy"instruction",
16715                      Call
16716                        ("FLW",CTy"FPLoad",
16717                         TP[Mop(Cast(FTy 5),
16718                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
16719                                   bVar"b'8",bVar"b'7"]),
16720                            Mop(Cast(FTy 5),
16721                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16722                                   bVar"b'16",bVar"b'15"]),
16723                            Mop(Cast(FTy 12),
16724                                LL[bVar"b'31",bVar"b'30",bVar"b'29",
16725                                   bVar"b'28",bVar"b'27",bVar"b'26",
16726                                   bVar"b'25",bVar"b'24",bVar"b'23",
16727                                   bVar"b'22",bVar"b'21",bVar"b'20"])]))),
16728                  (Bop(And,Mop(Not,bVar"b'14"),
16729                       Bop(And,bVar"b'13",
16730                           Bop(And,bVar"b'12",
16731                               Bop(And,Mop(Not,bVar"b'5"),
16732                                   Bop(And,Mop(Not,bVar"b'4"),
16733                                       Bop(And,Mop(Not,bVar"b'3"),
16734                                           bVar"b'2")))))),
16735                   Call
16736                     ("FPLoad",CTy"instruction",
16737                      Call
16738                        ("FLD",CTy"FPLoad",
16739                         TP[Mop(Cast(FTy 5),
16740                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
16741                                   bVar"b'8",bVar"b'7"]),
16742                            Mop(Cast(FTy 5),
16743                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16744                                   bVar"b'16",bVar"b'15"]),
16745                            Mop(Cast(FTy 12),
16746                                LL[bVar"b'31",bVar"b'30",bVar"b'29",
16747                                   bVar"b'28",bVar"b'27",bVar"b'26",
16748                                   bVar"b'25",bVar"b'24",bVar"b'23",
16749                                   bVar"b'22",bVar"b'21",bVar"b'20"])]))),
16750                  (Bop(And,Mop(Not,bVar"b'14"),
16751                       Bop(And,bVar"b'13",
16752                           Bop(And,Mop(Not,bVar"b'12"),
16753                               Bop(And,bVar"b'5",
16754                                   Bop(And,Mop(Not,bVar"b'4"),
16755                                       Bop(And,Mop(Not,bVar"b'3"),
16756                                           bVar"b'2")))))),
16757                   Call
16758                     ("FPStore",CTy"instruction",
16759                      Call
16760                        ("FSW",CTy"FPStore",
16761                         TP[Mop(Cast(FTy 5),
16762                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16763                                   bVar"b'16",bVar"b'15"]),
16764                            Mop(Cast(FTy 5),
16765                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
16766                                   bVar"b'21",bVar"b'20"]),
16767                            Call
16768                              ("asSImm12",FTy 12,
16769                               TP[Mop(Cast(FTy 7),
16770                                      LL[bVar"b'31",bVar"b'30",bVar"b'29",
16771                                         bVar"b'28",bVar"b'27",bVar"b'26",
16772                                         bVar"b'25"]),
16773                                  Mop(Cast(FTy 5),
16774                                      LL[bVar"b'11",bVar"b'10",bVar"b'9",
16775                                         bVar"b'8",bVar"b'7"])])]))),
16776                  (Bop(And,Mop(Not,bVar"b'14"),
16777                       Bop(And,bVar"b'13",
16778                           Bop(And,bVar"b'12",
16779                               Bop(And,bVar"b'5",
16780                                   Bop(And,Mop(Not,bVar"b'4"),
16781                                       Bop(And,Mop(Not,bVar"b'3"),
16782                                           bVar"b'2")))))),
16783                   Call
16784                     ("FPStore",CTy"instruction",
16785                      Call
16786                        ("FSD",CTy"FPStore",
16787                         TP[Mop(Cast(FTy 5),
16788                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16789                                   bVar"b'16",bVar"b'15"]),
16790                            Mop(Cast(FTy 5),
16791                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
16792                                   bVar"b'21",bVar"b'20"]),
16793                            Call
16794                              ("asSImm12",FTy 12,
16795                               TP[Mop(Cast(FTy 7),
16796                                      LL[bVar"b'31",bVar"b'30",bVar"b'29",
16797                                         bVar"b'28",bVar"b'27",bVar"b'26",
16798                                         bVar"b'25"]),
16799                                  Mop(Cast(FTy 5),
16800                                      LL[bVar"b'11",bVar"b'10",bVar"b'9",
16801                                         bVar"b'8",bVar"b'7"])])]))),
16802                  (Bop(And,Mop(Not,bVar"b'31"),
16803                       Bop(And,Mop(Not,bVar"b'30"),
16804                           Bop(And,Mop(Not,bVar"b'29"),
16805                               Bop(And,bVar"b'28",
16806                                   Bop(And,Mop(Not,bVar"b'27"),
16807                                       Bop(And,Mop(Not,bVar"b'24"),
16808                                           Bop(And,Mop(Not,bVar"b'23"),
16809                                               Bop(And,
16810                                                   Mop(Not,bVar"b'22"),
16811                                                   Bop(And,
16812                                                       Mop(Not,bVar"b'21"),
16813                                                       Bop(And,
16814                                                           Mop(Not,
16815                                                               bVar"b'20"),
16816                                                           Bop(And,
16817                                                               Mop(Not,
16818                                                                   bVar"b'14"),
16819                                                               Bop(And,
16820                                                                   bVar"b'13",
16821                                                                   Bop(And,
16822                                                                       Mop(Not,
16823                                                                           bVar"b'12"),
16824                                                                       Bop(And,
16825                                                                           bVar"b'5",
16826                                                                           Bop(And,
16827                                                                               Mop(Not,
16828                                                                                   bVar"b'4"),
16829                                                                               Bop(And,
16830                                                                                   bVar"b'3",
16831                                                                                   bVar"b'2")))))))))))))))),
16832                   Call
16833                     ("AMO",CTy"instruction",
16834                      Call
16835                        ("LR_W",CTy"AMO",
16836                         TP[Mop(Cast F1,LL[bVar"b'26"]),
16837                            Mop(Cast F1,LL[bVar"b'25"]),
16838                            Mop(Cast(FTy 5),
16839                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
16840                                   bVar"b'8",bVar"b'7"]),
16841                            Mop(Cast(FTy 5),
16842                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16843                                   bVar"b'16",bVar"b'15"])]))),
16844                  (Bop(And,Mop(Not,bVar"b'31"),
16845                       Bop(And,Mop(Not,bVar"b'30"),
16846                           Bop(And,Mop(Not,bVar"b'29"),
16847                               Bop(And,bVar"b'28",
16848                                   Bop(And,Mop(Not,bVar"b'27"),
16849                                       Bop(And,Mop(Not,bVar"b'24"),
16850                                           Bop(And,Mop(Not,bVar"b'23"),
16851                                               Bop(And,
16852                                                   Mop(Not,bVar"b'22"),
16853                                                   Bop(And,
16854                                                       Mop(Not,bVar"b'21"),
16855                                                       Bop(And,
16856                                                           Mop(Not,
16857                                                               bVar"b'20"),
16858                                                           Bop(And,
16859                                                               Mop(Not,
16860                                                                   bVar"b'14"),
16861                                                               Bop(And,
16862                                                                   bVar"b'13",
16863                                                                   Bop(And,
16864                                                                       bVar"b'12",
16865                                                                       Bop(And,
16866                                                                           bVar"b'5",
16867                                                                           Bop(And,
16868                                                                               Mop(Not,
16869                                                                                   bVar"b'4"),
16870                                                                               Bop(And,
16871                                                                                   bVar"b'3",
16872                                                                                   bVar"b'2")))))))))))))))),
16873                   Call
16874                     ("AMO",CTy"instruction",
16875                      Call
16876                        ("LR_D",CTy"AMO",
16877                         TP[Mop(Cast F1,LL[bVar"b'26"]),
16878                            Mop(Cast F1,LL[bVar"b'25"]),
16879                            Mop(Cast(FTy 5),
16880                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
16881                                   bVar"b'8",bVar"b'7"]),
16882                            Mop(Cast(FTy 5),
16883                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16884                                   bVar"b'16",bVar"b'15"])]))),
16885                  (Bop(And,Mop(Not,bVar"b'31"),
16886                       Bop(And,Mop(Not,bVar"b'30"),
16887                           Bop(And,Mop(Not,bVar"b'29"),
16888                               Bop(And,bVar"b'28",
16889                                   Bop(And,bVar"b'27",
16890                                       Bop(And,Mop(Not,bVar"b'14"),
16891                                           Bop(And,bVar"b'13",
16892                                               Bop(And,
16893                                                   Mop(Not,bVar"b'12"),
16894                                                   Bop(And,bVar"b'5",
16895                                                       Bop(And,
16896                                                           Mop(Not,
16897                                                               bVar"b'4"),
16898                                                           Bop(And,
16899                                                               bVar"b'3",
16900                                                               bVar"b'2"))))))))))),
16901                   Call
16902                     ("AMO",CTy"instruction",
16903                      Call
16904                        ("SC_W",CTy"AMO",
16905                         TP[Mop(Cast F1,LL[bVar"b'26"]),
16906                            Mop(Cast F1,LL[bVar"b'25"]),
16907                            Mop(Cast(FTy 5),
16908                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
16909                                   bVar"b'8",bVar"b'7"]),
16910                            Mop(Cast(FTy 5),
16911                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16912                                   bVar"b'16",bVar"b'15"]),
16913                            Mop(Cast(FTy 5),
16914                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
16915                                   bVar"b'21",bVar"b'20"])]))),
16916                  (Bop(And,Mop(Not,bVar"b'31"),
16917                       Bop(And,Mop(Not,bVar"b'30"),
16918                           Bop(And,Mop(Not,bVar"b'29"),
16919                               Bop(And,bVar"b'28",
16920                                   Bop(And,bVar"b'27",
16921                                       Bop(And,Mop(Not,bVar"b'14"),
16922                                           Bop(And,bVar"b'13",
16923                                               Bop(And,bVar"b'12",
16924                                                   Bop(And,bVar"b'5",
16925                                                       Bop(And,
16926                                                           Mop(Not,
16927                                                               bVar"b'4"),
16928                                                           Bop(And,
16929                                                               bVar"b'3",
16930                                                               bVar"b'2"))))))))))),
16931                   Call
16932                     ("AMO",CTy"instruction",
16933                      Call
16934                        ("SC_D",CTy"AMO",
16935                         TP[Mop(Cast F1,LL[bVar"b'26"]),
16936                            Mop(Cast F1,LL[bVar"b'25"]),
16937                            Mop(Cast(FTy 5),
16938                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
16939                                   bVar"b'8",bVar"b'7"]),
16940                            Mop(Cast(FTy 5),
16941                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16942                                   bVar"b'16",bVar"b'15"]),
16943                            Mop(Cast(FTy 5),
16944                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
16945                                   bVar"b'21",bVar"b'20"])]))),
16946                  (Bop(And,Mop(Not,bVar"b'31"),
16947                       Bop(And,Mop(Not,bVar"b'30"),
16948                           Bop(And,Mop(Not,bVar"b'29"),
16949                               Bop(And,Mop(Not,bVar"b'28"),
16950                                   Bop(And,bVar"b'27",
16951                                       Bop(And,Mop(Not,bVar"b'14"),
16952                                           Bop(And,bVar"b'13",
16953                                               Bop(And,
16954                                                   Mop(Not,bVar"b'12"),
16955                                                   Bop(And,bVar"b'5",
16956                                                       Bop(And,
16957                                                           Mop(Not,
16958                                                               bVar"b'4"),
16959                                                           Bop(And,
16960                                                               bVar"b'3",
16961                                                               bVar"b'2"))))))))))),
16962                   Call
16963                     ("AMO",CTy"instruction",
16964                      Call
16965                        ("AMOSWAP_W",CTy"AMO",
16966                         TP[Mop(Cast F1,LL[bVar"b'26"]),
16967                            Mop(Cast F1,LL[bVar"b'25"]),
16968                            Mop(Cast(FTy 5),
16969                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
16970                                   bVar"b'8",bVar"b'7"]),
16971                            Mop(Cast(FTy 5),
16972                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
16973                                   bVar"b'16",bVar"b'15"]),
16974                            Mop(Cast(FTy 5),
16975                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
16976                                   bVar"b'21",bVar"b'20"])]))),
16977                  (Bop(And,Mop(Not,bVar"b'31"),
16978                       Bop(And,Mop(Not,bVar"b'30"),
16979                           Bop(And,Mop(Not,bVar"b'29"),
16980                               Bop(And,Mop(Not,bVar"b'28"),
16981                                   Bop(And,Mop(Not,bVar"b'27"),
16982                                       Bop(And,Mop(Not,bVar"b'14"),
16983                                           Bop(And,bVar"b'13",
16984                                               Bop(And,
16985                                                   Mop(Not,bVar"b'12"),
16986                                                   Bop(And,bVar"b'5",
16987                                                       Bop(And,
16988                                                           Mop(Not,
16989                                                               bVar"b'4"),
16990                                                           Bop(And,
16991                                                               bVar"b'3",
16992                                                               bVar"b'2"))))))))))),
16993                   Call
16994                     ("AMO",CTy"instruction",
16995                      Call
16996                        ("AMOADD_W",CTy"AMO",
16997                         TP[Mop(Cast F1,LL[bVar"b'26"]),
16998                            Mop(Cast F1,LL[bVar"b'25"]),
16999                            Mop(Cast(FTy 5),
17000                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
17001                                   bVar"b'8",bVar"b'7"]),
17002                            Mop(Cast(FTy 5),
17003                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
17004                                   bVar"b'16",bVar"b'15"]),
17005                            Mop(Cast(FTy 5),
17006                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
17007                                   bVar"b'21",bVar"b'20"])]))),
17008                  (Bop(And,Mop(Not,bVar"b'31"),
17009                       Bop(And,Mop(Not,bVar"b'30"),
17010                           Bop(And,bVar"b'29",
17011                               Bop(And,Mop(Not,bVar"b'28"),
17012                                   Bop(And,Mop(Not,bVar"b'27"),
17013                                       Bop(And,Mop(Not,bVar"b'14"),
17014                                           Bop(And,bVar"b'13",
17015                                               Bop(And,
17016                                                   Mop(Not,bVar"b'12"),
17017                                                   Bop(And,bVar"b'5",
17018                                                       Bop(And,
17019                                                           Mop(Not,
17020                                                               bVar"b'4"),
17021                                                           Bop(And,
17022                                                               bVar"b'3",
17023                                                               bVar"b'2"))))))))))),
17024                   Call
17025                     ("AMO",CTy"instruction",
17026                      Call
17027                        ("AMOXOR_W",CTy"AMO",
17028                         TP[Mop(Cast F1,LL[bVar"b'26"]),
17029                            Mop(Cast F1,LL[bVar"b'25"]),
17030                            Mop(Cast(FTy 5),
17031                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
17032                                   bVar"b'8",bVar"b'7"]),
17033                            Mop(Cast(FTy 5),
17034                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
17035                                   bVar"b'16",bVar"b'15"]),
17036                            Mop(Cast(FTy 5),
17037                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
17038                                   bVar"b'21",bVar"b'20"])]))),
17039                  (Bop(And,Mop(Not,bVar"b'31"),
17040                       Bop(And,bVar"b'30",
17041                           Bop(And,bVar"b'29",
17042                               Bop(And,Mop(Not,bVar"b'28"),
17043                                   Bop(And,Mop(Not,bVar"b'27"),
17044                                       Bop(And,Mop(Not,bVar"b'14"),
17045                                           Bop(And,bVar"b'13",
17046                                               Bop(And,
17047                                                   Mop(Not,bVar"b'12"),
17048                                                   Bop(And,bVar"b'5",
17049                                                       Bop(And,
17050                                                           Mop(Not,
17051                                                               bVar"b'4"),
17052                                                           Bop(And,
17053                                                               bVar"b'3",
17054                                                               bVar"b'2"))))))))))),
17055                   Call
17056                     ("AMO",CTy"instruction",
17057                      Call
17058                        ("AMOAND_W",CTy"AMO",
17059                         TP[Mop(Cast F1,LL[bVar"b'26"]),
17060                            Mop(Cast F1,LL[bVar"b'25"]),
17061                            Mop(Cast(FTy 5),
17062                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
17063                                   bVar"b'8",bVar"b'7"]),
17064                            Mop(Cast(FTy 5),
17065                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
17066                                   bVar"b'16",bVar"b'15"]),
17067                            Mop(Cast(FTy 5),
17068                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
17069                                   bVar"b'21",bVar"b'20"])]))),
17070                  (Bop(And,Mop(Not,bVar"b'31"),
17071                       Bop(And,bVar"b'30",
17072                           Bop(And,Mop(Not,bVar"b'29"),
17073                               Bop(And,Mop(Not,bVar"b'28"),
17074                                   Bop(And,Mop(Not,bVar"b'27"),
17075                                       Bop(And,Mop(Not,bVar"b'14"),
17076                                           Bop(And,bVar"b'13",
17077                                               Bop(And,
17078                                                   Mop(Not,bVar"b'12"),
17079                                                   Bop(And,bVar"b'5",
17080                                                       Bop(And,
17081                                                           Mop(Not,
17082                                                               bVar"b'4"),
17083                                                           Bop(And,
17084                                                               bVar"b'3",
17085                                                               bVar"b'2"))))))))))),
17086                   Call
17087                     ("AMO",CTy"instruction",
17088                      Call
17089                        ("AMOOR_W",CTy"AMO",
17090                         TP[Mop(Cast F1,LL[bVar"b'26"]),
17091                            Mop(Cast F1,LL[bVar"b'25"]),
17092                            Mop(Cast(FTy 5),
17093                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
17094                                   bVar"b'8",bVar"b'7"]),
17095                            Mop(Cast(FTy 5),
17096                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
17097                                   bVar"b'16",bVar"b'15"]),
17098                            Mop(Cast(FTy 5),
17099                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
17100                                   bVar"b'21",bVar"b'20"])]))),
17101                  (Bop(And,bVar"b'31",
17102                       Bop(And,Mop(Not,bVar"b'30"),
17103                           Bop(And,Mop(Not,bVar"b'29"),
17104                               Bop(And,Mop(Not,bVar"b'28"),
17105                                   Bop(And,Mop(Not,bVar"b'27"),
17106                                       Bop(And,Mop(Not,bVar"b'14"),
17107                                           Bop(And,bVar"b'13",
17108                                               Bop(And,
17109                                                   Mop(Not,bVar"b'12"),
17110                                                   Bop(And,bVar"b'5",
17111                                                       Bop(And,
17112                                                           Mop(Not,
17113                                                               bVar"b'4"),
17114                                                           Bop(And,
17115                                                               bVar"b'3",
17116                                                               bVar"b'2"))))))))))),
17117                   Call
17118                     ("AMO",CTy"instruction",
17119                      Call
17120                        ("AMOMIN_W",CTy"AMO",
17121                         TP[Mop(Cast F1,LL[bVar"b'26"]),
17122                            Mop(Cast F1,LL[bVar"b'25"]),
17123                            Mop(Cast(FTy 5),
17124                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
17125                                   bVar"b'8",bVar"b'7"]),
17126                            Mop(Cast(FTy 5),
17127                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
17128                                   bVar"b'16",bVar"b'15"]),
17129                            Mop(Cast(FTy 5),
17130                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
17131                                   bVar"b'21",bVar"b'20"])]))),
17132                  (Bop(And,bVar"b'31",
17133                       Bop(And,Mop(Not,bVar"b'30"),
17134                           Bop(And,bVar"b'29",
17135                               Bop(And,Mop(Not,bVar"b'28"),
17136                                   Bop(And,Mop(Not,bVar"b'27"),
17137                                       Bop(And,Mop(Not,bVar"b'14"),
17138                                           Bop(And,bVar"b'13",
17139                                               Bop(And,
17140                                                   Mop(Not,bVar"b'12"),
17141                                                   Bop(And,bVar"b'5",
17142                                                       Bop(And,
17143                                                           Mop(Not,
17144                                                               bVar"b'4"),
17145                                                           Bop(And,
17146                                                               bVar"b'3",
17147                                                               bVar"b'2"))))))))))),
17148                   Call
17149                     ("AMO",CTy"instruction",
17150                      Call
17151                        ("AMOMAX_W",CTy"AMO",
17152                         TP[Mop(Cast F1,LL[bVar"b'26"]),
17153                            Mop(Cast F1,LL[bVar"b'25"]),
17154                            Mop(Cast(FTy 5),
17155                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
17156                                   bVar"b'8",bVar"b'7"]),
17157                            Mop(Cast(FTy 5),
17158                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
17159                                   bVar"b'16",bVar"b'15"]),
17160                            Mop(Cast(FTy 5),
17161                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
17162                                   bVar"b'21",bVar"b'20"])]))),
17163                  (Bop(And,bVar"b'31",
17164                       Bop(And,bVar"b'30",
17165                           Bop(And,Mop(Not,bVar"b'29"),
17166                               Bop(And,Mop(Not,bVar"b'28"),
17167                                   Bop(And,Mop(Not,bVar"b'27"),
17168                                       Bop(And,Mop(Not,bVar"b'14"),
17169                                           Bop(And,bVar"b'13",
17170                                               Bop(And,
17171                                                   Mop(Not,bVar"b'12"),
17172                                                   Bop(And,bVar"b'5",
17173                                                       Bop(And,
17174                                                           Mop(Not,
17175                                                               bVar"b'4"),
17176                                                           Bop(And,
17177                                                               bVar"b'3",
17178                                                               bVar"b'2"))))))))))),
17179                   Call
17180                     ("AMO",CTy"instruction",
17181                      Call
17182                        ("AMOMINU_W",CTy"AMO",
17183                         TP[Mop(Cast F1,LL[bVar"b'26"]),
17184                            Mop(Cast F1,LL[bVar"b'25"]),
17185                            Mop(Cast(FTy 5),
17186                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
17187                                   bVar"b'8",bVar"b'7"]),
17188                            Mop(Cast(FTy 5),
17189                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
17190                                   bVar"b'16",bVar"b'15"]),
17191                            Mop(Cast(FTy 5),
17192                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
17193                                   bVar"b'21",bVar"b'20"])]))),
17194                  (Bop(And,bVar"b'31",
17195                       Bop(And,bVar"b'30",
17196                           Bop(And,bVar"b'29",
17197                               Bop(And,Mop(Not,bVar"b'28"),
17198                                   Bop(And,Mop(Not,bVar"b'27"),
17199                                       Bop(And,Mop(Not,bVar"b'14"),
17200                                           Bop(And,bVar"b'13",
17201                                               Bop(And,
17202                                                   Mop(Not,bVar"b'12"),
17203                                                   Bop(And,bVar"b'5",
17204                                                       Bop(And,
17205                                                           Mop(Not,
17206                                                               bVar"b'4"),
17207                                                           Bop(And,
17208                                                               bVar"b'3",
17209                                                               bVar"b'2"))))))))))),
17210                   Call
17211                     ("AMO",CTy"instruction",
17212                      Call
17213                        ("AMOMAXU_W",CTy"AMO",
17214                         TP[Mop(Cast F1,LL[bVar"b'26"]),
17215                            Mop(Cast F1,LL[bVar"b'25"]),
17216                            Mop(Cast(FTy 5),
17217                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
17218                                   bVar"b'8",bVar"b'7"]),
17219                            Mop(Cast(FTy 5),
17220                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
17221                                   bVar"b'16",bVar"b'15"]),
17222                            Mop(Cast(FTy 5),
17223                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
17224                                   bVar"b'21",bVar"b'20"])]))),
17225                  (Bop(And,Mop(Not,bVar"b'31"),
17226                       Bop(And,Mop(Not,bVar"b'30"),
17227                           Bop(And,Mop(Not,bVar"b'29"),
17228                               Bop(And,Mop(Not,bVar"b'28"),
17229                                   Bop(And,bVar"b'27",
17230                                       Bop(And,Mop(Not,bVar"b'14"),
17231                                           Bop(And,bVar"b'13",
17232                                               Bop(And,bVar"b'12",
17233                                                   Bop(And,bVar"b'5",
17234                                                       Bop(And,
17235                                                           Mop(Not,
17236                                                               bVar"b'4"),
17237                                                           Bop(And,
17238                                                               bVar"b'3",
17239                                                               bVar"b'2"))))))))))),
17240                   Call
17241                     ("AMO",CTy"instruction",
17242                      Call
17243                        ("AMOSWAP_D",CTy"AMO",
17244                         TP[Mop(Cast F1,LL[bVar"b'26"]),
17245                            Mop(Cast F1,LL[bVar"b'25"]),
17246                            Mop(Cast(FTy 5),
17247                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
17248                                   bVar"b'8",bVar"b'7"]),
17249                            Mop(Cast(FTy 5),
17250                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
17251                                   bVar"b'16",bVar"b'15"]),
17252                            Mop(Cast(FTy 5),
17253                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
17254                                   bVar"b'21",bVar"b'20"])]))),
17255                  (Bop(And,Mop(Not,bVar"b'31"),
17256                       Bop(And,Mop(Not,bVar"b'30"),
17257                           Bop(And,Mop(Not,bVar"b'29"),
17258                               Bop(And,Mop(Not,bVar"b'28"),
17259                                   Bop(And,Mop(Not,bVar"b'27"),
17260                                       Bop(And,Mop(Not,bVar"b'14"),
17261                                           Bop(And,bVar"b'13",
17262                                               Bop(And,bVar"b'12",
17263                                                   Bop(And,bVar"b'5",
17264                                                       Bop(And,
17265                                                           Mop(Not,
17266                                                               bVar"b'4"),
17267                                                           Bop(And,
17268                                                               bVar"b'3",
17269                                                               bVar"b'2"))))))))))),
17270                   Call
17271                     ("AMO",CTy"instruction",
17272                      Call
17273                        ("AMOADD_D",CTy"AMO",
17274                         TP[Mop(Cast F1,LL[bVar"b'26"]),
17275                            Mop(Cast F1,LL[bVar"b'25"]),
17276                            Mop(Cast(FTy 5),
17277                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
17278                                   bVar"b'8",bVar"b'7"]),
17279                            Mop(Cast(FTy 5),
17280                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
17281                                   bVar"b'16",bVar"b'15"]),
17282                            Mop(Cast(FTy 5),
17283                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
17284                                   bVar"b'21",bVar"b'20"])]))),
17285                  (Bop(And,Mop(Not,bVar"b'31"),
17286                       Bop(And,Mop(Not,bVar"b'30"),
17287                           Bop(And,bVar"b'29",
17288                               Bop(And,Mop(Not,bVar"b'28"),
17289                                   Bop(And,Mop(Not,bVar"b'27"),
17290                                       Bop(And,Mop(Not,bVar"b'14"),
17291                                           Bop(And,bVar"b'13",
17292                                               Bop(And,bVar"b'12",
17293                                                   Bop(And,bVar"b'5",
17294                                                       Bop(And,
17295                                                           Mop(Not,
17296                                                               bVar"b'4"),
17297                                                           Bop(And,
17298                                                               bVar"b'3",
17299                                                               bVar"b'2"))))))))))),
17300                   Call
17301                     ("AMO",CTy"instruction",
17302                      Call
17303                        ("AMOXOR_D",CTy"AMO",
17304                         TP[Mop(Cast F1,LL[bVar"b'26"]),
17305                            Mop(Cast F1,LL[bVar"b'25"]),
17306                            Mop(Cast(FTy 5),
17307                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
17308                                   bVar"b'8",bVar"b'7"]),
17309                            Mop(Cast(FTy 5),
17310                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
17311                                   bVar"b'16",bVar"b'15"]),
17312                            Mop(Cast(FTy 5),
17313                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
17314                                   bVar"b'21",bVar"b'20"])]))),
17315                  (Bop(And,Mop(Not,bVar"b'31"),
17316                       Bop(And,bVar"b'30",
17317                           Bop(And,bVar"b'29",
17318                               Bop(And,Mop(Not,bVar"b'28"),
17319                                   Bop(And,Mop(Not,bVar"b'27"),
17320                                       Bop(And,Mop(Not,bVar"b'14"),
17321                                           Bop(And,bVar"b'13",
17322                                               Bop(And,bVar"b'12",
17323                                                   Bop(And,bVar"b'5",
17324                                                       Bop(And,
17325                                                           Mop(Not,
17326                                                               bVar"b'4"),
17327                                                           Bop(And,
17328                                                               bVar"b'3",
17329                                                               bVar"b'2"))))))))))),
17330                   Call
17331                     ("AMO",CTy"instruction",
17332                      Call
17333                        ("AMOAND_D",CTy"AMO",
17334                         TP[Mop(Cast F1,LL[bVar"b'26"]),
17335                            Mop(Cast F1,LL[bVar"b'25"]),
17336                            Mop(Cast(FTy 5),
17337                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
17338                                   bVar"b'8",bVar"b'7"]),
17339                            Mop(Cast(FTy 5),
17340                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
17341                                   bVar"b'16",bVar"b'15"]),
17342                            Mop(Cast(FTy 5),
17343                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
17344                                   bVar"b'21",bVar"b'20"])]))),
17345                  (Bop(And,Mop(Not,bVar"b'31"),
17346                       Bop(And,bVar"b'30",
17347                           Bop(And,Mop(Not,bVar"b'29"),
17348                               Bop(And,Mop(Not,bVar"b'28"),
17349                                   Bop(And,Mop(Not,bVar"b'27"),
17350                                       Bop(And,Mop(Not,bVar"b'14"),
17351                                           Bop(And,bVar"b'13",
17352                                               Bop(And,bVar"b'12",
17353                                                   Bop(And,bVar"b'5",
17354                                                       Bop(And,
17355                                                           Mop(Not,
17356                                                               bVar"b'4"),
17357                                                           Bop(And,
17358                                                               bVar"b'3",
17359                                                               bVar"b'2"))))))))))),
17360                   Call
17361                     ("AMO",CTy"instruction",
17362                      Call
17363                        ("AMOOR_D",CTy"AMO",
17364                         TP[Mop(Cast F1,LL[bVar"b'26"]),
17365                            Mop(Cast F1,LL[bVar"b'25"]),
17366                            Mop(Cast(FTy 5),
17367                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
17368                                   bVar"b'8",bVar"b'7"]),
17369                            Mop(Cast(FTy 5),
17370                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
17371                                   bVar"b'16",bVar"b'15"]),
17372                            Mop(Cast(FTy 5),
17373                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
17374                                   bVar"b'21",bVar"b'20"])]))),
17375                  (Bop(And,bVar"b'31",
17376                       Bop(And,Mop(Not,bVar"b'30"),
17377                           Bop(And,Mop(Not,bVar"b'29"),
17378                               Bop(And,Mop(Not,bVar"b'28"),
17379                                   Bop(And,Mop(Not,bVar"b'27"),
17380                                       Bop(And,Mop(Not,bVar"b'14"),
17381                                           Bop(And,bVar"b'13",
17382                                               Bop(And,bVar"b'12",
17383                                                   Bop(And,bVar"b'5",
17384                                                       Bop(And,
17385                                                           Mop(Not,
17386                                                               bVar"b'4"),
17387                                                           Bop(And,
17388                                                               bVar"b'3",
17389                                                               bVar"b'2"))))))))))),
17390                   Call
17391                     ("AMO",CTy"instruction",
17392                      Call
17393                        ("AMOMIN_D",CTy"AMO",
17394                         TP[Mop(Cast F1,LL[bVar"b'26"]),
17395                            Mop(Cast F1,LL[bVar"b'25"]),
17396                            Mop(Cast(FTy 5),
17397                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
17398                                   bVar"b'8",bVar"b'7"]),
17399                            Mop(Cast(FTy 5),
17400                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
17401                                   bVar"b'16",bVar"b'15"]),
17402                            Mop(Cast(FTy 5),
17403                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
17404                                   bVar"b'21",bVar"b'20"])]))),
17405                  (Bop(And,bVar"b'31",
17406                       Bop(And,Mop(Not,bVar"b'30"),
17407                           Bop(And,bVar"b'29",
17408                               Bop(And,Mop(Not,bVar"b'28"),
17409                                   Bop(And,Mop(Not,bVar"b'27"),
17410                                       Bop(And,Mop(Not,bVar"b'14"),
17411                                           Bop(And,bVar"b'13",
17412                                               Bop(And,bVar"b'12",
17413                                                   Bop(And,bVar"b'5",
17414                                                       Bop(And,
17415                                                           Mop(Not,
17416                                                               bVar"b'4"),
17417                                                           Bop(And,
17418                                                               bVar"b'3",
17419                                                               bVar"b'2"))))))))))),
17420                   Call
17421                     ("AMO",CTy"instruction",
17422                      Call
17423                        ("AMOMAX_D",CTy"AMO",
17424                         TP[Mop(Cast F1,LL[bVar"b'26"]),
17425                            Mop(Cast F1,LL[bVar"b'25"]),
17426                            Mop(Cast(FTy 5),
17427                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
17428                                   bVar"b'8",bVar"b'7"]),
17429                            Mop(Cast(FTy 5),
17430                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
17431                                   bVar"b'16",bVar"b'15"]),
17432                            Mop(Cast(FTy 5),
17433                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
17434                                   bVar"b'21",bVar"b'20"])]))),
17435                  (Bop(And,bVar"b'31",
17436                       Bop(And,bVar"b'30",
17437                           Bop(And,Mop(Not,bVar"b'29"),
17438                               Bop(And,Mop(Not,bVar"b'28"),
17439                                   Bop(And,Mop(Not,bVar"b'27"),
17440                                       Bop(And,Mop(Not,bVar"b'14"),
17441                                           Bop(And,bVar"b'13",
17442                                               Bop(And,bVar"b'12",
17443                                                   Bop(And,bVar"b'5",
17444                                                       Bop(And,
17445                                                           Mop(Not,
17446                                                               bVar"b'4"),
17447                                                           Bop(And,
17448                                                               bVar"b'3",
17449                                                               bVar"b'2"))))))))))),
17450                   Call
17451                     ("AMO",CTy"instruction",
17452                      Call
17453                        ("AMOMINU_D",CTy"AMO",
17454                         TP[Mop(Cast F1,LL[bVar"b'26"]),
17455                            Mop(Cast F1,LL[bVar"b'25"]),
17456                            Mop(Cast(FTy 5),
17457                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
17458                                   bVar"b'8",bVar"b'7"]),
17459                            Mop(Cast(FTy 5),
17460                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
17461                                   bVar"b'16",bVar"b'15"]),
17462                            Mop(Cast(FTy 5),
17463                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
17464                                   bVar"b'21",bVar"b'20"])]))),
17465                  (Bop(And,bVar"b'31",
17466                       Bop(And,bVar"b'30",
17467                           Bop(And,bVar"b'29",
17468                               Bop(And,Mop(Not,bVar"b'28"),
17469                                   Bop(And,Mop(Not,bVar"b'27"),
17470                                       Bop(And,Mop(Not,bVar"b'14"),
17471                                           Bop(And,bVar"b'13",
17472                                               Bop(And,bVar"b'12",
17473                                                   Bop(And,bVar"b'5",
17474                                                       Bop(And,
17475                                                           Mop(Not,
17476                                                               bVar"b'4"),
17477                                                           Bop(And,
17478                                                               bVar"b'3",
17479                                                               bVar"b'2"))))))))))),
17480                   Call
17481                     ("AMO",CTy"instruction",
17482                      Call
17483                        ("AMOMAXU_D",CTy"AMO",
17484                         TP[Mop(Cast F1,LL[bVar"b'26"]),
17485                            Mop(Cast F1,LL[bVar"b'25"]),
17486                            Mop(Cast(FTy 5),
17487                                LL[bVar"b'11",bVar"b'10",bVar"b'9",
17488                                   bVar"b'8",bVar"b'7"]),
17489                            Mop(Cast(FTy 5),
17490                                LL[bVar"b'19",bVar"b'18",bVar"b'17",
17491                                   bVar"b'16",bVar"b'15"]),
17492                            Mop(Cast(FTy 5),
17493                                LL[bVar"b'24",bVar"b'23",bVar"b'22",
17494                                   bVar"b'21",bVar"b'20"])])))],
17495                 Const("UnknownInstruction",CTy"instruction")))],
17496           Const("UnknownInstruction",CTy"instruction"))))
17497;
17498val imm_def = Def
17499  ("imm",Var("i",BTy"N"),CC[LS"0x",Mop(Cast sTy,Var("i",BTy"N"))])
17500;
17501val instr_def = Def
17502  ("instr",sVar"o",Mop(PadRight,TP[LSC #" ",LN 12,sVar"o"]))
17503;
17504val amotype_def = Def
17505  ("amotype",TP[Var("aq",F1),Var("rl",F1)],
17506   CS(TP[Var("aq",F1),Var("rl",F1)],
17507      [(TP[LW(0,1),LW(0,1)],LS""),(TP[LW(1,1),LW(0,1)],LS".aq"),
17508       (TP[LW(0,1),LW(1,1)],LS".rl"),(TP[LW(1,1),LW(1,1)],LS".sc")]))
17509;
17510val pRtype_def = Def
17511  ("pRtype",TP[sVar"o",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
17512   CC[Call("instr",sTy,sVar"o"),LS" ",Call("reg",sTy,Var("rd",FTy 5)),
17513      LS", ",Call("reg",sTy,Var("rs1",FTy 5)),LS", ",
17514      Call("reg",sTy,Var("rs2",FTy 5))])
17515;
17516val pARtype_def = Def
17517  ("pARtype",
17518   TP[sVar"o",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5),
17519      Var("rs2",FTy 5)],
17520   Call
17521     ("pRtype",sTy,
17522      TP[CC[sVar"o",Call("amotype",sTy,TP[Var("aq",F1),Var("rl",F1)])],
17523         Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)]))
17524;
17525val pLRtype_def = Def
17526  ("pLRtype",
17527   TP[sVar"o",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5)],
17528   CC[Call
17529        ("instr",sTy,
17530         CC[sVar"o",Call("amotype",sTy,TP[Var("aq",F1),Var("rl",F1)])]),
17531      LS" ",Call("reg",sTy,Var("rd",FTy 5)),LS", ",
17532      Call("reg",sTy,Var("rs1",FTy 5))])
17533;
17534val pItype_def = Def
17535  ("pItype",TP[sVar"o",Var("rd",FTy 5),Var("rs1",FTy 5),Var("i",BTy"N")],
17536   CC[Call("instr",sTy,sVar"o"),LS" ",Call("reg",sTy,Var("rd",FTy 5)),
17537      LS", ",Call("reg",sTy,Var("rs1",FTy 5)),LS", ",
17538      Call("imm",sTy,Var("i",BTy"N"))])
17539;
17540val pCSRtype_def = Def
17541  ("pCSRtype",
17542   TP[sVar"o",Var("rd",FTy 5),Var("rs1",FTy 5),Var("csr",FTy 12)],
17543   CC[Call("instr",sTy,sVar"o"),LS" ",Call("reg",sTy,Var("rd",FTy 5)),
17544      LS", ",Call("reg",sTy,Var("rs1",FTy 5)),LS", ",
17545      Call("csrName",sTy,Var("csr",FTy 12))])
17546;
17547val pCSRItype_def = Def
17548  ("pCSRItype",
17549   TP[sVar"o",Var("rd",FTy 5),Var("i",BTy"N"),Var("csr",FTy 12)],
17550   CC[Call("instr",sTy,sVar"o"),LS" ",Call("reg",sTy,Var("rd",FTy 5)),
17551      LS", ",Call("imm",sTy,Var("i",BTy"N")),LS", ",
17552      Call("csrName",sTy,Var("csr",FTy 12))])
17553;
17554val pStype_def = Def
17555  ("pStype",TP[sVar"o",Var("rs1",FTy 5),Var("rs2",FTy 5),Var("i",BTy"N")],
17556   CC[Call("instr",sTy,sVar"o"),LS" ",Call("reg",sTy,Var("rs2",FTy 5)),
17557      LS", ",Call("reg",sTy,Var("rs1",FTy 5)),LS", ",
17558      Call("imm",sTy,Var("i",BTy"N"))])
17559;
17560val pSBtype_def = Def
17561  ("pSBtype",
17562   TP[sVar"o",Var("rs1",FTy 5),Var("rs2",FTy 5),Var("i",BTy"N")],
17563   CC[Call("instr",sTy,sVar"o"),LS" ",Call("reg",sTy,Var("rs1",FTy 5)),
17564      LS", ",Call("reg",sTy,Var("rs2",FTy 5)),LS", ",
17565      Call("imm",sTy,Bop(Lsl,Var("i",BTy"N"),LN 1))])
17566;
17567val pUtype_def = Def
17568  ("pUtype",TP[sVar"o",Var("rd",FTy 5),Var("i",BTy"N")],
17569   CC[Call("instr",sTy,sVar"o"),LS" ",Call("reg",sTy,Var("rd",FTy 5)),
17570      LS", ",Call("imm",sTy,Var("i",BTy"N"))])
17571;
17572val pUJtype_def = Def
17573  ("pUJtype",TP[sVar"o",Var("rd",FTy 5),Var("i",BTy"N")],
17574   CC[Call("instr",sTy,sVar"o"),LS" ",Call("reg",sTy,Var("rd",FTy 5)),
17575      LS", ",Call("imm",sTy,Bop(Lsl,Var("i",BTy"N"),LN 1))])
17576;
17577val pN0type_def = Def ("pN0type",sVar"o",Call("instr",sTy,sVar"o"))
17578;
17579val pN1type_def = Def
17580  ("pN1type",TP[sVar"o",Var("r",FTy 5)],
17581   CC[Call("instr",sTy,sVar"o"),LS" ",Call("reg",sTy,Var("r",FTy 5))])
17582;
17583val pFRtype_def = Def
17584  ("pFRtype",
17585   TP[sVar"o",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)],
17586   CC[Call("instr",sTy,sVar"o"),LS" ",Call("fpreg",sTy,Var("rd",FTy 5)),
17587      LS", ",Call("fpreg",sTy,Var("rs1",FTy 5)),LS", ",
17588      Call("fpreg",sTy,Var("rs2",FTy 5))])
17589;
17590val pFR1type_def = Def
17591  ("pFR1type",TP[sVar"o",Var("rd",FTy 5),Var("rs",FTy 5)],
17592   CC[Call("instr",sTy,sVar"o"),LS" ",Call("fpreg",sTy,Var("rd",FTy 5)),
17593      LS", ",Call("fpreg",sTy,Var("rs",FTy 5))])
17594;
17595val pFR3type_def = Def
17596  ("pFR3type",
17597   TP[sVar"o",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
17598      Var("rs3",FTy 5)],
17599   CC[Call("instr",sTy,sVar"o"),LS" ",Call("fpreg",sTy,Var("rd",FTy 5)),
17600      LS", ",Call("fpreg",sTy,Var("rs1",FTy 5)),LS", ",
17601      Call("fpreg",sTy,Var("rs2",FTy 5)),LS", ",
17602      Call("fpreg",sTy,Var("rs3",FTy 5))])
17603;
17604val pFItype_def = Def
17605  ("pFItype",TP[sVar"o",Var("rd",FTy 5),Var("rs1",FTy 5),Var("i",BTy"N")],
17606   CC[Call("instr",sTy,sVar"o"),LS" ",Call("fpreg",sTy,Var("rd",FTy 5)),
17607      LS", ",Call("reg",sTy,Var("rs1",FTy 5)),LS", ",
17608      Call("imm",sTy,Var("i",BTy"N"))])
17609;
17610val pFStype_def = Def
17611  ("pFStype",
17612   TP[sVar"o",Var("rs1",FTy 5),Var("rs2",FTy 5),Var("i",BTy"N")],
17613   CC[Call("instr",sTy,sVar"o"),LS" ",Call("fpreg",sTy,Var("rs2",FTy 5)),
17614      LS", ",Call("reg",sTy,Var("rs1",FTy 5)),LS", ",
17615      Call("imm",sTy,Var("i",BTy"N"))])
17616;
17617val pCFItype_def = Def
17618  ("pCFItype",TP[sVar"o",Var("rd",FTy 5),Var("rs",FTy 5)],
17619   CC[Call("instr",sTy,sVar"o"),LS" ",Call("fpreg",sTy,Var("rd",FTy 5)),
17620      LS", ",Call("reg",sTy,Var("rs",FTy 5))])
17621;
17622val pCIFtype_def = Def
17623  ("pCIFtype",TP[sVar"o",Var("rd",FTy 5),Var("rs",FTy 5)],
17624   CC[Call("instr",sTy,sVar"o"),LS" ",Call("reg",sTy,Var("rd",FTy 5)),
17625      LS", ",Call("fpreg",sTy,Var("rs",FTy 5))])
17626;
17627val instructionToString_def = Def
17628  ("instructionToString",Var("i",CTy"instruction"),
17629   CS(Var("i",CTy"instruction"),
17630      [(Call
17631          ("Branch",CTy"instruction",
17632           Call
17633             ("BEQ",CTy"Branch",
17634              TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
17635        Call
17636          ("pSBtype",sTy,
17637           TP[LS"BEQ",Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
17638       (Call
17639          ("Branch",CTy"instruction",
17640           Call
17641             ("BNE",CTy"Branch",
17642              TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
17643        Call
17644          ("pSBtype",sTy,
17645           TP[LS"BNE",Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
17646       (Call
17647          ("Branch",CTy"instruction",
17648           Call
17649             ("BLT",CTy"Branch",
17650              TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
17651        Call
17652          ("pSBtype",sTy,
17653           TP[LS"BLT",Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
17654       (Call
17655          ("Branch",CTy"instruction",
17656           Call
17657             ("BGE",CTy"Branch",
17658              TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
17659        Call
17660          ("pSBtype",sTy,
17661           TP[LS"BGE",Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
17662       (Call
17663          ("Branch",CTy"instruction",
17664           Call
17665             ("BLTU",CTy"Branch",
17666              TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
17667        Call
17668          ("pSBtype",sTy,
17669           TP[LS"BLTU",Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
17670       (Call
17671          ("Branch",CTy"instruction",
17672           Call
17673             ("BGEU",CTy"Branch",
17674              TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
17675        Call
17676          ("pSBtype",sTy,
17677           TP[LS"BGEU",Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
17678       (Call
17679          ("Branch",CTy"instruction",
17680           Call
17681             ("JALR",CTy"Branch",
17682              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
17683        Call
17684          ("pItype",sTy,
17685           TP[LS"JALR",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
17686       (Call
17687          ("Branch",CTy"instruction",
17688           Call("JAL",CTy"Branch",TP[Var("rd",FTy 5),Var("imm",FTy 20)])),
17689        Call("pUJtype",sTy,TP[LS"JAL",Var("rd",FTy 5),Var("imm",FTy 20)])),
17690       (Call
17691          ("ArithI",CTy"instruction",
17692           Call("LUI",CTy"ArithI",TP[Var("rd",FTy 5),Var("imm",FTy 20)])),
17693        Call("pUtype",sTy,TP[LS"LUI",Var("rd",FTy 5),Var("imm",FTy 20)])),
17694       (Call
17695          ("ArithI",CTy"instruction",
17696           Call("AUIPC",CTy"ArithI",TP[Var("rd",FTy 5),Var("imm",FTy 20)])),
17697        Call("pUtype",sTy,TP[LS"AUIPC",Var("rd",FTy 5),Var("imm",FTy 20)])),
17698       (Call
17699          ("ArithI",CTy"instruction",
17700           Call
17701             ("ADDI",CTy"ArithI",
17702              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
17703        Call
17704          ("pItype",sTy,
17705           TP[LS"ADDI",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
17706       (Call
17707          ("Shift",CTy"instruction",
17708           Call
17709             ("SLLI",CTy"Shift",
17710              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 6)])),
17711        Call
17712          ("pItype",sTy,
17713           TP[LS"SLLI",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 6)])),
17714       (Call
17715          ("ArithI",CTy"instruction",
17716           Call
17717             ("SLTI",CTy"ArithI",
17718              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
17719        Call
17720          ("pItype",sTy,
17721           TP[LS"SLTI",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
17722       (Call
17723          ("ArithI",CTy"instruction",
17724           Call
17725             ("SLTIU",CTy"ArithI",
17726              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
17727        Call
17728          ("pItype",sTy,
17729           TP[LS"SLTIU",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
17730       (Call
17731          ("ArithI",CTy"instruction",
17732           Call
17733             ("XORI",CTy"ArithI",
17734              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
17735        Call
17736          ("pItype",sTy,
17737           TP[LS"XORI",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
17738       (Call
17739          ("Shift",CTy"instruction",
17740           Call
17741             ("SRLI",CTy"Shift",
17742              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 6)])),
17743        Call
17744          ("pItype",sTy,
17745           TP[LS"SRLI",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 6)])),
17746       (Call
17747          ("Shift",CTy"instruction",
17748           Call
17749             ("SRAI",CTy"Shift",
17750              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 6)])),
17751        Call
17752          ("pItype",sTy,
17753           TP[LS"SRAI",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 6)])),
17754       (Call
17755          ("ArithI",CTy"instruction",
17756           Call
17757             ("ORI",CTy"ArithI",
17758              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
17759        Call
17760          ("pItype",sTy,
17761           TP[LS"ORI",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
17762       (Call
17763          ("ArithI",CTy"instruction",
17764           Call
17765             ("ANDI",CTy"ArithI",
17766              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
17767        Call
17768          ("pItype",sTy,
17769           TP[LS"ANDI",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
17770       (Call
17771          ("ArithR",CTy"instruction",
17772           Call
17773             ("ADD",CTy"ArithR",
17774              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17775        Call
17776          ("pRtype",sTy,
17777           TP[LS"ADD",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17778       (Call
17779          ("ArithR",CTy"instruction",
17780           Call
17781             ("SUB",CTy"ArithR",
17782              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17783        Call
17784          ("pRtype",sTy,
17785           TP[LS"SUB",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17786       (Call
17787          ("Shift",CTy"instruction",
17788           Call
17789             ("SLL",CTy"Shift",
17790              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17791        Call
17792          ("pRtype",sTy,
17793           TP[LS"SLL",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17794       (Call
17795          ("ArithR",CTy"instruction",
17796           Call
17797             ("SLT",CTy"ArithR",
17798              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17799        Call
17800          ("pRtype",sTy,
17801           TP[LS"SLT",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17802       (Call
17803          ("ArithR",CTy"instruction",
17804           Call
17805             ("SLTU",CTy"ArithR",
17806              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17807        Call
17808          ("pRtype",sTy,
17809           TP[LS"SLTU",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17810       (Call
17811          ("ArithR",CTy"instruction",
17812           Call
17813             ("XOR",CTy"ArithR",
17814              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17815        Call
17816          ("pRtype",sTy,
17817           TP[LS"XOR",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17818       (Call
17819          ("Shift",CTy"instruction",
17820           Call
17821             ("SRL",CTy"Shift",
17822              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17823        Call
17824          ("pRtype",sTy,
17825           TP[LS"SRL",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17826       (Call
17827          ("Shift",CTy"instruction",
17828           Call
17829             ("SRA",CTy"Shift",
17830              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17831        Call
17832          ("pRtype",sTy,
17833           TP[LS"SRA",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17834       (Call
17835          ("ArithR",CTy"instruction",
17836           Call
17837             ("OR",CTy"ArithR",
17838              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17839        Call
17840          ("pRtype",sTy,
17841           TP[LS"OR",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17842       (Call
17843          ("ArithR",CTy"instruction",
17844           Call
17845             ("AND",CTy"ArithR",
17846              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17847        Call
17848          ("pRtype",sTy,
17849           TP[LS"AND",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17850       (Call
17851          ("ArithI",CTy"instruction",
17852           Call
17853             ("ADDIW",CTy"ArithI",
17854              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
17855        Call
17856          ("pItype",sTy,
17857           TP[LS"ADDIW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
17858       (Call
17859          ("Shift",CTy"instruction",
17860           Call
17861             ("SLLIW",CTy"Shift",
17862              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 5)])),
17863        Call
17864          ("pItype",sTy,
17865           TP[LS"SLLIW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 5)])),
17866       (Call
17867          ("Shift",CTy"instruction",
17868           Call
17869             ("SRLIW",CTy"Shift",
17870              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 5)])),
17871        Call
17872          ("pItype",sTy,
17873           TP[LS"SRLIW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 5)])),
17874       (Call
17875          ("Shift",CTy"instruction",
17876           Call
17877             ("SRAIW",CTy"Shift",
17878              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 5)])),
17879        Call
17880          ("pItype",sTy,
17881           TP[LS"SRAIW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 5)])),
17882       (Call
17883          ("ArithR",CTy"instruction",
17884           Call
17885             ("ADDW",CTy"ArithR",
17886              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17887        Call
17888          ("pRtype",sTy,
17889           TP[LS"ADDW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17890       (Call
17891          ("ArithR",CTy"instruction",
17892           Call
17893             ("SUBW",CTy"ArithR",
17894              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17895        Call
17896          ("pRtype",sTy,
17897           TP[LS"SUBW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17898       (Call
17899          ("Shift",CTy"instruction",
17900           Call
17901             ("SLLW",CTy"Shift",
17902              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17903        Call
17904          ("pRtype",sTy,
17905           TP[LS"SLLW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17906       (Call
17907          ("Shift",CTy"instruction",
17908           Call
17909             ("SRLW",CTy"Shift",
17910              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17911        Call
17912          ("pRtype",sTy,
17913           TP[LS"SRLW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17914       (Call
17915          ("Shift",CTy"instruction",
17916           Call
17917             ("SRAW",CTy"Shift",
17918              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17919        Call
17920          ("pRtype",sTy,
17921           TP[LS"SRAW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17922       (Call
17923          ("MulDiv",CTy"instruction",
17924           Call
17925             ("MUL",CTy"MulDiv",
17926              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17927        Call
17928          ("pRtype",sTy,
17929           TP[LS"MUL",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17930       (Call
17931          ("MulDiv",CTy"instruction",
17932           Call
17933             ("MULH",CTy"MulDiv",
17934              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17935        Call
17936          ("pRtype",sTy,
17937           TP[LS"MULH",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17938       (Call
17939          ("MulDiv",CTy"instruction",
17940           Call
17941             ("MULHSU",CTy"MulDiv",
17942              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17943        Call
17944          ("pRtype",sTy,
17945           TP[LS"MULHSU",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17946       (Call
17947          ("MulDiv",CTy"instruction",
17948           Call
17949             ("MULHU",CTy"MulDiv",
17950              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17951        Call
17952          ("pRtype",sTy,
17953           TP[LS"MULHU",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17954       (Call
17955          ("MulDiv",CTy"instruction",
17956           Call
17957             ("DIV",CTy"MulDiv",
17958              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17959        Call
17960          ("pRtype",sTy,
17961           TP[LS"DIV",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17962       (Call
17963          ("MulDiv",CTy"instruction",
17964           Call
17965             ("DIVU",CTy"MulDiv",
17966              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17967        Call
17968          ("pRtype",sTy,
17969           TP[LS"DIVU",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17970       (Call
17971          ("MulDiv",CTy"instruction",
17972           Call
17973             ("REM",CTy"MulDiv",
17974              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17975        Call
17976          ("pRtype",sTy,
17977           TP[LS"REM",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17978       (Call
17979          ("MulDiv",CTy"instruction",
17980           Call
17981             ("REMU",CTy"MulDiv",
17982              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17983        Call
17984          ("pRtype",sTy,
17985           TP[LS"REMU",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17986       (Call
17987          ("MulDiv",CTy"instruction",
17988           Call
17989             ("MULW",CTy"MulDiv",
17990              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17991        Call
17992          ("pRtype",sTy,
17993           TP[LS"MULW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17994       (Call
17995          ("MulDiv",CTy"instruction",
17996           Call
17997             ("DIVW",CTy"MulDiv",
17998              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
17999        Call
18000          ("pRtype",sTy,
18001           TP[LS"DIVW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18002       (Call
18003          ("MulDiv",CTy"instruction",
18004           Call
18005             ("DIVUW",CTy"MulDiv",
18006              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18007        Call
18008          ("pRtype",sTy,
18009           TP[LS"DIVUW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18010       (Call
18011          ("MulDiv",CTy"instruction",
18012           Call
18013             ("REMW",CTy"MulDiv",
18014              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18015        Call
18016          ("pRtype",sTy,
18017           TP[LS"REMW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18018       (Call
18019          ("MulDiv",CTy"instruction",
18020           Call
18021             ("REMUW",CTy"MulDiv",
18022              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18023        Call
18024          ("pRtype",sTy,
18025           TP[LS"REMUW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18026       (Call
18027          ("Load",CTy"instruction",
18028           Call
18029             ("LB",CTy"Load",
18030              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
18031        Call
18032          ("pItype",sTy,
18033           TP[LS"LB",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
18034       (Call
18035          ("Load",CTy"instruction",
18036           Call
18037             ("LH",CTy"Load",
18038              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
18039        Call
18040          ("pItype",sTy,
18041           TP[LS"LH",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
18042       (Call
18043          ("Load",CTy"instruction",
18044           Call
18045             ("LW",CTy"Load",
18046              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
18047        Call
18048          ("pItype",sTy,
18049           TP[LS"LW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
18050       (Call
18051          ("Load",CTy"instruction",
18052           Call
18053             ("LD",CTy"Load",
18054              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
18055        Call
18056          ("pItype",sTy,
18057           TP[LS"LD",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
18058       (Call
18059          ("Load",CTy"instruction",
18060           Call
18061             ("LBU",CTy"Load",
18062              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
18063        Call
18064          ("pItype",sTy,
18065           TP[LS"LBU",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
18066       (Call
18067          ("Load",CTy"instruction",
18068           Call
18069             ("LHU",CTy"Load",
18070              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
18071        Call
18072          ("pItype",sTy,
18073           TP[LS"LHU",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
18074       (Call
18075          ("Load",CTy"instruction",
18076           Call
18077             ("LWU",CTy"Load",
18078              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
18079        Call
18080          ("pItype",sTy,
18081           TP[LS"LWU",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
18082       (Call
18083          ("Store",CTy"instruction",
18084           Call
18085             ("SB",CTy"Store",
18086              TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
18087        Call
18088          ("pStype",sTy,
18089           TP[LS"SB",Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
18090       (Call
18091          ("Store",CTy"instruction",
18092           Call
18093             ("SH",CTy"Store",
18094              TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
18095        Call
18096          ("pStype",sTy,
18097           TP[LS"SH",Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
18098       (Call
18099          ("Store",CTy"instruction",
18100           Call
18101             ("SW",CTy"Store",
18102              TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
18103        Call
18104          ("pStype",sTy,
18105           TP[LS"SW",Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
18106       (Call
18107          ("Store",CTy"instruction",
18108           Call
18109             ("SD",CTy"Store",
18110              TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
18111        Call
18112          ("pStype",sTy,
18113           TP[LS"SD",Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
18114       (Call
18115          ("FENCE",CTy"instruction",
18116           TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("pred",F4),
18117              Var("succ",F4)]),Call("pN0type",sTy,LS"FENCE")),
18118       (Call
18119          ("FENCE_I",CTy"instruction",
18120           TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)]),
18121        Call("pN0type",sTy,LS"FENCE.I")),
18122       (Call
18123          ("FArith",CTy"instruction",
18124           Call
18125             ("FADD_S",CTy"FArith",
18126              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
18127                 Var("frm",FTy 3)])),
18128        Call
18129          ("pFRtype",sTy,
18130           TP[LS"FADD.S",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18131       (Call
18132          ("FArith",CTy"instruction",
18133           Call
18134             ("FSUB_S",CTy"FArith",
18135              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
18136                 Var("frm",FTy 3)])),
18137        Call
18138          ("pFRtype",sTy,
18139           TP[LS"FSUB.S",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18140       (Call
18141          ("FArith",CTy"instruction",
18142           Call
18143             ("FMUL_S",CTy"FArith",
18144              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
18145                 Var("frm",FTy 3)])),
18146        Call
18147          ("pFRtype",sTy,
18148           TP[LS"FMUL.S",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18149       (Call
18150          ("FArith",CTy"instruction",
18151           Call
18152             ("FDIV_S",CTy"FArith",
18153              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
18154                 Var("frm",FTy 3)])),
18155        Call
18156          ("pFRtype",sTy,
18157           TP[LS"FDIV.S",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18158       (Call
18159          ("FArith",CTy"instruction",
18160           Call
18161             ("FSQRT_S",CTy"FArith",
18162              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
18163        Call
18164          ("pFR1type",sTy,TP[LS"FSQRT.S",Var("rd",FTy 5),Var("rs",FTy 5)])),
18165       (Call
18166          ("FArith",CTy"instruction",
18167           Call
18168             ("FMIN_S",CTy"FArith",
18169              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18170        Call
18171          ("pFRtype",sTy,
18172           TP[LS"FMIN.S",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18173       (Call
18174          ("FArith",CTy"instruction",
18175           Call
18176             ("FMAX_S",CTy"FArith",
18177              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18178        Call
18179          ("pFRtype",sTy,
18180           TP[LS"FMAX.S",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18181       (Call
18182          ("FArith",CTy"instruction",
18183           Call
18184             ("FEQ_S",CTy"FArith",
18185              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18186        Call
18187          ("pFRtype",sTy,
18188           TP[LS"FEQ.S",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18189       (Call
18190          ("FArith",CTy"instruction",
18191           Call
18192             ("FLT_S",CTy"FArith",
18193              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18194        Call
18195          ("pFRtype",sTy,
18196           TP[LS"FLT.S",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18197       (Call
18198          ("FArith",CTy"instruction",
18199           Call
18200             ("FLE_S",CTy"FArith",
18201              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18202        Call
18203          ("pFRtype",sTy,
18204           TP[LS"FLE.S",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18205       (Call
18206          ("FArith",CTy"instruction",
18207           Call
18208             ("FMADD_S",CTy"FArith",
18209              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
18210                 Var("rs3",FTy 5),Var("frm",FTy 3)])),
18211        Call
18212          ("pFR3type",sTy,
18213           TP[LS"FMADD.S",Var("rd",FTy 5),Var("rs1",FTy 5),
18214              Var("rs2",FTy 5),Var("rs3",FTy 5)])),
18215       (Call
18216          ("FArith",CTy"instruction",
18217           Call
18218             ("FMSUB_S",CTy"FArith",
18219              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
18220                 Var("rs3",FTy 5),Var("frm",FTy 3)])),
18221        Call
18222          ("pFR3type",sTy,
18223           TP[LS"FMSUB.S",Var("rd",FTy 5),Var("rs1",FTy 5),
18224              Var("rs2",FTy 5),Var("rs3",FTy 5)])),
18225       (Call
18226          ("FArith",CTy"instruction",
18227           Call
18228             ("FNMADD_S",CTy"FArith",
18229              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
18230                 Var("rs3",FTy 5),Var("frm",FTy 3)])),
18231        Call
18232          ("pFR3type",sTy,
18233           TP[LS"FNMADD.S",Var("rd",FTy 5),Var("rs1",FTy 5),
18234              Var("rs2",FTy 5),Var("rs3",FTy 5)])),
18235       (Call
18236          ("FArith",CTy"instruction",
18237           Call
18238             ("FNMSUB_S",CTy"FArith",
18239              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
18240                 Var("rs3",FTy 5),Var("frm",FTy 3)])),
18241        Call
18242          ("pFR3type",sTy,
18243           TP[LS"FNMSUB.S",Var("rd",FTy 5),Var("rs1",FTy 5),
18244              Var("rs2",FTy 5),Var("rs3",FTy 5)])),
18245       (Call
18246          ("FArith",CTy"instruction",
18247           Call
18248             ("FADD_D",CTy"FArith",
18249              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
18250                 Var("frm",FTy 3)])),
18251        Call
18252          ("pFRtype",sTy,
18253           TP[LS"FADD.D",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18254       (Call
18255          ("FArith",CTy"instruction",
18256           Call
18257             ("FSUB_D",CTy"FArith",
18258              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
18259                 Var("frm",FTy 3)])),
18260        Call
18261          ("pFRtype",sTy,
18262           TP[LS"FSUB.D",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18263       (Call
18264          ("FArith",CTy"instruction",
18265           Call
18266             ("FMUL_D",CTy"FArith",
18267              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
18268                 Var("frm",FTy 3)])),
18269        Call
18270          ("pFRtype",sTy,
18271           TP[LS"FMUL.D",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18272       (Call
18273          ("FArith",CTy"instruction",
18274           Call
18275             ("FDIV_D",CTy"FArith",
18276              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
18277                 Var("frm",FTy 3)])),
18278        Call
18279          ("pFRtype",sTy,
18280           TP[LS"FDIV.D",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18281       (Call
18282          ("FArith",CTy"instruction",
18283           Call
18284             ("FSQRT_D",CTy"FArith",
18285              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
18286        Call
18287          ("pFR1type",sTy,TP[LS"FSQRT.D",Var("rd",FTy 5),Var("rs",FTy 5)])),
18288       (Call
18289          ("FArith",CTy"instruction",
18290           Call
18291             ("FMIN_D",CTy"FArith",
18292              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18293        Call
18294          ("pFRtype",sTy,
18295           TP[LS"FMIN.D",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18296       (Call
18297          ("FArith",CTy"instruction",
18298           Call
18299             ("FMAX_D",CTy"FArith",
18300              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18301        Call
18302          ("pFRtype",sTy,
18303           TP[LS"FMAX.D",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18304       (Call
18305          ("FArith",CTy"instruction",
18306           Call
18307             ("FEQ_D",CTy"FArith",
18308              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18309        Call
18310          ("pFRtype",sTy,
18311           TP[LS"FEQ.D",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18312       (Call
18313          ("FArith",CTy"instruction",
18314           Call
18315             ("FLT_D",CTy"FArith",
18316              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18317        Call
18318          ("pFRtype",sTy,
18319           TP[LS"FLT.D",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18320       (Call
18321          ("FArith",CTy"instruction",
18322           Call
18323             ("FLE_D",CTy"FArith",
18324              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18325        Call
18326          ("pFRtype",sTy,
18327           TP[LS"FLE.D",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18328       (Call
18329          ("FArith",CTy"instruction",
18330           Call
18331             ("FMADD_D",CTy"FArith",
18332              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
18333                 Var("rs3",FTy 5),Var("frm",FTy 3)])),
18334        Call
18335          ("pFR3type",sTy,
18336           TP[LS"FMADD.D",Var("rd",FTy 5),Var("rs1",FTy 5),
18337              Var("rs2",FTy 5),Var("rs3",FTy 5)])),
18338       (Call
18339          ("FArith",CTy"instruction",
18340           Call
18341             ("FMSUB_D",CTy"FArith",
18342              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
18343                 Var("rs3",FTy 5),Var("frm",FTy 3)])),
18344        Call
18345          ("pFR3type",sTy,
18346           TP[LS"FMSUB.D",Var("rd",FTy 5),Var("rs1",FTy 5),
18347              Var("rs2",FTy 5),Var("rs3",FTy 5)])),
18348       (Call
18349          ("FArith",CTy"instruction",
18350           Call
18351             ("FNMADD_D",CTy"FArith",
18352              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
18353                 Var("rs3",FTy 5),Var("frm",FTy 3)])),
18354        Call
18355          ("pFR3type",sTy,
18356           TP[LS"FNMADD.D",Var("rd",FTy 5),Var("rs1",FTy 5),
18357              Var("rs2",FTy 5),Var("rs3",FTy 5)])),
18358       (Call
18359          ("FArith",CTy"instruction",
18360           Call
18361             ("FNMSUB_D",CTy"FArith",
18362              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
18363                 Var("rs3",FTy 5),Var("frm",FTy 3)])),
18364        Call
18365          ("pFR3type",sTy,
18366           TP[LS"FNMSUB.D",Var("rd",FTy 5),Var("rs1",FTy 5),
18367              Var("rs2",FTy 5),Var("rs3",FTy 5)])),
18368       (Call
18369          ("FConv",CTy"instruction",
18370           Call
18371             ("FSGNJ_S",CTy"FConv",
18372              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18373        Call
18374          ("pFRtype",sTy,
18375           TP[LS"FSGNJ.S",Var("rd",FTy 5),Var("rs1",FTy 5),
18376              Var("rs2",FTy 5)])),
18377       (Call
18378          ("FConv",CTy"instruction",
18379           Call
18380             ("FSGNJN_S",CTy"FConv",
18381              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18382        Call
18383          ("pFRtype",sTy,
18384           TP[LS"FSGNJN.S",Var("rd",FTy 5),Var("rs1",FTy 5),
18385              Var("rs2",FTy 5)])),
18386       (Call
18387          ("FConv",CTy"instruction",
18388           Call
18389             ("FSGNJX_S",CTy"FConv",
18390              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18391        Call
18392          ("pFRtype",sTy,
18393           TP[LS"FSGNJX.S",Var("rd",FTy 5),Var("rs1",FTy 5),
18394              Var("rs2",FTy 5)])),
18395       (Call
18396          ("FConv",CTy"instruction",
18397           Call
18398             ("FCVT_W_S",CTy"FConv",
18399              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
18400        Call
18401          ("pCIFtype",sTy,TP[LS"FCVT.W.S",Var("rd",FTy 5),Var("rs",FTy 5)])),
18402       (Call
18403          ("FConv",CTy"instruction",
18404           Call
18405             ("FCVT_WU_S",CTy"FConv",
18406              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
18407        Call
18408          ("pCIFtype",sTy,
18409           TP[LS"FCVT.WU.S",Var("rd",FTy 5),Var("rs",FTy 5)])),
18410       (Call
18411          ("FConv",CTy"instruction",
18412           Call("FMV_X_S",CTy"FConv",TP[Var("rd",FTy 5),Var("rs",FTy 5)])),
18413        Call
18414          ("pCIFtype",sTy,TP[LS"FMV.X.S",Var("rd",FTy 5),Var("rs",FTy 5)])),
18415       (Call
18416          ("FConv",CTy"instruction",
18417           Call("FCLASS_S",CTy"FConv",TP[Var("rd",FTy 5),Var("rs",FTy 5)])),
18418        Call
18419          ("pCIFtype",sTy,TP[LS"FCLASS.S",Var("rd",FTy 5),Var("rs",FTy 5)])),
18420       (Call
18421          ("FConv",CTy"instruction",
18422           Call
18423             ("FCVT_S_W",CTy"FConv",
18424              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
18425        Call
18426          ("pCFItype",sTy,TP[LS"FCVT.S.W",Var("rd",FTy 5),Var("rs",FTy 5)])),
18427       (Call
18428          ("FConv",CTy"instruction",
18429           Call
18430             ("FCVT_S_WU",CTy"FConv",
18431              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
18432        Call
18433          ("pCFItype",sTy,
18434           TP[LS"FCVT.S.WU",Var("rd",FTy 5),Var("rs",FTy 5)])),
18435       (Call
18436          ("FConv",CTy"instruction",
18437           Call("FMV_S_X",CTy"FConv",TP[Var("rd",FTy 5),Var("rs",FTy 5)])),
18438        Call
18439          ("pCFItype",sTy,TP[LS"FMV.S.X",Var("rd",FTy 5),Var("rs",FTy 5)])),
18440       (Call
18441          ("FConv",CTy"instruction",
18442           Call
18443             ("FSGNJ_D",CTy"FConv",
18444              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18445        Call
18446          ("pFRtype",sTy,
18447           TP[LS"FSGNJ.D",Var("rd",FTy 5),Var("rs1",FTy 5),
18448              Var("rs2",FTy 5)])),
18449       (Call
18450          ("FConv",CTy"instruction",
18451           Call
18452             ("FSGNJN_D",CTy"FConv",
18453              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18454        Call
18455          ("pFRtype",sTy,
18456           TP[LS"FSGNJN.D",Var("rd",FTy 5),Var("rs1",FTy 5),
18457              Var("rs2",FTy 5)])),
18458       (Call
18459          ("FConv",CTy"instruction",
18460           Call
18461             ("FSGNJX_D",CTy"FConv",
18462              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18463        Call
18464          ("pFRtype",sTy,
18465           TP[LS"FSGNJX.D",Var("rd",FTy 5),Var("rs1",FTy 5),
18466              Var("rs2",FTy 5)])),
18467       (Call
18468          ("FConv",CTy"instruction",
18469           Call
18470             ("FCVT_W_D",CTy"FConv",
18471              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
18472        Call
18473          ("pCIFtype",sTy,TP[LS"FCVT.W.D",Var("rd",FTy 5),Var("rs",FTy 5)])),
18474       (Call
18475          ("FConv",CTy"instruction",
18476           Call
18477             ("FCVT_WU_D",CTy"FConv",
18478              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
18479        Call
18480          ("pCIFtype",sTy,
18481           TP[LS"FCVT.WU.D",Var("rd",FTy 5),Var("rs",FTy 5)])),
18482       (Call
18483          ("FConv",CTy"instruction",
18484           Call("FCLASS_D",CTy"FConv",TP[Var("rd",FTy 5),Var("rs",FTy 5)])),
18485        Call
18486          ("pCIFtype",sTy,TP[LS"FCLASS.D",Var("rd",FTy 5),Var("rs",FTy 5)])),
18487       (Call
18488          ("FConv",CTy"instruction",
18489           Call
18490             ("FCVT_D_W",CTy"FConv",
18491              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
18492        Call
18493          ("pCFItype",sTy,TP[LS"FCVT.D.W",Var("rd",FTy 5),Var("rs",FTy 5)])),
18494       (Call
18495          ("FConv",CTy"instruction",
18496           Call
18497             ("FCVT_D_WU",CTy"FConv",
18498              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
18499        Call
18500          ("pCFItype",sTy,
18501           TP[LS"FCVT.D.WU",Var("rd",FTy 5),Var("rs",FTy 5)])),
18502       (Call
18503          ("FConv",CTy"instruction",
18504           Call
18505             ("FCVT_L_S",CTy"FConv",
18506              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
18507        Call
18508          ("pCIFtype",sTy,TP[LS"FCVT.L.S",Var("rd",FTy 5),Var("rs",FTy 5)])),
18509       (Call
18510          ("FConv",CTy"instruction",
18511           Call
18512             ("FCVT_LU_S",CTy"FConv",
18513              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
18514        Call
18515          ("pCIFtype",sTy,
18516           TP[LS"FCVT.LU.S",Var("rd",FTy 5),Var("rs",FTy 5)])),
18517       (Call
18518          ("FConv",CTy"instruction",
18519           Call
18520             ("FCVT_S_L",CTy"FConv",
18521              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
18522        Call
18523          ("pCFItype",sTy,TP[LS"FCVT.S.L",Var("rd",FTy 5),Var("rs",FTy 5)])),
18524       (Call
18525          ("FConv",CTy"instruction",
18526           Call
18527             ("FCVT_S_LU",CTy"FConv",
18528              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
18529        Call
18530          ("pCFItype",sTy,
18531           TP[LS"FCVT.S.LU",Var("rd",FTy 5),Var("rs",FTy 5)])),
18532       (Call
18533          ("FConv",CTy"instruction",
18534           Call
18535             ("FCVT_L_D",CTy"FConv",
18536              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
18537        Call
18538          ("pCIFtype",sTy,TP[LS"FCVT.L.D",Var("rd",FTy 5),Var("rs",FTy 5)])),
18539       (Call
18540          ("FConv",CTy"instruction",
18541           Call
18542             ("FCVT_LU_D",CTy"FConv",
18543              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
18544        Call
18545          ("pCIFtype",sTy,
18546           TP[LS"FCVT.LU.D",Var("rd",FTy 5),Var("rs",FTy 5)])),
18547       (Call
18548          ("FConv",CTy"instruction",
18549           Call("FMV_X_D",CTy"FConv",TP[Var("rd",FTy 5),Var("rs",FTy 5)])),
18550        Call
18551          ("pCIFtype",sTy,TP[LS"FMV.X.D",Var("rd",FTy 5),Var("rs",FTy 5)])),
18552       (Call
18553          ("FConv",CTy"instruction",
18554           Call
18555             ("FCVT_D_L",CTy"FConv",
18556              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
18557        Call
18558          ("pCFItype",sTy,TP[LS"FCVT.D.L",Var("rd",FTy 5),Var("rs",FTy 5)])),
18559       (Call
18560          ("FConv",CTy"instruction",
18561           Call
18562             ("FCVT_D_LU",CTy"FConv",
18563              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
18564        Call
18565          ("pCFItype",sTy,
18566           TP[LS"FCVT.D.LU",Var("rd",FTy 5),Var("rs",FTy 5)])),
18567       (Call
18568          ("FConv",CTy"instruction",
18569           Call("FMV_D_X",CTy"FConv",TP[Var("rd",FTy 5),Var("rs",FTy 5)])),
18570        Call
18571          ("pCFItype",sTy,TP[LS"FMV.D.X",Var("rd",FTy 5),Var("rs",FTy 5)])),
18572       (Call
18573          ("FConv",CTy"instruction",
18574           Call
18575             ("FCVT_D_S",CTy"FConv",
18576              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
18577        Call
18578          ("pCFItype",sTy,TP[LS"FCVT.D.S",Var("rd",FTy 5),Var("rs",FTy 5)])),
18579       (Call
18580          ("FConv",CTy"instruction",
18581           Call
18582             ("FCVT_S_D",CTy"FConv",
18583              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
18584        Call
18585          ("pCFItype",sTy,TP[LS"FCVT.S.D",Var("rd",FTy 5),Var("rs",FTy 5)])),
18586       (Call
18587          ("FPLoad",CTy"instruction",
18588           Call
18589             ("FLW",CTy"FPLoad",
18590              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
18591        Call
18592          ("pFItype",sTy,
18593           TP[LS"FLW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
18594       (Call
18595          ("FPLoad",CTy"instruction",
18596           Call
18597             ("FLD",CTy"FPLoad",
18598              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
18599        Call
18600          ("pFItype",sTy,
18601           TP[LS"FLD",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
18602       (Call
18603          ("FPStore",CTy"instruction",
18604           Call
18605             ("FSW",CTy"FPStore",
18606              TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
18607        Call
18608          ("pFStype",sTy,
18609           TP[LS"FSW",Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
18610       (Call
18611          ("FPStore",CTy"instruction",
18612           Call
18613             ("FSD",CTy"FPStore",
18614              TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
18615        Call
18616          ("pFStype",sTy,
18617           TP[LS"FSD",Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
18618       (Call
18619          ("AMO",CTy"instruction",
18620           Call
18621             ("LR_W",CTy"AMO",
18622              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18623                 Var("rs1",FTy 5)])),
18624        Call
18625          ("pLRtype",sTy,
18626           TP[LS"LR.W",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18627              Var("rs1",FTy 5)])),
18628       (Call
18629          ("AMO",CTy"instruction",
18630           Call
18631             ("LR_D",CTy"AMO",
18632              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18633                 Var("rs1",FTy 5)])),
18634        Call
18635          ("pLRtype",sTy,
18636           TP[LS"LR.D",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18637              Var("rs1",FTy 5)])),
18638       (Call
18639          ("AMO",CTy"instruction",
18640           Call
18641             ("SC_W",CTy"AMO",
18642              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18643                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18644        Call
18645          ("pARtype",sTy,
18646           TP[LS"SC.W",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18647              Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18648       (Call
18649          ("AMO",CTy"instruction",
18650           Call
18651             ("SC_D",CTy"AMO",
18652              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18653                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18654        Call
18655          ("pARtype",sTy,
18656           TP[LS"SC.D",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18657              Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18658       (Call
18659          ("AMO",CTy"instruction",
18660           Call
18661             ("AMOSWAP_W",CTy"AMO",
18662              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18663                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18664        Call
18665          ("pARtype",sTy,
18666           TP[LS"AMOSWAP.W",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18667              Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18668       (Call
18669          ("AMO",CTy"instruction",
18670           Call
18671             ("AMOADD_W",CTy"AMO",
18672              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18673                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18674        Call
18675          ("pARtype",sTy,
18676           TP[LS"AMOADD.W",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18677              Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18678       (Call
18679          ("AMO",CTy"instruction",
18680           Call
18681             ("AMOXOR_W",CTy"AMO",
18682              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18683                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18684        Call
18685          ("pARtype",sTy,
18686           TP[LS"AMOXOR.W",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18687              Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18688       (Call
18689          ("AMO",CTy"instruction",
18690           Call
18691             ("AMOAND_W",CTy"AMO",
18692              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18693                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18694        Call
18695          ("pARtype",sTy,
18696           TP[LS"AMOAND.W",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18697              Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18698       (Call
18699          ("AMO",CTy"instruction",
18700           Call
18701             ("AMOOR_W",CTy"AMO",
18702              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18703                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18704        Call
18705          ("pARtype",sTy,
18706           TP[LS"AMOOR.W",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18707              Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18708       (Call
18709          ("AMO",CTy"instruction",
18710           Call
18711             ("AMOMIN_W",CTy"AMO",
18712              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18713                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18714        Call
18715          ("pARtype",sTy,
18716           TP[LS"AMOMIN.W",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18717              Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18718       (Call
18719          ("AMO",CTy"instruction",
18720           Call
18721             ("AMOMAX_W",CTy"AMO",
18722              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18723                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18724        Call
18725          ("pARtype",sTy,
18726           TP[LS"AMOMAX.W",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18727              Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18728       (Call
18729          ("AMO",CTy"instruction",
18730           Call
18731             ("AMOMINU_W",CTy"AMO",
18732              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18733                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18734        Call
18735          ("pARtype",sTy,
18736           TP[LS"AMOMINU.W",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18737              Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18738       (Call
18739          ("AMO",CTy"instruction",
18740           Call
18741             ("AMOMAXU_W",CTy"AMO",
18742              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18743                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18744        Call
18745          ("pARtype",sTy,
18746           TP[LS"AMOMAXU.W",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18747              Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18748       (Call
18749          ("AMO",CTy"instruction",
18750           Call
18751             ("AMOSWAP_D",CTy"AMO",
18752              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18753                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18754        Call
18755          ("pARtype",sTy,
18756           TP[LS"AMOSWAP.D",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18757              Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18758       (Call
18759          ("AMO",CTy"instruction",
18760           Call
18761             ("AMOADD_D",CTy"AMO",
18762              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18763                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18764        Call
18765          ("pARtype",sTy,
18766           TP[LS"AMOADD.D",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18767              Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18768       (Call
18769          ("AMO",CTy"instruction",
18770           Call
18771             ("AMOXOR_D",CTy"AMO",
18772              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18773                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18774        Call
18775          ("pARtype",sTy,
18776           TP[LS"AMOXOR.D",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18777              Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18778       (Call
18779          ("AMO",CTy"instruction",
18780           Call
18781             ("AMOAND_D",CTy"AMO",
18782              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18783                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18784        Call
18785          ("pARtype",sTy,
18786           TP[LS"AMOAND.D",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18787              Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18788       (Call
18789          ("AMO",CTy"instruction",
18790           Call
18791             ("AMOOR_D",CTy"AMO",
18792              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18793                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18794        Call
18795          ("pARtype",sTy,
18796           TP[LS"AMOOR.D",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18797              Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18798       (Call
18799          ("AMO",CTy"instruction",
18800           Call
18801             ("AMOMIN_D",CTy"AMO",
18802              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18803                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18804        Call
18805          ("pARtype",sTy,
18806           TP[LS"AMOMIN.D",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18807              Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18808       (Call
18809          ("AMO",CTy"instruction",
18810           Call
18811             ("AMOMAX_D",CTy"AMO",
18812              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18813                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18814        Call
18815          ("pARtype",sTy,
18816           TP[LS"AMOMAX.D",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18817              Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18818       (Call
18819          ("AMO",CTy"instruction",
18820           Call
18821             ("AMOMINU_D",CTy"AMO",
18822              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18823                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18824        Call
18825          ("pARtype",sTy,
18826           TP[LS"AMOMINU.D",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18827              Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18828       (Call
18829          ("AMO",CTy"instruction",
18830           Call
18831             ("AMOMAXU_D",CTy"AMO",
18832              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18833                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18834        Call
18835          ("pARtype",sTy,
18836           TP[LS"AMOMAXU.D",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
18837              Var("rs1",FTy 5),Var("rs2",FTy 5)])),
18838       (Call("System",CTy"instruction",Const("ECALL",CTy"System")),
18839        Call("pN0type",sTy,LS"ECALL")),
18840       (Call("System",CTy"instruction",Const("EBREAK",CTy"System")),
18841        Call("pN0type",sTy,LS"EBREAK")),
18842       (Call("System",CTy"instruction",Const("ERET",CTy"System")),
18843        Call("pN0type",sTy,LS"ERET")),
18844       (Call("System",CTy"instruction",Const("MRTS",CTy"System")),
18845        Call("pN0type",sTy,LS"MRTS")),
18846       (Call("System",CTy"instruction",Const("WFI",CTy"System")),
18847        Call("pN0type",sTy,LS"WFI")),
18848       (Call
18849          ("System",CTy"instruction",
18850           Call
18851             ("CSRRW",CTy"System",
18852              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("csr",FTy 12)])),
18853        Call
18854          ("pCSRtype",sTy,
18855           TP[LS"CSRRW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("csr",FTy 12)])),
18856       (Call
18857          ("System",CTy"instruction",
18858           Call
18859             ("CSRRS",CTy"System",
18860              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("csr",FTy 12)])),
18861        Call
18862          ("pCSRtype",sTy,
18863           TP[LS"CSRRS",Var("rd",FTy 5),Var("rs1",FTy 5),Var("csr",FTy 12)])),
18864       (Call
18865          ("System",CTy"instruction",
18866           Call
18867             ("CSRRC",CTy"System",
18868              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("csr",FTy 12)])),
18869        Call
18870          ("pCSRtype",sTy,
18871           TP[LS"CSRRC",Var("rd",FTy 5),Var("rs1",FTy 5),Var("csr",FTy 12)])),
18872       (Call
18873          ("System",CTy"instruction",
18874           Call
18875             ("CSRRWI",CTy"System",
18876              TP[Var("rd",FTy 5),Var("imm",FTy 5),Var("csr",FTy 12)])),
18877        Call
18878          ("pCSRItype",sTy,
18879           TP[LS"CSRRWI",Var("rd",FTy 5),Var("imm",FTy 5),
18880              Var("csr",FTy 12)])),
18881       (Call
18882          ("System",CTy"instruction",
18883           Call
18884             ("CSRRSI",CTy"System",
18885              TP[Var("rd",FTy 5),Var("imm",FTy 5),Var("csr",FTy 12)])),
18886        Call
18887          ("pCSRItype",sTy,
18888           TP[LS"CSRRSI",Var("rd",FTy 5),Var("imm",FTy 5),
18889              Var("csr",FTy 12)])),
18890       (Call
18891          ("System",CTy"instruction",
18892           Call
18893             ("CSRRCI",CTy"System",
18894              TP[Var("rd",FTy 5),Var("imm",FTy 5),Var("csr",FTy 12)])),
18895        Call
18896          ("pCSRItype",sTy,
18897           TP[LS"CSRRCI",Var("rd",FTy 5),Var("imm",FTy 5),
18898              Var("csr",FTy 12)])),
18899       (Call
18900          ("System",CTy"instruction",
18901           Call("SFENCE_VM",CTy"System",Var("rs1",FTy 5))),
18902        Call("pN1type",sTy,TP[LS"SFENCE.VM",Var("rs1",FTy 5)])),
18903       (Const("UnknownInstruction",CTy"instruction"),
18904        Call("pN0type",sTy,LS"UNKNOWN")),
18905       (Call
18906          ("Internal",CTy"instruction",
18907           Call("FETCH_MISALIGNED",CTy"Internal",AVar F64)),
18908        Call("pN0type",sTy,LS"FETCH_MISALIGNED")),
18909       (Call
18910          ("Internal",CTy"instruction",
18911           Call("FETCH_FAULT",CTy"Internal",AVar F64)),
18912        Call("pN0type",sTy,LS"FETCH_FAULT"))]))
18913;
18914val Rtype_def = Def
18915  ("Rtype",
18916   TP[Var("o",FTy 7),Var("f3",FTy 3),Var("rd",FTy 5),Var("rs1",FTy 5),
18917      Var("rs2",FTy 5),Var("f7",FTy 7)],
18918   CC[Var("f7",FTy 7),Var("rs2",FTy 5),Var("rs1",FTy 5),Var("f3",FTy 3),
18919      Var("rd",FTy 5),Var("o",FTy 7)])
18920;
18921val R4type_def = Def
18922  ("R4type",
18923   TP[Var("o",FTy 7),Var("f3",FTy 3),Var("rd",FTy 5),Var("rs1",FTy 5),
18924      Var("rs2",FTy 5),Var("rs3",FTy 5),Var("f2",FTy 2)],
18925   CC[Var("rs3",FTy 5),Var("f2",FTy 2),Var("rs2",FTy 5),Var("rs1",FTy 5),
18926      Var("f3",FTy 3),Var("rd",FTy 5),Var("o",FTy 7)])
18927;
18928val Itype_def = Def
18929  ("Itype",
18930   TP[Var("o",FTy 7),Var("f3",FTy 3),Var("rd",FTy 5),Var("rs1",FTy 5),
18931      Var("imm",FTy 12)],
18932   CC[Var("imm",FTy 12),Var("rs1",FTy 5),Var("f3",FTy 3),Var("rd",FTy 5),
18933      Var("o",FTy 7)])
18934;
18935val Stype_def = Def
18936  ("Stype",
18937   TP[Var("o",FTy 7),Var("f3",FTy 3),Var("rs1",FTy 5),Var("rs2",FTy 5),
18938      Var("imm",FTy 12)],
18939   CC[EX(Var("imm",FTy 12),LN 11,LN 5,FTy 7),Var("rs2",FTy 5),
18940      Var("rs1",FTy 5),Var("f3",FTy 3),
18941      EX(Var("imm",FTy 12),LN 4,LN 0,FTy 5),Var("o",FTy 7)])
18942;
18943val SBtype_def = Def
18944  ("SBtype",
18945   TP[Var("o",FTy 7),Var("f3",FTy 3),Var("rs1",FTy 5),Var("rs2",FTy 5),
18946      Var("imm",FTy 12)],
18947   CC[Mop(Cast F1,Bop(Bit,Var("imm",FTy 12),LN 11)),
18948      EX(Var("imm",FTy 12),LN 9,LN 4,FTy 6),Var("rs2",FTy 5),
18949      Var("rs1",FTy 5),Var("f3",FTy 3),EX(Var("imm",FTy 12),LN 3,LN 0,F4),
18950      Mop(Cast F1,Bop(Bit,Var("imm",FTy 12),LN 10)),Var("o",FTy 7)])
18951;
18952val Utype_def = Def
18953  ("Utype",TP[Var("o",FTy 7),Var("rd",FTy 5),Var("imm",FTy 20)],
18954   CC[Var("imm",FTy 20),Var("rd",FTy 5),Var("o",FTy 7)])
18955;
18956val UJtype_def = Def
18957  ("UJtype",TP[Var("o",FTy 7),Var("rd",FTy 5),Var("imm",FTy 20)],
18958   CC[Mop(Cast F1,Bop(Bit,Var("imm",FTy 20),LN 19)),
18959      EX(Var("imm",FTy 20),LN 9,LN 0,FTy 10),
18960      Mop(Cast F1,Bop(Bit,Var("imm",FTy 20),LN 10)),
18961      EX(Var("imm",FTy 20),LN 18,LN 11,F8),Var("rd",FTy 5),Var("o",FTy 7)])
18962;
18963val opc_def = Def
18964  ("opc",Var("code",F8),CC[EX(Var("code",F8),LN 4,LN 0,FTy 5),LW(3,2)])
18965;
18966val amofunc_def = Def
18967  ("amofunc",TP[Var("code",FTy 5),Var("aq",F1),Var("rl",F1)],
18968   CC[Var("code",FTy 5),Var("aq",F1),Var("rl",F1)])
18969;
18970val Encode_def = Def
18971  ("Encode",Var("i",CTy"instruction"),
18972   CS(Var("i",CTy"instruction"),
18973      [(Call
18974          ("Branch",CTy"instruction",
18975           Call
18976             ("BEQ",CTy"Branch",
18977              TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
18978        Call
18979          ("SBtype",F32,
18980           TP[Call("opc",FTy 7,LW(24,8)),LW(0,3),Var("rs1",FTy 5),
18981              Var("rs2",FTy 5),Var("imm",FTy 12)])),
18982       (Call
18983          ("Branch",CTy"instruction",
18984           Call
18985             ("BNE",CTy"Branch",
18986              TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
18987        Call
18988          ("SBtype",F32,
18989           TP[Call("opc",FTy 7,LW(24,8)),LW(1,3),Var("rs1",FTy 5),
18990              Var("rs2",FTy 5),Var("imm",FTy 12)])),
18991       (Call
18992          ("Branch",CTy"instruction",
18993           Call
18994             ("BLT",CTy"Branch",
18995              TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
18996        Call
18997          ("SBtype",F32,
18998           TP[Call("opc",FTy 7,LW(24,8)),LW(4,3),Var("rs1",FTy 5),
18999              Var("rs2",FTy 5),Var("imm",FTy 12)])),
19000       (Call
19001          ("Branch",CTy"instruction",
19002           Call
19003             ("BGE",CTy"Branch",
19004              TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
19005        Call
19006          ("SBtype",F32,
19007           TP[Call("opc",FTy 7,LW(24,8)),LW(5,3),Var("rs1",FTy 5),
19008              Var("rs2",FTy 5),Var("imm",FTy 12)])),
19009       (Call
19010          ("Branch",CTy"instruction",
19011           Call
19012             ("BLTU",CTy"Branch",
19013              TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
19014        Call
19015          ("SBtype",F32,
19016           TP[Call("opc",FTy 7,LW(24,8)),LW(6,3),Var("rs1",FTy 5),
19017              Var("rs2",FTy 5),Var("imm",FTy 12)])),
19018       (Call
19019          ("Branch",CTy"instruction",
19020           Call
19021             ("BGEU",CTy"Branch",
19022              TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
19023        Call
19024          ("SBtype",F32,
19025           TP[Call("opc",FTy 7,LW(24,8)),LW(7,3),Var("rs1",FTy 5),
19026              Var("rs2",FTy 5),Var("imm",FTy 12)])),
19027       (Call
19028          ("Branch",CTy"instruction",
19029           Call
19030             ("JALR",CTy"Branch",
19031              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
19032        Call
19033          ("Itype",F32,
19034           TP[Call("opc",FTy 7,LW(25,8)),LW(0,3),Var("rd",FTy 5),
19035              Var("rs1",FTy 5),Var("imm",FTy 12)])),
19036       (Call
19037          ("Branch",CTy"instruction",
19038           Call("JAL",CTy"Branch",TP[Var("rd",FTy 5),Var("imm",FTy 20)])),
19039        Call
19040          ("UJtype",F32,
19041           TP[Call("opc",FTy 7,LW(27,8)),Var("rd",FTy 5),Var("imm",FTy 20)])),
19042       (Call
19043          ("ArithI",CTy"instruction",
19044           Call("LUI",CTy"ArithI",TP[Var("rd",FTy 5),Var("imm",FTy 20)])),
19045        Call
19046          ("Utype",F32,
19047           TP[Call("opc",FTy 7,LW(13,8)),Var("rd",FTy 5),Var("imm",FTy 20)])),
19048       (Call
19049          ("ArithI",CTy"instruction",
19050           Call("AUIPC",CTy"ArithI",TP[Var("rd",FTy 5),Var("imm",FTy 20)])),
19051        Call
19052          ("Utype",F32,
19053           TP[Call("opc",FTy 7,LW(5,8)),Var("rd",FTy 5),Var("imm",FTy 20)])),
19054       (Call
19055          ("ArithI",CTy"instruction",
19056           Call
19057             ("ADDI",CTy"ArithI",
19058              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
19059        Call
19060          ("Itype",F32,
19061           TP[Call("opc",FTy 7,LW(4,8)),LW(0,3),Var("rd",FTy 5),
19062              Var("rs1",FTy 5),Var("imm",FTy 12)])),
19063       (Call
19064          ("Shift",CTy"instruction",
19065           Call
19066             ("SLLI",CTy"Shift",
19067              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 6)])),
19068        Call
19069          ("Itype",F32,
19070           TP[Call("opc",FTy 7,LW(4,8)),LW(1,3),Var("rd",FTy 5),
19071              Var("rs1",FTy 5),CC[LW(0,6),Var("imm",FTy 6)]])),
19072       (Call
19073          ("ArithI",CTy"instruction",
19074           Call
19075             ("SLTI",CTy"ArithI",
19076              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
19077        Call
19078          ("Itype",F32,
19079           TP[Call("opc",FTy 7,LW(4,8)),LW(2,3),Var("rd",FTy 5),
19080              Var("rs1",FTy 5),Var("imm",FTy 12)])),
19081       (Call
19082          ("ArithI",CTy"instruction",
19083           Call
19084             ("SLTIU",CTy"ArithI",
19085              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
19086        Call
19087          ("Itype",F32,
19088           TP[Call("opc",FTy 7,LW(4,8)),LW(3,3),Var("rd",FTy 5),
19089              Var("rs1",FTy 5),Var("imm",FTy 12)])),
19090       (Call
19091          ("ArithI",CTy"instruction",
19092           Call
19093             ("XORI",CTy"ArithI",
19094              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
19095        Call
19096          ("Itype",F32,
19097           TP[Call("opc",FTy 7,LW(4,8)),LW(4,3),Var("rd",FTy 5),
19098              Var("rs1",FTy 5),Var("imm",FTy 12)])),
19099       (Call
19100          ("Shift",CTy"instruction",
19101           Call
19102             ("SRLI",CTy"Shift",
19103              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 6)])),
19104        Call
19105          ("Itype",F32,
19106           TP[Call("opc",FTy 7,LW(4,8)),LW(5,3),Var("rd",FTy 5),
19107              Var("rs1",FTy 5),CC[LW(0,6),Var("imm",FTy 6)]])),
19108       (Call
19109          ("Shift",CTy"instruction",
19110           Call
19111             ("SRAI",CTy"Shift",
19112              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 6)])),
19113        Call
19114          ("Itype",F32,
19115           TP[Call("opc",FTy 7,LW(4,8)),LW(5,3),Var("rd",FTy 5),
19116              Var("rs1",FTy 5),CC[LW(16,6),Var("imm",FTy 6)]])),
19117       (Call
19118          ("ArithI",CTy"instruction",
19119           Call
19120             ("ORI",CTy"ArithI",
19121              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
19122        Call
19123          ("Itype",F32,
19124           TP[Call("opc",FTy 7,LW(4,8)),LW(6,3),Var("rd",FTy 5),
19125              Var("rs1",FTy 5),Var("imm",FTy 12)])),
19126       (Call
19127          ("ArithI",CTy"instruction",
19128           Call
19129             ("ANDI",CTy"ArithI",
19130              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
19131        Call
19132          ("Itype",F32,
19133           TP[Call("opc",FTy 7,LW(4,8)),LW(7,3),Var("rd",FTy 5),
19134              Var("rs1",FTy 5),Var("imm",FTy 12)])),
19135       (Call
19136          ("ArithR",CTy"instruction",
19137           Call
19138             ("ADD",CTy"ArithR",
19139              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19140        Call
19141          ("Rtype",F32,
19142           TP[Call("opc",FTy 7,LW(12,8)),LW(0,3),Var("rd",FTy 5),
19143              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(0,7)])),
19144       (Call
19145          ("ArithR",CTy"instruction",
19146           Call
19147             ("SUB",CTy"ArithR",
19148              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19149        Call
19150          ("Rtype",F32,
19151           TP[Call("opc",FTy 7,LW(12,8)),LW(0,3),Var("rd",FTy 5),
19152              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(32,7)])),
19153       (Call
19154          ("Shift",CTy"instruction",
19155           Call
19156             ("SLL",CTy"Shift",
19157              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19158        Call
19159          ("Rtype",F32,
19160           TP[Call("opc",FTy 7,LW(12,8)),LW(1,3),Var("rd",FTy 5),
19161              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(0,7)])),
19162       (Call
19163          ("ArithR",CTy"instruction",
19164           Call
19165             ("SLT",CTy"ArithR",
19166              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19167        Call
19168          ("Rtype",F32,
19169           TP[Call("opc",FTy 7,LW(12,8)),LW(2,3),Var("rd",FTy 5),
19170              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(0,7)])),
19171       (Call
19172          ("ArithR",CTy"instruction",
19173           Call
19174             ("SLTU",CTy"ArithR",
19175              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19176        Call
19177          ("Rtype",F32,
19178           TP[Call("opc",FTy 7,LW(12,8)),LW(3,3),Var("rd",FTy 5),
19179              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(0,7)])),
19180       (Call
19181          ("ArithR",CTy"instruction",
19182           Call
19183             ("XOR",CTy"ArithR",
19184              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19185        Call
19186          ("Rtype",F32,
19187           TP[Call("opc",FTy 7,LW(12,8)),LW(4,3),Var("rd",FTy 5),
19188              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(0,7)])),
19189       (Call
19190          ("Shift",CTy"instruction",
19191           Call
19192             ("SRL",CTy"Shift",
19193              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19194        Call
19195          ("Rtype",F32,
19196           TP[Call("opc",FTy 7,LW(12,8)),LW(5,3),Var("rd",FTy 5),
19197              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(0,7)])),
19198       (Call
19199          ("Shift",CTy"instruction",
19200           Call
19201             ("SRA",CTy"Shift",
19202              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19203        Call
19204          ("Rtype",F32,
19205           TP[Call("opc",FTy 7,LW(12,8)),LW(5,3),Var("rd",FTy 5),
19206              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(32,7)])),
19207       (Call
19208          ("ArithR",CTy"instruction",
19209           Call
19210             ("OR",CTy"ArithR",
19211              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19212        Call
19213          ("Rtype",F32,
19214           TP[Call("opc",FTy 7,LW(12,8)),LW(6,3),Var("rd",FTy 5),
19215              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(0,7)])),
19216       (Call
19217          ("ArithR",CTy"instruction",
19218           Call
19219             ("AND",CTy"ArithR",
19220              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19221        Call
19222          ("Rtype",F32,
19223           TP[Call("opc",FTy 7,LW(12,8)),LW(7,3),Var("rd",FTy 5),
19224              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(0,7)])),
19225       (Call
19226          ("ArithI",CTy"instruction",
19227           Call
19228             ("ADDIW",CTy"ArithI",
19229              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
19230        Call
19231          ("Itype",F32,
19232           TP[Call("opc",FTy 7,LW(6,8)),LW(0,3),Var("rd",FTy 5),
19233              Var("rs1",FTy 5),Var("imm",FTy 12)])),
19234       (Call
19235          ("Shift",CTy"instruction",
19236           Call
19237             ("SLLIW",CTy"Shift",
19238              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 5)])),
19239        Call
19240          ("Itype",F32,
19241           TP[Call("opc",FTy 7,LW(6,8)),LW(1,3),Var("rd",FTy 5),
19242              Var("rs1",FTy 5),CC[LW(0,7),Var("imm",FTy 5)]])),
19243       (Call
19244          ("Shift",CTy"instruction",
19245           Call
19246             ("SRLIW",CTy"Shift",
19247              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 5)])),
19248        Call
19249          ("Itype",F32,
19250           TP[Call("opc",FTy 7,LW(6,8)),LW(5,3),Var("rd",FTy 5),
19251              Var("rs1",FTy 5),CC[LW(0,7),Var("imm",FTy 5)]])),
19252       (Call
19253          ("Shift",CTy"instruction",
19254           Call
19255             ("SRAIW",CTy"Shift",
19256              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 5)])),
19257        Call
19258          ("Itype",F32,
19259           TP[Call("opc",FTy 7,LW(6,8)),LW(5,3),Var("rd",FTy 5),
19260              Var("rs1",FTy 5),CC[LW(32,7),Var("imm",FTy 5)]])),
19261       (Call
19262          ("ArithR",CTy"instruction",
19263           Call
19264             ("ADDW",CTy"ArithR",
19265              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19266        Call
19267          ("Rtype",F32,
19268           TP[Call("opc",FTy 7,LW(14,8)),LW(0,3),Var("rd",FTy 5),
19269              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(0,7)])),
19270       (Call
19271          ("ArithR",CTy"instruction",
19272           Call
19273             ("SUBW",CTy"ArithR",
19274              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19275        Call
19276          ("Rtype",F32,
19277           TP[Call("opc",FTy 7,LW(14,8)),LW(0,3),Var("rd",FTy 5),
19278              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(32,7)])),
19279       (Call
19280          ("Shift",CTy"instruction",
19281           Call
19282             ("SLLW",CTy"Shift",
19283              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19284        Call
19285          ("Rtype",F32,
19286           TP[Call("opc",FTy 7,LW(14,8)),LW(1,3),Var("rd",FTy 5),
19287              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(0,7)])),
19288       (Call
19289          ("Shift",CTy"instruction",
19290           Call
19291             ("SRLW",CTy"Shift",
19292              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19293        Call
19294          ("Rtype",F32,
19295           TP[Call("opc",FTy 7,LW(14,8)),LW(5,3),Var("rd",FTy 5),
19296              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(0,7)])),
19297       (Call
19298          ("Shift",CTy"instruction",
19299           Call
19300             ("SRAW",CTy"Shift",
19301              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19302        Call
19303          ("Rtype",F32,
19304           TP[Call("opc",FTy 7,LW(14,8)),LW(5,3),Var("rd",FTy 5),
19305              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(32,7)])),
19306       (Call
19307          ("MulDiv",CTy"instruction",
19308           Call
19309             ("MUL",CTy"MulDiv",
19310              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19311        Call
19312          ("Rtype",F32,
19313           TP[Call("opc",FTy 7,LW(12,8)),LW(0,3),Var("rd",FTy 5),
19314              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(1,7)])),
19315       (Call
19316          ("MulDiv",CTy"instruction",
19317           Call
19318             ("MULH",CTy"MulDiv",
19319              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19320        Call
19321          ("Rtype",F32,
19322           TP[Call("opc",FTy 7,LW(12,8)),LW(1,3),Var("rd",FTy 5),
19323              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(1,7)])),
19324       (Call
19325          ("MulDiv",CTy"instruction",
19326           Call
19327             ("MULHSU",CTy"MulDiv",
19328              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19329        Call
19330          ("Rtype",F32,
19331           TP[Call("opc",FTy 7,LW(12,8)),LW(2,3),Var("rd",FTy 5),
19332              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(1,7)])),
19333       (Call
19334          ("MulDiv",CTy"instruction",
19335           Call
19336             ("MULHU",CTy"MulDiv",
19337              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19338        Call
19339          ("Rtype",F32,
19340           TP[Call("opc",FTy 7,LW(12,8)),LW(3,3),Var("rd",FTy 5),
19341              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(1,7)])),
19342       (Call
19343          ("MulDiv",CTy"instruction",
19344           Call
19345             ("DIV",CTy"MulDiv",
19346              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19347        Call
19348          ("Rtype",F32,
19349           TP[Call("opc",FTy 7,LW(12,8)),LW(4,3),Var("rd",FTy 5),
19350              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(1,7)])),
19351       (Call
19352          ("MulDiv",CTy"instruction",
19353           Call
19354             ("DIVU",CTy"MulDiv",
19355              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19356        Call
19357          ("Rtype",F32,
19358           TP[Call("opc",FTy 7,LW(12,8)),LW(5,3),Var("rd",FTy 5),
19359              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(1,7)])),
19360       (Call
19361          ("MulDiv",CTy"instruction",
19362           Call
19363             ("REM",CTy"MulDiv",
19364              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19365        Call
19366          ("Rtype",F32,
19367           TP[Call("opc",FTy 7,LW(12,8)),LW(6,3),Var("rd",FTy 5),
19368              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(1,7)])),
19369       (Call
19370          ("MulDiv",CTy"instruction",
19371           Call
19372             ("REMU",CTy"MulDiv",
19373              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19374        Call
19375          ("Rtype",F32,
19376           TP[Call("opc",FTy 7,LW(12,8)),LW(7,3),Var("rd",FTy 5),
19377              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(1,7)])),
19378       (Call
19379          ("MulDiv",CTy"instruction",
19380           Call
19381             ("MULW",CTy"MulDiv",
19382              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19383        Call
19384          ("Rtype",F32,
19385           TP[Call("opc",FTy 7,LW(14,8)),LW(0,3),Var("rd",FTy 5),
19386              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(1,7)])),
19387       (Call
19388          ("MulDiv",CTy"instruction",
19389           Call
19390             ("DIVW",CTy"MulDiv",
19391              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19392        Call
19393          ("Rtype",F32,
19394           TP[Call("opc",FTy 7,LW(14,8)),LW(4,3),Var("rd",FTy 5),
19395              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(1,7)])),
19396       (Call
19397          ("MulDiv",CTy"instruction",
19398           Call
19399             ("DIVUW",CTy"MulDiv",
19400              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19401        Call
19402          ("Rtype",F32,
19403           TP[Call("opc",FTy 7,LW(14,8)),LW(5,3),Var("rd",FTy 5),
19404              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(1,7)])),
19405       (Call
19406          ("MulDiv",CTy"instruction",
19407           Call
19408             ("REMW",CTy"MulDiv",
19409              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19410        Call
19411          ("Rtype",F32,
19412           TP[Call("opc",FTy 7,LW(14,8)),LW(6,3),Var("rd",FTy 5),
19413              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(1,7)])),
19414       (Call
19415          ("MulDiv",CTy"instruction",
19416           Call
19417             ("REMUW",CTy"MulDiv",
19418              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19419        Call
19420          ("Rtype",F32,
19421           TP[Call("opc",FTy 7,LW(14,8)),LW(7,3),Var("rd",FTy 5),
19422              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(1,7)])),
19423       (Call
19424          ("Load",CTy"instruction",
19425           Call
19426             ("LB",CTy"Load",
19427              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
19428        Call
19429          ("Itype",F32,
19430           TP[Call("opc",FTy 7,LW(0,8)),LW(0,3),Var("rd",FTy 5),
19431              Var("rs1",FTy 5),Var("imm",FTy 12)])),
19432       (Call
19433          ("Load",CTy"instruction",
19434           Call
19435             ("LH",CTy"Load",
19436              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
19437        Call
19438          ("Itype",F32,
19439           TP[Call("opc",FTy 7,LW(0,8)),LW(1,3),Var("rd",FTy 5),
19440              Var("rs1",FTy 5),Var("imm",FTy 12)])),
19441       (Call
19442          ("Load",CTy"instruction",
19443           Call
19444             ("LW",CTy"Load",
19445              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
19446        Call
19447          ("Itype",F32,
19448           TP[Call("opc",FTy 7,LW(0,8)),LW(2,3),Var("rd",FTy 5),
19449              Var("rs1",FTy 5),Var("imm",FTy 12)])),
19450       (Call
19451          ("Load",CTy"instruction",
19452           Call
19453             ("LD",CTy"Load",
19454              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
19455        Call
19456          ("Itype",F32,
19457           TP[Call("opc",FTy 7,LW(0,8)),LW(3,3),Var("rd",FTy 5),
19458              Var("rs1",FTy 5),Var("imm",FTy 12)])),
19459       (Call
19460          ("Load",CTy"instruction",
19461           Call
19462             ("LBU",CTy"Load",
19463              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
19464        Call
19465          ("Itype",F32,
19466           TP[Call("opc",FTy 7,LW(0,8)),LW(4,3),Var("rd",FTy 5),
19467              Var("rs1",FTy 5),Var("imm",FTy 12)])),
19468       (Call
19469          ("Load",CTy"instruction",
19470           Call
19471             ("LHU",CTy"Load",
19472              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
19473        Call
19474          ("Itype",F32,
19475           TP[Call("opc",FTy 7,LW(0,8)),LW(5,3),Var("rd",FTy 5),
19476              Var("rs1",FTy 5),Var("imm",FTy 12)])),
19477       (Call
19478          ("Load",CTy"instruction",
19479           Call
19480             ("LWU",CTy"Load",
19481              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
19482        Call
19483          ("Itype",F32,
19484           TP[Call("opc",FTy 7,LW(0,8)),LW(6,3),Var("rd",FTy 5),
19485              Var("rs1",FTy 5),Var("imm",FTy 12)])),
19486       (Call
19487          ("Store",CTy"instruction",
19488           Call
19489             ("SB",CTy"Store",
19490              TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
19491        Call
19492          ("Stype",F32,
19493           TP[Call("opc",FTy 7,LW(8,8)),LW(0,3),Var("rs1",FTy 5),
19494              Var("rs2",FTy 5),Var("imm",FTy 12)])),
19495       (Call
19496          ("Store",CTy"instruction",
19497           Call
19498             ("SH",CTy"Store",
19499              TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
19500        Call
19501          ("Stype",F32,
19502           TP[Call("opc",FTy 7,LW(8,8)),LW(1,3),Var("rs1",FTy 5),
19503              Var("rs2",FTy 5),Var("imm",FTy 12)])),
19504       (Call
19505          ("Store",CTy"instruction",
19506           Call
19507             ("SW",CTy"Store",
19508              TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
19509        Call
19510          ("Stype",F32,
19511           TP[Call("opc",FTy 7,LW(8,8)),LW(2,3),Var("rs1",FTy 5),
19512              Var("rs2",FTy 5),Var("imm",FTy 12)])),
19513       (Call
19514          ("Store",CTy"instruction",
19515           Call
19516             ("SD",CTy"Store",
19517              TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
19518        Call
19519          ("Stype",F32,
19520           TP[Call("opc",FTy 7,LW(8,8)),LW(3,3),Var("rs1",FTy 5),
19521              Var("rs2",FTy 5),Var("imm",FTy 12)])),
19522       (Call
19523          ("FENCE",CTy"instruction",
19524           TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("pred",F4),
19525              Var("succ",F4)]),
19526        Call
19527          ("Itype",F32,
19528           TP[Call("opc",FTy 7,LW(3,8)),LW(0,3),Var("rd",FTy 5),
19529              Var("rs1",FTy 5),CC[LW(0,4),Var("pred",F4),Var("succ",F4)]])),
19530       (Call
19531          ("FENCE_I",CTy"instruction",
19532           TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)]),
19533        Call
19534          ("Itype",F32,
19535           TP[Call("opc",FTy 7,LW(3,8)),LW(1,3),Var("rd",FTy 5),
19536              Var("rs1",FTy 5),Var("imm",FTy 12)])),
19537       (Call
19538          ("FArith",CTy"instruction",
19539           Call
19540             ("FADD_S",CTy"FArith",
19541              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
19542                 Var("frm",FTy 3)])),
19543        Call
19544          ("Rtype",F32,
19545           TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5),
19546              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(0,7)])),
19547       (Call
19548          ("FArith",CTy"instruction",
19549           Call
19550             ("FSUB_S",CTy"FArith",
19551              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
19552                 Var("frm",FTy 3)])),
19553        Call
19554          ("Rtype",F32,
19555           TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5),
19556              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(4,7)])),
19557       (Call
19558          ("FArith",CTy"instruction",
19559           Call
19560             ("FMUL_S",CTy"FArith",
19561              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
19562                 Var("frm",FTy 3)])),
19563        Call
19564          ("Rtype",F32,
19565           TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5),
19566              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(8,7)])),
19567       (Call
19568          ("FArith",CTy"instruction",
19569           Call
19570             ("FDIV_S",CTy"FArith",
19571              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
19572                 Var("frm",FTy 3)])),
19573        Call
19574          ("Rtype",F32,
19575           TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5),
19576              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(12,7)])),
19577       (Call
19578          ("FArith",CTy"instruction",
19579           Call
19580             ("FSQRT_S",CTy"FArith",
19581              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
19582        Call
19583          ("Rtype",F32,
19584           TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5),
19585              Var("rs",FTy 5),LW(0,5),LW(44,7)])),
19586       (Call
19587          ("FArith",CTy"instruction",
19588           Call
19589             ("FMIN_S",CTy"FArith",
19590              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19591        Call
19592          ("Rtype",F32,
19593           TP[Call("opc",FTy 7,LW(20,8)),LW(0,3),Var("rd",FTy 5),
19594              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(20,7)])),
19595       (Call
19596          ("FArith",CTy"instruction",
19597           Call
19598             ("FMAX_S",CTy"FArith",
19599              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19600        Call
19601          ("Rtype",F32,
19602           TP[Call("opc",FTy 7,LW(20,8)),LW(1,3),Var("rd",FTy 5),
19603              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(20,7)])),
19604       (Call
19605          ("FArith",CTy"instruction",
19606           Call
19607             ("FEQ_S",CTy"FArith",
19608              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19609        Call
19610          ("Rtype",F32,
19611           TP[Call("opc",FTy 7,LW(20,8)),LW(2,3),Var("rd",FTy 5),
19612              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(80,7)])),
19613       (Call
19614          ("FArith",CTy"instruction",
19615           Call
19616             ("FLT_S",CTy"FArith",
19617              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19618        Call
19619          ("Rtype",F32,
19620           TP[Call("opc",FTy 7,LW(20,8)),LW(1,3),Var("rd",FTy 5),
19621              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(80,7)])),
19622       (Call
19623          ("FArith",CTy"instruction",
19624           Call
19625             ("FLE_S",CTy"FArith",
19626              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19627        Call
19628          ("Rtype",F32,
19629           TP[Call("opc",FTy 7,LW(20,8)),LW(0,3),Var("rd",FTy 5),
19630              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(80,7)])),
19631       (Call
19632          ("FArith",CTy"instruction",
19633           Call
19634             ("FADD_D",CTy"FArith",
19635              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
19636                 Var("frm",FTy 3)])),
19637        Call
19638          ("Rtype",F32,
19639           TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5),
19640              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(1,7)])),
19641       (Call
19642          ("FArith",CTy"instruction",
19643           Call
19644             ("FSUB_D",CTy"FArith",
19645              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
19646                 Var("frm",FTy 3)])),
19647        Call
19648          ("Rtype",F32,
19649           TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5),
19650              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(5,7)])),
19651       (Call
19652          ("FArith",CTy"instruction",
19653           Call
19654             ("FMUL_D",CTy"FArith",
19655              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
19656                 Var("frm",FTy 3)])),
19657        Call
19658          ("Rtype",F32,
19659           TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5),
19660              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(9,7)])),
19661       (Call
19662          ("FArith",CTy"instruction",
19663           Call
19664             ("FDIV_D",CTy"FArith",
19665              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
19666                 Var("frm",FTy 3)])),
19667        Call
19668          ("Rtype",F32,
19669           TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5),
19670              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(13,7)])),
19671       (Call
19672          ("FArith",CTy"instruction",
19673           Call
19674             ("FSQRT_D",CTy"FArith",
19675              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
19676        Call
19677          ("Rtype",F32,
19678           TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5),
19679              Var("rs",FTy 5),LW(0,5),LW(45,7)])),
19680       (Call
19681          ("FArith",CTy"instruction",
19682           Call
19683             ("FMIN_D",CTy"FArith",
19684              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19685        Call
19686          ("Rtype",F32,
19687           TP[Call("opc",FTy 7,LW(20,8)),LW(0,3),Var("rd",FTy 5),
19688              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(21,7)])),
19689       (Call
19690          ("FArith",CTy"instruction",
19691           Call
19692             ("FMAX_D",CTy"FArith",
19693              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19694        Call
19695          ("Rtype",F32,
19696           TP[Call("opc",FTy 7,LW(20,8)),LW(1,3),Var("rd",FTy 5),
19697              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(21,7)])),
19698       (Call
19699          ("FArith",CTy"instruction",
19700           Call
19701             ("FEQ_D",CTy"FArith",
19702              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19703        Call
19704          ("Rtype",F32,
19705           TP[Call("opc",FTy 7,LW(20,8)),LW(2,3),Var("rd",FTy 5),
19706              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(81,7)])),
19707       (Call
19708          ("FArith",CTy"instruction",
19709           Call
19710             ("FLT_D",CTy"FArith",
19711              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19712        Call
19713          ("Rtype",F32,
19714           TP[Call("opc",FTy 7,LW(20,8)),LW(1,3),Var("rd",FTy 5),
19715              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(81,7)])),
19716       (Call
19717          ("FArith",CTy"instruction",
19718           Call
19719             ("FLE_D",CTy"FArith",
19720              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19721        Call
19722          ("Rtype",F32,
19723           TP[Call("opc",FTy 7,LW(20,8)),LW(0,3),Var("rd",FTy 5),
19724              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(81,7)])),
19725       (Call
19726          ("FPLoad",CTy"instruction",
19727           Call
19728             ("FLW",CTy"FPLoad",
19729              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
19730        Call
19731          ("Itype",F32,
19732           TP[Call("opc",FTy 7,LW(1,8)),LW(2,3),Var("rd",FTy 5),
19733              Var("rs1",FTy 5),Var("imm",FTy 12)])),
19734       (Call
19735          ("FPLoad",CTy"instruction",
19736           Call
19737             ("FLD",CTy"FPLoad",
19738              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])),
19739        Call
19740          ("Itype",F32,
19741           TP[Call("opc",FTy 7,LW(1,8)),LW(3,3),Var("rd",FTy 5),
19742              Var("rs1",FTy 5),Var("imm",FTy 12)])),
19743       (Call
19744          ("FPStore",CTy"instruction",
19745           Call
19746             ("FSW",CTy"FPStore",
19747              TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
19748        Call
19749          ("Stype",F32,
19750           TP[Call("opc",FTy 7,LW(9,8)),LW(2,3),Var("rs1",FTy 5),
19751              Var("rs2",FTy 5),Var("imm",FTy 12)])),
19752       (Call
19753          ("FPStore",CTy"instruction",
19754           Call
19755             ("FSD",CTy"FPStore",
19756              TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])),
19757        Call
19758          ("Stype",F32,
19759           TP[Call("opc",FTy 7,LW(9,8)),LW(3,3),Var("rs1",FTy 5),
19760              Var("rs2",FTy 5),Var("imm",FTy 12)])),
19761       (Call
19762          ("FArith",CTy"instruction",
19763           Call
19764             ("FMADD_S",CTy"FArith",
19765              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
19766                 Var("rs3",FTy 5),Var("frm",FTy 3)])),
19767        Call
19768          ("R4type",F32,
19769           TP[Call("opc",FTy 7,LW(16,8)),Var("frm",FTy 3),Var("rd",FTy 5),
19770              Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5),LW(0,2)])),
19771       (Call
19772          ("FArith",CTy"instruction",
19773           Call
19774             ("FMSUB_S",CTy"FArith",
19775              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
19776                 Var("rs3",FTy 5),Var("frm",FTy 3)])),
19777        Call
19778          ("R4type",F32,
19779           TP[Call("opc",FTy 7,LW(17,8)),Var("frm",FTy 3),Var("rd",FTy 5),
19780              Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5),LW(0,2)])),
19781       (Call
19782          ("FArith",CTy"instruction",
19783           Call
19784             ("FNMSUB_S",CTy"FArith",
19785              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
19786                 Var("rs3",FTy 5),Var("frm",FTy 3)])),
19787        Call
19788          ("R4type",F32,
19789           TP[Call("opc",FTy 7,LW(18,8)),Var("frm",FTy 3),Var("rd",FTy 5),
19790              Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5),LW(0,2)])),
19791       (Call
19792          ("FArith",CTy"instruction",
19793           Call
19794             ("FNMADD_S",CTy"FArith",
19795              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
19796                 Var("rs3",FTy 5),Var("frm",FTy 3)])),
19797        Call
19798          ("R4type",F32,
19799           TP[Call("opc",FTy 7,LW(19,8)),Var("frm",FTy 3),Var("rd",FTy 5),
19800              Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5),LW(0,2)])),
19801       (Call
19802          ("FArith",CTy"instruction",
19803           Call
19804             ("FMADD_D",CTy"FArith",
19805              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
19806                 Var("rs3",FTy 5),Var("frm",FTy 3)])),
19807        Call
19808          ("R4type",F32,
19809           TP[Call("opc",FTy 7,LW(16,8)),Var("frm",FTy 3),Var("rd",FTy 5),
19810              Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5),LW(1,2)])),
19811       (Call
19812          ("FArith",CTy"instruction",
19813           Call
19814             ("FMSUB_D",CTy"FArith",
19815              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
19816                 Var("rs3",FTy 5),Var("frm",FTy 3)])),
19817        Call
19818          ("R4type",F32,
19819           TP[Call("opc",FTy 7,LW(17,8)),Var("frm",FTy 3),Var("rd",FTy 5),
19820              Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5),LW(1,2)])),
19821       (Call
19822          ("FArith",CTy"instruction",
19823           Call
19824             ("FNMSUB_D",CTy"FArith",
19825              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
19826                 Var("rs3",FTy 5),Var("frm",FTy 3)])),
19827        Call
19828          ("R4type",F32,
19829           TP[Call("opc",FTy 7,LW(18,8)),Var("frm",FTy 3),Var("rd",FTy 5),
19830              Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5),LW(1,2)])),
19831       (Call
19832          ("FArith",CTy"instruction",
19833           Call
19834             ("FNMADD_D",CTy"FArith",
19835              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),
19836                 Var("rs3",FTy 5),Var("frm",FTy 3)])),
19837        Call
19838          ("R4type",F32,
19839           TP[Call("opc",FTy 7,LW(19,8)),Var("frm",FTy 3),Var("rd",FTy 5),
19840              Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5),LW(1,2)])),
19841       (Call
19842          ("FConv",CTy"instruction",
19843           Call
19844             ("FSGNJ_S",CTy"FConv",
19845              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19846        Call
19847          ("Rtype",F32,
19848           TP[Call("opc",FTy 7,LW(20,8)),LW(0,3),Var("rd",FTy 5),
19849              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(16,7)])),
19850       (Call
19851          ("FConv",CTy"instruction",
19852           Call
19853             ("FSGNJN_S",CTy"FConv",
19854              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19855        Call
19856          ("Rtype",F32,
19857           TP[Call("opc",FTy 7,LW(20,8)),LW(1,3),Var("rd",FTy 5),
19858              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(16,7)])),
19859       (Call
19860          ("FConv",CTy"instruction",
19861           Call
19862             ("FSGNJX_S",CTy"FConv",
19863              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19864        Call
19865          ("Rtype",F32,
19866           TP[Call("opc",FTy 7,LW(20,8)),LW(2,3),Var("rd",FTy 5),
19867              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(16,7)])),
19868       (Call
19869          ("FConv",CTy"instruction",
19870           Call
19871             ("FCVT_W_S",CTy"FConv",
19872              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
19873        Call
19874          ("Rtype",F32,
19875           TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5),
19876              Var("rs",FTy 5),LW(0,5),LW(96,7)])),
19877       (Call
19878          ("FConv",CTy"instruction",
19879           Call
19880             ("FCVT_WU_S",CTy"FConv",
19881              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
19882        Call
19883          ("Rtype",F32,
19884           TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5),
19885              Var("rs",FTy 5),LW(1,5),LW(96,7)])),
19886       (Call
19887          ("FConv",CTy"instruction",
19888           Call("FMV_X_S",CTy"FConv",TP[Var("rd",FTy 5),Var("rs",FTy 5)])),
19889        Call
19890          ("Rtype",F32,
19891           TP[Call("opc",FTy 7,LW(20,8)),LW(0,3),Var("rd",FTy 5),
19892              Var("rs",FTy 5),LW(0,5),LW(112,7)])),
19893       (Call
19894          ("FConv",CTy"instruction",
19895           Call("FCLASS_S",CTy"FConv",TP[Var("rd",FTy 5),Var("rs",FTy 5)])),
19896        Call
19897          ("Rtype",F32,
19898           TP[Call("opc",FTy 7,LW(20,8)),LW(1,3),Var("rd",FTy 5),
19899              Var("rs",FTy 5),LW(0,5),LW(112,7)])),
19900       (Call
19901          ("FConv",CTy"instruction",
19902           Call
19903             ("FCVT_S_W",CTy"FConv",
19904              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
19905        Call
19906          ("Rtype",F32,
19907           TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5),
19908              Var("rs",FTy 5),LW(0,5),LW(104,7)])),
19909       (Call
19910          ("FConv",CTy"instruction",
19911           Call
19912             ("FCVT_S_WU",CTy"FConv",
19913              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
19914        Call
19915          ("Rtype",F32,
19916           TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5),
19917              Var("rs",FTy 5),LW(1,5),LW(104,7)])),
19918       (Call
19919          ("FConv",CTy"instruction",
19920           Call("FMV_S_X",CTy"FConv",TP[Var("rd",FTy 5),Var("rs",FTy 5)])),
19921        Call
19922          ("Rtype",F32,
19923           TP[Call("opc",FTy 7,LW(20,8)),LW(0,3),Var("rd",FTy 5),
19924              Var("rs",FTy 5),LW(0,5),LW(120,7)])),
19925       (Call
19926          ("FConv",CTy"instruction",
19927           Call
19928             ("FSGNJ_D",CTy"FConv",
19929              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19930        Call
19931          ("Rtype",F32,
19932           TP[Call("opc",FTy 7,LW(20,8)),LW(0,3),Var("rd",FTy 5),
19933              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(17,7)])),
19934       (Call
19935          ("FConv",CTy"instruction",
19936           Call
19937             ("FSGNJN_D",CTy"FConv",
19938              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19939        Call
19940          ("Rtype",F32,
19941           TP[Call("opc",FTy 7,LW(20,8)),LW(1,3),Var("rd",FTy 5),
19942              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(17,7)])),
19943       (Call
19944          ("FConv",CTy"instruction",
19945           Call
19946             ("FSGNJX_D",CTy"FConv",
19947              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])),
19948        Call
19949          ("Rtype",F32,
19950           TP[Call("opc",FTy 7,LW(20,8)),LW(2,3),Var("rd",FTy 5),
19951              Var("rs1",FTy 5),Var("rs2",FTy 5),LW(17,7)])),
19952       (Call
19953          ("FConv",CTy"instruction",
19954           Call
19955             ("FCVT_W_D",CTy"FConv",
19956              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
19957        Call
19958          ("Rtype",F32,
19959           TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5),
19960              Var("rs",FTy 5),LW(0,5),LW(97,7)])),
19961       (Call
19962          ("FConv",CTy"instruction",
19963           Call
19964             ("FCVT_WU_D",CTy"FConv",
19965              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
19966        Call
19967          ("Rtype",F32,
19968           TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5),
19969              Var("rs",FTy 5),LW(1,5),LW(97,7)])),
19970       (Call
19971          ("FConv",CTy"instruction",
19972           Call("FCLASS_D",CTy"FConv",TP[Var("rd",FTy 5),Var("rs",FTy 5)])),
19973        Call
19974          ("Rtype",F32,
19975           TP[Call("opc",FTy 7,LW(20,8)),LW(1,3),Var("rd",FTy 5),
19976              Var("rs",FTy 5),LW(0,5),LW(113,7)])),
19977       (Call
19978          ("FConv",CTy"instruction",
19979           Call
19980             ("FCVT_D_W",CTy"FConv",
19981              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
19982        Call
19983          ("Rtype",F32,
19984           TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5),
19985              Var("rs",FTy 5),LW(0,5),LW(105,7)])),
19986       (Call
19987          ("FConv",CTy"instruction",
19988           Call
19989             ("FCVT_D_WU",CTy"FConv",
19990              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
19991        Call
19992          ("Rtype",F32,
19993           TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5),
19994              Var("rs",FTy 5),LW(1,5),LW(105,7)])),
19995       (Call
19996          ("FConv",CTy"instruction",
19997           Call
19998             ("FCVT_S_D",CTy"FConv",
19999              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
20000        Call
20001          ("Rtype",F32,
20002           TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5),
20003              Var("rs",FTy 5),LW(1,5),LW(32,7)])),
20004       (Call
20005          ("FConv",CTy"instruction",
20006           Call
20007             ("FCVT_D_S",CTy"FConv",
20008              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
20009        Call
20010          ("Rtype",F32,
20011           TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5),
20012              Var("rs",FTy 5),LW(0,5),LW(33,7)])),
20013       (Call
20014          ("FConv",CTy"instruction",
20015           Call
20016             ("FCVT_L_S",CTy"FConv",
20017              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
20018        Call
20019          ("Rtype",F32,
20020           TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5),
20021              Var("rs",FTy 5),LW(2,5),LW(96,7)])),
20022       (Call
20023          ("FConv",CTy"instruction",
20024           Call
20025             ("FCVT_LU_S",CTy"FConv",
20026              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
20027        Call
20028          ("Rtype",F32,
20029           TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5),
20030              Var("rs",FTy 5),LW(3,5),LW(96,7)])),
20031       (Call
20032          ("FConv",CTy"instruction",
20033           Call
20034             ("FCVT_S_L",CTy"FConv",
20035              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
20036        Call
20037          ("Rtype",F32,
20038           TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5),
20039              Var("rs",FTy 5),LW(2,5),LW(104,7)])),
20040       (Call
20041          ("FConv",CTy"instruction",
20042           Call
20043             ("FCVT_S_LU",CTy"FConv",
20044              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
20045        Call
20046          ("Rtype",F32,
20047           TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5),
20048              Var("rs",FTy 5),LW(3,5),LW(104,7)])),
20049       (Call
20050          ("FConv",CTy"instruction",
20051           Call
20052             ("FCVT_L_D",CTy"FConv",
20053              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
20054        Call
20055          ("Rtype",F32,
20056           TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5),
20057              Var("rs",FTy 5),LW(2,5),LW(97,7)])),
20058       (Call
20059          ("FConv",CTy"instruction",
20060           Call
20061             ("FCVT_LU_D",CTy"FConv",
20062              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
20063        Call
20064          ("Rtype",F32,
20065           TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5),
20066              Var("rs",FTy 5),LW(3,5),LW(97,7)])),
20067       (Call
20068          ("FConv",CTy"instruction",
20069           Call("FMV_X_D",CTy"FConv",TP[Var("rd",FTy 5),Var("rs",FTy 5)])),
20070        Call
20071          ("Rtype",F32,
20072           TP[Call("opc",FTy 7,LW(20,8)),LW(0,3),Var("rd",FTy 5),
20073              Var("rs",FTy 5),LW(0,5),LW(113,7)])),
20074       (Call
20075          ("FConv",CTy"instruction",
20076           Call
20077             ("FCVT_D_L",CTy"FConv",
20078              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
20079        Call
20080          ("Rtype",F32,
20081           TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5),
20082              Var("rs",FTy 5),LW(2,5),LW(105,7)])),
20083       (Call
20084          ("FConv",CTy"instruction",
20085           Call
20086             ("FCVT_D_LU",CTy"FConv",
20087              TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])),
20088        Call
20089          ("Rtype",F32,
20090           TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5),
20091              Var("rs",FTy 5),LW(3,5),LW(105,7)])),
20092       (Call
20093          ("FConv",CTy"instruction",
20094           Call("FMV_D_X",CTy"FConv",TP[Var("rd",FTy 5),Var("rs",FTy 5)])),
20095        Call
20096          ("Rtype",F32,
20097           TP[Call("opc",FTy 7,LW(20,8)),LW(0,3),Var("rd",FTy 5),
20098              Var("rs",FTy 5),LW(0,5),LW(121,7)])),
20099       (Call
20100          ("AMO",CTy"instruction",
20101           Call
20102             ("LR_W",CTy"AMO",
20103              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
20104                 Var("rs1",FTy 5)])),
20105        Call
20106          ("Rtype",F32,
20107           TP[Call("opc",FTy 7,LW(11,8)),LW(2,3),Var("rd",FTy 5),
20108              Var("rs1",FTy 5),LW(0,5),
20109              Call("amofunc",FTy 7,TP[LW(2,5),Var("aq",F1),Var("rl",F1)])])),
20110       (Call
20111          ("AMO",CTy"instruction",
20112           Call
20113             ("LR_D",CTy"AMO",
20114              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
20115                 Var("rs1",FTy 5)])),
20116        Call
20117          ("Rtype",F32,
20118           TP[Call("opc",FTy 7,LW(11,8)),LW(3,3),Var("rd",FTy 5),
20119              Var("rs1",FTy 5),LW(0,5),
20120              Call("amofunc",FTy 7,TP[LW(2,5),Var("aq",F1),Var("rl",F1)])])),
20121       (Call
20122          ("AMO",CTy"instruction",
20123           Call
20124             ("SC_W",CTy"AMO",
20125              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
20126                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
20127        Call
20128          ("Rtype",F32,
20129           TP[Call("opc",FTy 7,LW(11,8)),LW(2,3),Var("rd",FTy 5),
20130              Var("rs1",FTy 5),Var("rs2",FTy 5),
20131              Call("amofunc",FTy 7,TP[LW(3,5),Var("aq",F1),Var("rl",F1)])])),
20132       (Call
20133          ("AMO",CTy"instruction",
20134           Call
20135             ("SC_D",CTy"AMO",
20136              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
20137                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
20138        Call
20139          ("Rtype",F32,
20140           TP[Call("opc",FTy 7,LW(11,8)),LW(3,3),Var("rd",FTy 5),
20141              Var("rs1",FTy 5),Var("rs2",FTy 5),
20142              Call("amofunc",FTy 7,TP[LW(2,5),Var("aq",F1),Var("rl",F1)])])),
20143       (Call
20144          ("AMO",CTy"instruction",
20145           Call
20146             ("AMOSWAP_W",CTy"AMO",
20147              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
20148                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
20149        Call
20150          ("Rtype",F32,
20151           TP[Call("opc",FTy 7,LW(11,8)),LW(2,3),Var("rd",FTy 5),
20152              Var("rs1",FTy 5),Var("rs2",FTy 5),
20153              Call("amofunc",FTy 7,TP[LW(1,5),Var("aq",F1),Var("rl",F1)])])),
20154       (Call
20155          ("AMO",CTy"instruction",
20156           Call
20157             ("AMOADD_W",CTy"AMO",
20158              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
20159                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
20160        Call
20161          ("Rtype",F32,
20162           TP[Call("opc",FTy 7,LW(11,8)),LW(2,3),Var("rd",FTy 5),
20163              Var("rs1",FTy 5),Var("rs2",FTy 5),
20164              Call("amofunc",FTy 7,TP[LW(0,5),Var("aq",F1),Var("rl",F1)])])),
20165       (Call
20166          ("AMO",CTy"instruction",
20167           Call
20168             ("AMOXOR_W",CTy"AMO",
20169              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
20170                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
20171        Call
20172          ("Rtype",F32,
20173           TP[Call("opc",FTy 7,LW(11,8)),LW(2,3),Var("rd",FTy 5),
20174              Var("rs1",FTy 5),Var("rs2",FTy 5),
20175              Call("amofunc",FTy 7,TP[LW(4,5),Var("aq",F1),Var("rl",F1)])])),
20176       (Call
20177          ("AMO",CTy"instruction",
20178           Call
20179             ("AMOAND_W",CTy"AMO",
20180              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
20181                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
20182        Call
20183          ("Rtype",F32,
20184           TP[Call("opc",FTy 7,LW(11,8)),LW(2,3),Var("rd",FTy 5),
20185              Var("rs1",FTy 5),Var("rs2",FTy 5),
20186              Call("amofunc",FTy 7,TP[LW(12,5),Var("aq",F1),Var("rl",F1)])])),
20187       (Call
20188          ("AMO",CTy"instruction",
20189           Call
20190             ("AMOOR_W",CTy"AMO",
20191              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
20192                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
20193        Call
20194          ("Rtype",F32,
20195           TP[Call("opc",FTy 7,LW(11,8)),LW(2,3),Var("rd",FTy 5),
20196              Var("rs1",FTy 5),Var("rs2",FTy 5),
20197              Call("amofunc",FTy 7,TP[LW(8,5),Var("aq",F1),Var("rl",F1)])])),
20198       (Call
20199          ("AMO",CTy"instruction",
20200           Call
20201             ("AMOMIN_W",CTy"AMO",
20202              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
20203                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
20204        Call
20205          ("Rtype",F32,
20206           TP[Call("opc",FTy 7,LW(11,8)),LW(2,3),Var("rd",FTy 5),
20207              Var("rs1",FTy 5),Var("rs2",FTy 5),
20208              Call("amofunc",FTy 7,TP[LW(16,5),Var("aq",F1),Var("rl",F1)])])),
20209       (Call
20210          ("AMO",CTy"instruction",
20211           Call
20212             ("AMOMAX_W",CTy"AMO",
20213              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
20214                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
20215        Call
20216          ("Rtype",F32,
20217           TP[Call("opc",FTy 7,LW(11,8)),LW(2,3),Var("rd",FTy 5),
20218              Var("rs1",FTy 5),Var("rs2",FTy 5),
20219              Call("amofunc",FTy 7,TP[LW(20,5),Var("aq",F1),Var("rl",F1)])])),
20220       (Call
20221          ("AMO",CTy"instruction",
20222           Call
20223             ("AMOMINU_W",CTy"AMO",
20224              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
20225                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
20226        Call
20227          ("Rtype",F32,
20228           TP[Call("opc",FTy 7,LW(11,8)),LW(2,3),Var("rd",FTy 5),
20229              Var("rs1",FTy 5),Var("rs2",FTy 5),
20230              Call("amofunc",FTy 7,TP[LW(24,5),Var("aq",F1),Var("rl",F1)])])),
20231       (Call
20232          ("AMO",CTy"instruction",
20233           Call
20234             ("AMOMAXU_W",CTy"AMO",
20235              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
20236                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
20237        Call
20238          ("Rtype",F32,
20239           TP[Call("opc",FTy 7,LW(11,8)),LW(2,3),Var("rd",FTy 5),
20240              Var("rs1",FTy 5),Var("rs2",FTy 5),
20241              Call("amofunc",FTy 7,TP[LW(28,5),Var("aq",F1),Var("rl",F1)])])),
20242       (Call
20243          ("AMO",CTy"instruction",
20244           Call
20245             ("AMOSWAP_D",CTy"AMO",
20246              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
20247                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
20248        Call
20249          ("Rtype",F32,
20250           TP[Call("opc",FTy 7,LW(11,8)),LW(3,3),Var("rd",FTy 5),
20251              Var("rs1",FTy 5),Var("rs2",FTy 5),
20252              Call("amofunc",FTy 7,TP[LW(1,5),Var("aq",F1),Var("rl",F1)])])),
20253       (Call
20254          ("AMO",CTy"instruction",
20255           Call
20256             ("AMOADD_D",CTy"AMO",
20257              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
20258                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
20259        Call
20260          ("Rtype",F32,
20261           TP[Call("opc",FTy 7,LW(11,8)),LW(3,3),Var("rd",FTy 5),
20262              Var("rs1",FTy 5),Var("rs2",FTy 5),
20263              Call("amofunc",FTy 7,TP[LW(0,5),Var("aq",F1),Var("rl",F1)])])),
20264       (Call
20265          ("AMO",CTy"instruction",
20266           Call
20267             ("AMOXOR_D",CTy"AMO",
20268              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
20269                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
20270        Call
20271          ("Rtype",F32,
20272           TP[Call("opc",FTy 7,LW(11,8)),LW(3,3),Var("rd",FTy 5),
20273              Var("rs1",FTy 5),Var("rs2",FTy 5),
20274              Call("amofunc",FTy 7,TP[LW(4,5),Var("aq",F1),Var("rl",F1)])])),
20275       (Call
20276          ("AMO",CTy"instruction",
20277           Call
20278             ("AMOAND_D",CTy"AMO",
20279              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
20280                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
20281        Call
20282          ("Rtype",F32,
20283           TP[Call("opc",FTy 7,LW(11,8)),LW(3,3),Var("rd",FTy 5),
20284              Var("rs1",FTy 5),Var("rs2",FTy 5),
20285              Call("amofunc",FTy 7,TP[LW(12,5),Var("aq",F1),Var("rl",F1)])])),
20286       (Call
20287          ("AMO",CTy"instruction",
20288           Call
20289             ("AMOOR_D",CTy"AMO",
20290              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
20291                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
20292        Call
20293          ("Rtype",F32,
20294           TP[Call("opc",FTy 7,LW(11,8)),LW(3,3),Var("rd",FTy 5),
20295              Var("rs1",FTy 5),Var("rs2",FTy 5),
20296              Call("amofunc",FTy 7,TP[LW(8,5),Var("aq",F1),Var("rl",F1)])])),
20297       (Call
20298          ("AMO",CTy"instruction",
20299           Call
20300             ("AMOMIN_D",CTy"AMO",
20301              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
20302                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
20303        Call
20304          ("Rtype",F32,
20305           TP[Call("opc",FTy 7,LW(11,8)),LW(3,3),Var("rd",FTy 5),
20306              Var("rs1",FTy 5),Var("rs2",FTy 5),
20307              Call("amofunc",FTy 7,TP[LW(16,5),Var("aq",F1),Var("rl",F1)])])),
20308       (Call
20309          ("AMO",CTy"instruction",
20310           Call
20311             ("AMOMAX_D",CTy"AMO",
20312              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
20313                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
20314        Call
20315          ("Rtype",F32,
20316           TP[Call("opc",FTy 7,LW(11,8)),LW(3,3),Var("rd",FTy 5),
20317              Var("rs1",FTy 5),Var("rs2",FTy 5),
20318              Call("amofunc",FTy 7,TP[LW(20,5),Var("aq",F1),Var("rl",F1)])])),
20319       (Call
20320          ("AMO",CTy"instruction",
20321           Call
20322             ("AMOMINU_D",CTy"AMO",
20323              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
20324                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
20325        Call
20326          ("Rtype",F32,
20327           TP[Call("opc",FTy 7,LW(11,8)),LW(3,3),Var("rd",FTy 5),
20328              Var("rs1",FTy 5),Var("rs2",FTy 5),
20329              Call("amofunc",FTy 7,TP[LW(24,5),Var("aq",F1),Var("rl",F1)])])),
20330       (Call
20331          ("AMO",CTy"instruction",
20332           Call
20333             ("AMOMAXU_D",CTy"AMO",
20334              TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),
20335                 Var("rs1",FTy 5),Var("rs2",FTy 5)])),
20336        Call
20337          ("Rtype",F32,
20338           TP[Call("opc",FTy 7,LW(11,8)),LW(3,3),Var("rd",FTy 5),
20339              Var("rs1",FTy 5),Var("rs2",FTy 5),
20340              Call("amofunc",FTy 7,TP[LW(28,5),Var("aq",F1),Var("rl",F1)])])),
20341       (Call("System",CTy"instruction",Const("ECALL",CTy"System")),
20342        Call
20343          ("Itype",F32,
20344           TP[Call("opc",FTy 7,LW(28,8)),LW(0,3),LW(0,5),LW(0,5),LW(0,12)])),
20345       (Call("System",CTy"instruction",Const("EBREAK",CTy"System")),
20346        Call
20347          ("Itype",F32,
20348           TP[Call("opc",FTy 7,LW(28,8)),LW(0,3),LW(0,5),LW(0,5),LW(1,12)])),
20349       (Call("System",CTy"instruction",Const("ERET",CTy"System")),
20350        Call
20351          ("Itype",F32,
20352           TP[Call("opc",FTy 7,LW(28,8)),LW(0,3),LW(0,5),LW(0,5),
20353              LW(256,12)])),
20354       (Call("System",CTy"instruction",Const("MRTS",CTy"System")),
20355        Call
20356          ("Itype",F32,
20357           TP[Call("opc",FTy 7,LW(28,8)),LW(0,3),LW(0,5),LW(0,5),
20358              LW(773,12)])),
20359       (Call("System",CTy"instruction",Const("WFI",CTy"System")),
20360        Call
20361          ("Itype",F32,
20362           TP[Call("opc",FTy 7,LW(28,8)),LW(0,3),LW(0,5),LW(0,5),
20363              LW(258,12)])),
20364       (Call
20365          ("System",CTy"instruction",
20366           Call("SFENCE_VM",CTy"System",Var("rs1",FTy 5))),
20367        Call
20368          ("Itype",F32,
20369           TP[Call("opc",FTy 7,LW(28,8)),LW(0,3),LW(0,5),Var("rs1",FTy 5),
20370              LW(257,12)])),
20371       (Call
20372          ("System",CTy"instruction",
20373           Call
20374             ("CSRRW",CTy"System",
20375              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("csr",FTy 12)])),
20376        Call
20377          ("Itype",F32,
20378           TP[Call("opc",FTy 7,LW(28,8)),LW(1,3),Var("rd",FTy 5),
20379              Var("rs1",FTy 5),Var("csr",FTy 12)])),
20380       (Call
20381          ("System",CTy"instruction",
20382           Call
20383             ("CSRRS",CTy"System",
20384              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("csr",FTy 12)])),
20385        Call
20386          ("Itype",F32,
20387           TP[Call("opc",FTy 7,LW(28,8)),LW(2,3),Var("rd",FTy 5),
20388              Var("rs1",FTy 5),Var("csr",FTy 12)])),
20389       (Call
20390          ("System",CTy"instruction",
20391           Call
20392             ("CSRRC",CTy"System",
20393              TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("csr",FTy 12)])),
20394        Call
20395          ("Itype",F32,
20396           TP[Call("opc",FTy 7,LW(28,8)),LW(3,3),Var("rd",FTy 5),
20397              Var("rs1",FTy 5),Var("csr",FTy 12)])),
20398       (Call
20399          ("System",CTy"instruction",
20400           Call
20401             ("CSRRWI",CTy"System",
20402              TP[Var("rd",FTy 5),Var("imm",FTy 5),Var("csr",FTy 12)])),
20403        Call
20404          ("Itype",F32,
20405           TP[Call("opc",FTy 7,LW(28,8)),LW(5,3),Var("rd",FTy 5),
20406              Var("imm",FTy 5),Var("csr",FTy 12)])),
20407       (Call
20408          ("System",CTy"instruction",
20409           Call
20410             ("CSRRSI",CTy"System",
20411              TP[Var("rd",FTy 5),Var("imm",FTy 5),Var("csr",FTy 12)])),
20412        Call
20413          ("Itype",F32,
20414           TP[Call("opc",FTy 7,LW(28,8)),LW(6,3),Var("rd",FTy 5),
20415              Var("imm",FTy 5),Var("csr",FTy 12)])),
20416       (Call
20417          ("System",CTy"instruction",
20418           Call
20419             ("CSRRCI",CTy"System",
20420              TP[Var("rd",FTy 5),Var("imm",FTy 5),Var("csr",FTy 12)])),
20421        Call
20422          ("Itype",F32,
20423           TP[Call("opc",FTy 7,LW(28,8)),LW(7,3),Var("rd",FTy 5),
20424              Var("imm",FTy 5),Var("csr",FTy 12)])),
20425       (Const("UnknownInstruction",CTy"instruction"),LW(0,32)),
20426       (Call
20427          ("Internal",CTy"instruction",
20428           Call("FETCH_MISALIGNED",CTy"Internal",AVar F64)),LW(0,32)),
20429       (Call
20430          ("Internal",CTy"instruction",
20431           Call("FETCH_FAULT",CTy"Internal",AVar F64)),LW(0,32))]))
20432;
20433val log_instruction_def = Def
20434  ("log_instruction",TP[Var("w",F32),Var("inst",CTy"instruction")],
20435   Close
20436     (qVar"state",
20437      CC[LS"instr ",Mop(Cast sTy,Dest("procID",F8,qVar"state")),LS" ",
20438         Mop(Cast sTy,
20439             Mop(Cast nTy,
20440                 Apply
20441                   (Dest("c_instret",ATy(F8,F64),qVar"state"),
20442                    Dest("procID",F8,qVar"state")))),LS" 0x",
20443         Call("hex64",sTy,Apply(Const("PC",ATy(qTy,F64)),qVar"state")),
20444         LS" : ",Call("hex32",sTy,Var("w",F32)),LS"   ",
20445         Call("instructionToString",sTy,Var("inst",CTy"instruction"))]))
20446;
20447val exitCode_def = Def
20448  ("exitCode",AVar uTy,
20449   Close
20450     (qVar"state",
20451      Mop(Cast nTy,Apply(Const("ExitCode",ATy(qTy,F64)),qVar"state"))))
20452;
20453val CYCLES_PER_TIMER_TICK_def = Def0 ("CYCLES_PER_TIMER_TICK",LN 200)
20454;
20455val tickClock_def = Def
20456  ("tickClock",AVar uTy,
20457   Close
20458     (qVar"state",
20459      Let(Var("v",F64),
20460          Bop(Add,
20461              Apply
20462                (Dest("c_cycles",ATy(F8,F64),qVar"state"),
20463                 Dest("procID",F8,qVar"state")),LW(1,64)),
20464          Rupd
20465            ("clock",
20466             TP[Rupd
20467                  ("c_cycles",
20468                   TP[qVar"state",
20469                      Fupd
20470                        (Dest("c_cycles",ATy(F8,F64),qVar"state"),
20471                         Dest("procID",F8,qVar"state"),Var("v",F64))]),
20472                Bop(Div,Var("v",F64),
20473                    Mop(Cast F64,Const("CYCLES_PER_TIMER_TICK",nTy)))]))))
20474;
20475val incrInstret_def = Def
20476  ("incrInstret",AVar uTy,
20477   Close
20478     (qVar"state",
20479      Rupd
20480        ("c_instret",
20481         TP[qVar"state",
20482            Fupd
20483              (Dest("c_instret",ATy(F8,F64),qVar"state"),
20484               Dest("procID",F8,qVar"state"),
20485               Bop(Add,
20486                   Apply
20487                     (Dest("c_instret",ATy(F8,F64),qVar"state"),
20488                      Dest("procID",F8,qVar"state")),LW(1,64)))])))
20489;
20490val checkTimers_def = Def
20491  ("checkTimers",AVar uTy,
20492   Close
20493     (qVar"state",
20494      Let(qVar"s",
20495          ITE(Bop(Ugt,Dest("clock",F64,qVar"state"),
20496                  Bop(Add,
20497                      Dest
20498                        ("mtimecmp",F64,
20499                         Apply
20500                           (Const("MCSR",ATy(qTy,CTy"MachineCSR")),
20501                            qVar"state")),
20502                      Dest
20503                        ("mtime_delta",F64,
20504                         Apply
20505                           (Const("MCSR",ATy(qTy,CTy"MachineCSR")),
20506                            qVar"state")))),
20507              Let(Var("v",CTy"MachineCSR"),
20508                  Apply
20509                    (Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"state"),
20510                  Apply
20511                    (Call
20512                       ("write'MCSR",ATy(qTy,qTy),
20513                        Rupd
20514                          ("mip",
20515                           TP[Var("v",CTy"MachineCSR"),
20516                              Rupd
20517                                ("MTIP",
20518                                 TP[Dest
20519                                      ("mip",CTy"mip",
20520                                       Var("v",CTy"MachineCSR")),LT])])),
20521                     qVar"state")),qVar"state"),
20522          ITE(Bop(Ugt,Dest("clock",F64,qVar"s"),
20523                  Bop(Add,
20524                      Dest
20525                        ("stimecmp",F64,
20526                         Apply
20527                           (Const("SCSR",ATy(qTy,CTy"SupervisorCSR")),
20528                            qVar"s")),
20529                      Dest
20530                        ("stime_delta",F64,
20531                         Apply
20532                           (Const("SCSR",ATy(qTy,CTy"SupervisorCSR")),
20533                            qVar"s")))),
20534              Let(Var("v",CTy"MachineCSR"),
20535                  Apply(Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"s"),
20536                  Apply
20537                    (Call
20538                       ("write'MCSR",ATy(qTy,qTy),
20539                        Rupd
20540                          ("mip",
20541                           TP[Var("v",CTy"MachineCSR"),
20542                              Rupd
20543                                ("STIP",
20544                                 TP[Dest
20545                                      ("mip",CTy"mip",
20546                                       Var("v",CTy"MachineCSR")),LT])])),
20547                     qVar"s")),qVar"s"))))
20548;
20549val Next_def = Def
20550  ("Next",qVar"state",
20551   Let(TP[Var("v",CTy"MachineCSR"),qVar"s"],
20552       Let(qVar"s",Apply(Call("clear_logs",ATy(qTy,qTy),LU),qVar"state"),
20553           TP[Apply(Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"s"),
20554              qVar"s"]),
20555       Let(TP[Var("v",CTy"FetchResult"),qVar"s"],
20556           Apply
20557             (Call("Fetch",ATy(qTy,PTy(CTy"FetchResult",qTy)),LU),
20558              ITE(Mop(Not,
20559                      EQ(Dest("mtohost",F64,Var("v",CTy"MachineCSR")),
20560                         LW(0,64))),
20561                  ITE(Bop(Bit,
20562                          Dest
20563                            ("mtohost",F64,
20564                             Apply
20565                               (Const("MCSR",ATy(qTy,CTy"MachineCSR")),
20566                                qVar"s")),LN 0),
20567                      Let(TP[Var("v",CTy"MachineCSR"),qVar"s"],
20568                          Let(qVar"s0",Rupd("done",TP[qVar"s",LT]),
20569                              TP[Apply
20570                                   (Const("MCSR",ATy(qTy,CTy"MachineCSR")),
20571                                    qVar"s0"),qVar"s0"]),
20572                          Apply
20573                            (Call
20574                               ("write'ExitCode",ATy(qTy,qTy),
20575                                Bop(Asr,
20576                                    Dest
20577                                      ("mtohost",F64,
20578                                       Var("v",CTy"MachineCSR")),LN 1)),
20579                             qVar"s")),
20580                      Apply
20581                        (Call
20582                           ("write'MCSR",ATy(qTy,qTy),
20583                            Rupd
20584                              ("mtohost",
20585                               TP[Apply
20586                                    (Const
20587                                       ("MCSR",ATy(qTy,CTy"MachineCSR")),
20588                                     qVar"s"),LW(0,64)])),qVar"s")),
20589                  qVar"s")),
20590           Let(TP[Var("v",OTy(CTy"TransferControl")),qVar"s"],
20591               Let(qVar"s0",
20592                   Apply
20593                     (Call("checkTimers",ATy(qTy,qTy),LU),
20594                      CS(Var("v",CTy"FetchResult"),
20595                         [(Call("F_Result",CTy"FetchResult",Var("w",F32)),
20596                           Apply
20597                             (Call
20598                                ("Run",ATy(qTy,qTy),
20599                                 Call
20600                                   ("Decode",CTy"instruction",Var("w",F32))),
20601                              qVar"s")),
20602                          (Call
20603                             ("F_Error",CTy"FetchResult",
20604                              Var("inst",CTy"instruction")),
20605                           Apply
20606                             (Call
20607                                ("Run",ATy(qTy,qTy),
20608                                 Var("inst",CTy"instruction")),qVar"s"))])),
20609                   TP[Apply
20610                        (Const
20611                           ("NextFetch",ATy(qTy,OTy(CTy"TransferControl"))),
20612                         qVar"s0"),qVar"s0"]),
20613               Apply
20614                 (Call("tickClock",ATy(qTy,qTy),LU),
20615                  Let(TP[Var("v",
20616                             PTy(OTy(CTy"TransferControl"),
20617                                 OTy(PTy(CTy"Interrupt",CTy"Privilege")))),
20618                         qVar"s"],
20619                      Let(TP[Var("v0",
20620                                 OTy(PTy(CTy"Interrupt",CTy"Privilege"))),
20621                             qVar"s"],
20622                          Apply
20623                            (Call
20624                               ("checkInterrupts",
20625                                ATy(qTy,
20626                                    PTy(OTy(PTy(CTy"Interrupt",
20627                                                CTy"Privilege")),qTy)),LU),
20628                             qVar"s"),
20629                          TP[TP[Var("v",OTy(CTy"TransferControl")),
20630                                Var("v0",
20631                                    OTy(PTy(CTy"Interrupt",CTy"Privilege")))],
20632                             qVar"s"]),
20633                      CS(Var("v",
20634                             PTy(OTy(CTy"TransferControl"),
20635                                 OTy(PTy(CTy"Interrupt",CTy"Privilege")))),
20636                         [(TP[LO(CTy"TransferControl"),
20637                              LO(PTy(CTy"Interrupt",CTy"Privilege"))],
20638                           Let(TP[Var("v",F64),qVar"s"],
20639                               Let(qVar"s0",
20640                                   Apply
20641                                     (Call("incrInstret",ATy(qTy,qTy),LU),
20642                                      qVar"s"),
20643                                   TP[Apply
20644                                        (Const("PC",ATy(qTy,F64)),qVar"s0"),
20645                                      qVar"s0"]),
20646                               Apply
20647                                 (Call
20648                                    ("write'PC",ATy(qTy,qTy),
20649                                     Bop(Add,Var("v",F64),LW(4,64))),
20650                                  qVar"s"))),
20651                          (TP[LO(CTy"TransferControl"),
20652                              Mop(Some,
20653                                  TP[Var("i",CTy"Interrupt"),
20654                                     Var("p",CTy"Privilege")])],
20655                           Let(TP[Var("v",F64),qVar"s"],
20656                               Let(qVar"s0",
20657                                   Apply
20658                                     (Call("incrInstret",ATy(qTy,qTy),LU),
20659                                      qVar"s"),
20660                                   TP[Apply
20661                                        (Const("PC",ATy(qTy,F64)),qVar"s0"),
20662                                      qVar"s0"]),
20663                               Apply
20664                                 (Call
20665                                    ("takeTrap",ATy(qTy,qTy),
20666                                     TP[LT,
20667                                        Call
20668                                          ("interruptIndex",F4,
20669                                           Var("i",CTy"Interrupt")),
20670                                        Bop(Add,Var("v",F64),LW(4,64)),
20671                                        LO F64,Var("p",CTy"Privilege")]),
20672                                  qVar"s"))),
20673                          (TP[Mop(Some,
20674                                  Call
20675                                    ("BranchTo",CTy"TransferControl",
20676                                     Var("addr",F64))),
20677                              AVar
20678                                (OTy(PTy(CTy"Interrupt",CTy"Privilege")))],
20679                           Apply
20680                             (Call
20681                                ("write'PC",ATy(qTy,qTy),Var("addr",F64)),
20682                              Apply
20683                                (Call
20684                                   ("write'NextFetch",ATy(qTy,qTy),
20685                                    LO(CTy"TransferControl")),
20686                                 Apply
20687                                   (Call("incrInstret",ATy(qTy,qTy),LU),
20688                                    qVar"s")))),
20689                          (TP[Mop(Some,
20690                                  Const("Ereturn",CTy"TransferControl")),
20691                              AVar
20692                                (OTy(PTy(CTy"Interrupt",CTy"Privilege")))],
20693                           Let(TP[Var("v",F64),qVar"s"],
20694                               Apply
20695                                 (Call("curEPC",ATy(qTy,PTy(F64,qTy)),LU),
20696                                  Apply
20697                                    (Call
20698                                       ("write'NextFetch",ATy(qTy,qTy),
20699                                        LO(CTy"TransferControl")),
20700                                     Apply
20701                                       (Call
20702                                          ("incrInstret",ATy(qTy,qTy),LU),
20703                                        qVar"s"))),
20704                               Let(TP[Var("v",CTy"MachineCSR"),qVar"s"],
20705                                   Let(qVar"s0",
20706                                       Apply
20707                                         (Call
20708                                            ("write'PC",ATy(qTy,qTy),
20709                                             Var("v",F64)),qVar"s"),
20710                                       TP[Apply
20711                                            (Const
20712                                               ("MCSR",
20713                                                ATy(qTy,CTy"MachineCSR")),
20714                                             qVar"s0"),qVar"s0"]),
20715                                   Apply
20716                                     (Call
20717                                        ("write'MCSR",ATy(qTy,qTy),
20718                                         Rupd
20719                                           ("mstatus",
20720                                            TP[Var("v",CTy"MachineCSR"),
20721                                               Call
20722                                                 ("popPrivilegeStack",
20723                                                  CTy"mstatus",
20724                                                  Dest
20725                                                    ("mstatus",
20726                                                     CTy"mstatus",
20727                                                     Apply
20728                                                       (Const
20729                                                          ("MCSR",
20730                                                           ATy(qTy,
20731                                                               CTy"MachineCSR")),
20732                                                        qVar"s")))])),
20733                                      qVar"s")))),
20734                          (TP[Mop(Some,
20735                                  Call
20736                                    ("Trap",CTy"TransferControl",
20737                                     Var("t",CTy"SynchronousTrap"))),
20738                              AVar
20739                                (OTy(PTy(CTy"Interrupt",CTy"Privilege")))],
20740                           Let(TP[Var("v",F64),qVar"s"],
20741                               Let(qVar"s0",
20742                                   Apply
20743                                     (Call
20744                                        ("write'NextFetch",ATy(qTy,qTy),
20745                                         LO(CTy"TransferControl")),qVar"s"),
20746                                   TP[Apply
20747                                        (Const("PC",ATy(qTy,F64)),qVar"s0"),
20748                                      qVar"s0"]),
20749                               Apply
20750                                 (Call
20751                                    ("takeTrap",ATy(qTy,qTy),
20752                                     TP[LF,
20753                                        Call
20754                                          ("excCode",F4,
20755                                           Dest
20756                                             ("trap",CTy"ExceptionType",
20757                                              Var("t",CTy"SynchronousTrap"))),
20758                                        Var("v",F64),
20759                                        Dest
20760                                          ("badaddr",OTy F64,
20761                                           Var("t",CTy"SynchronousTrap")),
20762                                        LC("Machine",CTy"Privilege")]),
20763                                  qVar"s"))),
20764                          (TP[Mop(Some,Const("Mrts",CTy"TransferControl")),
20765                              AVar
20766                                (OTy(PTy(CTy"Interrupt",CTy"Privilege")))],
20767                           Let(TP[Var("v",CTy"SupervisorCSR"),qVar"s"],
20768                               Let(qVar"s0",
20769                                   Apply
20770                                     (Call
20771                                        ("write'NextFetch",ATy(qTy,qTy),
20772                                         LO(CTy"TransferControl")),
20773                                      Apply
20774                                        (Call
20775                                           ("incrInstret",ATy(qTy,qTy),LU),
20776                                         qVar"s")),
20777                                   TP[Apply
20778                                        (Const
20779                                           ("SCSR",
20780                                            ATy(qTy,CTy"SupervisorCSR")),
20781                                         qVar"s0"),qVar"s0"]),
20782                               Apply
20783                                 (Call
20784                                    ("write'PC",ATy(qTy,qTy),
20785                                     Dest
20786                                       ("stvec",F64,
20787                                        Var("v",CTy"SupervisorCSR"))),
20788                                  qVar"s")))])))))))
20789;
20790val initIdent_def = Def
20791  ("initIdent",Var("arch",CTy"Architecture"),
20792   Close
20793     (qVar"state",
20794      Let(Var("v",CTy"MachineCSR"),
20795          Apply(Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"state"),
20796          Let(TP[Var("v",CTy"MachineCSR"),qVar"s"],
20797              Let(qVar"s0",
20798                  Apply
20799                    (Call
20800                       ("write'MCSR",ATy(qTy,qTy),
20801                        Rupd
20802                          ("mcpuid",
20803                           TP[Var("v",CTy"MachineCSR"),
20804                              Rupd
20805                                ("ArchBase",
20806                                 TP[Dest
20807                                      ("mcpuid",CTy"mcpuid",
20808                                       Var("v",CTy"MachineCSR")),
20809                                    Call
20810                                      ("archBase",FTy 2,
20811                                       Var("arch",CTy"Architecture"))])])),
20812                     qVar"state"),
20813                  TP[Apply
20814                       (Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"s0"),
20815                     qVar"s0"]),
20816              Let(TP[Var("v",CTy"MachineCSR"),qVar"s"],
20817                  Let(qVar"s0",
20818                      Apply
20819                        (Call
20820                           ("write'MCSR",ATy(qTy,qTy),
20821                            Rupd
20822                              ("mcpuid",
20823                               TP[Var("v",CTy"MachineCSR"),
20824                                  Rupd
20825                                    ("U",
20826                                     TP[Dest
20827                                          ("mcpuid",CTy"mcpuid",
20828                                           Var("v",CTy"MachineCSR")),LT])])),
20829                         qVar"s"),
20830                      TP[Apply
20831                           (Const("MCSR",ATy(qTy,CTy"MachineCSR")),
20832                            qVar"s0"),qVar"s0"]),
20833                  Let(TP[Var("v",CTy"MachineCSR"),qVar"s"],
20834                      Let(qVar"s0",
20835                          Apply
20836                            (Call
20837                               ("write'MCSR",ATy(qTy,qTy),
20838                                Rupd
20839                                  ("mcpuid",
20840                                   TP[Var("v",CTy"MachineCSR"),
20841                                      Rupd
20842                                        ("S",
20843                                         TP[Dest
20844                                              ("mcpuid",CTy"mcpuid",
20845                                               Var("v",CTy"MachineCSR")),
20846                                            LT])])),qVar"s"),
20847                          TP[Apply
20848                               (Const("MCSR",ATy(qTy,CTy"MachineCSR")),
20849                                qVar"s0"),qVar"s0"]),
20850                      Let(TP[Var("v",CTy"MachineCSR"),qVar"s"],
20851                          Let(qVar"s0",
20852                              Apply
20853                                (Call
20854                                   ("write'MCSR",ATy(qTy,qTy),
20855                                    Rupd
20856                                      ("mcpuid",
20857                                       TP[Var("v",CTy"MachineCSR"),
20858                                          Rupd
20859                                            ("M",
20860                                             TP[Dest
20861                                                  ("mcpuid",CTy"mcpuid",
20862                                                   Var("v",CTy"MachineCSR")),
20863                                                LT])])),qVar"s"),
20864                              TP[Apply
20865                                   (Const("MCSR",ATy(qTy,CTy"MachineCSR")),
20866                                    qVar"s0"),qVar"s0"]),
20867                          Let(TP[Var("v",CTy"MachineCSR"),qVar"s"],
20868                              Let(qVar"s0",
20869                                  Apply
20870                                    (Call
20871                                       ("write'MCSR",ATy(qTy,qTy),
20872                                        Rupd
20873                                          ("mcpuid",
20874                                           TP[Var("v",CTy"MachineCSR"),
20875                                              Rupd
20876                                                ("I",
20877                                                 TP[Dest
20878                                                      ("mcpuid",
20879                                                       CTy"mcpuid",
20880                                                       Var("v",
20881                                                           CTy"MachineCSR")),
20882                                                    LT])])),qVar"s"),
20883                                  TP[Apply
20884                                       (Const
20885                                          ("MCSR",ATy(qTy,CTy"MachineCSR")),
20886                                        qVar"s0"),qVar"s0"]),
20887                              Let(TP[Var("v",CTy"MachineCSR"),qVar"s"],
20888                                  Let(qVar"s0",
20889                                      Apply
20890                                        (Call
20891                                           ("write'MCSR",ATy(qTy,qTy),
20892                                            Rupd
20893                                              ("mimpid",
20894                                               TP[Var("v",CTy"MachineCSR"),
20895                                                  Rupd
20896                                                    ("RVSource",
20897                                                     TP[Dest
20898                                                          ("mimpid",
20899                                                           CTy"mimpid",
20900                                                           Var("v",
20901                                                               CTy"MachineCSR")),
20902                                                        LW(32768,16)])])),
20903                                         qVar"s"),
20904                                      TP[Apply
20905                                           (Const
20906                                              ("MCSR",
20907                                               ATy(qTy,CTy"MachineCSR")),
20908                                            qVar"s0"),qVar"s0"]),
20909                                  Apply
20910                                    (Call
20911                                       ("write'MCSR",ATy(qTy,qTy),
20912                                        Rupd
20913                                          ("mimpid",
20914                                           TP[Var("v",CTy"MachineCSR"),
20915                                              Rupd
20916                                                ("RVImpl",
20917                                                 TP[Dest
20918                                                      ("mimpid",
20919                                                       CTy"mimpid",
20920                                                       Var("v",
20921                                                           CTy"MachineCSR")),
20922                                                    LW(0,48)])])),qVar"s"))))))))))
20923;
20924val initMachine_def = Def
20925  ("initMachine",Var("hartid",F8),
20926   Close
20927     (qVar"state",
20928      Let(Var("v",CTy"MachineCSR"),
20929          Apply(Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"state"),
20930          Let(TP[Var("v",CTy"MachineCSR"),qVar"s"],
20931              Let(qVar"s0",
20932                  Apply
20933                    (Call
20934                       ("write'MCSR",ATy(qTy,qTy),
20935                        Rupd
20936                          ("mstatus",
20937                           TP[Var("v",CTy"MachineCSR"),
20938                              Rupd
20939                                ("VM",
20940                                 TP[Dest
20941                                      ("mstatus",CTy"mstatus",
20942                                       Var("v",CTy"MachineCSR")),
20943                                    Call
20944                                      ("vmMode",FTy 5,
20945                                       LC("Mbare",CTy"VM_Mode"))])])),
20946                     qVar"state"),
20947                  TP[Apply
20948                       (Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"s0"),
20949                     qVar"s0"]),
20950              Let(TP[Var("v",CTy"MachineCSR"),qVar"s"],
20951                  Let(qVar"s0",
20952                      Apply
20953                        (Call
20954                           ("write'MCSR",ATy(qTy,qTy),
20955                            Rupd
20956                              ("mstatus",
20957                               TP[Var("v",CTy"MachineCSR"),
20958                                  Rupd
20959                                    ("MPRV",
20960                                     TP[Dest
20961                                          ("mstatus",CTy"mstatus",
20962                                           Var("v",CTy"MachineCSR")),
20963                                        Call
20964                                          ("privLevel",FTy 2,
20965                                           LC("Machine",CTy"Privilege"))])])),
20966                         qVar"s"),
20967                      TP[Apply
20968                           (Const("MCSR",ATy(qTy,CTy"MachineCSR")),
20969                            qVar"s0"),qVar"s0"]),
20970                  Let(TP[Var("v",CTy"MachineCSR"),qVar"s"],
20971                      Let(qVar"s0",
20972                          Apply
20973                            (Call
20974                               ("write'MCSR",ATy(qTy,qTy),
20975                                Rupd
20976                                  ("mstatus",
20977                                   TP[Var("v",CTy"MachineCSR"),
20978                                      Rupd
20979                                        ("MIE",
20980                                         TP[Dest
20981                                              ("mstatus",CTy"mstatus",
20982                                               Var("v",CTy"MachineCSR")),
20983                                            LF])])),qVar"s"),
20984                          TP[Apply
20985                               (Const("MCSR",ATy(qTy,CTy"MachineCSR")),
20986                                qVar"s0"),qVar"s0"]),
20987                      Let(TP[Var("v",CTy"MachineCSR"),qVar"s"],
20988                          Let(qVar"s0",
20989                              Apply
20990                                (Call
20991                                   ("write'MCSR",ATy(qTy,qTy),
20992                                    Rupd
20993                                      ("mstatus",
20994                                       TP[Var("v",CTy"MachineCSR"),
20995                                          Rupd
20996                                            ("MFS",
20997                                             TP[Dest
20998                                                  ("mstatus",CTy"mstatus",
20999                                                   Var("v",CTy"MachineCSR")),
21000                                                Call
21001                                                  ("ext_status",FTy 2,
21002                                                   LC("Initial",
21003                                                      CTy"ExtStatus"))])])),
21004                                 qVar"s"),
21005                              TP[Apply
21006                                   (Const("MCSR",ATy(qTy,CTy"MachineCSR")),
21007                                    qVar"s0"),qVar"s0"]),
21008                          Let(TP[Var("v",CTy"MachineCSR"),qVar"s"],
21009                              Let(qVar"s0",
21010                                  Apply
21011                                    (Call
21012                                       ("write'MCSR",ATy(qTy,qTy),
21013                                        Rupd
21014                                          ("mstatus",
21015                                           TP[Var("v",CTy"MachineCSR"),
21016                                              Rupd
21017                                                ("MXS",
21018                                                 TP[Dest
21019                                                      ("mstatus",
21020                                                       CTy"mstatus",
21021                                                       Var("v",
21022                                                           CTy"MachineCSR")),
21023                                                    Call
21024                                                      ("ext_status",FTy 2,
21025                                                       LC("Off",
21026                                                          CTy"ExtStatus"))])])),
21027                                     qVar"s"),
21028                                  TP[Apply
21029                                       (Const
21030                                          ("MCSR",ATy(qTy,CTy"MachineCSR")),
21031                                        qVar"s0"),qVar"s0"]),
21032                              Let(TP[Var("v",CTy"MachineCSR"),qVar"s"],
21033                                  Let(qVar"s0",
21034                                      Apply
21035                                        (Call
21036                                           ("write'MCSR",ATy(qTy,qTy),
21037                                            Rupd
21038                                              ("mstatus",
21039                                               TP[Var("v",CTy"MachineCSR"),
21040                                                  Rupd
21041                                                    ("MSD",
21042                                                     TP[Dest
21043                                                          ("mstatus",
21044                                                           CTy"mstatus",
21045                                                           Var("v",
21046                                                               CTy"MachineCSR")),
21047                                                        LF])])),qVar"s"),
21048                                      TP[Apply
21049                                           (Const
21050                                              ("MCSR",
21051                                               ATy(qTy,CTy"MachineCSR")),
21052                                            qVar"s0"),qVar"s0"]),
21053                                  Let(TP[Var("v",CTy"MachineCSR"),qVar"s"],
21054                                      Let(qVar"s0",
21055                                          Apply
21056                                            (Call
21057                                               ("write'MCSR",ATy(qTy,qTy),
21058                                                Rupd
21059                                                  ("mhartid",
21060                                                   TP[Var("v",
21061                                                          CTy"MachineCSR"),
21062                                                      Mop(Cast F64,
21063                                                          Var("hartid",F8))])),
21064                                             qVar"s"),
21065                                          TP[Apply
21066                                               (Const
21067                                                  ("MCSR",
21068                                                   ATy(qTy,CTy"MachineCSR")),
21069                                                qVar"s0"),qVar"s0"]),
21070                                      Apply
21071                                        (Call
21072                                           ("write'MCSR",ATy(qTy,qTy),
21073                                            Rupd
21074                                              ("mtvec",
21075                                               TP[Var("v",CTy"MachineCSR"),
21076                                                  Mop(Cast F64,LW(256,16))])),
21077                                         qVar"s")))))))))))
21078;
21079val initRegs_def = Def
21080  ("initRegs",nVar"pc",
21081   Close
21082     (qVar"state",
21083      Rupd
21084        ("done",
21085         TP[Apply
21086              (Call
21087                 ("write'NextFetch",ATy(qTy,qTy),LO(CTy"TransferControl")),
21088               Apply
21089                 (Call("write'PC",ATy(qTy,qTy),Mop(Cast F64,nVar"pc")),
21090                  Mop(Snd,
21091                      Apply
21092                        (For(TP[LN 0,LN 31,
21093                                Close
21094                                  (nVar"i",
21095                                   Close
21096                                     (qVar"state",
21097                                      TP[LU,
21098                                         Apply
21099                                           (Call
21100                                              ("write'fpr",ATy(qTy,qTy),
21101                                               TP[LW(0,64),
21102                                                  Mop(Cast(FTy 5),nVar"i")]),
21103                                            qVar"state")]))]),
21104                         Mop(Snd,
21105                             Apply
21106                               (For(TP[LN 0,LN 31,
21107                                       Close
21108                                         (nVar"i",
21109                                          Close
21110                                            (qVar"state",
21111                                             TP[LU,
21112                                                Apply
21113                                                  (Call
21114                                                     ("write'gpr",
21115                                                      ATy(qTy,qTy),
21116                                                      TP[LW(0,64),
21117                                                         Mop(Cast(FTy 5),
21118                                                             nVar"i")]),
21119                                                   qVar"state")]))]),
21120                                qVar"state")))))),LF])))
21121
21122val () = Import.finish 0