1(* x64Script.sml - generated by L3 - Thu Dec 21 10:44:50 2017 *) 2open HolKernel boolLib bossLib Import 3 4val () = Import.start "x64" 5 6val _ = Construct 7 [("Zreg", 8 [("RAX",[]),("RCX",[]),("RDX",[]),("RBX",[]),("RSP",[]),("RBP",[]), 9 ("RSI",[]),("RDI",[]),("zR8",[]),("zR9",[]),("zR10",[]),("zR11",[]), 10 ("zR12",[]),("zR13",[]),("zR14",[]),("zR15",[])])] 11; 12val _ = Record 13 ("MXCSR", 14 [("DAZ",bTy),("DE",bTy),("DM",bTy),("FZ",bTy),("IE",bTy),("IM",bTy), 15 ("OE",bTy),("OM",bTy),("PE",bTy),("PM",bTy),("RC",FTy 2), 16 ("Reserved",F16),("UE",bTy),("UM",bTy),("ZE",bTy),("ZM",bTy)]) 17; 18val _ = Construct 19 [("Zeflags", 20 [("Z_CF",[]),("Z_PF",[]),("Z_AF",[]),("Z_ZF",[]),("Z_SF",[]), 21 ("Z_OF",[])])] 22; 23val _ = Construct 24 [("Zsize",[("Z16",[]),("Z32",[]),("Z64",[]),("Z8",[bTy])])] 25; 26val _ = Construct 27 [("Zbase",[("ZnoBase",[]),("ZregBase",[CTy"Zreg"]),("ZripBase",[])])] 28; 29val _ = Construct 30 [("Zrm", 31 [("Zm",[PTy(OTy(PTy(FTy 2,CTy"Zreg")),PTy(CTy"Zbase",F64))]), 32 ("Zr",[CTy"Zreg"])])] 33; 34val _ = Construct 35 [("Zdest_src", 36 [("Zr_rm",[PTy(CTy"Zreg",CTy"Zrm")]),("Zrm_i",[PTy(CTy"Zrm",F64)]), 37 ("Zrm_r",[PTy(CTy"Zrm",CTy"Zreg")])])] 38; 39val _ = Construct [("Zimm_rm",[("Zimm",[F64]),("Zrm",[CTy"Zrm"])])] 40; 41val _ = Construct 42 [("Zmonop_name",[("Zdec",[]),("Zinc",[]),("Znot",[]),("Zneg",[])])] 43; 44val _ = Construct 45 [("Zbinop_name", 46 [("Zadd",[]),("Zor",[]),("Zadc",[]),("Zsbb",[]),("Zand",[]), 47 ("Zsub",[]),("Zxor",[]),("Zcmp",[]),("Zrol",[]),("Zror",[]), 48 ("Zrcl",[]),("Zrcr",[]),("Zshl",[]),("Zshr",[]),("Ztest",[]), 49 ("Zsar",[])])] 50; 51val _ = Construct 52 [("Zbit_test_name",[("Zbt",[]),("Zbts",[]),("Zbtr",[]),("Zbtc",[])])] 53; 54val _ = Construct 55 [("Zcond", 56 [("Z_O",[]),("Z_NO",[]),("Z_B",[]),("Z_NB",[]),("Z_E",[]),("Z_NE",[]), 57 ("Z_NA",[]),("Z_A",[]),("Z_S",[]),("Z_NS",[]),("Z_P",[]),("Z_NP",[]), 58 ("Z_L",[]),("Z_NL",[]),("Z_NG",[]),("Z_G",[]),("Z_ALWAYS",[])])] 59; 60val _ = Construct 61 [("Zea", 62 [("Zea_i",[PTy(CTy"Zsize",F64)]),("Zea_m",[PTy(CTy"Zsize",F64)]), 63 ("Zea_r",[PTy(CTy"Zsize",CTy"Zreg")])])] 64; 65val _ = Construct 66 [("sse_binop", 67 [("sse_add",[]),("sse_sub",[]),("sse_mul",[]),("sse_div",[]), 68 ("sse_max",[]),("sse_min",[])])] 69; 70val _ = Construct 71 [("sse_logic", 72 [("sse_and",[]),("sse_andn",[]),("sse_or",[]),("sse_xor",[])])] 73; 74val _ = Construct 75 [("sse_compare", 76 [("sse_eq_oq",[]),("sse_lt_os",[]),("sse_le_os",[]), 77 ("sse_unord_q",[]),("sse_neq_uq",[]),("sse_nlt_us",[]), 78 ("sse_nle_us",[]),("sse_ord_q",[])])] 79; 80val _ = Construct 81 [("xmm_mem", 82 [("xmm_mem",[PTy(OTy(PTy(FTy 2,CTy"Zreg")),PTy(CTy"Zbase",F64))]), 83 ("xmm_reg",[FTy 3])])] 84; 85val _ = Construct 86 [("SSE", 87 [("CMPPD",[PTy(CTy"sse_compare",PTy(FTy 3,CTy"xmm_mem"))]), 88 ("CMPPS",[PTy(CTy"sse_compare",PTy(FTy 3,CTy"xmm_mem"))]), 89 ("CMPSD",[PTy(CTy"sse_compare",PTy(FTy 3,CTy"xmm_mem"))]), 90 ("CMPSS",[PTy(CTy"sse_compare",PTy(FTy 3,CTy"xmm_mem"))]), 91 ("COMISD",[PTy(FTy 3,CTy"xmm_mem")]), 92 ("COMISS",[PTy(FTy 3,CTy"xmm_mem")]), 93 ("CVTDQ2PD",[PTy(FTy 3,CTy"xmm_mem")]), 94 ("CVTDQ2PS",[PTy(FTy 3,CTy"xmm_mem")]), 95 ("CVTPD2DQ",[PTy(bTy,PTy(FTy 3,CTy"xmm_mem"))]), 96 ("CVTPD2PS",[PTy(FTy 3,CTy"xmm_mem")]), 97 ("CVTPS2DQ",[PTy(bTy,PTy(FTy 3,CTy"xmm_mem"))]), 98 ("CVTPS2PD",[PTy(FTy 3,CTy"xmm_mem")]), 99 ("CVTSD2SI",[PTy(bTy,PTy(bTy,PTy(CTy"Zreg",CTy"xmm_mem")))]), 100 ("CVTSD2SS",[PTy(FTy 3,CTy"xmm_mem")]), 101 ("CVTSI2SD",[PTy(bTy,PTy(FTy 3,CTy"Zrm"))]), 102 ("CVTSI2SS",[PTy(bTy,PTy(FTy 3,CTy"Zrm"))]), 103 ("CVTSS2SD",[PTy(FTy 3,CTy"xmm_mem")]), 104 ("CVTSS2SI",[PTy(bTy,PTy(bTy,PTy(CTy"Zreg",CTy"xmm_mem")))]), 105 ("MOVAP_D_S",[PTy(bTy,PTy(CTy"xmm_mem",CTy"xmm_mem"))]), 106 ("MOVQ",[PTy(CTy"xmm_mem",CTy"xmm_mem")]), 107 ("MOVSD",[PTy(CTy"xmm_mem",CTy"xmm_mem")]), 108 ("MOVSS",[PTy(CTy"xmm_mem",CTy"xmm_mem")]), 109 ("MOVUP_D_S",[PTy(bTy,PTy(CTy"xmm_mem",CTy"xmm_mem"))]), 110 ("MOV_D_Q",[PTy(bTy,PTy(bTy,PTy(FTy 3,CTy"Zrm")))]), 111 ("PCMPEQQ",[PTy(FTy 3,CTy"xmm_mem")]),("PSLLDQ",[PTy(FTy 3,F8)]), 112 ("PSLLD_imm",[PTy(FTy 3,F8)]),("PSLLQ_imm",[PTy(FTy 3,F8)]), 113 ("PSLLW_imm",[PTy(FTy 3,F8)]),("PSRAD_imm",[PTy(FTy 3,F8)]), 114 ("PSRAW_imm",[PTy(FTy 3,F8)]),("PSRLDQ",[PTy(FTy 3,F8)]), 115 ("PSRLD_imm",[PTy(FTy 3,F8)]),("PSRLQ_imm",[PTy(FTy 3,F8)]), 116 ("PSRLW_imm",[PTy(FTy 3,F8)]),("SQRTPD",[PTy(FTy 3,CTy"xmm_mem")]), 117 ("SQRTPS",[PTy(FTy 3,CTy"xmm_mem")]), 118 ("SQRTSD",[PTy(FTy 3,CTy"xmm_mem")]), 119 ("SQRTSS",[PTy(FTy 3,CTy"xmm_mem")]), 120 ("bin_PD",[PTy(CTy"sse_binop",PTy(FTy 3,CTy"xmm_mem"))]), 121 ("bin_PS",[PTy(CTy"sse_binop",PTy(FTy 3,CTy"xmm_mem"))]), 122 ("bin_SD",[PTy(CTy"sse_binop",PTy(FTy 3,CTy"xmm_mem"))]), 123 ("bin_SS",[PTy(CTy"sse_binop",PTy(FTy 3,CTy"xmm_mem"))]), 124 ("logic_PD",[PTy(CTy"sse_logic",PTy(FTy 3,CTy"xmm_mem"))]), 125 ("logic_PS",[PTy(CTy"sse_logic",PTy(FTy 3,CTy"xmm_mem"))])])] 126; 127val _ = Construct 128 [("instruction", 129 [("SSE",[CTy"SSE"]), 130 ("Zbinop",[PTy(CTy"Zbinop_name",PTy(CTy"Zsize",CTy"Zdest_src"))]), 131 ("Zbit_test", 132 [PTy(CTy"Zbit_test_name",PTy(CTy"Zsize",CTy"Zdest_src"))]), 133 ("Zcall",[CTy"Zimm_rm"]),("Zclc",[]),("Zcmc",[]), 134 ("Zcmpxchg",[PTy(CTy"Zsize",PTy(CTy"Zrm",CTy"Zreg"))]), 135 ("Zdiv",[PTy(CTy"Zsize",CTy"Zrm")]), 136 ("Zidiv",[PTy(CTy"Zsize",CTy"Zrm")]), 137 ("Zimul",[PTy(CTy"Zsize",CTy"Zrm")]), 138 ("Zimul2",[PTy(CTy"Zsize",PTy(CTy"Zreg",CTy"Zrm"))]), 139 ("Zimul3",[PTy(CTy"Zsize",PTy(CTy"Zreg",PTy(CTy"Zrm",F64)))]), 140 ("Zjcc",[PTy(CTy"Zcond",F64)]),("Zjmp",[CTy"Zrm"]), 141 ("Zlea",[PTy(CTy"Zsize",CTy"Zdest_src")]),("Zleave",[]), 142 ("Zloop",[PTy(CTy"Zcond",F64)]), 143 ("Zmonop",[PTy(CTy"Zmonop_name",PTy(CTy"Zsize",CTy"Zrm"))]), 144 ("Zmov",[PTy(CTy"Zcond",PTy(CTy"Zsize",CTy"Zdest_src"))]), 145 ("Zmovsx",[PTy(CTy"Zsize",PTy(CTy"Zdest_src",CTy"Zsize"))]), 146 ("Zmovzx",[PTy(CTy"Zsize",PTy(CTy"Zdest_src",CTy"Zsize"))]), 147 ("Zmul",[PTy(CTy"Zsize",CTy"Zrm")]),("Znop",[nTy]), 148 ("Zpop",[CTy"Zrm"]),("Zpush",[CTy"Zimm_rm"]),("Zret",[F64]), 149 ("Zset",[PTy(CTy"Zcond",PTy(bTy,CTy"Zrm"))]),("Zstc",[]), 150 ("Zxadd",[PTy(CTy"Zsize",PTy(CTy"Zrm",CTy"Zreg"))]), 151 ("Zxchg",[PTy(CTy"Zsize",PTy(CTy"Zrm",CTy"Zreg"))])])] 152; 153val _ = Construct 154 [("Zinst", 155 [("Zdec_fail",[sTy]), 156 ("Zfull_inst",[PTy(LTy F8,PTy(CTy"instruction",OTy(LTy F8)))])])] 157; 158val _ = Record ("REX",[("B",bTy),("R",bTy),("W",bTy),("X",bTy)]) 159; 160val _ = Construct 161 [("exception", 162 [("BadFlagAccess",[sTy]),("FAILURE",[sTy]), 163 ("INTERRUPT_EXCEPTION",[F8]),("NoException",[])])] 164; 165val _ = Record 166 ("x64_state", 167 [("EFLAGS",ATy(CTy"Zeflags",OTy bTy)),("MEM",ATy(F64,F8)), 168 ("MXCSR",CTy"MXCSR"),("REG",ATy(CTy"Zreg",F64)),("RIP",F64), 169 ("XMM_REG",ATy(FTy 3,FTy 128)),("exception",CTy"exception")]) 170; 171val qTy = CTy "x64_state"; 172fun qVar v = Term.mk_var (v, ParseDatatype.pretypeToType qTy); 173val raise'exception_def = Def 174 ("raise'exception",Var("e",CTy"exception"), 175 Close 176 (qVar"state", 177 TP[LX(VTy"a"), 178 ITE(EQ(Dest("exception",CTy"exception",qVar"state"), 179 Const("NoException",CTy"exception")), 180 Rupd("exception",TP[qVar"state",Var("e",CTy"exception")]), 181 qVar"state")])) 182; 183val DE_exception_def = Def 184 ("DE_exception",qVar"state", 185 Mop(Snd, 186 Apply 187 (Call 188 ("raise'exception",ATy(qTy,PTy(uTy,qTy)), 189 Call("INTERRUPT_EXCEPTION",CTy"exception",LW(0,8))), 190 qVar"state"))) 191; 192val UD_exception_def = Def 193 ("UD_exception",qVar"state", 194 Mop(Snd, 195 Apply 196 (Call 197 ("raise'exception",ATy(qTy,PTy(uTy,qTy)), 198 Call("INTERRUPT_EXCEPTION",CTy"exception",LW(6,8))), 199 qVar"state"))) 200; 201val GP_exception_def = Def 202 ("GP_exception",qVar"state", 203 Mop(Snd, 204 Apply 205 (Call 206 ("raise'exception",ATy(qTy,PTy(uTy,qTy)), 207 Call("INTERRUPT_EXCEPTION",CTy"exception",LW(13,8))), 208 qVar"state"))) 209; 210val XM_exception_def = Def 211 ("XM_exception",qVar"state", 212 Mop(Snd, 213 Apply 214 (Call 215 ("raise'exception",ATy(qTy,PTy(uTy,qTy)), 216 Call("INTERRUPT_EXCEPTION",CTy"exception",LW(19,8))), 217 qVar"state"))) 218; 219val rec'MXCSR_def = Def 220 ("rec'MXCSR",Var("x",F32), 221 Rec(CTy"MXCSR", 222 [Bop(Bit,Var("x",F32),LN 6),Bop(Bit,Var("x",F32),LN 1), 223 Bop(Bit,Var("x",F32),LN 8),Bop(Bit,Var("x",F32),LN 15), 224 Bop(Bit,Var("x",F32),LN 0),Bop(Bit,Var("x",F32),LN 7), 225 Bop(Bit,Var("x",F32),LN 3),Bop(Bit,Var("x",F32),LN 10), 226 Bop(Bit,Var("x",F32),LN 5),Bop(Bit,Var("x",F32),LN 12), 227 EX(Var("x",F32),LN 14,LN 13,FTy 2), 228 EX(Var("x",F32),LN 31,LN 16,F16),Bop(Bit,Var("x",F32),LN 4), 229 Bop(Bit,Var("x",F32),LN 11),Bop(Bit,Var("x",F32),LN 2), 230 Bop(Bit,Var("x",F32),LN 9)])) 231; 232val reg'MXCSR_def = Def 233 ("reg'MXCSR",Var("x",CTy"MXCSR"), 234 CS(Var("x",CTy"MXCSR"), 235 [(Rec(CTy"MXCSR", 236 [bVar"DAZ",bVar"DE",bVar"DM",bVar"FZ",bVar"IE",bVar"IM", 237 bVar"OE",bVar"OM",bVar"PE",bVar"PM",Var("RC",FTy 2), 238 Var("Reserved",F16),bVar"UE",bVar"UM",bVar"ZE",bVar"ZM"]), 239 CC[Var("Reserved",F16),Mop(Cast F1,bVar"FZ"),Var("RC",FTy 2), 240 Mop(Cast F1,bVar"PM"),Mop(Cast F1,bVar"UM"), 241 Mop(Cast F1,bVar"OM"),Mop(Cast F1,bVar"ZM"), 242 Mop(Cast F1,bVar"DM"),Mop(Cast F1,bVar"IM"), 243 Mop(Cast F1,bVar"DAZ"),Mop(Cast F1,bVar"PE"), 244 Mop(Cast F1,bVar"UE"),Mop(Cast F1,bVar"OE"), 245 Mop(Cast F1,bVar"ZE"),Mop(Cast F1,bVar"DE"), 246 Mop(Cast F1,bVar"IE")])])) 247; 248val write'rec'MXCSR_def = Def 249 ("write'rec'MXCSR",TP[AVar F32,Var("x",CTy"MXCSR")], 250 Call("reg'MXCSR",F32,Var("x",CTy"MXCSR"))) 251; 252val write'reg'MXCSR_def = Def 253 ("write'reg'MXCSR",TP[AVar(CTy"MXCSR"),Var("x",F32)], 254 Call("rec'MXCSR",CTy"MXCSR",Var("x",F32))) 255; 256val mem8_def = Def 257 ("mem8",Var("addr",F64), 258 Close 259 (qVar"state", 260 Apply(Dest("MEM",ATy(F64,F8),qVar"state"),Var("addr",F64)))) 261; 262val write'mem8_def = Def 263 ("write'mem8",TP[Var("b",F8),Var("addr",F64)], 264 Close 265 (qVar"state", 266 Rupd 267 ("MEM", 268 TP[qVar"state", 269 Fupd 270 (Dest("MEM",ATy(F64,F8),qVar"state"),Var("addr",F64), 271 Var("b",F8))]))) 272; 273val mem16_def = Def 274 ("mem16",Var("addr",F64), 275 Close 276 (qVar"state", 277 CC[Apply 278 (Call("mem8",ATy(qTy,F8),Bop(Add,Var("addr",F64),LW(1,64))), 279 qVar"state"), 280 Apply(Call("mem8",ATy(qTy,F8),Var("addr",F64)),qVar"state")])) 281; 282val write'mem16_def = Def 283 ("write'mem16",TP[Var("w",F16),Var("addr",F64)], 284 Close 285 (qVar"state", 286 Apply 287 (Call 288 ("write'mem8",ATy(qTy,qTy), 289 TP[EX(Var("w",F16),LN 15,LN 8,F8), 290 Bop(Add,Var("addr",F64),LW(1,64))]), 291 Apply 292 (Call 293 ("write'mem8",ATy(qTy,qTy), 294 TP[EX(Var("w",F16),LN 7,LN 0,F8),Var("addr",F64)]), 295 qVar"state")))) 296; 297val mem32_def = Def 298 ("mem32",Var("addr",F64), 299 Close 300 (qVar"state", 301 CC[Apply 302 (Call("mem16",ATy(qTy,F16),Bop(Add,Var("addr",F64),LW(2,64))), 303 qVar"state"), 304 Apply(Call("mem16",ATy(qTy,F16),Var("addr",F64)),qVar"state")])) 305; 306val write'mem32_def = Def 307 ("write'mem32",TP[Var("w",F32),Var("addr",F64)], 308 Close 309 (qVar"state", 310 Apply 311 (Call 312 ("write'mem16",ATy(qTy,qTy), 313 TP[EX(Var("w",F32),LN 31,LN 16,F16), 314 Bop(Add,Var("addr",F64),LW(2,64))]), 315 Apply 316 (Call 317 ("write'mem16",ATy(qTy,qTy), 318 TP[EX(Var("w",F32),LN 15,LN 0,F16),Var("addr",F64)]), 319 qVar"state")))) 320; 321val mem64_def = Def 322 ("mem64",Var("addr",F64), 323 Close 324 (qVar"state", 325 CC[Apply 326 (Call("mem32",ATy(qTy,F32),Bop(Add,Var("addr",F64),LW(4,64))), 327 qVar"state"), 328 Apply(Call("mem32",ATy(qTy,F32),Var("addr",F64)),qVar"state")])) 329; 330val write'mem64_def = Def 331 ("write'mem64",TP[Var("w",F64),Var("addr",F64)], 332 Close 333 (qVar"state", 334 Apply 335 (Call 336 ("write'mem32",ATy(qTy,qTy), 337 TP[EX(Var("w",F64),LN 63,LN 32,F32), 338 Bop(Add,Var("addr",F64),LW(4,64))]), 339 Apply 340 (Call 341 ("write'mem32",ATy(qTy,qTy), 342 TP[EX(Var("w",F64),LN 31,LN 0,F32),Var("addr",F64)]), 343 qVar"state")))) 344; 345val mem128_def = Def 346 ("mem128",Var("addr",F64), 347 Close 348 (qVar"state", 349 CC[Apply 350 (Call("mem64",ATy(qTy,F64),Bop(Add,Var("addr",F64),LW(8,64))), 351 qVar"state"), 352 Apply(Call("mem64",ATy(qTy,F64),Var("addr",F64)),qVar"state")])) 353; 354val write'mem128_def = Def 355 ("write'mem128",TP[Var("w",FTy 128),Var("addr",F64)], 356 Close 357 (qVar"state", 358 Apply 359 (Call 360 ("write'mem64",ATy(qTy,qTy), 361 TP[EX(Var("w",FTy 128),LN 127,LN 64,F64), 362 Bop(Add,Var("addr",F64),LW(8,64))]), 363 Apply 364 (Call 365 ("write'mem64",ATy(qTy,qTy), 366 TP[EX(Var("w",FTy 128),LN 63,LN 0,F64),Var("addr",F64)]), 367 qVar"state")))) 368; 369val Eflag_def = Def 370 ("Eflag",Var("flag",CTy"Zeflags"), 371 Close 372 (qVar"state", 373 CS(Apply 374 (Dest("EFLAGS",ATy(CTy"Zeflags",OTy bTy),qVar"state"), 375 Var("flag",CTy"Zeflags")), 376 [(Mop(Some,bVar"b"),TP[bVar"b",qVar"state"]), 377 (LO bTy, 378 Apply 379 (Call 380 ("raise'exception",ATy(qTy,PTy(bTy,qTy)), 381 Call 382 ("BadFlagAccess",CTy"exception", 383 Mop(Cast sTy,Var("flag",CTy"Zeflags")))),qVar"state"))]))) 384; 385val write'Eflag_def = Def 386 ("write'Eflag",TP[bVar"b",Var("flag",CTy"Zeflags")], 387 Close 388 (qVar"state", 389 Rupd 390 ("EFLAGS", 391 TP[qVar"state", 392 Fupd 393 (Dest("EFLAGS",ATy(CTy"Zeflags",OTy bTy),qVar"state"), 394 Var("flag",CTy"Zeflags"),Mop(Some,bVar"b"))]))) 395; 396val FlagUnspecified_def = Def 397 ("FlagUnspecified",Var("flag",CTy"Zeflags"), 398 Close 399 (qVar"state", 400 Rupd 401 ("EFLAGS", 402 TP[qVar"state", 403 Fupd 404 (Dest("EFLAGS",ATy(CTy"Zeflags",OTy bTy),qVar"state"), 405 Var("flag",CTy"Zeflags"),LO bTy)]))) 406; 407val CF_def = Def 408 ("CF",qVar"state", 409 Apply 410 (Call("Eflag",ATy(qTy,PTy(bTy,qTy)),LC("Z_CF",CTy"Zeflags")), 411 qVar"state")) 412; 413val write'CF_def = Def 414 ("write'CF",bVar"b", 415 Close 416 (qVar"state", 417 Apply 418 (Call 419 ("write'Eflag",ATy(qTy,qTy),TP[bVar"b",LC("Z_CF",CTy"Zeflags")]), 420 qVar"state"))) 421; 422val PF_def = Def 423 ("PF",qVar"state", 424 Apply 425 (Call("Eflag",ATy(qTy,PTy(bTy,qTy)),LC("Z_PF",CTy"Zeflags")), 426 qVar"state")) 427; 428val write'PF_def = Def 429 ("write'PF",bVar"b", 430 Close 431 (qVar"state", 432 Apply 433 (Call 434 ("write'Eflag",ATy(qTy,qTy),TP[bVar"b",LC("Z_PF",CTy"Zeflags")]), 435 qVar"state"))) 436; 437val AF_def = Def 438 ("AF",qVar"state", 439 Apply 440 (Call("Eflag",ATy(qTy,PTy(bTy,qTy)),LC("Z_AF",CTy"Zeflags")), 441 qVar"state")) 442; 443val write'AF_def = Def 444 ("write'AF",bVar"b", 445 Close 446 (qVar"state", 447 Apply 448 (Call 449 ("write'Eflag",ATy(qTy,qTy),TP[bVar"b",LC("Z_AF",CTy"Zeflags")]), 450 qVar"state"))) 451; 452val ZF_def = Def 453 ("ZF",qVar"state", 454 Apply 455 (Call("Eflag",ATy(qTy,PTy(bTy,qTy)),LC("Z_ZF",CTy"Zeflags")), 456 qVar"state")) 457; 458val write'ZF_def = Def 459 ("write'ZF",bVar"b", 460 Close 461 (qVar"state", 462 Apply 463 (Call 464 ("write'Eflag",ATy(qTy,qTy),TP[bVar"b",LC("Z_ZF",CTy"Zeflags")]), 465 qVar"state"))) 466; 467val SF_def = Def 468 ("SF",qVar"state", 469 Apply 470 (Call("Eflag",ATy(qTy,PTy(bTy,qTy)),LC("Z_SF",CTy"Zeflags")), 471 qVar"state")) 472; 473val write'SF_def = Def 474 ("write'SF",bVar"b", 475 Close 476 (qVar"state", 477 Apply 478 (Call 479 ("write'Eflag",ATy(qTy,qTy),TP[bVar"b",LC("Z_SF",CTy"Zeflags")]), 480 qVar"state"))) 481; 482val OF_def = Def 483 ("OF",qVar"state", 484 Apply 485 (Call("Eflag",ATy(qTy,PTy(bTy,qTy)),LC("Z_OF",CTy"Zeflags")), 486 qVar"state")) 487; 488val write'OF_def = Def 489 ("write'OF",bVar"b", 490 Close 491 (qVar"state", 492 Apply 493 (Call 494 ("write'Eflag",ATy(qTy,qTy),TP[bVar"b",LC("Z_OF",CTy"Zeflags")]), 495 qVar"state"))) 496; 497val ea_index_def = Def 498 ("ea_index",Var("index",OTy(PTy(FTy 2,CTy"Zreg"))), 499 Close 500 (qVar"state", 501 CS(Var("index",OTy(PTy(FTy 2,CTy"Zreg"))), 502 [(LO(PTy(FTy 2,CTy"Zreg")),LW(0,64)), 503 (Mop(Some,TP[Var("scale",FTy 2),Var("idx",CTy"Zreg")]), 504 Bop(Mul,Bop(Lsl,LW(1,64),Mop(Cast nTy,Var("scale",FTy 2))), 505 Apply 506 (Dest("REG",ATy(CTy"Zreg",F64),qVar"state"), 507 Var("idx",CTy"Zreg"))))]))) 508; 509val ea_base_def = Def 510 ("ea_base",Var("base",CTy"Zbase"), 511 Close 512 (qVar"state", 513 CS(Var("base",CTy"Zbase"), 514 [(Const("ZnoBase",CTy"Zbase"),LW(0,64)), 515 (Const("ZripBase",CTy"Zbase"),Dest("RIP",F64,qVar"state")), 516 (Call("ZregBase",CTy"Zbase",Var("b",CTy"Zreg")), 517 Apply 518 (Dest("REG",ATy(CTy"Zreg",F64),qVar"state"), 519 Var("b",CTy"Zreg")))]))) 520; 521val mem_addr_def = Def 522 ("mem_addr",Var("m",PTy(OTy(PTy(FTy 2,CTy"Zreg")),PTy(CTy"Zbase",F64))), 523 Close 524 (qVar"state", 525 Let(TP[Var("index",OTy(PTy(FTy 2,CTy"Zreg"))), 526 Var("base",CTy"Zbase"),Var("displacement",F64)], 527 Var("m",PTy(OTy(PTy(FTy 2,CTy"Zreg")),PTy(CTy"Zbase",F64))), 528 Bop(Add, 529 Bop(Add, 530 Apply 531 (Call 532 ("ea_index",ATy(qTy,F64), 533 Var("index",OTy(PTy(FTy 2,CTy"Zreg")))), 534 qVar"state"), 535 Apply 536 (Call("ea_base",ATy(qTy,F64),Var("base",CTy"Zbase")), 537 qVar"state")),Var("displacement",F64))))) 538; 539val ea_Zrm_def = Def 540 ("ea_Zrm",TP[Var("size",CTy"Zsize"),Var("rm",CTy"Zrm")], 541 Close 542 (qVar"state", 543 CS(Var("rm",CTy"Zrm"), 544 [(Call("Zr",CTy"Zrm",Var("r",CTy"Zreg")), 545 Call 546 ("Zea_r",CTy"Zea", 547 TP[Var("size",CTy"Zsize"),Var("r",CTy"Zreg")])), 548 (Call 549 ("Zm",CTy"Zrm", 550 Var("m",PTy(OTy(PTy(FTy 2,CTy"Zreg")),PTy(CTy"Zbase",F64)))), 551 Call 552 ("Zea_m",CTy"Zea", 553 TP[Var("size",CTy"Zsize"), 554 Apply 555 (Call 556 ("mem_addr",ATy(qTy,F64), 557 Var("m", 558 PTy(OTy(PTy(FTy 2,CTy"Zreg")), 559 PTy(CTy"Zbase",F64)))),qVar"state")]))]))) 560; 561val ea_Zdest_def = Def 562 ("ea_Zdest",TP[Var("size",CTy"Zsize"),Var("ds",CTy"Zdest_src")], 563 Close 564 (qVar"state", 565 CS(Var("ds",CTy"Zdest_src"), 566 [(Call("Zrm_i",CTy"Zdest_src",TP[Var("rm",CTy"Zrm"),AVar F64]), 567 Apply 568 (Call 569 ("ea_Zrm",ATy(qTy,CTy"Zea"), 570 TP[Var("size",CTy"Zsize"),Var("rm",CTy"Zrm")]), 571 qVar"state")), 572 (Call 573 ("Zrm_r",CTy"Zdest_src", 574 TP[Var("rm",CTy"Zrm"),AVar(CTy"Zreg")]), 575 Apply 576 (Call 577 ("ea_Zrm",ATy(qTy,CTy"Zea"), 578 TP[Var("size",CTy"Zsize"),Var("rm",CTy"Zrm")]), 579 qVar"state")), 580 (Call 581 ("Zr_rm",CTy"Zdest_src",TP[Var("r",CTy"Zreg"),AVar(CTy"Zrm")]), 582 Call 583 ("Zea_r",CTy"Zea", 584 TP[Var("size",CTy"Zsize"),Var("r",CTy"Zreg")]))]))) 585; 586val ea_Zsrc_def = Def 587 ("ea_Zsrc",TP[Var("size",CTy"Zsize"),Var("ds",CTy"Zdest_src")], 588 Close 589 (qVar"state", 590 CS(Var("ds",CTy"Zdest_src"), 591 [(Call("Zrm_i",CTy"Zdest_src",TP[AVar(CTy"Zrm"),Var("i",F64)]), 592 Call("Zea_i",CTy"Zea",TP[Var("size",CTy"Zsize"),Var("i",F64)])), 593 (Call 594 ("Zrm_r",CTy"Zdest_src",TP[AVar(CTy"Zrm"),Var("r",CTy"Zreg")]), 595 Call 596 ("Zea_r",CTy"Zea", 597 TP[Var("size",CTy"Zsize"),Var("r",CTy"Zreg")])), 598 (Call 599 ("Zr_rm",CTy"Zdest_src", 600 TP[AVar(CTy"Zreg"),Var("rm",CTy"Zrm")]), 601 Apply 602 (Call 603 ("ea_Zrm",ATy(qTy,CTy"Zea"), 604 TP[Var("size",CTy"Zsize"),Var("rm",CTy"Zrm")]), 605 qVar"state"))]))) 606; 607val ea_Zimm_rm_def = Def 608 ("ea_Zimm_rm",Var("imm_rm",CTy"Zimm_rm"), 609 Close 610 (qVar"state", 611 CS(Var("imm_rm",CTy"Zimm_rm"), 612 [(Call("Zrm",CTy"Zimm_rm",Var("rm",CTy"Zrm")), 613 Apply 614 (Call 615 ("ea_Zrm",ATy(qTy,CTy"Zea"), 616 TP[Const("Z64",CTy"Zsize"),Var("rm",CTy"Zrm")]), 617 qVar"state")), 618 (Call("Zimm",CTy"Zimm_rm",Var("imm",F64)), 619 Call 620 ("Zea_i",CTy"Zea",TP[Const("Z64",CTy"Zsize"),Var("imm",F64)]))]))) 621; 622val modSize_def = Def 623 ("modSize",TP[Var("size",CTy"Zsize"),Var("imm",F64)], 624 CS(Var("size",CTy"Zsize"), 625 [(Call("Z8",CTy"Zsize",AVar bTy),Bop(Mod,Var("imm",F64),LW(8,64))), 626 (Const("Z16",CTy"Zsize"),Bop(Mod,Var("imm",F64),LW(16,64))), 627 (Const("Z32",CTy"Zsize"),Bop(Mod,Var("imm",F64),LW(32,64))), 628 (Const("Z64",CTy"Zsize"),Bop(Mod,Var("imm",F64),LW(64,64)))])) 629; 630val restrictSize_def = Def 631 ("restrictSize",TP[Var("size",CTy"Zsize"),Var("imm",F64)], 632 CS(Var("size",CTy"Zsize"), 633 [(Call("Z8",CTy"Zsize",AVar bTy),Bop(BAnd,Var("imm",F64),LW(255,64))), 634 (Const("Z16",CTy"Zsize"),Bop(BAnd,Var("imm",F64),LW(65535,64))), 635 (Const("Z32",CTy"Zsize"),Bop(BAnd,Var("imm",F64),LW(4294967295,64))), 636 (Const("Z64",CTy"Zsize"),Var("imm",F64))])) 637; 638val EA_def = Def 639 ("EA",Var("ea",CTy"Zea"), 640 Close 641 (qVar"state", 642 CS(Var("ea",CTy"Zea"), 643 [(Call("Zea_i",CTy"Zea",Var("i",PTy(CTy"Zsize",F64))), 644 Call("restrictSize",F64,Var("i",PTy(CTy"Zsize",F64)))), 645 (Call 646 ("Zea_r",CTy"Zea", 647 TP[Call("Z8",CTy"Zsize",bVar"have_rex"),Var("r",CTy"Zreg")]), 648 Bop(BAnd, 649 ITE(Bop(Or,bVar"have_rex", 650 Mop(Not, 651 Bop(In,Var("r",CTy"Zreg"), 652 SL[LC("RSP",CTy"Zreg"),LC("RBP",CTy"Zreg"), 653 LC("RSI",CTy"Zreg"),LC("RDI",CTy"Zreg")]))), 654 Apply 655 (Dest("REG",ATy(CTy"Zreg",F64),qVar"state"), 656 Var("r",CTy"Zreg")), 657 Bop(Lsr, 658 Apply 659 (Dest("REG",ATy(CTy"Zreg",F64),qVar"state"), 660 Mop(Cast(CTy"Zreg"), 661 Bop(Sub,Mop(Cast nTy,Var("r",CTy"Zreg")), 662 LN 4))),LN 8)),LW(255,64))), 663 (Call 664 ("Zea_r",CTy"Zea",TP[Var("s",CTy"Zsize"),Var("r",CTy"Zreg")]), 665 Call 666 ("restrictSize",F64, 667 TP[Var("s",CTy"Zsize"), 668 Apply 669 (Dest("REG",ATy(CTy"Zreg",F64),qVar"state"), 670 Var("r",CTy"Zreg"))])), 671 (Call 672 ("Zea_m",CTy"Zea", 673 TP[Call("Z8",CTy"Zsize",AVar bTy),Var("a",F64)]), 674 Mop(Cast F64, 675 Apply(Call("mem8",ATy(qTy,F8),Var("a",F64)),qVar"state"))), 676 (Call("Zea_m",CTy"Zea",TP[Const("Z16",CTy"Zsize"),Var("a",F64)]), 677 Mop(Cast F64, 678 Apply(Call("mem16",ATy(qTy,F16),Var("a",F64)),qVar"state"))), 679 (Call("Zea_m",CTy"Zea",TP[Const("Z32",CTy"Zsize"),Var("a",F64)]), 680 Mop(Cast F64, 681 Apply(Call("mem32",ATy(qTy,F32),Var("a",F64)),qVar"state"))), 682 (Call("Zea_m",CTy"Zea",TP[Const("Z64",CTy"Zsize"),Var("a",F64)]), 683 Apply(Call("mem64",ATy(qTy,F64),Var("a",F64)),qVar"state"))]))) 684; 685val write'EA_def = Def 686 ("write'EA",TP[Var("w",F64),Var("ea",CTy"Zea")], 687 Close 688 (qVar"state", 689 CS(Var("ea",CTy"Zea"), 690 [(Call("Zea_i",CTy"Zea",Var("i",PTy(CTy"Zsize",F64))), 691 Mop(Snd, 692 Apply 693 (Call 694 ("raise'exception",ATy(qTy,PTy(uTy,qTy)), 695 Call("FAILURE",CTy"exception",LS"write to constant")), 696 qVar"state"))), 697 (Call 698 ("Zea_r",CTy"Zea", 699 TP[Call("Z8",CTy"Zsize",bVar"have_rex"),Var("r",CTy"Zreg")]), 700 ITE(Bop(Or,bVar"have_rex", 701 Mop(Not, 702 Bop(In,Var("r",CTy"Zreg"), 703 SL[LC("RSP",CTy"Zreg"),LC("RBP",CTy"Zreg"), 704 LC("RSI",CTy"Zreg"),LC("RDI",CTy"Zreg")]))), 705 Rupd 706 ("REG", 707 TP[qVar"state", 708 Fupd 709 (Dest("REG",ATy(CTy"Zreg",F64),qVar"state"), 710 Var("r",CTy"Zreg"), 711 BFI(LN 7,LN 0,EX(Var("w",F64),LN 7,LN 0,F8), 712 Apply 713 (Dest("REG",ATy(CTy"Zreg",F64),qVar"state"), 714 Var("r",CTy"Zreg"))))]), 715 Let(Var("x",CTy"Zreg"), 716 Mop(Cast(CTy"Zreg"), 717 Bop(Sub,Mop(Cast nTy,Var("r",CTy"Zreg")),LN 4)), 718 Rupd 719 ("REG", 720 TP[qVar"state", 721 Fupd 722 (Dest("REG",ATy(CTy"Zreg",F64),qVar"state"), 723 Var("x",CTy"Zreg"), 724 BFI(LN 15,LN 8,EX(Var("w",F64),LN 7,LN 0,F8), 725 Apply 726 (Dest 727 ("REG",ATy(CTy"Zreg",F64),qVar"state"), 728 Var("x",CTy"Zreg"))))])))), 729 (Call 730 ("Zea_r",CTy"Zea", 731 TP[Const("Z16",CTy"Zsize"),Var("r",CTy"Zreg")]), 732 Rupd 733 ("REG", 734 TP[qVar"state", 735 Fupd 736 (Dest("REG",ATy(CTy"Zreg",F64),qVar"state"), 737 Var("r",CTy"Zreg"), 738 BFI(LN 15,LN 0,EX(Var("w",F64),LN 15,LN 0,F16), 739 Apply 740 (Dest("REG",ATy(CTy"Zreg",F64),qVar"state"), 741 Var("r",CTy"Zreg"))))])), 742 (Call 743 ("Zea_r",CTy"Zea", 744 TP[Const("Z32",CTy"Zsize"),Var("r",CTy"Zreg")]), 745 Rupd 746 ("REG", 747 TP[qVar"state", 748 Fupd 749 (Dest("REG",ATy(CTy"Zreg",F64),qVar"state"), 750 Var("r",CTy"Zreg"), 751 Mop(Cast F64,EX(Var("w",F64),LN 31,LN 0,F32)))])), 752 (Call 753 ("Zea_r",CTy"Zea", 754 TP[Const("Z64",CTy"Zsize"),Var("r",CTy"Zreg")]), 755 Rupd 756 ("REG", 757 TP[qVar"state", 758 Fupd 759 (Dest("REG",ATy(CTy"Zreg",F64),qVar"state"), 760 Var("r",CTy"Zreg"),Var("w",F64))])), 761 (Call 762 ("Zea_m",CTy"Zea", 763 TP[Call("Z8",CTy"Zsize",AVar bTy),Var("a",F64)]), 764 Apply 765 (Call 766 ("write'mem8",ATy(qTy,qTy), 767 TP[EX(Var("w",F64),LN 7,LN 0,F8),Var("a",F64)]), 768 qVar"state")), 769 (Call("Zea_m",CTy"Zea",TP[Const("Z16",CTy"Zsize"),Var("a",F64)]), 770 Apply 771 (Call 772 ("write'mem16",ATy(qTy,qTy), 773 TP[EX(Var("w",F64),LN 15,LN 0,F16),Var("a",F64)]), 774 qVar"state")), 775 (Call("Zea_m",CTy"Zea",TP[Const("Z32",CTy"Zsize"),Var("a",F64)]), 776 Apply 777 (Call 778 ("write'mem32",ATy(qTy,qTy), 779 TP[EX(Var("w",F64),LN 31,LN 0,F32),Var("a",F64)]), 780 qVar"state")), 781 (Call("Zea_m",CTy"Zea",TP[Const("Z64",CTy"Zsize"),Var("a",F64)]), 782 Apply 783 (Call 784 ("write'mem64",ATy(qTy,qTy),TP[Var("w",F64),Var("a",F64)]), 785 qVar"state"))]))) 786; 787val read_dest_src_ea_def = Def 788 ("read_dest_src_ea",Var("sd",PTy(CTy"Zsize",CTy"Zdest_src")), 789 Close 790 (qVar"state", 791 Let(Var("v",CTy"Zea"), 792 Apply 793 (Call 794 ("ea_Zdest",ATy(qTy,CTy"Zea"), 795 Var("sd",PTy(CTy"Zsize",CTy"Zdest_src"))),qVar"state"), 796 TP[Var("v",CTy"Zea"), 797 Apply(Call("EA",ATy(qTy,F64),Var("v",CTy"Zea")),qVar"state"), 798 Apply 799 (Call 800 ("EA",ATy(qTy,F64), 801 Apply 802 (Call 803 ("ea_Zsrc",ATy(qTy,CTy"Zea"), 804 Var("sd",PTy(CTy"Zsize",CTy"Zdest_src"))), 805 qVar"state")),qVar"state")]))) 806; 807val call_dest_from_ea_def = Def 808 ("call_dest_from_ea",Var("ea",CTy"Zea"), 809 Close 810 (qVar"state", 811 CS(Var("ea",CTy"Zea"), 812 [(Call("Zea_i",CTy"Zea",TP[AVar(CTy"Zsize"),Var("i",F64)]), 813 Bop(Add,Dest("RIP",F64,qVar"state"),Var("i",F64))), 814 (Call("Zea_r",CTy"Zea",TP[AVar(CTy"Zsize"),Var("r",CTy"Zreg")]), 815 Apply 816 (Dest("REG",ATy(CTy"Zreg",F64),qVar"state"), 817 Var("r",CTy"Zreg"))), 818 (Call("Zea_m",CTy"Zea",TP[AVar(CTy"Zsize"),Var("a",F64)]), 819 Apply(Call("mem64",ATy(qTy,F64),Var("a",F64)),qVar"state"))]))) 820; 821val get_ea_address_def = Def 822 ("get_ea_address",Var("ea",CTy"Zea"), 823 CS(Var("ea",CTy"Zea"), 824 [(Call("Zea_i",CTy"Zea",TP[AVar(CTy"Zsize"),Var("i",F64)]),LW(0,64)), 825 (Call("Zea_r",CTy"Zea",TP[AVar(CTy"Zsize"),Var("r",CTy"Zreg")]), 826 LW(0,64)), 827 (Call("Zea_m",CTy"Zea",TP[AVar(CTy"Zsize"),Var("a",F64)]), 828 Var("a",F64))])) 829; 830val jump_to_ea_def = Def 831 ("jump_to_ea",Var("ea",CTy"Zea"), 832 Close 833 (qVar"state", 834 Rupd 835 ("RIP", 836 TP[qVar"state", 837 Apply 838 (Call("call_dest_from_ea",ATy(qTy,F64),Var("ea",CTy"Zea")), 839 qVar"state")]))) 840; 841val ByteParity_def = Def 842 ("ByteParity",Var("b",F8), 843 EQ(Bop(Mod, 844 Bop(Add, 845 Bop(Add, 846 Bop(Add, 847 Bop(Add, 848 Bop(Add, 849 Bop(Add, 850 Bop(Add, 851 Mop(Cast nTy, 852 Bop(Bit,Var("b",F8),LN 7)), 853 Mop(Cast nTy, 854 Bop(Bit,Var("b",F8),LN 6))), 855 Mop(Cast nTy,Bop(Bit,Var("b",F8),LN 5))), 856 Mop(Cast nTy,Bop(Bit,Var("b",F8),LN 4))), 857 Mop(Cast nTy,Bop(Bit,Var("b",F8),LN 3))), 858 Mop(Cast nTy,Bop(Bit,Var("b",F8),LN 2))), 859 Mop(Cast nTy,Bop(Bit,Var("b",F8),LN 1))), 860 Mop(Cast nTy,Bop(Bit,Var("b",F8),LN 0))),LN 2),LN 0)) 861; 862val Zsize_width_def = Def 863 ("Zsize_width",Var("size",CTy"Zsize"), 864 CS(Var("size",CTy"Zsize"), 865 [(Call("Z8",CTy"Zsize",AVar bTy),LN 8), 866 (Const("Z16",CTy"Zsize"),LN 16),(Const("Z32",CTy"Zsize"),LN 32), 867 (Const("Z64",CTy"Zsize"),LN 64)])) 868; 869val word_size_msb_def = Def 870 ("word_size_msb",TP[Var("size",CTy"Zsize"),Var("w",F64)], 871 Bop(Bit,Var("w",F64), 872 Bop(Sub,Call("Zsize_width",nTy,Var("size",CTy"Zsize")),LN 1))) 873; 874val write_PF_def = Def 875 ("write_PF",Var("w",F64), 876 Close 877 (qVar"state", 878 Apply 879 (Call 880 ("write'PF",ATy(qTy,qTy), 881 Call("ByteParity",bTy,EX(Var("w",F64),LN 7,LN 0,F8))), 882 qVar"state"))) 883; 884val write_SF_def = Def 885 ("write_SF",Var("s_w",PTy(CTy"Zsize",F64)), 886 Close 887 (qVar"state", 888 Apply 889 (Call 890 ("write'SF",ATy(qTy,qTy), 891 Call("word_size_msb",bTy,Var("s_w",PTy(CTy"Zsize",F64)))), 892 qVar"state"))) 893; 894val write_ZF_def = Def 895 ("write_ZF",TP[Var("size",CTy"Zsize"),Var("w",F64)], 896 Close 897 (qVar"state", 898 Apply 899 (Call 900 ("write'ZF",ATy(qTy,qTy), 901 CS(Var("size",CTy"Zsize"), 902 [(Call("Z8",CTy"Zsize",AVar bTy), 903 EQ(Mop(Cast F8,Var("w",F64)),LW(0,8))), 904 (Const("Z16",CTy"Zsize"), 905 EQ(Mop(Cast F16,Var("w",F64)),LW(0,16))), 906 (Const("Z32",CTy"Zsize"), 907 EQ(Mop(Cast F32,Var("w",F64)),LW(0,32))), 908 (Const("Z64",CTy"Zsize"),EQ(Var("w",F64),LW(0,64)))])), 909 qVar"state"))) 910; 911val write_arith_eflags_except_CF_OF_def = Def 912 ("write_arith_eflags_except_CF_OF", 913 TP[Var("size",CTy"Zsize"),Var("w",F64)], 914 Close 915 (qVar"state", 916 Apply 917 (Call("FlagUnspecified",ATy(qTy,qTy),LC("Z_AF",CTy"Zeflags")), 918 Apply 919 (Call 920 ("write_ZF",ATy(qTy,qTy), 921 TP[Var("size",CTy"Zsize"),Var("w",F64)]), 922 Apply 923 (Call 924 ("write_SF",ATy(qTy,qTy), 925 TP[Var("size",CTy"Zsize"),Var("w",F64)]), 926 Apply 927 (Call("write_PF",ATy(qTy,qTy),Var("w",F64)),qVar"state")))))) 928; 929val write_arith_eflags_def = Def 930 ("write_arith_eflags", 931 TP[Var("size",CTy"Zsize"),Var("w",F64),bVar"c",bVar"x"], 932 Close 933 (qVar"state", 934 Apply 935 (Call 936 ("write_arith_eflags_except_CF_OF",ATy(qTy,qTy), 937 TP[Var("size",CTy"Zsize"),Var("w",F64)]), 938 Apply 939 (Call("write'OF",ATy(qTy,qTy),bVar"x"), 940 Apply(Call("write'CF",ATy(qTy,qTy),bVar"c"),qVar"state"))))) 941; 942val write_logical_eflags_def = Def 943 ("write_logical_eflags",TP[Var("size",CTy"Zsize"),Var("w",F64)], 944 Close 945 (qVar"state", 946 Apply 947 (Call 948 ("write_arith_eflags",ATy(qTy,qTy), 949 TP[Var("size",CTy"Zsize"),Var("w",F64),LF,LF]),qVar"state"))) 950; 951val erase_eflags_def = Def 952 ("erase_eflags",qVar"state", 953 Rupd("EFLAGS",TP[qVar"state",Mop(K1(CTy"Zeflags"),LO bTy)])) 954; 955val value_width_def = Def 956 ("value_width",Var("s",CTy"Zsize"), 957 Bop(Exp,LN 2,Call("Zsize_width",nTy,Var("s",CTy"Zsize")))) 958; 959val word_signed_overflow_add_def = Def 960 ("word_signed_overflow_add", 961 TP[Var("size",CTy"Zsize"),Var("a",F64),Var("b",F64)], 962 Bop(And, 963 EQ(Call 964 ("word_size_msb",bTy,TP[Var("size",CTy"Zsize"),Var("a",F64)]), 965 Call 966 ("word_size_msb",bTy,TP[Var("size",CTy"Zsize"),Var("b",F64)])), 967 Mop(Not, 968 EQ(Call 969 ("word_size_msb",bTy, 970 TP[Var("size",CTy"Zsize"), 971 Bop(Add,Var("a",F64),Var("b",F64))]), 972 Call 973 ("word_size_msb",bTy, 974 TP[Var("size",CTy"Zsize"),Var("a",F64)]))))) 975; 976val word_signed_overflow_sub_def = Def 977 ("word_signed_overflow_sub", 978 TP[Var("size",CTy"Zsize"),Var("a",F64),Var("b",F64)], 979 Bop(And, 980 Mop(Not, 981 EQ(Call 982 ("word_size_msb",bTy, 983 TP[Var("size",CTy"Zsize"),Var("a",F64)]), 984 Call 985 ("word_size_msb",bTy, 986 TP[Var("size",CTy"Zsize"),Var("b",F64)]))), 987 Mop(Not, 988 EQ(Call 989 ("word_size_msb",bTy, 990 TP[Var("size",CTy"Zsize"), 991 Bop(Sub,Var("a",F64),Var("b",F64))]), 992 Call 993 ("word_size_msb",bTy, 994 TP[Var("size",CTy"Zsize"),Var("a",F64)]))))) 995; 996val add_with_carry_out_def = Def 997 ("add_with_carry_out", 998 TP[Var("size",CTy"Zsize"),Var("x",F64),Var("y",F64)], 999 TP[Bop(Add,Var("x",F64),Var("y",F64)), 1000 Bop(Le,Call("value_width",nTy,Var("size",CTy"Zsize")), 1001 Bop(Add,Mop(Cast nTy,Var("x",F64)),Mop(Cast nTy,Var("y",F64)))), 1002 Call 1003 ("word_signed_overflow_add",bTy, 1004 TP[Var("size",CTy"Zsize"),Var("x",F64),Var("y",F64)])]) 1005; 1006val sub_with_borrow_def = Def 1007 ("sub_with_borrow",TP[Var("size",CTy"Zsize"),Var("x",F64),Var("y",F64)], 1008 TP[Bop(Sub,Var("x",F64),Var("y",F64)), 1009 Bop(Ult,Var("x",F64),Var("y",F64)), 1010 Call 1011 ("word_signed_overflow_sub",bTy, 1012 TP[Var("size",CTy"Zsize"),Var("x",F64),Var("y",F64)])]) 1013; 1014val write_arith_result_def = Def 1015 ("write_arith_result", 1016 TP[Var("size",CTy"Zsize"),Var("r",PTy(F64,PTy(bTy,bTy))), 1017 Var("ea",CTy"Zea")], 1018 Close 1019 (qVar"state", 1020 Apply 1021 (Call 1022 ("write'EA",ATy(qTy,qTy), 1023 TP[Mop(Fst,Var("r",PTy(F64,PTy(bTy,bTy)))),Var("ea",CTy"Zea")]), 1024 Apply 1025 (Call 1026 ("write_arith_eflags",ATy(qTy,qTy), 1027 TP[Var("size",CTy"Zsize"),Var("r",PTy(F64,PTy(bTy,bTy)))]), 1028 qVar"state")))) 1029; 1030val write_arith_result_no_CF_OF_def = Def 1031 ("write_arith_result_no_CF_OF", 1032 TP[Var("size",CTy"Zsize"),Var("w",F64),Var("ea",CTy"Zea")], 1033 Close 1034 (qVar"state", 1035 Apply 1036 (Call("write'EA",ATy(qTy,qTy),TP[Var("w",F64),Var("ea",CTy"Zea")]), 1037 Apply 1038 (Call 1039 ("write_arith_eflags_except_CF_OF",ATy(qTy,qTy), 1040 TP[Var("size",CTy"Zsize"),Var("w",F64)]),qVar"state")))) 1041; 1042val write_logical_result_def = Def 1043 ("write_logical_result", 1044 TP[Var("size",CTy"Zsize"),Var("w",F64),Var("ea",CTy"Zea")], 1045 Close 1046 (qVar"state", 1047 Apply 1048 (Call("write'EA",ATy(qTy,qTy),TP[Var("w",F64),Var("ea",CTy"Zea")]), 1049 Apply 1050 (Call 1051 ("write_logical_eflags",ATy(qTy,qTy), 1052 TP[Var("size",CTy"Zsize"),Var("w",F64)]),qVar"state")))) 1053; 1054val write_result_erase_eflags_def = Def 1055 ("write_result_erase_eflags",TP[Var("w",F64),Var("ea",CTy"Zea")], 1056 Close 1057 (qVar"state", 1058 Apply 1059 (Call("write'EA",ATy(qTy,qTy),TP[Var("w",F64),Var("ea",CTy"Zea")]), 1060 Apply(Const("erase_eflags",ATy(qTy,qTy)),qVar"state")))) 1061; 1062val SignExtension_def = Def 1063 ("SignExtension", 1064 TP[Var("w",F64),Var("size1",CTy"Zsize"),Var("size2",CTy"Zsize")], 1065 Close 1066 (qVar"state", 1067 Let(TP[Var("r",F64),Var("s1",PTy(F64,qTy))], 1068 Let(Var("s",PTy(F64,qTy)), 1069 CS(TP[Var("size1",CTy"Zsize"),Var("size2",CTy"Zsize")], 1070 [(TP[Call("Z8",CTy"Zsize",AVar bTy), 1071 Const("Z16",CTy"Zsize")], 1072 TP[BFI(LN 15,LN 0, 1073 Mop(SE F16,EX(Var("w",F64),LN 7,LN 0,F8)), 1074 Var("w",F64)),qVar"state"]), 1075 (TP[Call("Z8",CTy"Zsize",AVar bTy), 1076 Const("Z32",CTy"Zsize")], 1077 TP[BFI(LN 31,LN 0, 1078 Mop(SE F32,EX(Var("w",F64),LN 7,LN 0,F8)), 1079 Var("w",F64)),qVar"state"]), 1080 (TP[Call("Z8",CTy"Zsize",AVar bTy), 1081 Const("Z64",CTy"Zsize")], 1082 TP[Mop(SE F64,EX(Var("w",F64),LN 7,LN 0,F8)), 1083 qVar"state"]), 1084 (TP[Const("Z16",CTy"Zsize"),Const("Z32",CTy"Zsize")], 1085 TP[BFI(LN 31,LN 0, 1086 Mop(SE F32,EX(Var("w",F64),LN 15,LN 0,F16)), 1087 Var("w",F64)),qVar"state"]), 1088 (TP[Const("Z16",CTy"Zsize"),Const("Z64",CTy"Zsize")], 1089 TP[Mop(SE F64,EX(Var("w",F64),LN 15,LN 0,F16)), 1090 qVar"state"]), 1091 (TP[Const("Z32",CTy"Zsize"),Const("Z64",CTy"Zsize")], 1092 TP[Mop(SE F64,EX(Var("w",F64),LN 31,LN 0,F32)), 1093 qVar"state"]), 1094 (AVar(PTy(CTy"Zsize",CTy"Zsize")), 1095 TP[Var("w",F64), 1096 Mop(Snd, 1097 Apply 1098 (Call 1099 ("raise'exception",ATy(qTy,PTy(uTy,qTy)), 1100 Call 1101 ("FAILURE",CTy"exception", 1102 LS"SignExtension")),qVar"state"))])]), 1103 TP[Mop(Fst,Var("s",PTy(F64,qTy))),Var("s",PTy(F64,qTy))]), 1104 TP[Var("r",F64),Mop(Snd,Var("s1",PTy(F64,qTy)))]))) 1105; 1106val SignExtension64_def = Def 1107 ("SignExtension64",TP[Var("w",F64),Var("size",CTy"Zsize")], 1108 Close 1109 (qVar"state", 1110 ITE(EQ(Var("size",CTy"Zsize"),Const("Z64",CTy"Zsize")), 1111 TP[Var("w",F64),qVar"state"], 1112 Apply 1113 (Call 1114 ("SignExtension",ATy(qTy,PTy(F64,qTy)), 1115 TP[Var("w",F64),Var("size",CTy"Zsize"), 1116 Const("Z64",CTy"Zsize")]),qVar"state")))) 1117; 1118val maskShift_def = Def 1119 ("maskShift",TP[Var("size",CTy"Zsize"),Var("w",F64)], 1120 ITE(EQ(Var("size",CTy"Zsize"),Const("Z64",CTy"Zsize")), 1121 Mop(Cast nTy,EX(Var("w",F64),LN 5,LN 0,FTy 6)), 1122 Mop(Cast nTy,EX(Var("w",F64),LN 4,LN 0,FTy 5)))) 1123; 1124val ROL_def = Def 1125 ("ROL",TP[Var("size",CTy"Zsize"),Var("x",F64),Var("y",F64)], 1126 CS(Var("size",CTy"Zsize"), 1127 [(Call("Z8",CTy"Zsize",AVar bTy), 1128 Mop(Cast F64, 1129 Bop(Rol,EX(Var("x",F64),LN 7,LN 0,F8), 1130 Mop(Cast nTy,EX(Var("y",F64),LN 4,LN 0,FTy 5))))), 1131 (Const("Z16",CTy"Zsize"), 1132 Mop(Cast F64, 1133 Bop(Rol,EX(Var("x",F64),LN 15,LN 0,F16), 1134 Mop(Cast nTy,EX(Var("y",F64),LN 4,LN 0,FTy 5))))), 1135 (Const("Z32",CTy"Zsize"), 1136 Mop(Cast F64, 1137 Bop(Rol,EX(Var("x",F64),LN 31,LN 0,F32), 1138 Mop(Cast nTy,EX(Var("y",F64),LN 4,LN 0,FTy 5))))), 1139 (Const("Z64",CTy"Zsize"), 1140 Bop(Rol,Var("x",F64), 1141 Mop(Cast nTy,EX(Var("y",F64),LN 5,LN 0,FTy 6))))])) 1142; 1143val ROR_def = Def 1144 ("ROR",TP[Var("size",CTy"Zsize"),Var("x",F64),Var("y",F64)], 1145 CS(Var("size",CTy"Zsize"), 1146 [(Call("Z8",CTy"Zsize",AVar bTy), 1147 Mop(Cast F64, 1148 Bop(Ror,EX(Var("x",F64),LN 7,LN 0,F8), 1149 Mop(Cast nTy,EX(Var("y",F64),LN 4,LN 0,FTy 5))))), 1150 (Const("Z16",CTy"Zsize"), 1151 Mop(Cast F64, 1152 Bop(Ror,EX(Var("x",F64),LN 15,LN 0,F16), 1153 Mop(Cast nTy,EX(Var("y",F64),LN 4,LN 0,FTy 5))))), 1154 (Const("Z32",CTy"Zsize"), 1155 Mop(Cast F64, 1156 Bop(Ror,EX(Var("x",F64),LN 31,LN 0,F32), 1157 Mop(Cast nTy,EX(Var("y",F64),LN 4,LN 0,FTy 5))))), 1158 (Const("Z64",CTy"Zsize"), 1159 Bop(Ror,Var("x",F64), 1160 Mop(Cast nTy,EX(Var("y",F64),LN 5,LN 0,FTy 6))))])) 1161; 1162val SAR_def = Def 1163 ("SAR",TP[Var("size",CTy"Zsize"),Var("x",F64),Var("y",F64)], 1164 CS(Var("size",CTy"Zsize"), 1165 [(Call("Z8",CTy"Zsize",AVar bTy), 1166 Mop(Cast F64, 1167 Bop(Asr,EX(Var("x",F64),LN 7,LN 0,F8), 1168 Mop(Cast nTy,EX(Var("y",F64),LN 4,LN 0,FTy 5))))), 1169 (Const("Z16",CTy"Zsize"), 1170 Mop(Cast F64, 1171 Bop(Asr,EX(Var("x",F64),LN 15,LN 0,F16), 1172 Mop(Cast nTy,EX(Var("y",F64),LN 4,LN 0,FTy 5))))), 1173 (Const("Z32",CTy"Zsize"), 1174 Mop(Cast F64, 1175 Bop(Asr,EX(Var("x",F64),LN 31,LN 0,F32), 1176 Mop(Cast nTy,EX(Var("y",F64),LN 4,LN 0,FTy 5))))), 1177 (Const("Z64",CTy"Zsize"), 1178 Bop(Asr,Var("x",F64), 1179 Mop(Cast nTy,EX(Var("y",F64),LN 5,LN 0,FTy 6))))])) 1180; 1181val write_binop_def = Def 1182 ("write_binop", 1183 TP[Var("s",CTy"Zsize"),Var("bop",CTy"Zbinop_name"),Var("x",F64), 1184 Var("y",F64),Var("ea",CTy"Zea")], 1185 Close 1186 (qVar"state", 1187 CS(Var("bop",CTy"Zbinop_name"), 1188 [(LC("Zadd",CTy"Zbinop_name"), 1189 Apply 1190 (Call 1191 ("write_arith_result",ATy(qTy,qTy), 1192 TP[Var("s",CTy"Zsize"), 1193 Call 1194 ("add_with_carry_out",PTy(F64,PTy(bTy,bTy)), 1195 TP[Var("s",CTy"Zsize"),Var("x",F64),Var("y",F64)]), 1196 Var("ea",CTy"Zea")]),qVar"state")), 1197 (LC("Zsub",CTy"Zbinop_name"), 1198 Apply 1199 (Call 1200 ("write_arith_result",ATy(qTy,qTy), 1201 TP[Var("s",CTy"Zsize"), 1202 Call 1203 ("sub_with_borrow",PTy(F64,PTy(bTy,bTy)), 1204 TP[Var("s",CTy"Zsize"),Var("x",F64),Var("y",F64)]), 1205 Var("ea",CTy"Zea")]),qVar"state")), 1206 (LC("Zcmp",CTy"Zbinop_name"), 1207 Apply 1208 (Call 1209 ("write_arith_eflags",ATy(qTy,qTy), 1210 TP[Var("s",CTy"Zsize"), 1211 Call 1212 ("sub_with_borrow",PTy(F64,PTy(bTy,bTy)), 1213 TP[Var("s",CTy"Zsize"),Var("x",F64),Var("y",F64)])]), 1214 qVar"state")), 1215 (LC("Ztest",CTy"Zbinop_name"), 1216 Apply 1217 (Call 1218 ("write_logical_eflags",ATy(qTy,qTy), 1219 TP[Var("s",CTy"Zsize"), 1220 Bop(BAnd,Var("x",F64),Var("y",F64))]),qVar"state")), 1221 (LC("Zand",CTy"Zbinop_name"), 1222 Apply 1223 (Call 1224 ("write_logical_result",ATy(qTy,qTy), 1225 TP[Var("s",CTy"Zsize"), 1226 Bop(BAnd,Var("x",F64),Var("y",F64)),Var("ea",CTy"Zea")]), 1227 qVar"state")), 1228 (LC("Zxor",CTy"Zbinop_name"), 1229 Apply 1230 (Call 1231 ("write_logical_result",ATy(qTy,qTy), 1232 TP[Var("s",CTy"Zsize"), 1233 Bop(BXor,Var("x",F64),Var("y",F64)),Var("ea",CTy"Zea")]), 1234 qVar"state")), 1235 (LC("Zor",CTy"Zbinop_name"), 1236 Apply 1237 (Call 1238 ("write_logical_result",ATy(qTy,qTy), 1239 TP[Var("s",CTy"Zsize"), 1240 Bop(BOr,Var("x",F64),Var("y",F64)),Var("ea",CTy"Zea")]), 1241 qVar"state")), 1242 (LC("Zrol",CTy"Zbinop_name"), 1243 Apply 1244 (Call 1245 ("write_result_erase_eflags",ATy(qTy,qTy), 1246 TP[Call 1247 ("ROL",F64, 1248 TP[Var("s",CTy"Zsize"),Var("x",F64),Var("y",F64)]), 1249 Var("ea",CTy"Zea")]),qVar"state")), 1250 (LC("Zror",CTy"Zbinop_name"), 1251 Apply 1252 (Call 1253 ("write_result_erase_eflags",ATy(qTy,qTy), 1254 TP[Call 1255 ("ROR",F64, 1256 TP[Var("s",CTy"Zsize"),Var("x",F64),Var("y",F64)]), 1257 Var("ea",CTy"Zea")]),qVar"state")), 1258 (LC("Zsar",CTy"Zbinop_name"), 1259 Apply 1260 (Call 1261 ("write_result_erase_eflags",ATy(qTy,qTy), 1262 TP[Call 1263 ("SAR",F64, 1264 TP[Var("s",CTy"Zsize"),Var("x",F64),Var("y",F64)]), 1265 Var("ea",CTy"Zea")]),qVar"state")), 1266 (LC("Zshl",CTy"Zbinop_name"), 1267 Apply 1268 (Call 1269 ("write_result_erase_eflags",ATy(qTy,qTy), 1270 TP[Bop(Lsl,Var("x",F64), 1271 Call 1272 ("maskShift",nTy, 1273 TP[Var("s",CTy"Zsize"),Var("y",F64)])), 1274 Var("ea",CTy"Zea")]),qVar"state")), 1275 (LC("Zshr",CTy"Zbinop_name"), 1276 Apply 1277 (Call 1278 ("write_result_erase_eflags",ATy(qTy,qTy), 1279 TP[Bop(Lsr,Var("x",F64), 1280 Call 1281 ("maskShift",nTy, 1282 TP[Var("s",CTy"Zsize"),Var("y",F64)])), 1283 Var("ea",CTy"Zea")]),qVar"state")), 1284 (LC("Zadc",CTy"Zbinop_name"), 1285 Let(TP[bVar"v",qVar"s0"], 1286 Apply(Const("CF",ATy(qTy,PTy(bTy,qTy))),qVar"state"), 1287 Apply 1288 (Call 1289 ("write_arith_result_no_CF_OF",ATy(qTy,qTy), 1290 TP[Var("s",CTy"Zsize"), 1291 Bop(Add,Bop(Add,Var("x",F64),Var("y",F64)), 1292 Mop(Cast F64,bVar"v")),Var("ea",CTy"Zea")]), 1293 Apply 1294 (Call 1295 ("FlagUnspecified",ATy(qTy,qTy), 1296 LC("Z_OF",CTy"Zeflags")), 1297 Apply 1298 (Call 1299 ("write'CF",ATy(qTy,qTy), 1300 Bop(Le, 1301 Call("value_width",nTy,Var("s",CTy"Zsize")), 1302 Bop(Add, 1303 Bop(Add,Mop(Cast nTy,Var("x",F64)), 1304 Mop(Cast nTy,Var("y",F64))), 1305 Mop(Cast nTy,bVar"v")))),qVar"s0"))))), 1306 (LC("Zsbb",CTy"Zbinop_name"), 1307 Let(TP[bVar"v",qVar"s0"], 1308 Apply(Const("CF",ATy(qTy,PTy(bTy,qTy))),qVar"state"), 1309 Apply 1310 (Call 1311 ("write_arith_result_no_CF_OF",ATy(qTy,qTy), 1312 TP[Var("s",CTy"Zsize"), 1313 Bop(Sub,Var("x",F64), 1314 Bop(Add,Var("y",F64),Mop(Cast F64,bVar"v"))), 1315 Var("ea",CTy"Zea")]), 1316 Apply 1317 (Call 1318 ("FlagUnspecified",ATy(qTy,qTy), 1319 LC("Z_OF",CTy"Zeflags")), 1320 Apply 1321 (Call 1322 ("write'CF",ATy(qTy,qTy), 1323 Bop(Lt,Mop(Cast nTy,Var("x",F64)), 1324 Bop(Add,Mop(Cast nTy,Var("y",F64)), 1325 Mop(Cast nTy,bVar"v")))),qVar"s0"))))), 1326 (AVar(CTy"Zbinop_name"), 1327 Mop(Snd, 1328 Apply 1329 (Call 1330 ("raise'exception",ATy(qTy,PTy(uTy,qTy)), 1331 Call 1332 ("FAILURE",CTy"exception", 1333 CC[LS"Binary op not implemented: ", 1334 Mop(Cast sTy,Var("bop",CTy"Zbinop_name"))])), 1335 qVar"state")))]))) 1336; 1337val write_monop_def = Def 1338 ("write_monop", 1339 TP[Var("s",CTy"Zsize"),Var("mop",CTy"Zmonop_name"),Var("x",F64), 1340 Var("ea",CTy"Zea")], 1341 Close 1342 (qVar"state", 1343 CS(Var("mop",CTy"Zmonop_name"), 1344 [(LC("Znot",CTy"Zmonop_name"), 1345 Apply 1346 (Call 1347 ("write'EA",ATy(qTy,qTy), 1348 TP[Mop(BNot,Var("x",F64)),Var("ea",CTy"Zea")]), 1349 qVar"state")), 1350 (LC("Zdec",CTy"Zmonop_name"), 1351 Apply 1352 (Call 1353 ("write_arith_result_no_CF_OF",ATy(qTy,qTy), 1354 TP[Var("s",CTy"Zsize"),Bop(Sub,Var("x",F64),LW(1,64)), 1355 Var("ea",CTy"Zea")]),qVar"state")), 1356 (LC("Zinc",CTy"Zmonop_name"), 1357 Apply 1358 (Call 1359 ("write_arith_result_no_CF_OF",ATy(qTy,qTy), 1360 TP[Var("s",CTy"Zsize"),Bop(Add,Var("x",F64),LW(1,64)), 1361 Var("ea",CTy"Zea")]),qVar"state")), 1362 (LC("Zneg",CTy"Zmonop_name"), 1363 Apply 1364 (Call("FlagUnspecified",ATy(qTy,qTy),LC("Z_CF",CTy"Zeflags")), 1365 Apply 1366 (Call 1367 ("write_arith_result_no_CF_OF",ATy(qTy,qTy), 1368 TP[Var("s",CTy"Zsize"),Mop(Neg,Var("x",F64)), 1369 Var("ea",CTy"Zea")]),qVar"state")))]))) 1370; 1371val bit_test_def = Def 1372 ("bit_test", 1373 TP[Var("bt",CTy"Zbit_test_name"),Var("base",CTy"Zea"),nVar"offset"], 1374 Close 1375 (qVar"state", 1376 Let(bVar"v", 1377 Bop(Bit, 1378 Apply 1379 (Call("EA",ATy(qTy,F64),Var("base",CTy"Zea")),qVar"state"), 1380 nVar"offset"), 1381 Let(qVar"s", 1382 Apply(Call("write'CF",ATy(qTy,qTy),bVar"v"),qVar"state"), 1383 CS(Var("bt",CTy"Zbit_test_name"), 1384 [(LC("Zbt",CTy"Zbit_test_name"),qVar"s"), 1385 (LC("Zbtc",CTy"Zbit_test_name"), 1386 Apply 1387 (Call 1388 ("write'EA",ATy(qTy,qTy), 1389 TP[BFI(nVar"offset",nVar"offset", 1390 Mop(Cast F1,Mop(Not,bVar"v")), 1391 Apply 1392 (Call 1393 ("EA",ATy(qTy,F64), 1394 Var("base",CTy"Zea")),qVar"s")), 1395 Var("base",CTy"Zea")]),qVar"s")), 1396 (LC("Zbtr",CTy"Zbit_test_name"), 1397 Apply 1398 (Call 1399 ("write'EA",ATy(qTy,qTy), 1400 TP[BFI(nVar"offset",nVar"offset",Mop(Cast F1,LF), 1401 Apply 1402 (Call 1403 ("EA",ATy(qTy,F64), 1404 Var("base",CTy"Zea")),qVar"s")), 1405 Var("base",CTy"Zea")]),qVar"s")), 1406 (LC("Zbts",CTy"Zbit_test_name"), 1407 Apply 1408 (Call 1409 ("write'EA",ATy(qTy,qTy), 1410 TP[BFI(nVar"offset",nVar"offset",Mop(Cast F1,LT), 1411 Apply 1412 (Call 1413 ("EA",ATy(qTy,F64), 1414 Var("base",CTy"Zea")),qVar"s")), 1415 Var("base",CTy"Zea")]),qVar"s"))]))))) 1416; 1417val read_cond_def = Def 1418 ("read_cond",Var("c",CTy"Zcond"), 1419 Close 1420 (qVar"state", 1421 CS(Var("c",CTy"Zcond"), 1422 [(LC("Z_A",CTy"Zcond"), 1423 CS(TP[Apply 1424 (Dest("EFLAGS",ATy(CTy"Zeflags",OTy bTy),qVar"state"), 1425 LC("Z_CF",CTy"Zeflags")), 1426 Apply 1427 (Dest("EFLAGS",ATy(CTy"Zeflags",OTy bTy),qVar"state"), 1428 LC("Z_ZF",CTy"Zeflags"))], 1429 [(TP[Mop(Some,LF),Mop(Some,LF)],TP[LT,qVar"state"]), 1430 (TP[Mop(Some,LT),AVar(OTy bTy)],TP[LF,qVar"state"]), 1431 (TP[AVar(OTy bTy),Mop(Some,LT)],TP[LF,qVar"state"]), 1432 (AVar(PTy(OTy bTy,OTy bTy)), 1433 Apply 1434 (Call 1435 ("raise'exception",ATy(qTy,PTy(bTy,qTy)), 1436 Call 1437 ("BadFlagAccess",CTy"exception", 1438 CC[LS"read_cond: ", 1439 Mop(Cast sTy,Var("c",CTy"Zcond"))])), 1440 qVar"state"))])), 1441 (LC("Z_NB",CTy"Zcond"), 1442 Let(TP[bVar"v",qVar"s"], 1443 Apply(Const("CF",ATy(qTy,PTy(bTy,qTy))),qVar"state"), 1444 TP[Mop(Not,bVar"v"),qVar"s"])), 1445 (LC("Z_B",CTy"Zcond"), 1446 Apply(Const("CF",ATy(qTy,PTy(bTy,qTy))),qVar"state")), 1447 (LC("Z_NA",CTy"Zcond"), 1448 CS(TP[Apply 1449 (Dest("EFLAGS",ATy(CTy"Zeflags",OTy bTy),qVar"state"), 1450 LC("Z_CF",CTy"Zeflags")), 1451 Apply 1452 (Dest("EFLAGS",ATy(CTy"Zeflags",OTy bTy),qVar"state"), 1453 LC("Z_ZF",CTy"Zeflags"))], 1454 [(TP[Mop(Some,LT),AVar(OTy bTy)],TP[LT,qVar"state"]), 1455 (TP[AVar(OTy bTy),Mop(Some,LT)],TP[LT,qVar"state"]), 1456 (TP[Mop(Some,LF),Mop(Some,LF)],TP[LF,qVar"state"]), 1457 (AVar(PTy(OTy bTy,OTy bTy)), 1458 Apply 1459 (Call 1460 ("raise'exception",ATy(qTy,PTy(bTy,qTy)), 1461 Call 1462 ("BadFlagAccess",CTy"exception", 1463 CC[LS"read_cond: ", 1464 Mop(Cast sTy,Var("c",CTy"Zcond"))])), 1465 qVar"state"))])), 1466 (LC("Z_E",CTy"Zcond"), 1467 Apply(Const("ZF",ATy(qTy,PTy(bTy,qTy))),qVar"state")), 1468 (LC("Z_G",CTy"Zcond"), 1469 CS(TP[Apply 1470 (Dest("EFLAGS",ATy(CTy"Zeflags",OTy bTy),qVar"state"), 1471 LC("Z_SF",CTy"Zeflags")), 1472 Apply 1473 (Dest("EFLAGS",ATy(CTy"Zeflags",OTy bTy),qVar"state"), 1474 LC("Z_OF",CTy"Zeflags"))], 1475 [(TP[Mop(Some,bVar"a"),Mop(Some,bVar"b")], 1476 ITE(EQ(bVar"a",bVar"b"), 1477 Let(TP[bVar"v",qVar"s"], 1478 Apply 1479 (Const("ZF",ATy(qTy,PTy(bTy,qTy))),qVar"state"), 1480 TP[Mop(Not,bVar"v"),qVar"s"]),TP[LF,qVar"state"])), 1481 (AVar(PTy(OTy bTy,OTy bTy)), 1482 CS(Apply 1483 (Dest("EFLAGS",ATy(CTy"Zeflags",OTy bTy),qVar"state"), 1484 LC("Z_ZF",CTy"Zeflags")), 1485 [(Mop(Some,LT),TP[LF,qVar"state"]), 1486 (AVar(OTy bTy), 1487 Apply 1488 (Call 1489 ("raise'exception",ATy(qTy,PTy(bTy,qTy)), 1490 Call 1491 ("BadFlagAccess",CTy"exception", 1492 CC[LS"read_cond: ", 1493 Mop(Cast sTy,Var("c",CTy"Zcond"))])), 1494 qVar"state"))]))])), 1495 (LC("Z_NL",CTy"Zcond"), 1496 Let(TP[bVar"v",qVar"s"], 1497 Apply(Const("SF",ATy(qTy,PTy(bTy,qTy))),qVar"state"), 1498 Let(TP[bVar"v0",qVar"s"], 1499 Apply(Const("OF",ATy(qTy,PTy(bTy,qTy))),qVar"s"), 1500 TP[EQ(bVar"v",bVar"v0"),qVar"s"]))), 1501 (LC("Z_L",CTy"Zcond"), 1502 Let(TP[bVar"v",qVar"s"], 1503 Apply(Const("SF",ATy(qTy,PTy(bTy,qTy))),qVar"state"), 1504 Let(TP[bVar"v",qVar"s"], 1505 Let(TP[bVar"v0",qVar"s"], 1506 Apply(Const("OF",ATy(qTy,PTy(bTy,qTy))),qVar"s"), 1507 TP[EQ(bVar"v",bVar"v0"),qVar"s"]), 1508 TP[Mop(Not,bVar"v"),qVar"s"]))), 1509 (LC("Z_NG",CTy"Zcond"), 1510 CS(TP[Apply 1511 (Dest("EFLAGS",ATy(CTy"Zeflags",OTy bTy),qVar"state"), 1512 LC("Z_SF",CTy"Zeflags")), 1513 Apply 1514 (Dest("EFLAGS",ATy(CTy"Zeflags",OTy bTy),qVar"state"), 1515 LC("Z_OF",CTy"Zeflags"))], 1516 [(TP[Mop(Some,bVar"a"),Mop(Some,bVar"b")], 1517 ITE(Mop(Not,EQ(bVar"a",bVar"b")),TP[LT,qVar"state"], 1518 Apply(Const("ZF",ATy(qTy,PTy(bTy,qTy))),qVar"state"))), 1519 (AVar(PTy(OTy bTy,OTy bTy)), 1520 CS(Apply 1521 (Dest("EFLAGS",ATy(CTy"Zeflags",OTy bTy),qVar"state"), 1522 LC("Z_ZF",CTy"Zeflags")), 1523 [(Mop(Some,LT),TP[LT,qVar"state"]), 1524 (AVar(OTy bTy), 1525 Apply 1526 (Call 1527 ("raise'exception",ATy(qTy,PTy(bTy,qTy)), 1528 Call 1529 ("BadFlagAccess",CTy"exception", 1530 CC[LS"read_cond: ", 1531 Mop(Cast sTy,Var("c",CTy"Zcond"))])), 1532 qVar"state"))]))])), 1533 (LC("Z_NE",CTy"Zcond"), 1534 Let(TP[bVar"v",qVar"s"], 1535 Apply(Const("ZF",ATy(qTy,PTy(bTy,qTy))),qVar"state"), 1536 TP[Mop(Not,bVar"v"),qVar"s"])), 1537 (LC("Z_NO",CTy"Zcond"), 1538 Let(TP[bVar"v",qVar"s"], 1539 Apply(Const("OF",ATy(qTy,PTy(bTy,qTy))),qVar"state"), 1540 TP[Mop(Not,bVar"v"),qVar"s"])), 1541 (LC("Z_NP",CTy"Zcond"), 1542 Let(TP[bVar"v",qVar"s"], 1543 Apply(Const("PF",ATy(qTy,PTy(bTy,qTy))),qVar"state"), 1544 TP[Mop(Not,bVar"v"),qVar"s"])), 1545 (LC("Z_NS",CTy"Zcond"), 1546 Let(TP[bVar"v",qVar"s"], 1547 Apply(Const("SF",ATy(qTy,PTy(bTy,qTy))),qVar"state"), 1548 TP[Mop(Not,bVar"v"),qVar"s"])), 1549 (LC("Z_O",CTy"Zcond"), 1550 Apply(Const("OF",ATy(qTy,PTy(bTy,qTy))),qVar"state")), 1551 (LC("Z_P",CTy"Zcond"), 1552 Apply(Const("PF",ATy(qTy,PTy(bTy,qTy))),qVar"state")), 1553 (LC("Z_S",CTy"Zcond"), 1554 Apply(Const("SF",ATy(qTy,PTy(bTy,qTy))),qVar"state")), 1555 (LC("Z_ALWAYS",CTy"Zcond"),TP[LT,qVar"state"])]))) 1556; 1557val x64_pop_aux_def = Def 1558 ("x64_pop_aux",qVar"state", 1559 Let(Var("v",F64), 1560 Apply 1561 (Dest("REG",ATy(CTy"Zreg",F64),qVar"state"),LC("RSP",CTy"Zreg")), 1562 TP[Apply(Call("mem64",ATy(qTy,F64),Var("v",F64)),qVar"state"), 1563 Rupd 1564 ("REG", 1565 TP[qVar"state", 1566 Fupd 1567 (Dest("REG",ATy(CTy"Zreg",F64),qVar"state"), 1568 LC("RSP",CTy"Zreg"),Bop(Add,Var("v",F64),LW(8,64)))])])) 1569; 1570val x64_pop_def = Def 1571 ("x64_pop",Var("rm",CTy"Zrm"), 1572 Close 1573 (qVar"state", 1574 Let(TP[Var("v0",F64),qVar"s"], 1575 Apply(Const("x64_pop_aux",ATy(qTy,PTy(F64,qTy))),qVar"state"), 1576 Apply 1577 (Call 1578 ("write'EA",ATy(qTy,qTy), 1579 TP[Var("v0",F64), 1580 Apply 1581 (Call 1582 ("ea_Zrm",ATy(qTy,CTy"Zea"), 1583 TP[Const("Z64",CTy"Zsize"),Var("rm",CTy"Zrm")]), 1584 qVar"state")]),qVar"s")))) 1585; 1586val x64_pop_rip_def = Def 1587 ("x64_pop_rip",qVar"state", 1588 Let(TP[Var("v",F64),qVar"s"], 1589 Apply(Const("x64_pop_aux",ATy(qTy,PTy(F64,qTy))),qVar"state"), 1590 Rupd("RIP",TP[qVar"s",Var("v",F64)]))) 1591; 1592val x64_push_aux_def = Def 1593 ("x64_push_aux",Var("w",F64), 1594 Close 1595 (qVar"state", 1596 Let(Var("v",F64), 1597 Bop(Sub, 1598 Apply 1599 (Dest("REG",ATy(CTy"Zreg",F64),qVar"state"), 1600 LC("RSP",CTy"Zreg")),LW(8,64)), 1601 Apply 1602 (Call 1603 ("write'mem64",ATy(qTy,qTy),TP[Var("w",F64),Var("v",F64)]), 1604 Rupd 1605 ("REG", 1606 TP[qVar"state", 1607 Fupd 1608 (Dest("REG",ATy(CTy"Zreg",F64),qVar"state"), 1609 LC("RSP",CTy"Zreg"),Var("v",F64))]))))) 1610; 1611val x64_push_def = Def 1612 ("x64_push",Var("imm_rm",CTy"Zimm_rm"), 1613 Close 1614 (qVar"state", 1615 Apply 1616 (Call 1617 ("x64_push_aux",ATy(qTy,qTy), 1618 Apply 1619 (Call 1620 ("EA",ATy(qTy,F64), 1621 Apply 1622 (Call 1623 ("ea_Zimm_rm",ATy(qTy,CTy"Zea"), 1624 Var("imm_rm",CTy"Zimm_rm")),qVar"state")), 1625 qVar"state")),qVar"state"))) 1626; 1627val x64_push_rip_def = Def 1628 ("x64_push_rip",qVar"state", 1629 Apply 1630 (Call("x64_push_aux",ATy(qTy,qTy),Dest("RIP",F64,qVar"state")), 1631 qVar"state")) 1632; 1633val x64_drop_def = Def 1634 ("x64_drop",Var("imm",F64), 1635 Close 1636 (qVar"state", 1637 Let(qVar"s", 1638 ITE(Mop(Not,EQ(EX(Var("imm",F64),LN 7,LN 0,F8),LW(0,8))), 1639 Mop(Snd, 1640 Apply 1641 (Call 1642 ("raise'exception",ATy(qTy,PTy(uTy,qTy)), 1643 Call("FAILURE",CTy"exception",LS"x64_drop")), 1644 qVar"state")),qVar"state"), 1645 Rupd 1646 ("REG", 1647 TP[qVar"s", 1648 Fupd 1649 (Dest("REG",ATy(CTy"Zreg",F64),qVar"s"), 1650 LC("RSP",CTy"Zreg"), 1651 Bop(Add, 1652 Apply 1653 (Dest("REG",ATy(CTy"Zreg",F64),qVar"s"), 1654 LC("RSP",CTy"Zreg")),Var("imm",F64)))])))) 1655; 1656val initial_ieee_flags_def = Def 1657 ("initial_ieee_flags",bVar"invalid", 1658 Rupd 1659 ("Underflow", 1660 TP[Rupd 1661 ("Precision", 1662 TP[Rupd 1663 ("Overflow", 1664 TP[Rupd 1665 ("InvalidOp", 1666 TP[Rupd("DivideByZero",TP[LX fTy,LF]), 1667 bVar"invalid"]),LF]),LF]),LF])) 1668; 1669val set_precision_def = Def 1670 ("set_precision",TP[Var("flags",fTy),bVar"b"], 1671 Rupd("Precision",TP[Var("flags",fTy),bVar"b"])) 1672; 1673val zero32_def = Def 1674 ("zero32",Var("a",F32),ITE(Mop(Msb,Var("a",F32)),NEGZERO32,POSZERO32)) 1675; 1676val zero64_def = Def 1677 ("zero64",Var("a",F64),ITE(Mop(Msb,Var("a",F64)),NEGZERO64,POSZERO64)) 1678; 1679val denormal_to_zero32_def = Def 1680 ("denormal_to_zero32",Var("a",F32), 1681 Close 1682 (qVar"state", 1683 ITE(Bop(And,Dest("DAZ",bTy,Dest("MXCSR",CTy"MXCSR",qVar"state")), 1684 Mop(FPIsSubnormal 32,Var("a",F32))), 1685 Call("zero32",F32,Var("a",F32)),Var("a",F32)))) 1686; 1687val denormal_to_zero64_def = Def 1688 ("denormal_to_zero64",Var("a",F64), 1689 Close 1690 (qVar"state", 1691 ITE(Bop(And,Dest("DAZ",bTy,Dest("MXCSR",CTy"MXCSR",qVar"state")), 1692 Mop(FPIsSubnormal 64,Var("a",F64))), 1693 Call("zero64",F64,Var("a",F64)),Var("a",F64)))) 1694; 1695val flush_to_zero32_def = Def 1696 ("flush_to_zero32",TP[Var("flags",fTy),Var("a",F32)], 1697 Close 1698 (qVar"state", 1699 ITE(Bop(And,Dest("FZ",bTy,Dest("MXCSR",CTy"MXCSR",qVar"state")), 1700 Bop(And,Dest("UM",bTy,Dest("MXCSR",CTy"MXCSR",qVar"state")), 1701 Dest("Underflow",bTy,Var("flags",fTy)))), 1702 TP[Call("set_precision",fTy,TP[Var("flags",fTy),LT]), 1703 Call("zero32",F32,Var("a",F32))], 1704 TP[Var("flags",fTy),Var("a",F32)]))) 1705; 1706val flush_to_zero64_def = Def 1707 ("flush_to_zero64",TP[Var("flags",fTy),Var("a",F64)], 1708 Close 1709 (qVar"state", 1710 ITE(Bop(And,Dest("FZ",bTy,Dest("MXCSR",CTy"MXCSR",qVar"state")), 1711 Bop(And,Dest("UM",bTy,Dest("MXCSR",CTy"MXCSR",qVar"state")), 1712 Dest("Underflow",bTy,Var("flags",fTy)))), 1713 TP[Call("set_precision",fTy,TP[Var("flags",fTy),LT]), 1714 Call("zero64",F64,Var("a",F64))], 1715 TP[Var("flags",fTy),Var("a",F64)]))) 1716; 1717val sse_from_int64_def = Def 1718 ("sse_from_int64",TP[Var("m",rTy),Var("w",BTy"N")], 1719 Let(iVar"i",Mop(Cast iTy,Var("w",BTy"N")), 1720 Let(Var("q",F64),Mop(FPFromInt 64,TP[Var("m",rTy),iVar"i"]), 1721 TP[Call 1722 ("set_precision",fTy, 1723 TP[Call("initial_ieee_flags",fTy,LF), 1724 Mop(Not, 1725 EQ(Mop(FPToInt 64,TP[Var("m",rTy),Var("q",F64)]), 1726 Mop(Some,iVar"i")))]),Var("q",F64)]))) 1727; 1728val sse_from_int32_def = Def 1729 ("sse_from_int32",TP[Var("m",rTy),Var("w",BTy"N")], 1730 Let(iVar"i",Mop(Cast iTy,Var("w",BTy"N")), 1731 Let(Var("d",F32),Mop(FPFromInt 32,TP[Var("m",rTy),iVar"i"]), 1732 TP[Call 1733 ("set_precision",fTy, 1734 TP[Call("initial_ieee_flags",fTy,LF), 1735 Mop(Not, 1736 EQ(Mop(FPToInt 32,TP[Var("m",rTy),Var("d",F32)]), 1737 Mop(Some,iVar"i")))]),Var("d",F32)]))) 1738; 1739val sse_to_int64_def = Def 1740 ("sse_to_int64",TP[Var("m",rTy),Var("a",F64)], 1741 CS(Mop(FPToInt 64,TP[Var("m",rTy),Var("a",F64)]), 1742 [(Mop(Some,iVar"i"), 1743 ITE(Bop(And, 1744 Bop(Le, 1745 Mop(Neg, 1746 Bop(Exp,LI 2,Bop(Sub,Mop(Size,LY(0,"N")),LN 1))), 1747 iVar"i"), 1748 Bop(Le,iVar"i", 1749 Bop(Sub, 1750 Bop(Exp,LI 2,Bop(Sub,Mop(Size,LY(0,"N")),LN 1)), 1751 LI 1))), 1752 Let(Var("w",BTy"N"),Mop(Cast(BTy"N"),iVar"i"), 1753 TP[Call 1754 ("set_precision",fTy, 1755 TP[Call("initial_ieee_flags",fTy,LF), 1756 Mop(Not, 1757 Mop(FPEq 64, 1758 TP[Mop(FPFromInt 64, 1759 TP[Var("m",rTy), 1760 Mop(Cast iTy,Var("w",BTy"N"))]), 1761 Var("a",F64)]))]),Var("w",BTy"N")]), 1762 TP[Call("initial_ieee_flags",fTy,LT),Bop(Ror,LY(1,"N"),LN 1)])), 1763 (LO iTy, 1764 TP[Call("initial_ieee_flags",fTy,LT),Bop(Ror,LY(1,"N"),LN 1)])])) 1765; 1766val sse_to_int32_def = Def 1767 ("sse_to_int32",TP[Var("m",rTy),Var("a",F32)], 1768 CS(Mop(FPToInt 32,TP[Var("m",rTy),Var("a",F32)]), 1769 [(Mop(Some,iVar"i"), 1770 ITE(Bop(And, 1771 Bop(Le, 1772 Mop(Neg, 1773 Bop(Exp,LI 2,Bop(Sub,Mop(Size,LY(0,"N")),LN 1))), 1774 iVar"i"), 1775 Bop(Le,iVar"i", 1776 Bop(Sub, 1777 Bop(Exp,LI 2,Bop(Sub,Mop(Size,LY(0,"N")),LN 1)), 1778 LI 1))), 1779 Let(Var("w",BTy"N"),Mop(Cast(BTy"N"),iVar"i"), 1780 TP[Call 1781 ("set_precision",fTy, 1782 TP[Call("initial_ieee_flags",fTy,LF), 1783 Mop(Not, 1784 Mop(FPEq 32, 1785 TP[Mop(FPFromInt 32, 1786 TP[Var("m",rTy), 1787 Mop(Cast iTy,Var("w",BTy"N"))]), 1788 Var("a",F32)]))]),Var("w",BTy"N")]), 1789 TP[Call("initial_ieee_flags",fTy,LT),Bop(Ror,LY(1,"N"),LN 1)])), 1790 (LO iTy, 1791 TP[Call("initial_ieee_flags",fTy,LT),Bop(Ror,LY(1,"N"),LN 1)])])) 1792; 1793val float_min32_def = Def 1794 ("float_min32",TP[Var("a",F32),Var("b",F32)], 1795 Let(Var("flags",fTy), 1796 Call 1797 ("initial_ieee_flags",fTy, 1798 EQ(Mop(FPCmp 32,TP[Var("a",F32),Var("b",F32)]), 1799 binary_ieeeSyntax.UN_tm)), 1800 TP[Var("flags",fTy), 1801 ITE(Bop(And,Mop(Not,Dest("InvalidOp",bTy,Var("flags",fTy))), 1802 Mop(FPLt 32,TP[Var("a",F32),Var("b",F32)])), 1803 Var("a",F32),Var("b",F32))])) 1804; 1805val float_max32_def = Def 1806 ("float_max32",TP[Var("a",F32),Var("b",F32)], 1807 Let(Var("flags",fTy), 1808 Call 1809 ("initial_ieee_flags",fTy, 1810 EQ(Mop(FPCmp 32,TP[Var("a",F32),Var("b",F32)]), 1811 binary_ieeeSyntax.UN_tm)), 1812 TP[Var("flags",fTy), 1813 ITE(Bop(Or,Dest("InvalidOp",bTy,Var("flags",fTy)), 1814 Mop(FPLe 32,TP[Var("a",F32),Var("b",F32)])), 1815 Var("b",F32),Var("a",F32))])) 1816; 1817val float_min64_def = Def 1818 ("float_min64",TP[Var("a",F64),Var("b",F64)], 1819 Let(Var("flags",fTy), 1820 Call 1821 ("initial_ieee_flags",fTy, 1822 EQ(Mop(FPCmp 64,TP[Var("a",F64),Var("b",F64)]), 1823 binary_ieeeSyntax.UN_tm)), 1824 TP[Var("flags",fTy), 1825 ITE(Bop(And,Mop(Not,Dest("InvalidOp",bTy,Var("flags",fTy))), 1826 Mop(FPLt 64,TP[Var("a",F64),Var("b",F64)])), 1827 Var("a",F64),Var("b",F64))])) 1828; 1829val float_max64_def = Def 1830 ("float_max64",TP[Var("a",F64),Var("b",F64)], 1831 Let(Var("flags",fTy), 1832 Call 1833 ("initial_ieee_flags",fTy, 1834 EQ(Mop(FPCmp 64,TP[Var("a",F64),Var("b",F64)]), 1835 binary_ieeeSyntax.UN_tm)), 1836 TP[Var("flags",fTy), 1837 ITE(Bop(Or,Dest("InvalidOp",bTy,Var("flags",fTy)), 1838 Mop(FPLe 64,TP[Var("a",F64),Var("b",F64)])), 1839 Var("b",F64),Var("a",F64))])) 1840; 1841val process_float_flags_def = Def 1842 ("process_float_flags",Var("l",LTy(PTy(bTy,fTy))), 1843 Close 1844 (qVar"state", 1845 Let(Var("s",PTy(fTy,PTy(bTy,qTy))), 1846 Mop(Snd, 1847 Apply 1848 (Foreach 1849 (TP[Var("l",LTy(PTy(bTy,fTy))), 1850 Close 1851 (Var("x",PTy(bTy,fTy)), 1852 Close 1853 (Var("state",PTy(fTy,PTy(bTy,qTy))), 1854 Let(TP[bVar"d",Var("flags",fTy)], 1855 Var("x",PTy(bTy,fTy)), 1856 Let(Var("s0",fTy), 1857 Mop(Fst, 1858 Var("state",PTy(fTy,PTy(bTy,qTy)))), 1859 Let(Var("s0",fTy), 1860 Rupd 1861 ("DivideByZero", 1862 TP[Var("s0",fTy), 1863 Bop(Or, 1864 Dest 1865 ("DivideByZero",bTy, 1866 Var("s0",fTy)), 1867 Dest 1868 ("DivideByZero",bTy, 1869 Var("flags",fTy)))]), 1870 Let(Var("s0",fTy), 1871 Rupd 1872 ("InvalidOp", 1873 TP[Var("s0",fTy), 1874 Bop(Or, 1875 Dest 1876 ("InvalidOp",bTy, 1877 Var("s0",fTy)), 1878 Dest 1879 ("InvalidOp",bTy, 1880 Var("flags",fTy)))]), 1881 Let(Var("s0",fTy), 1882 Rupd 1883 ("Overflow", 1884 TP[Var("s0",fTy), 1885 Bop(Or, 1886 Dest 1887 ("Overflow", 1888 bTy, 1889 Var("s0",fTy)), 1890 Dest 1891 ("Overflow", 1892 bTy, 1893 Var("flags", 1894 fTy)))]), 1895 Let(Var("s0",fTy), 1896 Rupd 1897 ("Precision", 1898 TP[Var("s0",fTy), 1899 Bop(Or, 1900 Dest 1901 ("Precision", 1902 bTy, 1903 Var("s0", 1904 fTy)), 1905 Dest 1906 ("Precision", 1907 bTy, 1908 Var("flags", 1909 fTy)))]), 1910 TP[LU, 1911 Rupd 1912 ("Underflow", 1913 TP[Var("s0",fTy), 1914 Bop(Or, 1915 Dest 1916 ("Underflow", 1917 bTy, 1918 Var("s0", 1919 fTy)), 1920 Dest 1921 ("Underflow", 1922 bTy, 1923 Var("flags", 1924 fTy)))]), 1925 Bop(Or, 1926 Mop(Fst, 1927 Mop(Snd, 1928 Var("state", 1929 PTy(fTy, 1930 PTy(bTy, 1931 qTy))))), 1932 bVar"d"), 1933 Mop(Snd, 1934 Mop(Snd, 1935 Var("state", 1936 PTy(fTy, 1937 PTy(bTy, 1938 qTy)))))]))))))))]), 1939 TP[Call("initial_ieee_flags",fTy,LF),LF,qVar"state"])), 1940 Let(Var("s",PTy(fTy,PTy(bTy,qTy))), 1941 TP[Mop(Fst,Var("s",PTy(fTy,PTy(bTy,qTy)))), 1942 Let(Var("s0",PTy(bTy,qTy)), 1943 Mop(Snd,Var("s",PTy(fTy,PTy(bTy,qTy)))), 1944 TP[Mop(Fst,Var("s0",PTy(bTy,qTy))), 1945 Rupd 1946 ("MXCSR", 1947 TP[Mop(Snd,Var("s0",PTy(bTy,qTy))), 1948 Rupd 1949 ("IE", 1950 TP[Dest 1951 ("MXCSR",CTy"MXCSR", 1952 Mop(Snd, 1953 Mop(Snd, 1954 Var("s", 1955 PTy(fTy,PTy(bTy,qTy)))))), 1956 Bop(Or, 1957 Dest 1958 ("IE",bTy, 1959 Dest 1960 ("MXCSR",CTy"MXCSR", 1961 Mop(Snd, 1962 Mop(Snd, 1963 Var("s", 1964 PTy(fTy, 1965 PTy(bTy,qTy))))))), 1966 Dest 1967 ("InvalidOp",bTy, 1968 Mop(Fst, 1969 Var("s", 1970 PTy(fTy,PTy(bTy,qTy))))))])])])], 1971 Let(Var("s",PTy(fTy,PTy(bTy,qTy))), 1972 TP[Mop(Fst,Var("s",PTy(fTy,PTy(bTy,qTy)))), 1973 Let(Var("s0",PTy(bTy,qTy)), 1974 Mop(Snd,Var("s",PTy(fTy,PTy(bTy,qTy)))), 1975 TP[Mop(Fst,Var("s0",PTy(bTy,qTy))), 1976 Rupd 1977 ("MXCSR", 1978 TP[Mop(Snd,Var("s0",PTy(bTy,qTy))), 1979 Rupd 1980 ("DE", 1981 TP[Dest 1982 ("MXCSR",CTy"MXCSR", 1983 Mop(Snd, 1984 Mop(Snd, 1985 Var("s", 1986 PTy(fTy, 1987 PTy(bTy,qTy)))))), 1988 Bop(Or, 1989 Dest 1990 ("DE",bTy, 1991 Dest 1992 ("MXCSR",CTy"MXCSR", 1993 Mop(Snd, 1994 Mop(Snd, 1995 Var("s", 1996 PTy(fTy, 1997 PTy(bTy, 1998 qTy))))))), 1999 Mop(Fst, 2000 Mop(Snd, 2001 Var("s", 2002 PTy(fTy, 2003 PTy(bTy,qTy))))))])])])], 2004 Let(Var("s",PTy(fTy,PTy(bTy,qTy))), 2005 TP[Mop(Fst,Var("s",PTy(fTy,PTy(bTy,qTy)))), 2006 Let(Var("s0",PTy(bTy,qTy)), 2007 Mop(Snd,Var("s",PTy(fTy,PTy(bTy,qTy)))), 2008 TP[Mop(Fst,Var("s0",PTy(bTy,qTy))), 2009 Rupd 2010 ("MXCSR", 2011 TP[Mop(Snd,Var("s0",PTy(bTy,qTy))), 2012 Rupd 2013 ("ZE", 2014 TP[Dest 2015 ("MXCSR",CTy"MXCSR", 2016 Mop(Snd, 2017 Mop(Snd, 2018 Var("s", 2019 PTy(fTy, 2020 PTy(bTy,qTy)))))), 2021 Bop(Or, 2022 Dest 2023 ("ZE",bTy, 2024 Dest 2025 ("MXCSR",CTy"MXCSR", 2026 Mop(Snd, 2027 Mop(Snd, 2028 Var("s", 2029 PTy(fTy, 2030 PTy(bTy, 2031 qTy))))))), 2032 Dest 2033 ("DivideByZero",bTy, 2034 Mop(Fst, 2035 Var("s", 2036 PTy(fTy, 2037 PTy(bTy,qTy))))))])])])], 2038 Let(Var("s",PTy(fTy,PTy(bTy,qTy))), 2039 ITE(Bop(Or, 2040 Bop(And, 2041 Dest 2042 ("InvalidOp",bTy, 2043 Mop(Fst, 2044 Var("s",PTy(fTy,PTy(bTy,qTy))))), 2045 Mop(Not, 2046 Dest 2047 ("IM",bTy, 2048 Dest 2049 ("MXCSR",CTy"MXCSR", 2050 Mop(Snd, 2051 Mop(Snd, 2052 Var("s", 2053 PTy(fTy, 2054 PTy(bTy, 2055 qTy))))))))), 2056 Bop(Or, 2057 Bop(And, 2058 Mop(Fst, 2059 Mop(Snd, 2060 Var("s", 2061 PTy(fTy,PTy(bTy,qTy))))), 2062 Mop(Not, 2063 Dest 2064 ("DM",bTy, 2065 Dest 2066 ("MXCSR",CTy"MXCSR", 2067 Mop(Snd, 2068 Mop(Snd, 2069 Var("s", 2070 PTy(fTy, 2071 PTy(bTy, 2072 qTy))))))))), 2073 Bop(And, 2074 Dest 2075 ("DivideByZero",bTy, 2076 Mop(Fst, 2077 Var("s", 2078 PTy(fTy,PTy(bTy,qTy))))), 2079 Mop(Not, 2080 Dest 2081 ("ZM",bTy, 2082 Dest 2083 ("MXCSR",CTy"MXCSR", 2084 Mop(Snd, 2085 Mop(Snd, 2086 Var("s", 2087 PTy(fTy, 2088 PTy(bTy, 2089 qTy))))))))))), 2090 TP[Mop(Fst,Var("s",PTy(fTy,PTy(bTy,qTy)))), 2091 Mop(Fst, 2092 Mop(Snd, 2093 Var("s",PTy(fTy,PTy(bTy,qTy))))), 2094 Apply 2095 (Const("XM_exception",ATy(qTy,qTy)), 2096 Mop(Snd, 2097 Mop(Snd, 2098 Var("s",PTy(fTy,PTy(bTy,qTy))))))], 2099 Var("s",PTy(fTy,PTy(bTy,qTy)))), 2100 Let(Var("s",PTy(fTy,PTy(bTy,qTy))), 2101 TP[Mop(Fst,Var("s",PTy(fTy,PTy(bTy,qTy)))), 2102 Let(Var("s0",PTy(bTy,qTy)), 2103 Mop(Snd, 2104 Var("s",PTy(fTy,PTy(bTy,qTy)))), 2105 TP[Mop(Fst,Var("s0",PTy(bTy,qTy))), 2106 Rupd 2107 ("MXCSR", 2108 TP[Mop(Snd, 2109 Var("s0",PTy(bTy,qTy))), 2110 Rupd 2111 ("OE", 2112 TP[Dest 2113 ("MXCSR",CTy"MXCSR", 2114 Mop(Snd, 2115 Mop(Snd, 2116 Var("s", 2117 PTy(fTy, 2118 PTy(bTy, 2119 qTy)))))), 2120 Bop(Or, 2121 Dest 2122 ("OE",bTy, 2123 Dest 2124 ("MXCSR", 2125 CTy"MXCSR", 2126 Mop(Snd, 2127 Mop(Snd, 2128 Var("s", 2129 PTy(fTy, 2130 PTy(bTy, 2131 qTy))))))), 2132 Dest 2133 ("Overflow",bTy, 2134 Mop(Fst, 2135 Var("s", 2136 PTy(fTy, 2137 PTy(bTy, 2138 qTy))))))])])])], 2139 Let(Var("s",PTy(fTy,PTy(bTy,qTy))), 2140 TP[Mop(Fst, 2141 Var("s",PTy(fTy,PTy(bTy,qTy)))), 2142 Let(Var("s0",PTy(bTy,qTy)), 2143 Mop(Snd, 2144 Var("s",PTy(fTy,PTy(bTy,qTy)))), 2145 TP[Mop(Fst,Var("s0",PTy(bTy,qTy))), 2146 Rupd 2147 ("MXCSR", 2148 TP[Mop(Snd, 2149 Var("s0", 2150 PTy(bTy,qTy))), 2151 Rupd 2152 ("PE", 2153 TP[Dest 2154 ("MXCSR", 2155 CTy"MXCSR", 2156 Mop(Snd, 2157 Mop(Snd, 2158 Var("s", 2159 PTy(fTy, 2160 PTy(bTy, 2161 qTy)))))), 2162 Bop(Or, 2163 Dest 2164 ("PE",bTy, 2165 Dest 2166 ("MXCSR", 2167 CTy"MXCSR", 2168 Mop(Snd, 2169 Mop(Snd, 2170 Var("s", 2171 PTy(fTy, 2172 PTy(bTy, 2173 qTy))))))), 2174 Dest 2175 ("Precision", 2176 bTy, 2177 Mop(Fst, 2178 Var("s", 2179 PTy(fTy, 2180 PTy(bTy, 2181 qTy))))))])])])], 2182 Let(Var("s",PTy(fTy,PTy(bTy,qTy))), 2183 TP[Mop(Fst, 2184 Var("s",PTy(fTy,PTy(bTy,qTy)))), 2185 Let(Var("s0",PTy(bTy,qTy)), 2186 Mop(Snd, 2187 Var("s", 2188 PTy(fTy,PTy(bTy,qTy)))), 2189 TP[Mop(Fst, 2190 Var("s0",PTy(bTy,qTy))), 2191 Rupd 2192 ("MXCSR", 2193 TP[Mop(Snd, 2194 Var("s0", 2195 PTy(bTy,qTy))), 2196 Rupd 2197 ("UE", 2198 TP[Dest 2199 ("MXCSR", 2200 CTy"MXCSR", 2201 Mop(Snd, 2202 Mop(Snd, 2203 Var("s", 2204 PTy(fTy, 2205 PTy(bTy, 2206 qTy)))))), 2207 Bop(Or, 2208 Dest 2209 ("UE", 2210 bTy, 2211 Dest 2212 ("MXCSR", 2213 CTy"MXCSR", 2214 Mop(Snd, 2215 Mop(Snd, 2216 Var("s", 2217 PTy(fTy, 2218 PTy(bTy, 2219 qTy))))))), 2220 Dest 2221 ("Underflow", 2222 bTy, 2223 Mop(Fst, 2224 Var("s", 2225 PTy(fTy, 2226 PTy(bTy, 2227 qTy))))))])])])], 2228 ITE(Bop(Or, 2229 Bop(And, 2230 Dest 2231 ("Overflow",bTy, 2232 Mop(Fst, 2233 Var("s", 2234 PTy(fTy, 2235 PTy(bTy, 2236 qTy))))), 2237 Mop(Not, 2238 Dest 2239 ("OM",bTy, 2240 Dest 2241 ("MXCSR", 2242 CTy"MXCSR", 2243 Mop(Snd, 2244 Mop(Snd, 2245 Var("s", 2246 PTy(fTy, 2247 PTy(bTy, 2248 qTy))))))))), 2249 Bop(Or, 2250 Bop(And, 2251 Dest 2252 ("Precision",bTy, 2253 Mop(Fst, 2254 Var("s", 2255 PTy(fTy, 2256 PTy(bTy, 2257 qTy))))), 2258 Mop(Not, 2259 Dest 2260 ("PM",bTy, 2261 Dest 2262 ("MXCSR", 2263 CTy"MXCSR", 2264 Mop(Snd, 2265 Mop(Snd, 2266 Var("s", 2267 PTy(fTy, 2268 PTy(bTy, 2269 qTy))))))))), 2270 Bop(And, 2271 Dest 2272 ("Underflow",bTy, 2273 Mop(Fst, 2274 Var("s", 2275 PTy(fTy, 2276 PTy(bTy, 2277 qTy))))), 2278 Mop(Not, 2279 Dest 2280 ("UM",bTy, 2281 Dest 2282 ("MXCSR", 2283 CTy"MXCSR", 2284 Mop(Snd, 2285 Mop(Snd, 2286 Var("s", 2287 PTy(fTy, 2288 PTy(bTy, 2289 qTy))))))))))), 2290 Apply 2291 (Const 2292 ("XM_exception", 2293 ATy(qTy,qTy)), 2294 Mop(Snd, 2295 Mop(Snd, 2296 Var("s", 2297 PTy(fTy, 2298 PTy(bTy,qTy)))))), 2299 Mop(Snd, 2300 Mop(Snd, 2301 Var("s", 2302 PTy(fTy,PTy(bTy,qTy)))))))))))))))) 2303; 2304val RoundingMode_def = Def 2305 ("RoundingMode",qVar"state", 2306 CS(Dest("RC",FTy 2,Dest("MXCSR",CTy"MXCSR",qVar"state")), 2307 [(LW(0,2),binary_ieeeSyntax.roundTiesToEven_tm), 2308 (LW(1,2),binary_ieeeSyntax.roundTowardNegative_tm), 2309 (LW(2,2),binary_ieeeSyntax.roundTowardPositive_tm), 2310 (LW(3,2),binary_ieeeSyntax.roundTowardZero_tm)])) 2311; 2312val sse_binop32_def = Def 2313 ("sse_binop32",TP[Var("bop",CTy"sse_binop"),Var("a",F32),Var("b",F32)], 2314 Close 2315 (qVar"state", 2316 Let(Var("v",F32), 2317 Apply 2318 (Call("denormal_to_zero32",ATy(qTy,F32),Var("a",F32)), 2319 qVar"state"), 2320 Let(Var("v0",F32), 2321 Apply 2322 (Call("denormal_to_zero32",ATy(qTy,F32),Var("b",F32)), 2323 qVar"state"), 2324 Let(TP[Var("v",PTy(fTy,F32)),qVar"s"], 2325 CS(Var("bop",CTy"sse_binop"), 2326 [(LC("sse_add",CTy"sse_binop"), 2327 TP[Apply 2328 (Call 2329 ("flush_to_zero32",ATy(qTy,PTy(fTy,F32)), 2330 Mop(FPAdd_ 32, 2331 TP[Apply 2332 (Const 2333 ("RoundingMode",ATy(qTy,rTy)), 2334 qVar"state"),Var("v",F32), 2335 Var("v0",F32)])),qVar"state"), 2336 qVar"state"]), 2337 (LC("sse_sub",CTy"sse_binop"), 2338 TP[Apply 2339 (Call 2340 ("flush_to_zero32",ATy(qTy,PTy(fTy,F32)), 2341 Mop(FPSub_ 32, 2342 TP[Apply 2343 (Const 2344 ("RoundingMode",ATy(qTy,rTy)), 2345 qVar"state"),Var("v",F32), 2346 Var("v0",F32)])),qVar"state"), 2347 qVar"state"]), 2348 (LC("sse_mul",CTy"sse_binop"), 2349 TP[Apply 2350 (Call 2351 ("flush_to_zero32",ATy(qTy,PTy(fTy,F32)), 2352 Mop(FPMul_ 32, 2353 TP[Apply 2354 (Const 2355 ("RoundingMode",ATy(qTy,rTy)), 2356 qVar"state"),Var("v",F32), 2357 Var("v0",F32)])),qVar"state"), 2358 qVar"state"]), 2359 (LC("sse_div",CTy"sse_binop"), 2360 TP[Apply 2361 (Call 2362 ("flush_to_zero32",ATy(qTy,PTy(fTy,F32)), 2363 Mop(FPDiv_ 32, 2364 TP[Apply 2365 (Const 2366 ("RoundingMode",ATy(qTy,rTy)), 2367 qVar"state"),Var("v",F32), 2368 Var("v0",F32)])),qVar"state"), 2369 qVar"state"]), 2370 (LC("sse_max",CTy"sse_binop"), 2371 TP[Call 2372 ("float_max32",PTy(fTy,F32), 2373 TP[Var("v",F32),Var("v0",F32)]),qVar"state"]), 2374 (LC("sse_min",CTy"sse_binop"), 2375 TP[Call 2376 ("float_min32",PTy(fTy,F32), 2377 TP[Var("v",F32),Var("v0",F32)]),qVar"state"])]), 2378 CS(Var("v",PTy(fTy,F32)), 2379 [(TP[Var("f",fTy),Var("r",F32)], 2380 TP[TP[Bop(Or,Mop(FPIsSubnormal 32,Var("a",F32)), 2381 Mop(FPIsSubnormal 32,Var("b",F32))), 2382 Var("f",fTy)],Var("r",F32)])])))))) 2383; 2384val sse_binop64_def = Def 2385 ("sse_binop64",TP[Var("bop",CTy"sse_binop"),Var("a",F64),Var("b",F64)], 2386 Close 2387 (qVar"state", 2388 Let(Var("v",F64), 2389 Apply 2390 (Call("denormal_to_zero64",ATy(qTy,F64),Var("a",F64)), 2391 qVar"state"), 2392 Let(Var("v0",F64), 2393 Apply 2394 (Call("denormal_to_zero64",ATy(qTy,F64),Var("b",F64)), 2395 qVar"state"), 2396 Let(TP[Var("v",PTy(fTy,F64)),qVar"s"], 2397 CS(Var("bop",CTy"sse_binop"), 2398 [(LC("sse_add",CTy"sse_binop"), 2399 TP[Apply 2400 (Call 2401 ("flush_to_zero64",ATy(qTy,PTy(fTy,F64)), 2402 Mop(FPAdd_ 64, 2403 TP[Apply 2404 (Const 2405 ("RoundingMode",ATy(qTy,rTy)), 2406 qVar"state"),Var("v",F64), 2407 Var("v0",F64)])),qVar"state"), 2408 qVar"state"]), 2409 (LC("sse_sub",CTy"sse_binop"), 2410 TP[Apply 2411 (Call 2412 ("flush_to_zero64",ATy(qTy,PTy(fTy,F64)), 2413 Mop(FPSub_ 64, 2414 TP[Apply 2415 (Const 2416 ("RoundingMode",ATy(qTy,rTy)), 2417 qVar"state"),Var("v",F64), 2418 Var("v0",F64)])),qVar"state"), 2419 qVar"state"]), 2420 (LC("sse_mul",CTy"sse_binop"), 2421 TP[Apply 2422 (Call 2423 ("flush_to_zero64",ATy(qTy,PTy(fTy,F64)), 2424 Mop(FPMul_ 64, 2425 TP[Apply 2426 (Const 2427 ("RoundingMode",ATy(qTy,rTy)), 2428 qVar"state"),Var("v",F64), 2429 Var("v0",F64)])),qVar"state"), 2430 qVar"state"]), 2431 (LC("sse_div",CTy"sse_binop"), 2432 TP[Apply 2433 (Call 2434 ("flush_to_zero64",ATy(qTy,PTy(fTy,F64)), 2435 Mop(FPDiv_ 64, 2436 TP[Apply 2437 (Const 2438 ("RoundingMode",ATy(qTy,rTy)), 2439 qVar"state"),Var("v",F64), 2440 Var("v0",F64)])),qVar"state"), 2441 qVar"state"]), 2442 (LC("sse_max",CTy"sse_binop"), 2443 TP[Call 2444 ("float_max64",PTy(fTy,F64), 2445 TP[Var("v",F64),Var("v0",F64)]),qVar"state"]), 2446 (LC("sse_min",CTy"sse_binop"), 2447 TP[Call 2448 ("float_min64",PTy(fTy,F64), 2449 TP[Var("v",F64),Var("v0",F64)]),qVar"state"])]), 2450 CS(Var("v",PTy(fTy,F64)), 2451 [(TP[Var("f",fTy),Var("r",F64)], 2452 TP[TP[Bop(Or,Mop(FPIsSubnormal 64,Var("a",F64)), 2453 Mop(FPIsSubnormal 64,Var("b",F64))), 2454 Var("f",fTy)],Var("r",F64)])])))))) 2455; 2456val sse_sqrt32_def = Def 2457 ("sse_sqrt32",Var("a",F32), 2458 Close 2459 (qVar"state", 2460 CS(Mop(FPSqrt_ 32, 2461 TP[Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state"), 2462 Apply 2463 (Call("denormal_to_zero32",ATy(qTy,F32),Var("a",F32)), 2464 qVar"state")]), 2465 [(TP[Var("f",fTy),Var("r",F32)], 2466 TP[TP[Mop(FPIsSubnormal 32,Var("a",F32)),Var("f",fTy)], 2467 Var("r",F32)])]))) 2468; 2469val sse_sqrt64_def = Def 2470 ("sse_sqrt64",Var("a",F64), 2471 Close 2472 (qVar"state", 2473 CS(Mop(FPSqrt_ 64, 2474 TP[Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state"), 2475 Apply 2476 (Call("denormal_to_zero64",ATy(qTy,F64),Var("a",F64)), 2477 qVar"state")]), 2478 [(TP[Var("f",fTy),Var("r",F64)], 2479 TP[TP[Mop(FPIsSubnormal 64,Var("a",F64)),Var("f",fTy)], 2480 Var("r",F64)])]))) 2481; 2482val sse_logic_def = Def 2483 ("sse_logic", 2484 TP[Var("bop",CTy"sse_logic"),Var("a",BTy"N"),Var("b",BTy"N")], 2485 CS(Var("bop",CTy"sse_logic"), 2486 [(LC("sse_and",CTy"sse_logic"), 2487 Bop(BAnd,Var("a",BTy"N"),Var("b",BTy"N"))), 2488 (LC("sse_or",CTy"sse_logic"), 2489 Bop(BOr,Var("a",BTy"N"),Var("b",BTy"N"))), 2490 (LC("sse_xor",CTy"sse_logic"), 2491 Bop(BXor,Var("a",BTy"N"),Var("b",BTy"N"))), 2492 (LC("sse_andn",CTy"sse_logic"), 2493 Bop(BAnd,Mop(BNot,Var("a",BTy"N")),Var("b",BTy"N")))])) 2494; 2495val sse_compare_signalling_def = Def 2496 ("sse_compare_signalling",Var("cmp",CTy"sse_compare"), 2497 Bop(In,Var("cmp",CTy"sse_compare"), 2498 SL[LC("sse_lt_os",CTy"sse_compare"), 2499 LC("sse_le_os",CTy"sse_compare"), 2500 LC("sse_nlt_us",CTy"sse_compare"), 2501 LC("sse_nle_us",CTy"sse_compare")])) 2502; 2503val sse_compare32_def = Def 2504 ("sse_compare32", 2505 TP[Var("cmp",CTy"sse_compare"),Var("a",F32),Var("b",F32)], 2506 Let(bVar"unordered", 2507 EQ(Mop(FPCmp 32,TP[Var("a",F32),Var("b",F32)]), 2508 binary_ieeeSyntax.UN_tm), 2509 TP[TP[Bop(Or,Mop(FPIsSubnormal 32,Var("a",F32)), 2510 Mop(FPIsSubnormal 32,Var("b",F32))), 2511 Call 2512 ("initial_ieee_flags",fTy, 2513 Bop(Or,Mop(FPIsSignallingNan 32,Var("a",F32)), 2514 Bop(Or,Mop(FPIsSignallingNan 32,Var("b",F32)), 2515 Bop(And,bVar"unordered", 2516 Call 2517 ("sse_compare_signalling",bTy, 2518 Var("cmp",CTy"sse_compare"))))))], 2519 Mop(SE F32, 2520 Mop(Cast F1, 2521 CS(Var("cmp",CTy"sse_compare"), 2522 [(LC("sse_eq_oq",CTy"sse_compare"), 2523 Mop(FPEq 32,TP[Var("a",F32),Var("b",F32)])), 2524 (LC("sse_lt_os",CTy"sse_compare"), 2525 Mop(FPLt 32,TP[Var("a",F32),Var("b",F32)])), 2526 (LC("sse_le_os",CTy"sse_compare"), 2527 Mop(FPLe 32,TP[Var("a",F32),Var("b",F32)])), 2528 (LC("sse_unord_q",CTy"sse_compare"),bVar"unordered"), 2529 (LC("sse_neq_uq",CTy"sse_compare"), 2530 Bop(Or,bVar"unordered", 2531 Mop(Not, 2532 Mop(FPEq 32,TP[Var("a",F32),Var("b",F32)])))), 2533 (LC("sse_nlt_us",CTy"sse_compare"), 2534 Bop(Or,bVar"unordered", 2535 Mop(Not, 2536 Mop(FPLt 32,TP[Var("a",F32),Var("b",F32)])))), 2537 (LC("sse_nle_us",CTy"sse_compare"), 2538 Bop(Or,bVar"unordered", 2539 Mop(Not, 2540 Mop(FPLe 32,TP[Var("a",F32),Var("b",F32)])))), 2541 (Var("sss_ord_q",CTy"sse_compare"), 2542 Mop(Not,bVar"unordered"))])))])) 2543; 2544val sse_compare64_def = Def 2545 ("sse_compare64", 2546 TP[Var("cmp",CTy"sse_compare"),Var("a",F64),Var("b",F64)], 2547 Let(bVar"unordered", 2548 EQ(Mop(FPCmp 64,TP[Var("a",F64),Var("b",F64)]), 2549 binary_ieeeSyntax.UN_tm), 2550 TP[TP[Bop(Or,Mop(FPIsSubnormal 64,Var("a",F64)), 2551 Mop(FPIsSubnormal 64,Var("b",F64))), 2552 Call 2553 ("initial_ieee_flags",fTy, 2554 Bop(Or,Mop(FPIsSignallingNan 64,Var("a",F64)), 2555 Bop(Or,Mop(FPIsSignallingNan 64,Var("b",F64)), 2556 Bop(And,bVar"unordered", 2557 Call 2558 ("sse_compare_signalling",bTy, 2559 Var("cmp",CTy"sse_compare"))))))], 2560 Mop(SE F64, 2561 Mop(Cast F1, 2562 CS(Var("cmp",CTy"sse_compare"), 2563 [(LC("sse_eq_oq",CTy"sse_compare"), 2564 Mop(FPEq 64,TP[Var("a",F64),Var("b",F64)])), 2565 (LC("sse_lt_os",CTy"sse_compare"), 2566 Mop(FPLt 64,TP[Var("a",F64),Var("b",F64)])), 2567 (LC("sse_le_os",CTy"sse_compare"), 2568 Mop(FPLe 64,TP[Var("a",F64),Var("b",F64)])), 2569 (LC("sse_unord_q",CTy"sse_compare"),bVar"unordered"), 2570 (LC("sse_neq_uq",CTy"sse_compare"), 2571 Bop(Or,bVar"unordered", 2572 Mop(Not, 2573 Mop(FPEq 64,TP[Var("a",F64),Var("b",F64)])))), 2574 (LC("sse_nlt_us",CTy"sse_compare"), 2575 Bop(Or,bVar"unordered", 2576 Mop(Not, 2577 Mop(FPLt 64,TP[Var("a",F64),Var("b",F64)])))), 2578 (LC("sse_nle_us",CTy"sse_compare"), 2579 Bop(Or,bVar"unordered", 2580 Mop(Not, 2581 Mop(FPLe 64,TP[Var("a",F64),Var("b",F64)])))), 2582 (Var("sss_ord_q",CTy"sse_compare"), 2583 Mop(Not,bVar"unordered"))])))])) 2584; 2585val rm_to_xmm_mem_def = Def 2586 ("rm_to_xmm_mem",Var("rm",CTy"Zrm"), 2587 CS(Var("rm",CTy"Zrm"), 2588 [(Call("Zr",CTy"Zrm",Var("r",CTy"Zreg")), 2589 Call("xmm_reg",CTy"xmm_mem",Mop(Cast(FTy 3),Var("r",CTy"Zreg")))), 2590 (Call 2591 ("Zm",CTy"Zrm", 2592 Var("m",PTy(OTy(PTy(FTy 2,CTy"Zreg")),PTy(CTy"Zbase",F64)))), 2593 Call 2594 ("xmm_mem",CTy"xmm_mem", 2595 Var("m",PTy(OTy(PTy(FTy 2,CTy"Zreg")),PTy(CTy"Zbase",F64)))))])) 2596; 2597val XMM_def = Def 2598 ("XMM",Var("xm",CTy"xmm_mem"), 2599 Close 2600 (qVar"state", 2601 CS(Var("xm",CTy"xmm_mem"), 2602 [(Call("xmm_reg",CTy"xmm_mem",Var("r",FTy 3)), 2603 Apply 2604 (Dest("XMM_REG",ATy(FTy 3,FTy 128),qVar"state"), 2605 Var("r",FTy 3))), 2606 (Call 2607 ("xmm_mem",CTy"xmm_mem", 2608 Var("m",PTy(OTy(PTy(FTy 2,CTy"Zreg")),PTy(CTy"Zbase",F64)))), 2609 Apply 2610 (Call 2611 ("mem128",ATy(qTy,FTy 128), 2612 Apply 2613 (Call 2614 ("mem_addr",ATy(qTy,F64), 2615 Var("m", 2616 PTy(OTy(PTy(FTy 2,CTy"Zreg")), 2617 PTy(CTy"Zbase",F64)))),qVar"state")), 2618 qVar"state"))]))) 2619; 2620val write'XMM_def = Def 2621 ("write'XMM",TP[Var("dqw",FTy 128),Var("xm",CTy"xmm_mem")], 2622 Close 2623 (qVar"state", 2624 CS(Var("xm",CTy"xmm_mem"), 2625 [(Call("xmm_reg",CTy"xmm_mem",Var("r",FTy 3)), 2626 Rupd 2627 ("XMM_REG", 2628 TP[qVar"state", 2629 Fupd 2630 (Dest("XMM_REG",ATy(FTy 3,FTy 128),qVar"state"), 2631 Var("r",FTy 3),Var("dqw",FTy 128))])), 2632 (Call 2633 ("xmm_mem",CTy"xmm_mem", 2634 Var("m",PTy(OTy(PTy(FTy 2,CTy"Zreg")),PTy(CTy"Zbase",F64)))), 2635 Apply 2636 (Call 2637 ("write'mem128",ATy(qTy,qTy), 2638 TP[Var("dqw",FTy 128), 2639 Apply 2640 (Call 2641 ("mem_addr",ATy(qTy,F64), 2642 Var("m", 2643 PTy(OTy(PTy(FTy 2,CTy"Zreg")), 2644 PTy(CTy"Zbase",F64)))),qVar"state")]), 2645 qVar"state"))]))) 2646; 2647val CheckAlignedXMM_def = Def 2648 ("CheckAlignedXMM",TP[Var("xm",CTy"xmm_mem"),nVar"n"], 2649 Close 2650 (qVar"state", 2651 CS(Var("xm",CTy"xmm_mem"), 2652 [(Call("xmm_reg",CTy"xmm_mem",Var("r",FTy 3)),qVar"state"), 2653 (Call 2654 ("xmm_mem",CTy"xmm_mem", 2655 Var("m",PTy(OTy(PTy(FTy 2,CTy"Zreg")),PTy(CTy"Zbase",F64)))), 2656 Let(Var("v",F64), 2657 Apply 2658 (Call 2659 ("mem_addr",ATy(qTy,F64), 2660 Var("m", 2661 PTy(OTy(PTy(FTy 2,CTy"Zreg")),PTy(CTy"Zbase",F64)))), 2662 qVar"state"), 2663 ITE(Mop(Not, 2664 EQ(Bop(Lsl,Bop(Lsr,Var("v",F64),nVar"n"),nVar"n"), 2665 Var("v",F64))), 2666 Apply(Const("GP_exception",ATy(qTy,qTy)),qVar"state"), 2667 qVar"state")))]))) 2668; 2669val dfn'bin_PD_def = Def 2670 ("dfn'bin_PD", 2671 TP[Var("bop",CTy"sse_binop"),Var("dst",FTy 3),Var("src",CTy"xmm_mem")], 2672 Close 2673 (qVar"state", 2674 Let(Var("dst",CTy"xmm_mem"), 2675 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 2676 Let(Var("v",FTy 128), 2677 Apply 2678 (Call("XMM",ATy(qTy,FTy 128),Var("dst",CTy"xmm_mem")), 2679 qVar"state"), 2680 Let(Var("v0",FTy 128), 2681 Apply 2682 (Call("XMM",ATy(qTy,FTy 128),Var("src",CTy"xmm_mem")), 2683 qVar"state"), 2684 Let(TP[Var("f1",PTy(bTy,fTy)),Var("r1",F64)], 2685 Apply 2686 (Call 2687 ("sse_binop64",ATy(qTy,PTy(PTy(bTy,fTy),F64)), 2688 TP[Var("bop",CTy"sse_binop"), 2689 EX(Var("v",FTy 128),LN 127,LN 64,F64), 2690 EX(Var("v0",FTy 128),LN 127,LN 64,F64)]), 2691 qVar"state"), 2692 Let(TP[Var("f2",PTy(bTy,fTy)),Var("r2",F64)], 2693 Apply 2694 (Call 2695 ("sse_binop64", 2696 ATy(qTy,PTy(PTy(bTy,fTy),F64)), 2697 TP[Var("bop",CTy"sse_binop"), 2698 EX(Var("v",FTy 128),LN 63,LN 0,F64), 2699 EX(Var("v0",FTy 128),LN 63,LN 0,F64)]), 2700 qVar"state"), 2701 Apply 2702 (Call 2703 ("write'XMM",ATy(qTy,qTy), 2704 TP[CC[Var("r1",F64),Var("r2",F64)], 2705 Var("dst",CTy"xmm_mem")]), 2706 Apply 2707 (Call 2708 ("process_float_flags",ATy(qTy,qTy), 2709 LL[Var("f1",PTy(bTy,fTy)), 2710 Var("f2",PTy(bTy,fTy))]),qVar"state"))))))))) 2711; 2712val dfn'bin_PS_def = Def 2713 ("dfn'bin_PS", 2714 TP[Var("bop",CTy"sse_binop"),Var("dst",FTy 3),Var("src",CTy"xmm_mem")], 2715 Close 2716 (qVar"state", 2717 Let(Var("dst",CTy"xmm_mem"), 2718 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 2719 Let(Var("v",FTy 128), 2720 Apply 2721 (Call("XMM",ATy(qTy,FTy 128),Var("dst",CTy"xmm_mem")), 2722 qVar"state"), 2723 Let(Var("v0",FTy 128), 2724 Apply 2725 (Call("XMM",ATy(qTy,FTy 128),Var("src",CTy"xmm_mem")), 2726 qVar"state"), 2727 Let(TP[Var("f1",PTy(bTy,fTy)),Var("r1",F32)], 2728 Apply 2729 (Call 2730 ("sse_binop32",ATy(qTy,PTy(PTy(bTy,fTy),F32)), 2731 TP[Var("bop",CTy"sse_binop"), 2732 EX(Var("v",FTy 128),LN 127,LN 96,F32), 2733 EX(Var("v0",FTy 128),LN 127,LN 96,F32)]), 2734 qVar"state"), 2735 Let(TP[Var("f2",PTy(bTy,fTy)),Var("r2",F32)], 2736 Apply 2737 (Call 2738 ("sse_binop32", 2739 ATy(qTy,PTy(PTy(bTy,fTy),F32)), 2740 TP[Var("bop",CTy"sse_binop"), 2741 EX(Var("v",FTy 128),LN 95,LN 64,F32), 2742 EX(Var("v0",FTy 128),LN 95,LN 64,F32)]), 2743 qVar"state"), 2744 Let(TP[Var("f3",PTy(bTy,fTy)),Var("r3",F32)], 2745 Apply 2746 (Call 2747 ("sse_binop32", 2748 ATy(qTy,PTy(PTy(bTy,fTy),F32)), 2749 TP[Var("bop",CTy"sse_binop"), 2750 EX(Var("v",FTy 128),LN 63,LN 32,F32), 2751 EX(Var("v0",FTy 128),LN 63,LN 32, 2752 F32)]),qVar"state"), 2753 Let(TP[Var("f4",PTy(bTy,fTy)),Var("r4",F32)], 2754 Apply 2755 (Call 2756 ("sse_binop32", 2757 ATy(qTy,PTy(PTy(bTy,fTy),F32)), 2758 TP[Var("bop",CTy"sse_binop"), 2759 EX(Var("v",FTy 128),LN 31,LN 0, 2760 F32), 2761 EX(Var("v0",FTy 128),LN 31, 2762 LN 0,F32)]),qVar"state"), 2763 Apply 2764 (Call 2765 ("write'XMM",ATy(qTy,qTy), 2766 TP[CC[Var("r1",F32),Var("r2",F32), 2767 Var("r3",F32),Var("r4",F32)], 2768 Var("dst",CTy"xmm_mem")]), 2769 Apply 2770 (Call 2771 ("process_float_flags", 2772 ATy(qTy,qTy), 2773 LL[Var("f1",PTy(bTy,fTy)), 2774 Var("f2",PTy(bTy,fTy)), 2775 Var("f3",PTy(bTy,fTy)), 2776 Var("f4",PTy(bTy,fTy))]), 2777 qVar"state"))))))))))) 2778; 2779val dfn'bin_SD_def = Def 2780 ("dfn'bin_SD", 2781 TP[Var("bop",CTy"sse_binop"),Var("dst",FTy 3),Var("src",CTy"xmm_mem")], 2782 Close 2783 (qVar"state", 2784 Let(Var("dst",CTy"xmm_mem"), 2785 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 2786 Let(TP[Var("f",PTy(bTy,fTy)),Var("r",F64)], 2787 Apply 2788 (Call 2789 ("sse_binop64",ATy(qTy,PTy(PTy(bTy,fTy),F64)), 2790 TP[Var("bop",CTy"sse_binop"), 2791 EX(Apply 2792 (Call 2793 ("XMM",ATy(qTy,FTy 128), 2794 Var("dst",CTy"xmm_mem")),qVar"state"), 2795 LN 63,LN 0,F64), 2796 EX(Apply 2797 (Call 2798 ("XMM",ATy(qTy,FTy 128), 2799 Var("src",CTy"xmm_mem")),qVar"state"), 2800 LN 63,LN 0,F64)]),qVar"state"), 2801 Let(TP[Var("v",FTy 128),qVar"s"], 2802 Let(qVar"s0", 2803 Apply 2804 (Call 2805 ("process_float_flags",ATy(qTy,qTy), 2806 LL[Var("f",PTy(bTy,fTy))]),qVar"state"), 2807 TP[Apply 2808 (Call 2809 ("XMM",ATy(qTy,FTy 128), 2810 Var("dst",CTy"xmm_mem")),qVar"s0"),qVar"s0"]), 2811 Apply 2812 (Call 2813 ("write'XMM",ATy(qTy,qTy), 2814 TP[BFI(LN 63,LN 0,Var("r",F64),Var("v",FTy 128)), 2815 Var("dst",CTy"xmm_mem")]),qVar"s")))))) 2816; 2817val dfn'bin_SS_def = Def 2818 ("dfn'bin_SS", 2819 TP[Var("bop",CTy"sse_binop"),Var("dst",FTy 3),Var("src",CTy"xmm_mem")], 2820 Close 2821 (qVar"state", 2822 Let(Var("dst",CTy"xmm_mem"), 2823 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 2824 Let(TP[Var("f",PTy(bTy,fTy)),Var("r",F32)], 2825 Apply 2826 (Call 2827 ("sse_binop32",ATy(qTy,PTy(PTy(bTy,fTy),F32)), 2828 TP[Var("bop",CTy"sse_binop"), 2829 EX(Apply 2830 (Call 2831 ("XMM",ATy(qTy,FTy 128), 2832 Var("dst",CTy"xmm_mem")),qVar"state"), 2833 LN 31,LN 0,F32), 2834 EX(Apply 2835 (Call 2836 ("XMM",ATy(qTy,FTy 128), 2837 Var("src",CTy"xmm_mem")),qVar"state"), 2838 LN 31,LN 0,F32)]),qVar"state"), 2839 Let(TP[Var("v",FTy 128),qVar"s"], 2840 Let(qVar"s0", 2841 Apply 2842 (Call 2843 ("process_float_flags",ATy(qTy,qTy), 2844 LL[Var("f",PTy(bTy,fTy))]),qVar"state"), 2845 TP[Apply 2846 (Call 2847 ("XMM",ATy(qTy,FTy 128), 2848 Var("dst",CTy"xmm_mem")),qVar"s0"),qVar"s0"]), 2849 Apply 2850 (Call 2851 ("write'XMM",ATy(qTy,qTy), 2852 TP[BFI(LN 31,LN 0,Var("r",F32),Var("v",FTy 128)), 2853 Var("dst",CTy"xmm_mem")]),qVar"s")))))) 2854; 2855val dfn'logic_PD_def = Def 2856 ("dfn'logic_PD", 2857 TP[Var("bop",CTy"sse_logic"),Var("dst",FTy 3),Var("src",CTy"xmm_mem")], 2858 Close 2859 (qVar"state", 2860 Let(Var("dst",CTy"xmm_mem"), 2861 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 2862 Let(Var("v",FTy 128), 2863 Apply 2864 (Call("XMM",ATy(qTy,FTy 128),Var("dst",CTy"xmm_mem")), 2865 qVar"state"), 2866 Let(Var("v0",FTy 128), 2867 Apply 2868 (Call("XMM",ATy(qTy,FTy 128),Var("src",CTy"xmm_mem")), 2869 qVar"state"), 2870 Apply 2871 (Call 2872 ("write'XMM",ATy(qTy,qTy), 2873 TP[CC[Call 2874 ("sse_logic",F64, 2875 TP[Var("bop",CTy"sse_logic"), 2876 EX(Var("v",FTy 128),LN 127,LN 64,F64), 2877 EX(Var("v0",FTy 128),LN 127,LN 64,F64)]), 2878 Call 2879 ("sse_logic",F64, 2880 TP[Var("bop",CTy"sse_logic"), 2881 EX(Var("v",FTy 128),LN 63,LN 0,F64), 2882 EX(Var("v0",FTy 128),LN 63,LN 0,F64)])], 2883 Var("dst",CTy"xmm_mem")]),qVar"state")))))) 2884; 2885val dfn'logic_PS_def = Def 2886 ("dfn'logic_PS", 2887 TP[Var("bop",CTy"sse_logic"),Var("dst",FTy 3),Var("src",CTy"xmm_mem")], 2888 Close 2889 (qVar"state", 2890 Let(Var("dst",CTy"xmm_mem"), 2891 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 2892 Let(Var("v",FTy 128), 2893 Apply 2894 (Call("XMM",ATy(qTy,FTy 128),Var("dst",CTy"xmm_mem")), 2895 qVar"state"), 2896 Let(Var("v0",FTy 128), 2897 Apply 2898 (Call("XMM",ATy(qTy,FTy 128),Var("src",CTy"xmm_mem")), 2899 qVar"state"), 2900 Apply 2901 (Call 2902 ("write'XMM",ATy(qTy,qTy), 2903 TP[CC[Call 2904 ("sse_logic",F32, 2905 TP[Var("bop",CTy"sse_logic"), 2906 EX(Var("v",FTy 128),LN 127,LN 96,F32), 2907 EX(Var("v0",FTy 128),LN 127,LN 96,F32)]), 2908 Call 2909 ("sse_logic",F32, 2910 TP[Var("bop",CTy"sse_logic"), 2911 EX(Var("v",FTy 128),LN 95,LN 64,F32), 2912 EX(Var("v0",FTy 128),LN 95,LN 64,F32)]), 2913 Call 2914 ("sse_logic",F32, 2915 TP[Var("bop",CTy"sse_logic"), 2916 EX(Var("v",FTy 128),LN 63,LN 32,F32), 2917 EX(Var("v0",FTy 128),LN 63,LN 32,F32)]), 2918 Call 2919 ("sse_logic",F32, 2920 TP[Var("bop",CTy"sse_logic"), 2921 EX(Var("v",FTy 128),LN 31,LN 0,F32), 2922 EX(Var("v0",FTy 128),LN 31,LN 0,F32)])], 2923 Var("dst",CTy"xmm_mem")]),qVar"state")))))) 2924; 2925val dfn'CMPPD_def = Def 2926 ("dfn'CMPPD", 2927 TP[Var("cmp",CTy"sse_compare"),Var("dst",FTy 3),Var("src",CTy"xmm_mem")], 2928 Close 2929 (qVar"state", 2930 Let(Var("dst",CTy"xmm_mem"), 2931 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 2932 Let(Var("v",FTy 128), 2933 Apply 2934 (Call("XMM",ATy(qTy,FTy 128),Var("dst",CTy"xmm_mem")), 2935 qVar"state"), 2936 Let(Var("v0",FTy 128), 2937 Apply 2938 (Call("XMM",ATy(qTy,FTy 128),Var("src",CTy"xmm_mem")), 2939 qVar"state"), 2940 Let(TP[Var("f1",PTy(bTy,fTy)),Var("r1",F64)], 2941 Call 2942 ("sse_compare64",PTy(PTy(bTy,fTy),F64), 2943 TP[Var("cmp",CTy"sse_compare"), 2944 EX(Var("v",FTy 128),LN 127,LN 64,F64), 2945 EX(Var("v0",FTy 128),LN 127,LN 64,F64)]), 2946 Let(TP[Var("f2",PTy(bTy,fTy)),Var("r2",F64)], 2947 Call 2948 ("sse_compare64",PTy(PTy(bTy,fTy),F64), 2949 TP[Var("cmp",CTy"sse_compare"), 2950 EX(Var("v",FTy 128),LN 63,LN 0,F64), 2951 EX(Var("v0",FTy 128),LN 63,LN 0,F64)]), 2952 Apply 2953 (Call 2954 ("write'XMM",ATy(qTy,qTy), 2955 TP[CC[Var("r1",F64),Var("r2",F64)], 2956 Var("dst",CTy"xmm_mem")]), 2957 Apply 2958 (Call 2959 ("process_float_flags",ATy(qTy,qTy), 2960 LL[Var("f1",PTy(bTy,fTy)), 2961 Var("f2",PTy(bTy,fTy))]),qVar"state"))))))))) 2962; 2963val dfn'CMPPS_def = Def 2964 ("dfn'CMPPS", 2965 TP[Var("cmp",CTy"sse_compare"),Var("dst",FTy 3),Var("src",CTy"xmm_mem")], 2966 Close 2967 (qVar"state", 2968 Let(Var("dst",CTy"xmm_mem"), 2969 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 2970 Let(Var("v",FTy 128), 2971 Apply 2972 (Call("XMM",ATy(qTy,FTy 128),Var("dst",CTy"xmm_mem")), 2973 qVar"state"), 2974 Let(Var("v0",FTy 128), 2975 Apply 2976 (Call("XMM",ATy(qTy,FTy 128),Var("src",CTy"xmm_mem")), 2977 qVar"state"), 2978 Let(TP[Var("f1",PTy(bTy,fTy)),Var("r1",F32)], 2979 Call 2980 ("sse_compare32",PTy(PTy(bTy,fTy),F32), 2981 TP[Var("cmp",CTy"sse_compare"), 2982 EX(Var("v",FTy 128),LN 127,LN 96,F32), 2983 EX(Var("v0",FTy 128),LN 127,LN 96,F32)]), 2984 Let(TP[Var("f2",PTy(bTy,fTy)),Var("r2",F32)], 2985 Call 2986 ("sse_compare32",PTy(PTy(bTy,fTy),F32), 2987 TP[Var("cmp",CTy"sse_compare"), 2988 EX(Var("v",FTy 128),LN 95,LN 64,F32), 2989 EX(Var("v0",FTy 128),LN 95,LN 64,F32)]), 2990 Let(TP[Var("f3",PTy(bTy,fTy)),Var("r3",F32)], 2991 Call 2992 ("sse_compare32",PTy(PTy(bTy,fTy),F32), 2993 TP[Var("cmp",CTy"sse_compare"), 2994 EX(Var("v",FTy 128),LN 63,LN 32,F32), 2995 EX(Var("v0",FTy 128),LN 63,LN 32,F32)]), 2996 Let(TP[Var("f4",PTy(bTy,fTy)),Var("r4",F32)], 2997 Call 2998 ("sse_compare32", 2999 PTy(PTy(bTy,fTy),F32), 3000 TP[Var("cmp",CTy"sse_compare"), 3001 EX(Var("v",FTy 128),LN 31,LN 0,F32), 3002 EX(Var("v0",FTy 128),LN 31,LN 0, 3003 F32)]), 3004 Apply 3005 (Call 3006 ("write'XMM",ATy(qTy,qTy), 3007 TP[CC[Var("r1",F32),Var("r2",F32), 3008 Var("r3",F32),Var("r4",F32)], 3009 Var("dst",CTy"xmm_mem")]), 3010 Apply 3011 (Call 3012 ("process_float_flags", 3013 ATy(qTy,qTy), 3014 LL[Var("f1",PTy(bTy,fTy)), 3015 Var("f2",PTy(bTy,fTy)), 3016 Var("f3",PTy(bTy,fTy)), 3017 Var("f4",PTy(bTy,fTy))]), 3018 qVar"state"))))))))))) 3019; 3020val dfn'CMPSD_def = Def 3021 ("dfn'CMPSD", 3022 TP[Var("cmp",CTy"sse_compare"),Var("dst",FTy 3),Var("src",CTy"xmm_mem")], 3023 Close 3024 (qVar"state", 3025 Let(Var("dst",CTy"xmm_mem"), 3026 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 3027 Let(TP[Var("f",PTy(bTy,fTy)),Var("r",F64)], 3028 Call 3029 ("sse_compare64",PTy(PTy(bTy,fTy),F64), 3030 TP[Var("cmp",CTy"sse_compare"), 3031 EX(Apply 3032 (Call 3033 ("XMM",ATy(qTy,FTy 128), 3034 Var("dst",CTy"xmm_mem")),qVar"state"),LN 63, 3035 LN 0,F64), 3036 EX(Apply 3037 (Call 3038 ("XMM",ATy(qTy,FTy 128), 3039 Var("src",CTy"xmm_mem")),qVar"state"),LN 63, 3040 LN 0,F64)]), 3041 Let(TP[Var("v",FTy 128),qVar"s"], 3042 Let(qVar"s0", 3043 Apply 3044 (Call 3045 ("process_float_flags",ATy(qTy,qTy), 3046 LL[Var("f",PTy(bTy,fTy))]),qVar"state"), 3047 TP[Apply 3048 (Call 3049 ("XMM",ATy(qTy,FTy 128), 3050 Var("dst",CTy"xmm_mem")),qVar"s0"),qVar"s0"]), 3051 Apply 3052 (Call 3053 ("write'XMM",ATy(qTy,qTy), 3054 TP[BFI(LN 63,LN 0,Var("r",F64),Var("v",FTy 128)), 3055 Var("dst",CTy"xmm_mem")]),qVar"s")))))) 3056; 3057val dfn'CMPSS_def = Def 3058 ("dfn'CMPSS", 3059 TP[Var("cmp",CTy"sse_compare"),Var("dst",FTy 3),Var("src",CTy"xmm_mem")], 3060 Close 3061 (qVar"state", 3062 Let(Var("dst",CTy"xmm_mem"), 3063 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 3064 Let(TP[Var("f",PTy(bTy,fTy)),Var("r",F32)], 3065 Call 3066 ("sse_compare32",PTy(PTy(bTy,fTy),F32), 3067 TP[Var("cmp",CTy"sse_compare"), 3068 EX(Apply 3069 (Call 3070 ("XMM",ATy(qTy,FTy 128), 3071 Var("dst",CTy"xmm_mem")),qVar"state"),LN 31, 3072 LN 0,F32), 3073 EX(Apply 3074 (Call 3075 ("XMM",ATy(qTy,FTy 128), 3076 Var("src",CTy"xmm_mem")),qVar"state"),LN 31, 3077 LN 0,F32)]), 3078 Let(TP[Var("v",FTy 128),qVar"s"], 3079 Let(qVar"s0", 3080 Apply 3081 (Call 3082 ("process_float_flags",ATy(qTy,qTy), 3083 LL[Var("f",PTy(bTy,fTy))]),qVar"state"), 3084 TP[Apply 3085 (Call 3086 ("XMM",ATy(qTy,FTy 128), 3087 Var("dst",CTy"xmm_mem")),qVar"s0"),qVar"s0"]), 3088 Apply 3089 (Call 3090 ("write'XMM",ATy(qTy,qTy), 3091 TP[BFI(LN 31,LN 0,Var("r",F32),Var("v",FTy 128)), 3092 Var("dst",CTy"xmm_mem")]),qVar"s")))))) 3093; 3094val dfn'COMISD_def = Def 3095 ("dfn'COMISD",TP[Var("src1",FTy 3),Var("src2",CTy"xmm_mem")], 3096 Close 3097 (qVar"state", 3098 Apply 3099 (Call("write'SF",ATy(qTy,qTy),LF), 3100 Apply 3101 (Call("write'AF",ATy(qTy,qTy),LF), 3102 Apply 3103 (Call("write'OF",ATy(qTy,qTy),LF), 3104 CS(Mop(FPCmp 64, 3105 TP[EX(Apply 3106 (Call 3107 ("XMM",ATy(qTy,FTy 128), 3108 Call 3109 ("xmm_reg",CTy"xmm_mem", 3110 Var("src1",FTy 3))),qVar"state"), 3111 LN 63,LN 0,F64), 3112 EX(Apply 3113 (Call 3114 ("XMM",ATy(qTy,FTy 128), 3115 Var("src2",CTy"xmm_mem")),qVar"state"), 3116 LN 63,LN 0,F64)]), 3117 [(binary_ieeeSyntax.UN_tm, 3118 Apply 3119 (Call("write'CF",ATy(qTy,qTy),LT), 3120 Apply 3121 (Call("write'PF",ATy(qTy,qTy),LT), 3122 Apply 3123 (Call("write'ZF",ATy(qTy,qTy),LT),qVar"state")))), 3124 (binary_ieeeSyntax.GT_tm, 3125 Apply 3126 (Call("write'CF",ATy(qTy,qTy),LF), 3127 Apply 3128 (Call("write'PF",ATy(qTy,qTy),LF), 3129 Apply 3130 (Call("write'ZF",ATy(qTy,qTy),LF),qVar"state")))), 3131 (binary_ieeeSyntax.LT_tm, 3132 Apply 3133 (Call("write'CF",ATy(qTy,qTy),LT), 3134 Apply 3135 (Call("write'PF",ATy(qTy,qTy),LF), 3136 Apply 3137 (Call("write'ZF",ATy(qTy,qTy),LF),qVar"state")))), 3138 (binary_ieeeSyntax.EQ_tm, 3139 Apply 3140 (Call("write'CF",ATy(qTy,qTy),LF), 3141 Apply 3142 (Call("write'PF",ATy(qTy,qTy),LF), 3143 Apply 3144 (Call("write'ZF",ATy(qTy,qTy),LT),qVar"state"))))])))))) 3145; 3146val dfn'COMISS_def = Def 3147 ("dfn'COMISS",TP[Var("src1",FTy 3),Var("src2",CTy"xmm_mem")], 3148 Close 3149 (qVar"state", 3150 Apply 3151 (Call("write'SF",ATy(qTy,qTy),LF), 3152 Apply 3153 (Call("write'AF",ATy(qTy,qTy),LF), 3154 Apply 3155 (Call("write'OF",ATy(qTy,qTy),LF), 3156 CS(Mop(FPCmp 32, 3157 TP[EX(Apply 3158 (Call 3159 ("XMM",ATy(qTy,FTy 128), 3160 Call 3161 ("xmm_reg",CTy"xmm_mem", 3162 Var("src1",FTy 3))),qVar"state"), 3163 LN 31,LN 0,F32), 3164 EX(Apply 3165 (Call 3166 ("XMM",ATy(qTy,FTy 128), 3167 Var("src2",CTy"xmm_mem")),qVar"state"), 3168 LN 31,LN 0,F32)]), 3169 [(binary_ieeeSyntax.UN_tm, 3170 Apply 3171 (Call("write'CF",ATy(qTy,qTy),LT), 3172 Apply 3173 (Call("write'PF",ATy(qTy,qTy),LT), 3174 Apply 3175 (Call("write'ZF",ATy(qTy,qTy),LT),qVar"state")))), 3176 (binary_ieeeSyntax.GT_tm, 3177 Apply 3178 (Call("write'CF",ATy(qTy,qTy),LF), 3179 Apply 3180 (Call("write'PF",ATy(qTy,qTy),LF), 3181 Apply 3182 (Call("write'ZF",ATy(qTy,qTy),LF),qVar"state")))), 3183 (binary_ieeeSyntax.LT_tm, 3184 Apply 3185 (Call("write'CF",ATy(qTy,qTy),LT), 3186 Apply 3187 (Call("write'PF",ATy(qTy,qTy),LF), 3188 Apply 3189 (Call("write'ZF",ATy(qTy,qTy),LF),qVar"state")))), 3190 (binary_ieeeSyntax.EQ_tm, 3191 Apply 3192 (Call("write'CF",ATy(qTy,qTy),LF), 3193 Apply 3194 (Call("write'PF",ATy(qTy,qTy),LF), 3195 Apply 3196 (Call("write'ZF",ATy(qTy,qTy),LT),qVar"state"))))])))))) 3197; 3198val dfn'CVTDQ2PD_def = Def 3199 ("dfn'CVTDQ2PD",TP[Var("dst",FTy 3),Var("src",CTy"xmm_mem")], 3200 Close 3201 (qVar"state", 3202 Let(Var("v",FTy 128), 3203 Apply 3204 (Call("XMM",ATy(qTy,FTy 128),Var("src",CTy"xmm_mem")), 3205 qVar"state"), 3206 Let(Var("v0",rTy), 3207 Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state"), 3208 Apply 3209 (Call 3210 ("write'XMM",ATy(qTy,qTy), 3211 TP[CC[Mop(FPFromInt 64, 3212 TP[Var("v0",rTy), 3213 Mop(Cast iTy, 3214 EX(Var("v",FTy 128),LN 63,LN 32,F32))]), 3215 Mop(FPFromInt 64, 3216 TP[Var("v0",rTy), 3217 Mop(Cast iTy, 3218 EX(Var("v",FTy 128),LN 31,LN 0,F32))])], 3219 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3))]), 3220 qVar"state"))))) 3221; 3222val dfn'CVTDQ2PS_def = Def 3223 ("dfn'CVTDQ2PS",TP[Var("dst",FTy 3),Var("src",CTy"xmm_mem")], 3224 Close 3225 (qVar"state", 3226 Let(Var("v",FTy 128), 3227 Apply 3228 (Call("XMM",ATy(qTy,FTy 128),Var("src",CTy"xmm_mem")), 3229 qVar"state"), 3230 Let(Var("v0",rTy), 3231 Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state"), 3232 Let(TP[Var("f1",fTy),Var("d1",F32)], 3233 Call 3234 ("sse_from_int32",PTy(fTy,F32), 3235 TP[Var("v0",rTy), 3236 EX(Var("v",FTy 128),LN 127,LN 96,F32)]), 3237 Let(TP[Var("f2",fTy),Var("d2",F32)], 3238 Call 3239 ("sse_from_int32",PTy(fTy,F32), 3240 TP[Var("v0",rTy), 3241 EX(Var("v",FTy 128),LN 95,LN 64,F32)]), 3242 Let(TP[Var("f3",fTy),Var("d3",F32)], 3243 Call 3244 ("sse_from_int32",PTy(fTy,F32), 3245 TP[Var("v0",rTy), 3246 EX(Var("v",FTy 128),LN 63,LN 32,F32)]), 3247 Let(TP[Var("f4",fTy),Var("d4",F32)], 3248 Call 3249 ("sse_from_int32",PTy(fTy,F32), 3250 TP[Var("v0",rTy), 3251 EX(Var("v",FTy 128),LN 31,LN 0,F32)]), 3252 Apply 3253 (Call 3254 ("write'XMM",ATy(qTy,qTy), 3255 TP[CC[Var("d1",F32),Var("d2",F32), 3256 Var("d3",F32),Var("d4",F32)], 3257 Call 3258 ("xmm_reg",CTy"xmm_mem", 3259 Var("dst",FTy 3))]), 3260 Apply 3261 (Call 3262 ("process_float_flags",ATy(qTy,qTy), 3263 LL[TP[LF,Var("f1",fTy)], 3264 TP[LF,Var("f2",fTy)], 3265 TP[LF,Var("f3",fTy)], 3266 TP[LF,Var("f4",fTy)]]), 3267 qVar"state")))))))))) 3268; 3269val dfn'CVTPD2DQ_def = Def 3270 ("dfn'CVTPD2DQ", 3271 TP[bVar"truncate",Var("dst",FTy 3),Var("src",CTy"xmm_mem")], 3272 Close 3273 (qVar"state", 3274 Let(Var("v",FTy 128), 3275 Apply 3276 (Call("XMM",ATy(qTy,FTy 128),Var("src",CTy"xmm_mem")), 3277 qVar"state"), 3278 Let(Var("v0",rTy), 3279 ITE(bVar"truncate",binary_ieeeSyntax.roundTowardZero_tm, 3280 Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state")), 3281 Let(TP[Var("f1",fTy),Var("w1",F32)], 3282 Call 3283 ("sse_to_int64",PTy(fTy,F32), 3284 TP[Var("v0",rTy), 3285 EX(Var("v",FTy 128),LN 127,LN 64,F64)]), 3286 Let(TP[Var("f2",fTy),Var("w2",F32)], 3287 Call 3288 ("sse_to_int64",PTy(fTy,F32), 3289 TP[Var("v0",rTy), 3290 EX(Var("v",FTy 128),LN 63,LN 0,F64)]), 3291 Let(Var("x",CTy"xmm_mem"), 3292 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 3293 Let(TP[Var("v",FTy 128),qVar"s"], 3294 Let(qVar"s0", 3295 Apply 3296 (Call 3297 ("process_float_flags", 3298 ATy(qTy,qTy), 3299 LL[TP[LF,Var("f1",fTy)], 3300 TP[LF,Var("f2",fTy)]]), 3301 qVar"state"), 3302 TP[Apply 3303 (Call 3304 ("XMM",ATy(qTy,FTy 128), 3305 Var("x",CTy"xmm_mem")),qVar"s0"), 3306 qVar"s0"]), 3307 Apply 3308 (Call 3309 ("write'XMM",ATy(qTy,qTy), 3310 TP[BFI(LN 63,LN 0, 3311 CC[Var("w1",F32),Var("w2",F32)], 3312 Var("v",FTy 128)), 3313 Var("x",CTy"xmm_mem")]),qVar"s"))))))))) 3314; 3315val dfn'CVTPD2PS_def = Def 3316 ("dfn'CVTPD2PS",TP[Var("dst",FTy 3),Var("src",CTy"xmm_mem")], 3317 Close 3318 (qVar"state", 3319 Let(Var("v",FTy 128), 3320 Apply 3321 (Call("XMM",ATy(qTy,FTy 128),Var("src",CTy"xmm_mem")), 3322 qVar"state"), 3323 Let(Var("q1",F64),EX(Var("v",FTy 128),LN 127,LN 64,F64), 3324 Let(Var("v0",rTy), 3325 Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state"), 3326 Let(TP[Var("f1",fTy),Var("r1",F32)], 3327 Mop(FP64To32_,TP[Var("v0",rTy),Var("q1",F64)]), 3328 Let(TP[Var("f2",fTy),Var("r2",F32)], 3329 Mop(FP64To32_,TP[Var("v0",rTy),Var("q1",F64)]), 3330 Let(Var("x0",CTy"xmm_mem"), 3331 Call 3332 ("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 3333 Let(TP[Var("v",FTy 128),qVar"s"], 3334 Let(qVar"s0", 3335 Apply 3336 (Call 3337 ("process_float_flags", 3338 ATy(qTy,qTy), 3339 LL[TP[Mop(FPIsSubnormal 64, 3340 Var("q1",F64)), 3341 Var("f1",fTy)], 3342 TP[Mop(FPIsSubnormal 64, 3343 EX(Var("v",FTy 128), 3344 LN 63,LN 0,F64)), 3345 Var("f2",fTy)]]), 3346 qVar"state"), 3347 TP[Apply 3348 (Call 3349 ("XMM",ATy(qTy,FTy 128), 3350 Var("x0",CTy"xmm_mem")), 3351 qVar"s0"),qVar"s0"]), 3352 Apply 3353 (Call 3354 ("write'XMM",ATy(qTy,qTy), 3355 TP[BFI(LN 63,LN 0, 3356 CC[Var("r1",F32), 3357 Var("r2",F32)], 3358 Var("v",FTy 128)), 3359 Var("x0",CTy"xmm_mem")]), 3360 qVar"s")))))))))) 3361; 3362val dfn'CVTPS2DQ_def = Def 3363 ("dfn'CVTPS2DQ", 3364 TP[bVar"truncate",Var("dst",FTy 3),Var("src",CTy"xmm_mem")], 3365 Close 3366 (qVar"state", 3367 Let(Var("v",FTy 128), 3368 Apply 3369 (Call("XMM",ATy(qTy,FTy 128),Var("src",CTy"xmm_mem")), 3370 qVar"state"), 3371 Let(Var("v0",rTy), 3372 ITE(bVar"truncate",binary_ieeeSyntax.roundTowardZero_tm, 3373 Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state")), 3374 Let(TP[Var("f1",fTy),Var("w1",F32)], 3375 Call 3376 ("sse_to_int32",PTy(fTy,F32), 3377 TP[Var("v0",rTy), 3378 EX(Var("v",FTy 128),LN 127,LN 96,F32)]), 3379 Let(TP[Var("f2",fTy),Var("w2",F32)], 3380 Call 3381 ("sse_to_int32",PTy(fTy,F32), 3382 TP[Var("v0",rTy), 3383 EX(Var("v",FTy 128),LN 95,LN 64,F32)]), 3384 Let(TP[Var("f3",fTy),Var("w3",F32)], 3385 Call 3386 ("sse_to_int32",PTy(fTy,F32), 3387 TP[Var("v0",rTy), 3388 EX(Var("v",FTy 128),LN 63,LN 32,F32)]), 3389 Let(TP[Var("f4",fTy),Var("w4",F32)], 3390 Call 3391 ("sse_to_int32",PTy(fTy,F32), 3392 TP[Var("v0",rTy), 3393 EX(Var("v",FTy 128),LN 31,LN 0,F32)]), 3394 Apply 3395 (Call 3396 ("write'XMM",ATy(qTy,qTy), 3397 TP[CC[Var("w1",F32),Var("w2",F32), 3398 Var("w3",F32),Var("w4",F32)], 3399 Call 3400 ("xmm_reg",CTy"xmm_mem", 3401 Var("dst",FTy 3))]), 3402 Apply 3403 (Call 3404 ("process_float_flags",ATy(qTy,qTy), 3405 LL[TP[LF,Var("f1",fTy)], 3406 TP[LF,Var("f2",fTy)], 3407 TP[LF,Var("f3",fTy)], 3408 TP[LF,Var("f4",fTy)]]), 3409 qVar"state")))))))))) 3410; 3411val dfn'CVTPS2PD_def = Def 3412 ("dfn'CVTPS2PD",TP[Var("dst",FTy 3),Var("src",CTy"xmm_mem")], 3413 Close 3414 (qVar"state", 3415 Let(Var("v",FTy 128), 3416 Apply 3417 (Call("XMM",ATy(qTy,FTy 128),Var("src",CTy"xmm_mem")), 3418 qVar"state"), 3419 Let(Var("d1",F32),EX(Var("v",FTy 128),LN 63,LN 32,F32), 3420 Let(Var("d2",F32),EX(Var("v",FTy 128),LN 31,LN 0,F32), 3421 Apply 3422 (Call 3423 ("write'XMM",ATy(qTy,qTy), 3424 TP[CC[Mop(FP32To64,Var("d1",F32)), 3425 Mop(FP32To64,Var("d2",F32))], 3426 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3))]), 3427 Apply 3428 (Call 3429 ("process_float_flags",ATy(qTy,qTy), 3430 LL[TP[Mop(FPIsSubnormal 32,Var("d1",F32)), 3431 Call 3432 ("initial_ieee_flags",fTy, 3433 Mop(FPIsSignallingNan 32,Var("d1",F32)))], 3434 TP[Mop(FPIsSubnormal 32,Var("d2",F32)), 3435 Call 3436 ("initial_ieee_flags",fTy, 3437 Mop(FPIsSignallingNan 32,Var("d2",F32)))]]), 3438 qVar"state"))))))) 3439; 3440val dfn'CVTSD2SI_def = Def 3441 ("dfn'CVTSD2SI", 3442 TP[bVar"truncate",bVar"quad",Var("dst",CTy"Zreg"), 3443 Var("src",CTy"xmm_mem")], 3444 Close 3445 (qVar"state", 3446 Let(Var("q",F64), 3447 EX(Apply 3448 (Call("XMM",ATy(qTy,FTy 128),Var("src",CTy"xmm_mem")), 3449 qVar"state"),LN 63,LN 0,F64), 3450 Let(Var("v",rTy), 3451 ITE(bVar"truncate",binary_ieeeSyntax.roundTowardZero_tm, 3452 Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state")), 3453 ITE(bVar"quad", 3454 Let(TP[Var("f",fTy),Var("w",F64)], 3455 Call 3456 ("sse_to_int64",PTy(fTy,F64), 3457 TP[Var("v",rTy),Var("q",F64)]), 3458 Apply 3459 (Call 3460 ("write'EA",ATy(qTy,qTy), 3461 TP[Var("w",F64), 3462 Call 3463 ("Zea_r",CTy"Zea", 3464 TP[Const("Z64",CTy"Zsize"), 3465 Var("dst",CTy"Zreg")])]), 3466 Apply 3467 (Call 3468 ("process_float_flags",ATy(qTy,qTy), 3469 LL[TP[LF,Var("f",fTy)]]),qVar"state"))), 3470 Let(TP[Var("f",fTy),Var("w",F32)], 3471 Call 3472 ("sse_to_int64",PTy(fTy,F32), 3473 TP[Var("v",rTy),Var("q",F64)]), 3474 Apply 3475 (Call 3476 ("write'EA",ATy(qTy,qTy), 3477 TP[Mop(Cast F64,Var("w",F32)), 3478 Call 3479 ("Zea_r",CTy"Zea", 3480 TP[Const("Z32",CTy"Zsize"), 3481 Var("dst",CTy"Zreg")])]), 3482 Apply 3483 (Call 3484 ("process_float_flags",ATy(qTy,qTy), 3485 LL[TP[LF,Var("f",fTy)]]),qVar"state")))))))) 3486; 3487val dfn'CVTSD2SS_def = Def 3488 ("dfn'CVTSD2SS",TP[Var("dst",FTy 3),Var("src",CTy"xmm_mem")], 3489 Close 3490 (qVar"state", 3491 Let(Var("q",F64), 3492 EX(Apply 3493 (Call("XMM",ATy(qTy,FTy 128),Var("src",CTy"xmm_mem")), 3494 qVar"state"),LN 63,LN 0,F64), 3495 Let(TP[Var("f",fTy),Var("r",F32)], 3496 Mop(FP64To32_, 3497 TP[Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state"), 3498 Var("q",F64)]), 3499 Let(Var("x",CTy"xmm_mem"), 3500 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 3501 Let(TP[Var("v",FTy 128),qVar"s"], 3502 Let(qVar"s0", 3503 Apply 3504 (Call 3505 ("process_float_flags",ATy(qTy,qTy), 3506 LL[TP[Mop(FPIsSubnormal 64,Var("q",F64)), 3507 Var("f",fTy)]]),qVar"state"), 3508 TP[Apply 3509 (Call 3510 ("XMM",ATy(qTy,FTy 128), 3511 Var("x",CTy"xmm_mem")),qVar"s0"), 3512 qVar"s0"]), 3513 Apply 3514 (Call 3515 ("write'XMM",ATy(qTy,qTy), 3516 TP[BFI(LN 31,LN 0,Var("r",F32), 3517 Var("v",FTy 128)),Var("x",CTy"xmm_mem")]), 3518 qVar"s"))))))) 3519; 3520val dfn'CVTSI2SD_def = Def 3521 ("dfn'CVTSI2SD",TP[bVar"quad",Var("dst",FTy 3),Var("src",CTy"Zrm")], 3522 Close 3523 (qVar"state", 3524 Let(TP[Var("f",fTy),Var("q",F64)], 3525 Call 3526 ("sse_from_int64",PTy(fTy,F64), 3527 TP[Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state"), 3528 Apply 3529 (Call 3530 ("EA",ATy(qTy,F64), 3531 Apply 3532 (Call 3533 ("ea_Zrm",ATy(qTy,CTy"Zea"), 3534 TP[ITE(bVar"quad",Const("Z64",CTy"Zsize"), 3535 Const("Z32",CTy"Zsize")), 3536 Var("src",CTy"Zrm")]),qVar"state")), 3537 qVar"state")]), 3538 Let(Var("x",CTy"xmm_mem"), 3539 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 3540 Let(TP[Var("v",FTy 128),qVar"s"], 3541 Let(qVar"s0", 3542 Apply 3543 (Call 3544 ("process_float_flags",ATy(qTy,qTy), 3545 LL[TP[LF,Var("f",fTy)]]),qVar"state"), 3546 TP[Apply 3547 (Call 3548 ("XMM",ATy(qTy,FTy 128), 3549 Var("x",CTy"xmm_mem")),qVar"s0"),qVar"s0"]), 3550 Apply 3551 (Call 3552 ("write'XMM",ATy(qTy,qTy), 3553 TP[BFI(LN 63,LN 0,Var("q",F64),Var("v",FTy 128)), 3554 Var("x",CTy"xmm_mem")]),qVar"s")))))) 3555; 3556val dfn'CVTSI2SS_def = Def 3557 ("dfn'CVTSI2SS",TP[bVar"quad",Var("dst",FTy 3),Var("src",CTy"Zrm")], 3558 Close 3559 (qVar"state", 3560 Let(TP[Var("f",fTy),Var("d",F32)], 3561 Call 3562 ("sse_from_int32",PTy(fTy,F32), 3563 TP[Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state"), 3564 Apply 3565 (Call 3566 ("EA",ATy(qTy,F64), 3567 Apply 3568 (Call 3569 ("ea_Zrm",ATy(qTy,CTy"Zea"), 3570 TP[ITE(bVar"quad",Const("Z64",CTy"Zsize"), 3571 Const("Z32",CTy"Zsize")), 3572 Var("src",CTy"Zrm")]),qVar"state")), 3573 qVar"state")]), 3574 Let(Var("x",CTy"xmm_mem"), 3575 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 3576 Let(TP[Var("v",FTy 128),qVar"s"], 3577 Let(qVar"s0", 3578 Apply 3579 (Call 3580 ("process_float_flags",ATy(qTy,qTy), 3581 LL[TP[LF,Var("f",fTy)]]),qVar"state"), 3582 TP[Apply 3583 (Call 3584 ("XMM",ATy(qTy,FTy 128), 3585 Var("x",CTy"xmm_mem")),qVar"s0"),qVar"s0"]), 3586 Apply 3587 (Call 3588 ("write'XMM",ATy(qTy,qTy), 3589 TP[BFI(LN 31,LN 0,Var("d",F32),Var("v",FTy 128)), 3590 Var("x",CTy"xmm_mem")]),qVar"s")))))) 3591; 3592val dfn'CVTSS2SD_def = Def 3593 ("dfn'CVTSS2SD",TP[Var("dst",FTy 3),Var("src",CTy"xmm_mem")], 3594 Close 3595 (qVar"state", 3596 Let(Var("d",F32), 3597 EX(Apply 3598 (Call("XMM",ATy(qTy,FTy 128),Var("src",CTy"xmm_mem")), 3599 qVar"state"),LN 31,LN 0,F32), 3600 Let(Var("x",CTy"xmm_mem"), 3601 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 3602 Let(TP[Var("v",FTy 128),qVar"s"], 3603 Let(qVar"s0", 3604 Apply 3605 (Call 3606 ("process_float_flags",ATy(qTy,qTy), 3607 LL[TP[Mop(FPIsSubnormal 32,Var("d",F32)), 3608 Call 3609 ("initial_ieee_flags",fTy, 3610 Mop(FPIsSignallingNan 32,Var("d",F32)))]]), 3611 qVar"state"), 3612 TP[Apply 3613 (Call 3614 ("XMM",ATy(qTy,FTy 128), 3615 Var("x",CTy"xmm_mem")),qVar"s0"),qVar"s0"]), 3616 Apply 3617 (Call 3618 ("write'XMM",ATy(qTy,qTy), 3619 TP[BFI(LN 63,LN 0,Mop(FP32To64,Var("d",F32)), 3620 Var("v",FTy 128)),Var("x",CTy"xmm_mem")]), 3621 qVar"s")))))) 3622; 3623val dfn'CVTSS2SI_def = Def 3624 ("dfn'CVTSS2SI", 3625 TP[bVar"truncate",bVar"quad",Var("dst",CTy"Zreg"), 3626 Var("src",CTy"xmm_mem")], 3627 Close 3628 (qVar"state", 3629 Let(Var("d",F32), 3630 EX(Apply 3631 (Call("XMM",ATy(qTy,FTy 128),Var("src",CTy"xmm_mem")), 3632 qVar"state"),LN 31,LN 0,F32), 3633 Let(Var("v",rTy), 3634 ITE(bVar"truncate",binary_ieeeSyntax.roundTowardZero_tm, 3635 Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state")), 3636 ITE(bVar"quad", 3637 Let(TP[Var("f",fTy),Var("w",F64)], 3638 Call 3639 ("sse_to_int32",PTy(fTy,F64), 3640 TP[Var("v",rTy),Var("d",F32)]), 3641 Apply 3642 (Call 3643 ("write'EA",ATy(qTy,qTy), 3644 TP[Var("w",F64), 3645 Call 3646 ("Zea_r",CTy"Zea", 3647 TP[Const("Z64",CTy"Zsize"), 3648 Var("dst",CTy"Zreg")])]), 3649 Apply 3650 (Call 3651 ("process_float_flags",ATy(qTy,qTy), 3652 LL[TP[LF,Var("f",fTy)]]),qVar"state"))), 3653 Let(TP[Var("f",fTy),Var("w",F32)], 3654 Call 3655 ("sse_to_int32",PTy(fTy,F32), 3656 TP[Var("v",rTy),Var("d",F32)]), 3657 Apply 3658 (Call 3659 ("write'EA",ATy(qTy,qTy), 3660 TP[Mop(Cast F64,Var("w",F32)), 3661 Call 3662 ("Zea_r",CTy"Zea", 3663 TP[Const("Z32",CTy"Zsize"), 3664 Var("dst",CTy"Zreg")])]), 3665 Apply 3666 (Call 3667 ("process_float_flags",ATy(qTy,qTy), 3668 LL[TP[LF,Var("f",fTy)]]),qVar"state")))))))) 3669; 3670val dfn'MOVAP_D_S_def = Def 3671 ("dfn'MOVAP_D_S", 3672 TP[bVar"double",Var("dst",CTy"xmm_mem"),Var("src",CTy"xmm_mem")], 3673 Close 3674 (qVar"state", 3675 Let(TP[Var("v",FTy 128),qVar"s"], 3676 Let(qVar"s", 3677 Apply 3678 (Call 3679 ("CheckAlignedXMM",ATy(qTy,qTy), 3680 TP[Var("src",CTy"xmm_mem"),LN 4]), 3681 Apply 3682 (Call 3683 ("CheckAlignedXMM",ATy(qTy,qTy), 3684 TP[Var("dst",CTy"xmm_mem"),LN 4]),qVar"state")), 3685 TP[Apply 3686 (Call("XMM",ATy(qTy,FTy 128),Var("src",CTy"xmm_mem")), 3687 qVar"s"),qVar"s"]), 3688 Apply 3689 (Call 3690 ("write'XMM",ATy(qTy,qTy), 3691 TP[Var("v",FTy 128),Var("dst",CTy"xmm_mem")]),qVar"s")))) 3692; 3693val dfn'MOVUP_D_S_def = Def 3694 ("dfn'MOVUP_D_S", 3695 TP[bVar"double",Var("dst",CTy"xmm_mem"),Var("src",CTy"xmm_mem")], 3696 Close 3697 (qVar"state", 3698 Apply 3699 (Call 3700 ("write'XMM",ATy(qTy,qTy), 3701 TP[Apply 3702 (Call("XMM",ATy(qTy,FTy 128),Var("src",CTy"xmm_mem")), 3703 qVar"state"),Var("dst",CTy"xmm_mem")]),qVar"state"))) 3704; 3705val dfn'MOV_D_Q_def = Def 3706 ("dfn'MOV_D_Q", 3707 TP[bVar"to_xmm",bVar"quad",Var("xmm",FTy 3),Var("rm",CTy"Zrm")], 3708 Close 3709 (qVar"state", 3710 CS(TP[bVar"to_xmm",bVar"quad"], 3711 [(TP[LF,LF], 3712 Apply 3713 (Call 3714 ("write'EA",ATy(qTy,qTy), 3715 TP[Mop(Cast F64, 3716 EX(Apply 3717 (Call 3718 ("XMM",ATy(qTy,FTy 128), 3719 Call 3720 ("xmm_reg",CTy"xmm_mem", 3721 Var("xmm",FTy 3))),qVar"state"),LN 31, 3722 LN 0,F32)), 3723 Apply 3724 (Call 3725 ("ea_Zrm",ATy(qTy,CTy"Zea"), 3726 TP[Const("Z32",CTy"Zsize"),Var("rm",CTy"Zrm")]), 3727 qVar"state")]),qVar"state")), 3728 (TP[LF,LT], 3729 Apply 3730 (Call 3731 ("write'EA",ATy(qTy,qTy), 3732 TP[EX(Apply 3733 (Call 3734 ("XMM",ATy(qTy,FTy 128), 3735 Call("xmm_reg",CTy"xmm_mem",Var("xmm",FTy 3))), 3736 qVar"state"),LN 63,LN 0,F64), 3737 Apply 3738 (Call 3739 ("ea_Zrm",ATy(qTy,CTy"Zea"), 3740 TP[Const("Z64",CTy"Zsize"),Var("rm",CTy"Zrm")]), 3741 qVar"state")]),qVar"state")), 3742 (TP[LT,LF], 3743 Apply 3744 (Call 3745 ("write'XMM",ATy(qTy,qTy), 3746 TP[Mop(Cast(FTy 128), 3747 EX(Apply 3748 (Call 3749 ("EA",ATy(qTy,F64), 3750 Apply 3751 (Call 3752 ("ea_Zrm",ATy(qTy,CTy"Zea"), 3753 TP[Const("Z32",CTy"Zsize"), 3754 Var("rm",CTy"Zrm")]),qVar"state")), 3755 qVar"state"),LN 31,LN 0,F32)), 3756 Call("xmm_reg",CTy"xmm_mem",Var("xmm",FTy 3))]), 3757 qVar"state")), 3758 (TP[LT,LT], 3759 Apply 3760 (Call 3761 ("write'XMM",ATy(qTy,qTy), 3762 TP[Mop(Cast(FTy 128), 3763 Apply 3764 (Call 3765 ("EA",ATy(qTy,F64), 3766 Apply 3767 (Call 3768 ("ea_Zrm",ATy(qTy,CTy"Zea"), 3769 TP[Const("Z64",CTy"Zsize"), 3770 Var("rm",CTy"Zrm")]),qVar"state")), 3771 qVar"state")), 3772 Call("xmm_reg",CTy"xmm_mem",Var("xmm",FTy 3))]), 3773 qVar"state"))]))) 3774; 3775val dfn'MOVQ_def = Def 3776 ("dfn'MOVQ",TP[Var("dst",CTy"xmm_mem"),Var("src",CTy"xmm_mem")], 3777 Close 3778 (qVar"state", 3779 CS(Var("dst",CTy"xmm_mem"), 3780 [(Call("xmm_reg",CTy"xmm_mem",AVar(FTy 3)), 3781 Apply 3782 (Call 3783 ("write'XMM",ATy(qTy,qTy), 3784 TP[Mop(Cast(FTy 128), 3785 EX(Apply 3786 (Call 3787 ("XMM",ATy(qTy,FTy 128), 3788 Var("src",CTy"xmm_mem")),qVar"state"), 3789 LN 63,LN 0,F64)),Var("dst",CTy"xmm_mem")]), 3790 qVar"state")), 3791 (Call 3792 ("xmm_mem",CTy"xmm_mem", 3793 Var("m",PTy(OTy(PTy(FTy 2,CTy"Zreg")),PTy(CTy"Zbase",F64)))), 3794 Apply 3795 (Call 3796 ("write'EA",ATy(qTy,qTy), 3797 TP[EX(Apply 3798 (Call 3799 ("XMM",ATy(qTy,FTy 128), 3800 Var("src",CTy"xmm_mem")),qVar"state"),LN 63, 3801 LN 0,F64), 3802 Apply 3803 (Call 3804 ("ea_Zrm",ATy(qTy,CTy"Zea"), 3805 TP[Const("Z64",CTy"Zsize"), 3806 Call 3807 ("Zm",CTy"Zrm", 3808 Var("m", 3809 PTy(OTy(PTy(FTy 2,CTy"Zreg")), 3810 PTy(CTy"Zbase",F64))))]), 3811 qVar"state")]),qVar"state"))]))) 3812; 3813val dfn'MOVSD_def = Def 3814 ("dfn'MOVSD",TP[Var("dst",CTy"xmm_mem"),Var("src",CTy"xmm_mem")], 3815 Close 3816 (qVar"state", 3817 CS(Var("src",CTy"xmm_mem"), 3818 [(Call("xmm_reg",CTy"xmm_mem",AVar(FTy 3)), 3819 Apply 3820 (Call 3821 ("write'XMM",ATy(qTy,qTy), 3822 TP[BFI(LN 63,LN 0, 3823 EX(Apply 3824 (Call 3825 ("XMM",ATy(qTy,FTy 128), 3826 Var("src",CTy"xmm_mem")),qVar"state"), 3827 LN 63,LN 0,F64), 3828 Apply 3829 (Call 3830 ("XMM",ATy(qTy,FTy 128), 3831 Var("dst",CTy"xmm_mem")),qVar"state")), 3832 Var("dst",CTy"xmm_mem")]),qVar"state")), 3833 (Call 3834 ("xmm_mem",CTy"xmm_mem", 3835 AVar(PTy(OTy(PTy(FTy 2,CTy"Zreg")),PTy(CTy"Zbase",F64)))), 3836 Apply 3837 (Call 3838 ("write'XMM",ATy(qTy,qTy), 3839 TP[Mop(Cast(FTy 128), 3840 EX(Apply 3841 (Call 3842 ("XMM",ATy(qTy,FTy 128), 3843 Var("src",CTy"xmm_mem")),qVar"state"), 3844 LN 63,LN 0,F64)),Var("dst",CTy"xmm_mem")]), 3845 qVar"state"))]))) 3846; 3847val dfn'MOVSS_def = Def 3848 ("dfn'MOVSS",TP[Var("dst",CTy"xmm_mem"),Var("src",CTy"xmm_mem")], 3849 Close 3850 (qVar"state", 3851 CS(Var("src",CTy"xmm_mem"), 3852 [(Call("xmm_reg",CTy"xmm_mem",AVar(FTy 3)), 3853 Apply 3854 (Call 3855 ("write'XMM",ATy(qTy,qTy), 3856 TP[BFI(LN 31,LN 0, 3857 EX(Apply 3858 (Call 3859 ("XMM",ATy(qTy,FTy 128), 3860 Var("src",CTy"xmm_mem")),qVar"state"), 3861 LN 31,LN 0,F32), 3862 Apply 3863 (Call 3864 ("XMM",ATy(qTy,FTy 128), 3865 Var("dst",CTy"xmm_mem")),qVar"state")), 3866 Var("dst",CTy"xmm_mem")]),qVar"state")), 3867 (Call 3868 ("xmm_mem",CTy"xmm_mem", 3869 AVar(PTy(OTy(PTy(FTy 2,CTy"Zreg")),PTy(CTy"Zbase",F64)))), 3870 Apply 3871 (Call 3872 ("write'XMM",ATy(qTy,qTy), 3873 TP[Mop(Cast(FTy 128), 3874 EX(Apply 3875 (Call 3876 ("XMM",ATy(qTy,FTy 128), 3877 Var("src",CTy"xmm_mem")),qVar"state"), 3878 LN 31,LN 0,F32)),Var("dst",CTy"xmm_mem")]), 3879 qVar"state"))]))) 3880; 3881val dfn'PCMPEQQ_def = Def 3882 ("dfn'PCMPEQQ",TP[Var("dst",FTy 3),Var("src",CTy"xmm_mem")], 3883 Close 3884 (qVar"state", 3885 Let(Var("dst",CTy"xmm_mem"), 3886 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 3887 Let(Var("v",FTy 128), 3888 Apply 3889 (Call("XMM",ATy(qTy,FTy 128),Var("dst",CTy"xmm_mem")), 3890 qVar"state"), 3891 Let(Var("v0",FTy 128), 3892 Apply 3893 (Call("XMM",ATy(qTy,FTy 128),Var("src",CTy"xmm_mem")), 3894 qVar"state"), 3895 Apply 3896 (Call 3897 ("write'XMM",ATy(qTy,qTy), 3898 TP[CC[ITE(EQ(EX(Var("v",FTy 128),LN 127,LN 64,F64), 3899 EX(Var("v0",FTy 128),LN 127,LN 64,F64)), 3900 Mop(Neg,LW(1,64)),LW(0,64)), 3901 ITE(EQ(EX(Var("v",FTy 128),LN 63,LN 0,F64), 3902 EX(Var("v0",FTy 128),LN 63,LN 0,F64)), 3903 Mop(Neg,LW(1,64)),LW(0,64))], 3904 Var("dst",CTy"xmm_mem")]),qVar"state")))))) 3905; 3906val dfn'PSLLDQ_def = Def 3907 ("dfn'PSLLDQ",TP[Var("dst",FTy 3),Var("imm",F8)], 3908 Close 3909 (qVar"state", 3910 Let(Var("dst",CTy"xmm_mem"), 3911 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 3912 Apply 3913 (Call 3914 ("write'XMM",ATy(qTy,qTy), 3915 TP[Bop(Lsl, 3916 Apply 3917 (Call 3918 ("XMM",ATy(qTy,FTy 128), 3919 Var("dst",CTy"xmm_mem")),qVar"state"), 3920 Bop(Mul, 3921 Mop(Min,TP[LN 16,Mop(Cast nTy,Var("imm",F8))]), 3922 LN 8)),Var("dst",CTy"xmm_mem")]),qVar"state")))) 3923; 3924val dfn'PSLLD_imm_def = Def 3925 ("dfn'PSLLD_imm",TP[Var("dst",FTy 3),Var("imm",F8)], 3926 Close 3927 (qVar"state", 3928 Let(Var("dst",CTy"xmm_mem"), 3929 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 3930 Let(Var("v",FTy 128), 3931 Apply 3932 (Call("XMM",ATy(qTy,FTy 128),Var("dst",CTy"xmm_mem")), 3933 qVar"state"), 3934 Let(nVar"i",Mop(Cast nTy,Var("imm",F8)), 3935 Apply 3936 (Call 3937 ("write'XMM",ATy(qTy,qTy), 3938 TP[CC[Bop(Lsl, 3939 EX(Var("v",FTy 128),LN 127,LN 96,F32), 3940 nVar"i"), 3941 Bop(Lsl, 3942 EX(Var("v",FTy 128),LN 95,LN 64,F32), 3943 nVar"i"), 3944 Bop(Lsl, 3945 EX(Var("v",FTy 128),LN 63,LN 32,F32), 3946 nVar"i"), 3947 Bop(Lsl,EX(Var("v",FTy 128),LN 31,LN 0,F32), 3948 nVar"i")],Var("dst",CTy"xmm_mem")]), 3949 qVar"state")))))) 3950; 3951val dfn'PSLLQ_imm_def = Def 3952 ("dfn'PSLLQ_imm",TP[Var("dst",FTy 3),Var("imm",F8)], 3953 Close 3954 (qVar"state", 3955 Let(Var("dst",CTy"xmm_mem"), 3956 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 3957 Let(Var("v",FTy 128), 3958 Apply 3959 (Call("XMM",ATy(qTy,FTy 128),Var("dst",CTy"xmm_mem")), 3960 qVar"state"), 3961 Let(nVar"i",Mop(Cast nTy,Var("imm",F8)), 3962 Apply 3963 (Call 3964 ("write'XMM",ATy(qTy,qTy), 3965 TP[CC[Bop(Lsl, 3966 EX(Var("v",FTy 128),LN 127,LN 64,F64), 3967 nVar"i"), 3968 Bop(Lsl,EX(Var("v",FTy 128),LN 63,LN 0,F64), 3969 nVar"i")],Var("dst",CTy"xmm_mem")]), 3970 qVar"state")))))) 3971; 3972val dfn'PSLLW_imm_def = Def 3973 ("dfn'PSLLW_imm",TP[Var("dst",FTy 3),Var("imm",F8)], 3974 Close 3975 (qVar"state", 3976 Let(Var("dst",CTy"xmm_mem"), 3977 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 3978 Let(Var("v",FTy 128), 3979 Apply 3980 (Call("XMM",ATy(qTy,FTy 128),Var("dst",CTy"xmm_mem")), 3981 qVar"state"), 3982 Let(nVar"i",Mop(Cast nTy,Var("imm",F8)), 3983 Apply 3984 (Call 3985 ("write'XMM",ATy(qTy,qTy), 3986 TP[CC[Bop(Lsl, 3987 EX(Var("v",FTy 128),LN 127,LN 112,F16), 3988 nVar"i"), 3989 Bop(Lsl, 3990 EX(Var("v",FTy 128),LN 111,LN 96,F16), 3991 nVar"i"), 3992 Bop(Lsl, 3993 EX(Var("v",FTy 128),LN 95,LN 80,F16), 3994 nVar"i"), 3995 Bop(Lsl, 3996 EX(Var("v",FTy 128),LN 79,LN 64,F16), 3997 nVar"i"), 3998 Bop(Lsl, 3999 EX(Var("v",FTy 128),LN 63,LN 48,F16), 4000 nVar"i"), 4001 Bop(Lsl, 4002 EX(Var("v",FTy 128),LN 47,LN 32,F16), 4003 nVar"i"), 4004 Bop(Lsl, 4005 EX(Var("v",FTy 128),LN 31,LN 16,F16), 4006 nVar"i"), 4007 Bop(Lsl,EX(Var("v",FTy 128),LN 15,LN 0,F16), 4008 nVar"i")],Var("dst",CTy"xmm_mem")]), 4009 qVar"state")))))) 4010; 4011val dfn'PSRAD_imm_def = Def 4012 ("dfn'PSRAD_imm",TP[Var("dst",FTy 3),Var("imm",F8)], 4013 Close 4014 (qVar"state", 4015 Let(Var("dst",CTy"xmm_mem"), 4016 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 4017 Let(Var("v",FTy 128), 4018 Apply 4019 (Call("XMM",ATy(qTy,FTy 128),Var("dst",CTy"xmm_mem")), 4020 qVar"state"), 4021 Let(nVar"i",Mop(Cast nTy,Var("imm",F8)), 4022 Apply 4023 (Call 4024 ("write'XMM",ATy(qTy,qTy), 4025 TP[CC[Bop(Asr, 4026 EX(Var("v",FTy 128),LN 127,LN 96,F32), 4027 nVar"i"), 4028 Bop(Asr, 4029 EX(Var("v",FTy 128),LN 95,LN 64,F32), 4030 nVar"i"), 4031 Bop(Asr, 4032 EX(Var("v",FTy 128),LN 63,LN 32,F32), 4033 nVar"i"), 4034 Bop(Asr,EX(Var("v",FTy 128),LN 31,LN 0,F32), 4035 nVar"i")],Var("dst",CTy"xmm_mem")]), 4036 qVar"state")))))) 4037; 4038val dfn'PSRAW_imm_def = Def 4039 ("dfn'PSRAW_imm",TP[Var("dst",FTy 3),Var("imm",F8)], 4040 Close 4041 (qVar"state", 4042 Let(Var("dst",CTy"xmm_mem"), 4043 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 4044 Let(Var("v",FTy 128), 4045 Apply 4046 (Call("XMM",ATy(qTy,FTy 128),Var("dst",CTy"xmm_mem")), 4047 qVar"state"), 4048 Let(nVar"i",Mop(Cast nTy,Var("imm",F8)), 4049 Apply 4050 (Call 4051 ("write'XMM",ATy(qTy,qTy), 4052 TP[CC[Bop(Asr, 4053 EX(Var("v",FTy 128),LN 127,LN 112,F16), 4054 nVar"i"), 4055 Bop(Asr, 4056 EX(Var("v",FTy 128),LN 111,LN 96,F16), 4057 nVar"i"), 4058 Bop(Asr, 4059 EX(Var("v",FTy 128),LN 95,LN 80,F16), 4060 nVar"i"), 4061 Bop(Asr, 4062 EX(Var("v",FTy 128),LN 79,LN 64,F16), 4063 nVar"i"), 4064 Bop(Asr, 4065 EX(Var("v",FTy 128),LN 63,LN 48,F16), 4066 nVar"i"), 4067 Bop(Asr, 4068 EX(Var("v",FTy 128),LN 47,LN 32,F16), 4069 nVar"i"), 4070 Bop(Asr, 4071 EX(Var("v",FTy 128),LN 31,LN 16,F16), 4072 nVar"i"), 4073 Bop(Asr,EX(Var("v",FTy 128),LN 15,LN 0,F16), 4074 nVar"i")],Var("dst",CTy"xmm_mem")]), 4075 qVar"state")))))) 4076; 4077val dfn'PSRLDQ_def = Def 4078 ("dfn'PSRLDQ",TP[Var("dst",FTy 3),Var("imm",F8)], 4079 Close 4080 (qVar"state", 4081 Let(Var("dst",CTy"xmm_mem"), 4082 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 4083 Apply 4084 (Call 4085 ("write'XMM",ATy(qTy,qTy), 4086 TP[Bop(Lsr, 4087 Apply 4088 (Call 4089 ("XMM",ATy(qTy,FTy 128), 4090 Var("dst",CTy"xmm_mem")),qVar"state"), 4091 Bop(Mul, 4092 Mop(Min,TP[LN 16,Mop(Cast nTy,Var("imm",F8))]), 4093 LN 8)),Var("dst",CTy"xmm_mem")]),qVar"state")))) 4094; 4095val dfn'PSRLD_imm_def = Def 4096 ("dfn'PSRLD_imm",TP[Var("dst",FTy 3),Var("imm",F8)], 4097 Close 4098 (qVar"state", 4099 Let(Var("dst",CTy"xmm_mem"), 4100 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 4101 Let(Var("v",FTy 128), 4102 Apply 4103 (Call("XMM",ATy(qTy,FTy 128),Var("dst",CTy"xmm_mem")), 4104 qVar"state"), 4105 Let(nVar"i",Mop(Cast nTy,Var("imm",F8)), 4106 Apply 4107 (Call 4108 ("write'XMM",ATy(qTy,qTy), 4109 TP[CC[Bop(Lsr, 4110 EX(Var("v",FTy 128),LN 127,LN 96,F32), 4111 nVar"i"), 4112 Bop(Lsr, 4113 EX(Var("v",FTy 128),LN 95,LN 64,F32), 4114 nVar"i"), 4115 Bop(Lsr, 4116 EX(Var("v",FTy 128),LN 63,LN 32,F32), 4117 nVar"i"), 4118 Bop(Lsr,EX(Var("v",FTy 128),LN 31,LN 0,F32), 4119 nVar"i")],Var("dst",CTy"xmm_mem")]), 4120 qVar"state")))))) 4121; 4122val dfn'PSRLQ_imm_def = Def 4123 ("dfn'PSRLQ_imm",TP[Var("dst",FTy 3),Var("imm",F8)], 4124 Close 4125 (qVar"state", 4126 Let(Var("dst",CTy"xmm_mem"), 4127 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 4128 Let(Var("v",FTy 128), 4129 Apply 4130 (Call("XMM",ATy(qTy,FTy 128),Var("dst",CTy"xmm_mem")), 4131 qVar"state"), 4132 Let(nVar"i",Mop(Cast nTy,Var("imm",F8)), 4133 Apply 4134 (Call 4135 ("write'XMM",ATy(qTy,qTy), 4136 TP[CC[Bop(Lsr, 4137 EX(Var("v",FTy 128),LN 127,LN 64,F64), 4138 nVar"i"), 4139 Bop(Lsr,EX(Var("v",FTy 128),LN 63,LN 0,F64), 4140 nVar"i")],Var("dst",CTy"xmm_mem")]), 4141 qVar"state")))))) 4142; 4143val dfn'PSRLW_imm_def = Def 4144 ("dfn'PSRLW_imm",TP[Var("dst",FTy 3),Var("imm",F8)], 4145 Close 4146 (qVar"state", 4147 Let(Var("dst",CTy"xmm_mem"), 4148 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 4149 Let(Var("v",FTy 128), 4150 Apply 4151 (Call("XMM",ATy(qTy,FTy 128),Var("dst",CTy"xmm_mem")), 4152 qVar"state"), 4153 Let(nVar"i",Mop(Cast nTy,Var("imm",F8)), 4154 Apply 4155 (Call 4156 ("write'XMM",ATy(qTy,qTy), 4157 TP[CC[Bop(Lsr, 4158 EX(Var("v",FTy 128),LN 127,LN 112,F16), 4159 nVar"i"), 4160 Bop(Lsr, 4161 EX(Var("v",FTy 128),LN 111,LN 96,F16), 4162 nVar"i"), 4163 Bop(Lsr, 4164 EX(Var("v",FTy 128),LN 95,LN 80,F16), 4165 nVar"i"), 4166 Bop(Lsr, 4167 EX(Var("v",FTy 128),LN 79,LN 64,F16), 4168 nVar"i"), 4169 Bop(Lsr, 4170 EX(Var("v",FTy 128),LN 63,LN 48,F16), 4171 nVar"i"), 4172 Bop(Lsr, 4173 EX(Var("v",FTy 128),LN 47,LN 32,F16), 4174 nVar"i"), 4175 Bop(Lsr, 4176 EX(Var("v",FTy 128),LN 31,LN 16,F16), 4177 nVar"i"), 4178 Bop(Lsr,EX(Var("v",FTy 128),LN 15,LN 0,F16), 4179 nVar"i")],Var("dst",CTy"xmm_mem")]), 4180 qVar"state")))))) 4181; 4182val dfn'SQRTPD_def = Def 4183 ("dfn'SQRTPD",TP[Var("dst",FTy 3),Var("src",CTy"xmm_mem")], 4184 Close 4185 (qVar"state", 4186 Let(Var("v",FTy 128), 4187 Apply 4188 (Call("XMM",ATy(qTy,FTy 128),Var("src",CTy"xmm_mem")), 4189 qVar"state"), 4190 Let(TP[Var("f1",PTy(bTy,fTy)),Var("r1",F64)], 4191 Apply 4192 (Call 4193 ("sse_sqrt64",ATy(qTy,PTy(PTy(bTy,fTy),F64)), 4194 EX(Var("v",FTy 128),LN 127,LN 64,F64)),qVar"state"), 4195 Let(TP[Var("f2",PTy(bTy,fTy)),Var("r2",F64)], 4196 Apply 4197 (Call 4198 ("sse_sqrt64",ATy(qTy,PTy(PTy(bTy,fTy),F64)), 4199 EX(Var("v",FTy 128),LN 63,LN 0,F64)),qVar"state"), 4200 Apply 4201 (Call 4202 ("write'XMM",ATy(qTy,qTy), 4203 TP[CC[Var("r1",F64),Var("r2",F64)], 4204 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3))]), 4205 Apply 4206 (Call 4207 ("process_float_flags",ATy(qTy,qTy), 4208 LL[Var("f1",PTy(bTy,fTy)), 4209 Var("f2",PTy(bTy,fTy))]),qVar"state"))))))) 4210; 4211val dfn'SQRTSD_def = Def 4212 ("dfn'SQRTSD",TP[Var("dst",FTy 3),Var("src",CTy"xmm_mem")], 4213 Close 4214 (qVar"state", 4215 Let(TP[Var("f",PTy(bTy,fTy)),Var("r",F64)], 4216 Apply 4217 (Call 4218 ("sse_sqrt64",ATy(qTy,PTy(PTy(bTy,fTy),F64)), 4219 EX(Apply 4220 (Call("XMM",ATy(qTy,FTy 128),Var("src",CTy"xmm_mem")), 4221 qVar"state"),LN 63,LN 0,F64)),qVar"state"), 4222 Let(Var("x",CTy"xmm_mem"), 4223 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 4224 Let(TP[Var("v",FTy 128),qVar"s"], 4225 Let(qVar"s0", 4226 Apply 4227 (Call 4228 ("process_float_flags",ATy(qTy,qTy), 4229 LL[Var("f",PTy(bTy,fTy))]),qVar"state"), 4230 TP[Apply 4231 (Call 4232 ("XMM",ATy(qTy,FTy 128), 4233 Var("x",CTy"xmm_mem")),qVar"s0"),qVar"s0"]), 4234 Apply 4235 (Call 4236 ("write'XMM",ATy(qTy,qTy), 4237 TP[BFI(LN 63,LN 0,Var("r",F64),Var("v",FTy 128)), 4238 Var("x",CTy"xmm_mem")]),qVar"s")))))) 4239; 4240val dfn'SQRTPS_def = Def 4241 ("dfn'SQRTPS",TP[Var("dst",FTy 3),Var("src",CTy"xmm_mem")], 4242 Close 4243 (qVar"state", 4244 Let(Var("v",FTy 128), 4245 Apply 4246 (Call("XMM",ATy(qTy,FTy 128),Var("src",CTy"xmm_mem")), 4247 qVar"state"), 4248 Let(TP[Var("f1",PTy(bTy,fTy)),Var("r1",F32)], 4249 Apply 4250 (Call 4251 ("sse_sqrt32",ATy(qTy,PTy(PTy(bTy,fTy),F32)), 4252 EX(Var("v",FTy 128),LN 127,LN 96,F32)),qVar"state"), 4253 Let(TP[Var("f2",PTy(bTy,fTy)),Var("r2",F32)], 4254 Apply 4255 (Call 4256 ("sse_sqrt32",ATy(qTy,PTy(PTy(bTy,fTy),F32)), 4257 EX(Var("v",FTy 128),LN 95,LN 64,F32)),qVar"state"), 4258 Let(TP[Var("f3",PTy(bTy,fTy)),Var("r3",F32)], 4259 Apply 4260 (Call 4261 ("sse_sqrt32",ATy(qTy,PTy(PTy(bTy,fTy),F32)), 4262 EX(Var("v",FTy 128),LN 63,LN 32,F32)), 4263 qVar"state"), 4264 Let(TP[Var("f4",PTy(bTy,fTy)),Var("r4",F32)], 4265 Apply 4266 (Call 4267 ("sse_sqrt32", 4268 ATy(qTy,PTy(PTy(bTy,fTy),F32)), 4269 EX(Var("v",FTy 128),LN 31,LN 0,F32)), 4270 qVar"state"), 4271 Apply 4272 (Call 4273 ("write'XMM",ATy(qTy,qTy), 4274 TP[CC[Var("r1",F32),Var("r2",F32), 4275 Var("r3",F32),Var("r4",F32)], 4276 Call 4277 ("xmm_reg",CTy"xmm_mem", 4278 Var("dst",FTy 3))]), 4279 Apply 4280 (Call 4281 ("process_float_flags",ATy(qTy,qTy), 4282 LL[Var("f1",PTy(bTy,fTy)), 4283 Var("f2",PTy(bTy,fTy)), 4284 Var("f3",PTy(bTy,fTy)), 4285 Var("f4",PTy(bTy,fTy))]),qVar"state"))))))))) 4286; 4287val dfn'SQRTSS_def = Def 4288 ("dfn'SQRTSS",TP[Var("dst",FTy 3),Var("src",CTy"xmm_mem")], 4289 Close 4290 (qVar"state", 4291 Let(TP[Var("f",PTy(bTy,fTy)),Var("r",F32)], 4292 Apply 4293 (Call 4294 ("sse_sqrt32",ATy(qTy,PTy(PTy(bTy,fTy),F32)), 4295 EX(Apply 4296 (Call("XMM",ATy(qTy,FTy 128),Var("src",CTy"xmm_mem")), 4297 qVar"state"),LN 31,LN 0,F32)),qVar"state"), 4298 Let(Var("x",CTy"xmm_mem"), 4299 Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 4300 Let(TP[Var("v",FTy 128),qVar"s"], 4301 Let(qVar"s0", 4302 Apply 4303 (Call 4304 ("process_float_flags",ATy(qTy,qTy), 4305 LL[Var("f",PTy(bTy,fTy))]),qVar"state"), 4306 TP[Apply 4307 (Call 4308 ("XMM",ATy(qTy,FTy 128), 4309 Var("x",CTy"xmm_mem")),qVar"s0"),qVar"s0"]), 4310 Apply 4311 (Call 4312 ("write'XMM",ATy(qTy,qTy), 4313 TP[BFI(LN 31,LN 0,Var("r",F32),Var("v",FTy 128)), 4314 Var("x",CTy"xmm_mem")]),qVar"s")))))) 4315; 4316val dfn'Zbinop_def = Def 4317 ("dfn'Zbinop", 4318 TP[Var("bop",CTy"Zbinop_name"),Var("size",CTy"Zsize"), 4319 Var("dst_src",CTy"Zdest_src")], 4320 Close 4321 (qVar"state", 4322 Let(TP[Var("ea",CTy"Zea"),Var("val_dst",F64),Var("val_src",F64)], 4323 Apply 4324 (Call 4325 ("read_dest_src_ea",ATy(qTy,PTy(CTy"Zea",PTy(F64,F64))), 4326 TP[Var("size",CTy"Zsize"),Var("dst_src",CTy"Zdest_src")]), 4327 qVar"state"), 4328 Apply 4329 (Call 4330 ("write_binop",ATy(qTy,qTy), 4331 TP[Var("size",CTy"Zsize"),Var("bop",CTy"Zbinop_name"), 4332 Var("val_dst",F64),Var("val_src",F64), 4333 Var("ea",CTy"Zea")]),qVar"state")))) 4334; 4335val dfn'Zbit_test_def = Def 4336 ("dfn'Zbit_test", 4337 TP[Var("bt",CTy"Zbit_test_name"),Var("size",CTy"Zsize"), 4338 Var("dst_src",CTy"Zdest_src")], 4339 Close 4340 (qVar"state", 4341 Let(Var("v",F64), 4342 Apply 4343 (Call 4344 ("EA",ATy(qTy,F64), 4345 Apply 4346 (Call 4347 ("ea_Zsrc",ATy(qTy,CTy"Zea"), 4348 TP[Var("size",CTy"Zsize"), 4349 Var("dst_src",CTy"Zdest_src")]),qVar"state")), 4350 qVar"state"), 4351 CS(Var("dst_src",CTy"Zdest_src"), 4352 [(Call("Zr_rm",CTy"Zdest_src",AVar(PTy(CTy"Zreg",CTy"Zrm"))), 4353 Apply(Const("UD_exception",ATy(qTy,qTy)),qVar"state")), 4354 (Call 4355 ("Zrm_r",CTy"Zdest_src", 4356 TP[Call("Zr",CTy"Zrm",AVar(CTy"Zreg")),AVar(CTy"Zreg")]), 4357 Apply 4358 (Call 4359 ("bit_test",ATy(qTy,qTy), 4360 TP[Var("bt",CTy"Zbit_test_name"), 4361 Apply 4362 (Call 4363 ("ea_Zdest",ATy(qTy,CTy"Zea"), 4364 TP[Var("size",CTy"Zsize"), 4365 Var("dst_src",CTy"Zdest_src")]), 4366 qVar"state"), 4367 Mop(Cast nTy, 4368 Call 4369 ("modSize",F64, 4370 TP[Var("size",CTy"Zsize"),Var("v",F64)]))]), 4371 qVar"state")), 4372 (Call 4373 ("Zrm_i",CTy"Zdest_src", 4374 TP[Call("Zr",CTy"Zrm",AVar(CTy"Zreg")),AVar F64]), 4375 Apply 4376 (Call 4377 ("bit_test",ATy(qTy,qTy), 4378 TP[Var("bt",CTy"Zbit_test_name"), 4379 Apply 4380 (Call 4381 ("ea_Zdest",ATy(qTy,CTy"Zea"), 4382 TP[Var("size",CTy"Zsize"), 4383 Var("dst_src",CTy"Zdest_src")]), 4384 qVar"state"), 4385 Mop(Cast nTy, 4386 Call 4387 ("modSize",F64, 4388 TP[Var("size",CTy"Zsize"),Var("v",F64)]))]), 4389 qVar"state")), 4390 (Call 4391 ("Zrm_i",CTy"Zdest_src", 4392 TP[Call 4393 ("Zm",CTy"Zrm", 4394 TP[Var("si",OTy(PTy(FTy 2,CTy"Zreg"))), 4395 Var("base",CTy"Zbase"),Var("disp",F64)]), 4396 AVar F64]), 4397 Let(Var("offset",F64), 4398 Call 4399 ("modSize",F64, 4400 TP[Var("size",CTy"Zsize"),Var("v",F64)]), 4401 Apply 4402 (Call 4403 ("bit_test",ATy(qTy,qTy), 4404 TP[Var("bt",CTy"Zbit_test_name"), 4405 Apply 4406 (Call 4407 ("ea_Zrm",ATy(qTy,CTy"Zea"), 4408 TP[Call("Z8",CTy"Zsize",LF), 4409 Call 4410 ("Zm",CTy"Zrm", 4411 TP[Var("si", 4412 OTy(PTy(FTy 2,CTy"Zreg"))), 4413 Var("base",CTy"Zbase"), 4414 Bop(Add,Var("disp",F64), 4415 Bop(SDiv,Var("offset",F64), 4416 LW(8,64)))])]), 4417 qVar"state"), 4418 Mop(Cast nTy, 4419 Bop(SMod,Var("offset",F64),LW(8,64)))]), 4420 qVar"state"))), 4421 (Call 4422 ("Zrm_r",CTy"Zdest_src", 4423 TP[Call 4424 ("Zm",CTy"Zrm", 4425 TP[Var("si",OTy(PTy(FTy 2,CTy"Zreg"))), 4426 Var("base",CTy"Zbase"),Var("disp",F64)]), 4427 AVar(CTy"Zreg")]), 4428 Let(TP[Var("v",F64),qVar"s"], 4429 Apply 4430 (Call 4431 ("SignExtension64",ATy(qTy,PTy(F64,qTy)), 4432 TP[Var("v",F64),Var("size",CTy"Zsize")]), 4433 qVar"state"), 4434 Apply 4435 (Call 4436 ("bit_test",ATy(qTy,qTy), 4437 TP[Var("bt",CTy"Zbit_test_name"), 4438 Apply 4439 (Call 4440 ("ea_Zrm",ATy(qTy,CTy"Zea"), 4441 TP[Call("Z8",CTy"Zsize",LF), 4442 Call 4443 ("Zm",CTy"Zrm", 4444 TP[Var("si", 4445 OTy(PTy(FTy 2,CTy"Zreg"))), 4446 Var("base",CTy"Zbase"), 4447 Bop(Add,Var("disp",F64), 4448 Bop(SDiv,Var("v",F64), 4449 LW(8,64)))])]),qVar"s"), 4450 Mop(Cast nTy,Bop(SMod,Var("v",F64),LW(8,64)))]), 4451 qVar"s")))])))) 4452; 4453val dfn'Zcall_def = Def 4454 ("dfn'Zcall",Var("imm_rm",CTy"Zimm_rm"), 4455 Close 4456 (qVar"state", 4457 Let(TP[Var("v",CTy"Zea"),qVar"s"], 4458 Let(qVar"s", 4459 Apply(Const("x64_push_rip",ATy(qTy,qTy)),qVar"state"), 4460 TP[Apply 4461 (Call 4462 ("ea_Zimm_rm",ATy(qTy,CTy"Zea"), 4463 Var("imm_rm",CTy"Zimm_rm")),qVar"s"),qVar"s"]), 4464 Apply(Call("jump_to_ea",ATy(qTy,qTy),Var("v",CTy"Zea")),qVar"s")))) 4465; 4466val dfn'Zcmpxchg_def = Def 4467 ("dfn'Zcmpxchg", 4468 TP[Var("size",CTy"Zsize"),Var("rm",CTy"Zrm"),Var("r",CTy"Zreg")], 4469 Close 4470 (qVar"state", 4471 Let(Var("ea_src",CTy"Zea"), 4472 Call 4473 ("Zea_r",CTy"Zea", 4474 TP[Var("size",CTy"Zsize"),Var("r",CTy"Zreg")]), 4475 Let(Var("v",CTy"Zea"), 4476 Apply 4477 (Call 4478 ("ea_Zrm",ATy(qTy,CTy"Zea"), 4479 TP[Var("size",CTy"Zsize"),Var("rm",CTy"Zrm")]), 4480 qVar"state"), 4481 Let(Var("v0",F64), 4482 Apply 4483 (Call("EA",ATy(qTy,F64),Var("v",CTy"Zea")),qVar"state"), 4484 Let(Var("v1",F64), 4485 Apply 4486 (Call("EA",ATy(qTy,F64),Var("ea_src",CTy"Zea")), 4487 qVar"state"), 4488 Let(qVar"s", 4489 Apply 4490 (Call 4491 ("write_binop",ATy(qTy,qTy), 4492 TP[Var("size",CTy"Zsize"), 4493 LC("Zcmp",CTy"Zbinop_name"), 4494 Var("v1",F64),Var("v0",F64), 4495 Var("ea_src",CTy"Zea")]),qVar"state"), 4496 ITE(EQ(Var("v1",F64),Var("v0",F64)), 4497 Apply 4498 (Call 4499 ("write'EA",ATy(qTy,qTy), 4500 TP[Apply 4501 (Call 4502 ("EA",ATy(qTy,F64), 4503 Var("ea_src",CTy"Zea")), 4504 qVar"s"),Var("v",CTy"Zea")]), 4505 qVar"s"), 4506 Apply 4507 (Call 4508 ("write'EA",ATy(qTy,qTy), 4509 TP[Var("v0",F64), 4510 Call 4511 ("Zea_r",CTy"Zea", 4512 TP[Var("size",CTy"Zsize"), 4513 LC("RAX",CTy"Zreg")])]), 4514 qVar"s"))))))))) 4515; 4516val dfn'Zdiv_def = Def 4517 ("dfn'Zdiv",TP[Var("size",CTy"Zsize"),Var("rm",CTy"Zrm")], 4518 Close 4519 (qVar"state", 4520 Let(nVar"w",Call("value_width",nTy,Var("size",CTy"Zsize")), 4521 Let(Var("ea_eax",CTy"Zea"), 4522 Call 4523 ("Zea_r",CTy"Zea", 4524 TP[Var("size",CTy"Zsize"),LC("RAX",CTy"Zreg")]), 4525 Let(Var("ea_edx",CTy"Zea"), 4526 Call 4527 ("Zea_r",CTy"Zea", 4528 TP[Var("size",CTy"Zsize"),LC("RDX",CTy"Zreg")]), 4529 Let(nVar"v0", 4530 Bop(Add, 4531 Bop(Mul, 4532 Mop(Cast nTy, 4533 Apply 4534 (Call 4535 ("EA",ATy(qTy,F64), 4536 Var("ea_edx",CTy"Zea")), 4537 qVar"state")),nVar"w"), 4538 Mop(Cast nTy, 4539 Apply 4540 (Call 4541 ("EA",ATy(qTy,F64), 4542 Var("ea_eax",CTy"Zea")),qVar"state"))), 4543 Let(nVar"v1", 4544 Mop(Cast nTy, 4545 Apply 4546 (Call 4547 ("EA",ATy(qTy,F64), 4548 Apply 4549 (Call 4550 ("ea_Zrm",ATy(qTy,CTy"Zea"), 4551 TP[Var("size",CTy"Zsize"), 4552 Var("rm",CTy"Zrm")]), 4553 qVar"state")),qVar"state")), 4554 Let(nVar"q",Bop(Div,nVar"v0",nVar"v1"), 4555 Apply 4556 (Const("erase_eflags",ATy(qTy,qTy)), 4557 Apply 4558 (Call 4559 ("write'EA",ATy(qTy,qTy), 4560 TP[Mop(Cast F64, 4561 Bop(Mod,nVar"v0",nVar"v1")), 4562 Var("ea_edx",CTy"Zea")]), 4563 Apply 4564 (Call 4565 ("write'EA",ATy(qTy,qTy), 4566 TP[Mop(Cast F64,nVar"q"), 4567 Var("ea_eax",CTy"Zea")]), 4568 ITE(Bop(Or,EQ(nVar"v1",LN 0), 4569 Bop(Le,nVar"w",nVar"q")), 4570 Apply 4571 (Const 4572 ("DE_exception", 4573 ATy(qTy,qTy)),qVar"state"), 4574 qVar"state")))))))))))) 4575; 4576val dfn'Zidiv_def = Def 4577 ("dfn'Zidiv",TP[Var("size",CTy"Zsize"),Var("rm",CTy"Zrm")], 4578 Close 4579 (qVar"state", 4580 Let(iVar"w", 4581 Mop(Cast iTy,Call("value_width",nTy,Var("size",CTy"Zsize"))), 4582 Let(Var("ea_eax",CTy"Zea"), 4583 Call 4584 ("Zea_r",CTy"Zea", 4585 TP[Var("size",CTy"Zsize"),LC("RAX",CTy"Zreg")]), 4586 Let(Var("ea_edx",CTy"Zea"), 4587 Call 4588 ("Zea_r",CTy"Zea", 4589 TP[Var("size",CTy"Zsize"),LC("RDX",CTy"Zreg")]), 4590 Let(TP[iVar"v0",qVar"s"], 4591 Let(TP[iVar"v",qVar"s"], 4592 Let(TP[iVar"v",qVar"s"], 4593 Let(TP[Var("v",F64),qVar"s"], 4594 Apply 4595 (Call 4596 ("SignExtension64", 4597 ATy(qTy,PTy(F64,qTy)), 4598 TP[Apply 4599 (Call 4600 ("EA",ATy(qTy,F64), 4601 Var("ea_edx",CTy"Zea")), 4602 qVar"state"), 4603 Var("size",CTy"Zsize")]), 4604 qVar"state"), 4605 TP[Mop(Cast iTy,Var("v",F64)),qVar"s"]), 4606 TP[Bop(Mul,iVar"v",iVar"w"),qVar"s"]), 4607 TP[Bop(Add,iVar"v", 4608 Mop(Cast iTy, 4609 Mop(Cast nTy, 4610 Apply 4611 (Call 4612 ("EA",ATy(qTy,F64), 4613 Var("ea_eax",CTy"Zea")), 4614 qVar"s")))),qVar"s"]), 4615 Let(TP[iVar"v1",qVar"s"], 4616 Let(TP[Var("v",F64),qVar"s"], 4617 Apply 4618 (Call 4619 ("SignExtension64", 4620 ATy(qTy,PTy(F64,qTy)), 4621 TP[Apply 4622 (Call 4623 ("EA",ATy(qTy,F64), 4624 Apply 4625 (Call 4626 ("ea_Zrm", 4627 ATy(qTy,CTy"Zea"), 4628 TP[Var("size", 4629 CTy"Zsize"), 4630 Var("rm",CTy"Zrm")]), 4631 qVar"state")),qVar"s"), 4632 Var("size",CTy"Zsize")]),qVar"s"), 4633 TP[Mop(Cast iTy,Var("v",F64)),qVar"s"]), 4634 Let(iVar"q",Bop(Quot,iVar"v0",iVar"v1"), 4635 Apply 4636 (Const("erase_eflags",ATy(qTy,qTy)), 4637 Apply 4638 (Call 4639 ("write'EA",ATy(qTy,qTy), 4640 TP[Mop(Cast F64, 4641 Bop(Rem,iVar"v0",iVar"v1")), 4642 Var("ea_edx",CTy"Zea")]), 4643 Apply 4644 (Call 4645 ("write'EA",ATy(qTy,qTy), 4646 TP[Mop(Cast F64,iVar"q"), 4647 Var("ea_eax",CTy"Zea")]), 4648 ITE(Bop(Or,EQ(iVar"v1",LI 0), 4649 Bop(Or, 4650 Bop(Lt,iVar"q", 4651 Mop(Neg, 4652 Bop(Div, 4653 iVar"w", 4654 LI 2))), 4655 Bop(Le, 4656 Bop(Div,iVar"w", 4657 LI 2),iVar"q"))), 4658 Apply 4659 (Const 4660 ("DE_exception", 4661 ATy(qTy,qTy)),qVar"s"), 4662 qVar"s")))))))))))) 4663; 4664val dfn'Zjcc_def = Def 4665 ("dfn'Zjcc",TP[Var("cond",CTy"Zcond"),Var("imm",F64)], 4666 Close 4667 (qVar"state", 4668 Let(TP[bVar"v",qVar"s"], 4669 Apply 4670 (Call 4671 ("read_cond",ATy(qTy,PTy(bTy,qTy)),Var("cond",CTy"Zcond")), 4672 qVar"state"), 4673 ITE(bVar"v", 4674 Rupd 4675 ("RIP", 4676 TP[qVar"s", 4677 Bop(Add,Dest("RIP",F64,qVar"s"),Var("imm",F64))]), 4678 qVar"s")))) 4679; 4680val dfn'Zjmp_def = Def 4681 ("dfn'Zjmp",Var("rm",CTy"Zrm"), 4682 Close 4683 (qVar"state", 4684 Rupd 4685 ("RIP", 4686 TP[qVar"state", 4687 Apply 4688 (Call 4689 ("EA",ATy(qTy,F64), 4690 Apply 4691 (Call 4692 ("ea_Zrm",ATy(qTy,CTy"Zea"), 4693 TP[Const("Z64",CTy"Zsize"),Var("rm",CTy"Zrm")]), 4694 qVar"state")),qVar"state")]))) 4695; 4696val dfn'Zlea_def = Def 4697 ("dfn'Zlea",TP[Var("size",CTy"Zsize"),Var("dst_src",CTy"Zdest_src")], 4698 Close 4699 (qVar"state", 4700 Apply 4701 (Call 4702 ("write'EA",ATy(qTy,qTy), 4703 TP[Call 4704 ("get_ea_address",F64, 4705 Apply 4706 (Call 4707 ("ea_Zsrc",ATy(qTy,CTy"Zea"), 4708 TP[Var("size",CTy"Zsize"), 4709 Var("dst_src",CTy"Zdest_src")]),qVar"state")), 4710 Apply 4711 (Call 4712 ("ea_Zdest",ATy(qTy,CTy"Zea"), 4713 TP[Var("size",CTy"Zsize"), 4714 Var("dst_src",CTy"Zdest_src")]),qVar"state")]), 4715 qVar"state"))) 4716; 4717val dfn'Zleave_def = Def 4718 ("dfn'Zleave",qVar"state", 4719 Apply 4720 (Call("x64_pop",ATy(qTy,qTy),Call("Zr",CTy"Zrm",LC("RBP",CTy"Zreg"))), 4721 Rupd 4722 ("REG", 4723 TP[qVar"state", 4724 Fupd 4725 (Dest("REG",ATy(CTy"Zreg",F64),qVar"state"), 4726 LC("RSP",CTy"Zreg"), 4727 Apply 4728 (Dest("REG",ATy(CTy"Zreg",F64),qVar"state"), 4729 LC("RBP",CTy"Zreg")))]))) 4730; 4731val dfn'Zloop_def = Def 4732 ("dfn'Zloop",TP[Var("cond",CTy"Zcond"),Var("imm",F64)], 4733 Close 4734 (qVar"state", 4735 Let(Var("v",F64), 4736 Bop(Sub, 4737 Apply 4738 (Dest("REG",ATy(CTy"Zreg",F64),qVar"state"), 4739 LC("RCX",CTy"Zreg")),LW(1,64)), 4740 Let(qVar"s", 4741 Rupd 4742 ("REG", 4743 TP[qVar"state", 4744 Fupd 4745 (Dest("REG",ATy(CTy"Zreg",F64),qVar"state"), 4746 LC("RCX",CTy"Zreg"),Var("v",F64))]), 4747 Let(TP[bVar"v",qVar"s"], 4748 ITE(Mop(Not,EQ(Var("v",F64),LW(0,64))), 4749 Apply 4750 (Call 4751 ("read_cond",ATy(qTy,PTy(bTy,qTy)), 4752 Var("cond",CTy"Zcond")),qVar"s"), 4753 TP[LF,qVar"s"]), 4754 ITE(bVar"v", 4755 Rupd 4756 ("RIP", 4757 TP[qVar"s", 4758 Bop(Add,Dest("RIP",F64,qVar"s"),Var("imm",F64))]), 4759 qVar"s")))))) 4760; 4761val dfn'Zmonop_def = Def 4762 ("dfn'Zmonop", 4763 TP[Var("mop",CTy"Zmonop_name"),Var("size",CTy"Zsize"), 4764 Var("rm",CTy"Zrm")], 4765 Close 4766 (qVar"state", 4767 Let(Var("v",CTy"Zea"), 4768 Apply 4769 (Call 4770 ("ea_Zrm",ATy(qTy,CTy"Zea"), 4771 TP[Var("size",CTy"Zsize"),Var("rm",CTy"Zrm")]),qVar"state"), 4772 Apply 4773 (Call 4774 ("write_monop",ATy(qTy,qTy), 4775 TP[Var("size",CTy"Zsize"),Var("mop",CTy"Zmonop_name"), 4776 Apply 4777 (Call("EA",ATy(qTy,F64),Var("v",CTy"Zea")), 4778 qVar"state"),Var("v",CTy"Zea")]),qVar"state")))) 4779; 4780val dfn'Zmov_def = Def 4781 ("dfn'Zmov", 4782 TP[Var("cond",CTy"Zcond"),Var("size",CTy"Zsize"), 4783 Var("dst_src",CTy"Zdest_src")], 4784 Close 4785 (qVar"state", 4786 Let(TP[bVar"v",qVar"s"], 4787 Apply 4788 (Call 4789 ("read_cond",ATy(qTy,PTy(bTy,qTy)),Var("cond",CTy"Zcond")), 4790 qVar"state"), 4791 ITE(bVar"v", 4792 Apply 4793 (Call 4794 ("write'EA",ATy(qTy,qTy), 4795 TP[Apply 4796 (Call 4797 ("EA",ATy(qTy,F64), 4798 Apply 4799 (Call 4800 ("ea_Zsrc",ATy(qTy,CTy"Zea"), 4801 TP[Var("size",CTy"Zsize"), 4802 Var("dst_src",CTy"Zdest_src")]), 4803 qVar"s")),qVar"s"), 4804 Apply 4805 (Call 4806 ("ea_Zdest",ATy(qTy,CTy"Zea"), 4807 TP[Var("size",CTy"Zsize"), 4808 Var("dst_src",CTy"Zdest_src")]),qVar"s")]), 4809 qVar"s"),qVar"s")))) 4810; 4811val dfn'Zmovsx_def = Def 4812 ("dfn'Zmovsx", 4813 TP[Var("size1",CTy"Zsize"),Var("dst_src",CTy"Zdest_src"), 4814 Var("size2",CTy"Zsize")], 4815 Close 4816 (qVar"state", 4817 Let(TP[Var("v",PTy(F64,CTy"Zea")),qVar"s"], 4818 Let(TP[Var("v0",F64),qVar"s"], 4819 Apply 4820 (Call 4821 ("SignExtension",ATy(qTy,PTy(F64,qTy)), 4822 TP[Apply 4823 (Call 4824 ("EA",ATy(qTy,F64), 4825 Apply 4826 (Call 4827 ("ea_Zsrc",ATy(qTy,CTy"Zea"), 4828 TP[Var("size1",CTy"Zsize"), 4829 Var("dst_src",CTy"Zdest_src")]), 4830 qVar"state")),qVar"state"), 4831 Var("size1",CTy"Zsize"),Var("size2",CTy"Zsize")]), 4832 qVar"state"), 4833 TP[TP[Var("v0",F64), 4834 Apply 4835 (Call 4836 ("ea_Zdest",ATy(qTy,CTy"Zea"), 4837 TP[Var("size2",CTy"Zsize"), 4838 Var("dst_src",CTy"Zdest_src")]),qVar"state")], 4839 qVar"s"]), 4840 Apply 4841 (Call("write'EA",ATy(qTy,qTy),Var("v",PTy(F64,CTy"Zea"))), 4842 qVar"s")))) 4843; 4844val dfn'Zmovzx_def = Def 4845 ("dfn'Zmovzx", 4846 TP[Var("size1",CTy"Zsize"),Var("dst_src",CTy"Zdest_src"), 4847 Var("size2",CTy"Zsize")], 4848 Close 4849 (qVar"state", 4850 Apply 4851 (Call 4852 ("write'EA",ATy(qTy,qTy), 4853 TP[Apply 4854 (Call 4855 ("EA",ATy(qTy,F64), 4856 Apply 4857 (Call 4858 ("ea_Zsrc",ATy(qTy,CTy"Zea"), 4859 TP[Var("size1",CTy"Zsize"), 4860 Var("dst_src",CTy"Zdest_src")]),qVar"state")), 4861 qVar"state"), 4862 Apply 4863 (Call 4864 ("ea_Zdest",ATy(qTy,CTy"Zea"), 4865 TP[Var("size2",CTy"Zsize"), 4866 Var("dst_src",CTy"Zdest_src")]),qVar"state")]), 4867 qVar"state"))) 4868; 4869val dfn'Zmul_def = Def 4870 ("dfn'Zmul",TP[Var("size",CTy"Zsize"),Var("rm",CTy"Zrm")], 4871 Close 4872 (qVar"state", 4873 Let(Var("ea_eax",CTy"Zea"), 4874 Call 4875 ("Zea_r",CTy"Zea", 4876 TP[Var("size",CTy"Zsize"),LC("RAX",CTy"Zreg")]), 4877 Let(Var("v",F64), 4878 Apply 4879 (Call("EA",ATy(qTy,F64),Var("ea_eax",CTy"Zea")), 4880 qVar"state"), 4881 Let(Var("v0",F64), 4882 Apply 4883 (Call 4884 ("EA",ATy(qTy,F64), 4885 Apply 4886 (Call 4887 ("ea_Zrm",ATy(qTy,CTy"Zea"), 4888 TP[Var("size",CTy"Zsize"),Var("rm",CTy"Zrm")]), 4889 qVar"state")),qVar"state"), 4890 Apply 4891 (Const("erase_eflags",ATy(qTy,qTy)), 4892 CS(Var("size",CTy"Zsize"), 4893 [(Call("Z8",CTy"Zsize",AVar bTy), 4894 Apply 4895 (Call 4896 ("write'EA",ATy(qTy,qTy), 4897 TP[Bop(Mul,Var("v",F64),Var("v0",F64)), 4898 Call 4899 ("Zea_r",CTy"Zea", 4900 TP[Const("Z16",CTy"Zsize"), 4901 LC("RAX",CTy"Zreg")])]), 4902 qVar"state")), 4903 (AVar(CTy"Zsize"), 4904 Apply 4905 (Call 4906 ("write'EA",ATy(qTy,qTy), 4907 TP[Mop(Cast F64, 4908 Bop(Div, 4909 Bop(Mul, 4910 Mop(Cast nTy,Var("v",F64)), 4911 Mop(Cast nTy,Var("v0",F64))), 4912 Call 4913 ("value_width",nTy, 4914 Var("size",CTy"Zsize")))), 4915 Call 4916 ("Zea_r",CTy"Zea", 4917 TP[Var("size",CTy"Zsize"), 4918 LC("RDX",CTy"Zreg")])]), 4919 Apply 4920 (Call 4921 ("write'EA",ATy(qTy,qTy), 4922 TP[Bop(Mul,Var("v",F64),Var("v0",F64)), 4923 Var("ea_eax",CTy"Zea")]),qVar"state")))]))))))) 4924; 4925val dfn'Zimul_def = Def 4926 ("dfn'Zimul",TP[Var("size",CTy"Zsize"),Var("rm",CTy"Zrm")], 4927 Close 4928 (qVar"state", 4929 Let(Var("ea_eax",CTy"Zea"), 4930 Call 4931 ("Zea_r",CTy"Zea", 4932 TP[Var("size",CTy"Zsize"),LC("RAX",CTy"Zreg")]), 4933 Let(TP[Var("v",F64),qVar"s"], 4934 Apply 4935 (Call 4936 ("SignExtension64",ATy(qTy,PTy(F64,qTy)), 4937 TP[Apply 4938 (Call("EA",ATy(qTy,F64),Var("ea_eax",CTy"Zea")), 4939 qVar"state"),Var("size",CTy"Zsize")]), 4940 qVar"state"), 4941 Let(TP[Var("v0",F64),qVar"s"], 4942 Apply 4943 (Call 4944 ("SignExtension64",ATy(qTy,PTy(F64,qTy)), 4945 TP[Apply 4946 (Call 4947 ("EA",ATy(qTy,F64), 4948 Apply 4949 (Call 4950 ("ea_Zrm",ATy(qTy,CTy"Zea"), 4951 TP[Var("size",CTy"Zsize"), 4952 Var("rm",CTy"Zrm")]),qVar"s")), 4953 qVar"s"),Var("size",CTy"Zsize")]),qVar"s"), 4954 Let(iVar"product", 4955 Bop(Mul,Mop(Cast iTy,Var("v",F64)), 4956 Mop(Cast iTy,Var("v0",F64))), 4957 Let(Var("product64",F64), 4958 Mop(Cast F64,iVar"product"), 4959 Let(qVar"s", 4960 Apply 4961 (Const("erase_eflags",ATy(qTy,qTy)), 4962 qVar"s"), 4963 Let(TP[bVar"v",qVar"s"], 4964 ITE(EQ(Var("size",CTy"Zsize"), 4965 Const("Z64",CTy"Zsize")), 4966 TP[EQ(Mop(Cast iTy, 4967 Var("product64",F64)), 4968 iVar"product"),qVar"s"], 4969 Let(TP[Var("v",F64),qVar"s"], 4970 Apply 4971 (Call 4972 ("SignExtension64", 4973 ATy(qTy,PTy(F64,qTy)), 4974 TP[Var("product64",F64), 4975 Var("size",CTy"Zsize")]), 4976 qVar"s"), 4977 TP[EQ(Var("v",F64), 4978 Var("product64",F64)), 4979 qVar"s"])), 4980 Let(bVar"v",Mop(Not,bVar"v"), 4981 Let(qVar"s", 4982 Apply 4983 (Call 4984 ("write'OF",ATy(qTy,qTy), 4985 bVar"v"), 4986 Apply 4987 (Call 4988 ("write'CF", 4989 ATy(qTy,qTy),bVar"v"), 4990 qVar"s")), 4991 CS(Var("size",CTy"Zsize"), 4992 [(Call 4993 ("Z8",CTy"Zsize",AVar bTy), 4994 Apply 4995 (Call 4996 ("write'EA", 4997 ATy(qTy,qTy), 4998 TP[Var("product64", 4999 F64), 5000 Call 5001 ("Zea_r", 5002 CTy"Zea", 5003 TP[Const 5004 ("Z16", 5005 CTy"Zsize"), 5006 LC("RAX", 5007 CTy"Zreg")])]), 5008 qVar"s")), 5009 (AVar(CTy"Zsize"), 5010 Apply 5011 (Call 5012 ("write'EA", 5013 ATy(qTy,qTy), 5014 TP[Mop(Cast F64, 5015 Bop(Div, 5016 iVar"product", 5017 Mop(Cast 5018 iTy, 5019 Call 5020 ("value_width", 5021 nTy, 5022 Var("size", 5023 CTy"Zsize"))))), 5024 Call 5025 ("Zea_r", 5026 CTy"Zea", 5027 TP[Var("size", 5028 CTy"Zsize"), 5029 LC("RDX", 5030 CTy"Zreg")])]), 5031 Apply 5032 (Call 5033 ("write'EA", 5034 ATy(qTy,qTy), 5035 TP[Var("product64", 5036 F64), 5037 Var("ea_eax", 5038 CTy"Zea")]), 5039 qVar"s")))])))))))))))) 5040; 5041val dfn'Zimul2_def = Def 5042 ("dfn'Zimul2", 5043 TP[Var("size",CTy"Zsize"),Var("r",CTy"Zreg"),Var("rm",CTy"Zrm")], 5044 Close 5045 (qVar"state", 5046 Let(Var("ea_dst",CTy"Zea"), 5047 Call 5048 ("Zea_r",CTy"Zea", 5049 TP[Var("size",CTy"Zsize"),Var("r",CTy"Zreg")]), 5050 Let(TP[Var("v",F64),qVar"s"], 5051 Apply 5052 (Call 5053 ("SignExtension64",ATy(qTy,PTy(F64,qTy)), 5054 TP[Apply 5055 (Call("EA",ATy(qTy,F64),Var("ea_dst",CTy"Zea")), 5056 qVar"state"),Var("size",CTy"Zsize")]), 5057 qVar"state"), 5058 Let(TP[Var("v0",F64),qVar"s"], 5059 Apply 5060 (Call 5061 ("SignExtension64",ATy(qTy,PTy(F64,qTy)), 5062 TP[Apply 5063 (Call 5064 ("EA",ATy(qTy,F64), 5065 Apply 5066 (Call 5067 ("ea_Zrm",ATy(qTy,CTy"Zea"), 5068 TP[Var("size",CTy"Zsize"), 5069 Var("rm",CTy"Zrm")]),qVar"s")), 5070 qVar"s"),Var("size",CTy"Zsize")]),qVar"s"), 5071 Let(iVar"product", 5072 Bop(Mul,Mop(Cast iTy,Var("v",F64)), 5073 Mop(Cast iTy,Var("v0",F64))), 5074 Let(Var("product64",F64), 5075 Mop(Cast F64,iVar"product"), 5076 Let(qVar"s", 5077 Apply 5078 (Const("erase_eflags",ATy(qTy,qTy)), 5079 qVar"s"), 5080 Let(TP[bVar"v",qVar"s"], 5081 ITE(EQ(Var("size",CTy"Zsize"), 5082 Const("Z64",CTy"Zsize")), 5083 TP[EQ(Mop(Cast iTy, 5084 Var("product64",F64)), 5085 iVar"product"),qVar"s"], 5086 Let(TP[Var("v",F64),qVar"s"], 5087 Apply 5088 (Call 5089 ("SignExtension64", 5090 ATy(qTy,PTy(F64,qTy)), 5091 TP[Var("product64",F64), 5092 Var("size",CTy"Zsize")]), 5093 qVar"s"), 5094 TP[EQ(Var("v",F64), 5095 Var("product64",F64)), 5096 qVar"s"])), 5097 Let(bVar"v",Mop(Not,bVar"v"), 5098 Apply 5099 (Call 5100 ("write'EA",ATy(qTy,qTy), 5101 TP[Var("product64",F64), 5102 Var("ea_dst",CTy"Zea")]), 5103 Apply 5104 (Call 5105 ("write'OF",ATy(qTy,qTy), 5106 bVar"v"), 5107 Apply 5108 (Call 5109 ("write'CF",ATy(qTy,qTy), 5110 bVar"v"),qVar"s"))))))))))))) 5111; 5112val dfn'Zimul3_def = Def 5113 ("dfn'Zimul3", 5114 TP[Var("size",CTy"Zsize"),Var("r",CTy"Zreg"),Var("rm",CTy"Zrm"), 5115 Var("imm",F64)], 5116 Close 5117 (qVar"state", 5118 Let(TP[Var("v",F64),qVar"s"], 5119 Apply 5120 (Call 5121 ("SignExtension64",ATy(qTy,PTy(F64,qTy)), 5122 TP[Apply 5123 (Call 5124 ("EA",ATy(qTy,F64), 5125 Apply 5126 (Call 5127 ("ea_Zrm",ATy(qTy,CTy"Zea"), 5128 TP[Var("size",CTy"Zsize"), 5129 Var("rm",CTy"Zrm")]),qVar"state")), 5130 qVar"state"),Var("size",CTy"Zsize")]),qVar"state"), 5131 Let(iVar"product", 5132 Bop(Mul,Mop(Cast iTy,Var("v",F64)), 5133 Mop(Cast iTy,Var("imm",F64))), 5134 Let(Var("product64",F64),Mop(Cast F64,iVar"product"), 5135 Let(qVar"s", 5136 Apply(Const("erase_eflags",ATy(qTy,qTy)),qVar"s"), 5137 Let(TP[bVar"v",qVar"s"], 5138 ITE(EQ(Var("size",CTy"Zsize"), 5139 Const("Z64",CTy"Zsize")), 5140 TP[EQ(Mop(Cast iTy,Var("product64",F64)), 5141 iVar"product"),qVar"s"], 5142 Let(TP[Var("v",F64),qVar"s"], 5143 Apply 5144 (Call 5145 ("SignExtension64", 5146 ATy(qTy,PTy(F64,qTy)), 5147 TP[Var("product64",F64), 5148 Var("size",CTy"Zsize")]), 5149 qVar"s"), 5150 TP[EQ(Var("v",F64),Var("product64",F64)), 5151 qVar"s"])), 5152 Let(bVar"v",Mop(Not,bVar"v"), 5153 Apply 5154 (Call 5155 ("write'EA",ATy(qTy,qTy), 5156 TP[Var("product64",F64), 5157 Call 5158 ("Zea_r",CTy"Zea", 5159 TP[Var("size",CTy"Zsize"), 5160 Var("r",CTy"Zreg")])]), 5161 Apply 5162 (Call("write'OF",ATy(qTy,qTy),bVar"v"), 5163 Apply 5164 (Call 5165 ("write'CF",ATy(qTy,qTy),bVar"v"), 5166 qVar"s"))))))))))) 5167; 5168val dfn'Znop_def = Def ("dfn'Znop",nVar"n",LU) 5169; 5170val dfn'Zpop_def = Def 5171 ("dfn'Zpop",Var("rm",CTy"Zrm"), 5172 Close 5173 (qVar"state", 5174 Apply(Call("x64_pop",ATy(qTy,qTy),Var("rm",CTy"Zrm")),qVar"state"))) 5175; 5176val dfn'Zpush_def = Def 5177 ("dfn'Zpush",Var("imm_rm",CTy"Zimm_rm"), 5178 Close 5179 (qVar"state", 5180 Apply 5181 (Call("x64_push",ATy(qTy,qTy),Var("imm_rm",CTy"Zimm_rm")), 5182 qVar"state"))) 5183; 5184val dfn'Zret_def = Def 5185 ("dfn'Zret",Var("imm",F64), 5186 Close 5187 (qVar"state", 5188 Apply 5189 (Call("x64_drop",ATy(qTy,qTy),Var("imm",F64)), 5190 Apply(Const("x64_pop_rip",ATy(qTy,qTy)),qVar"state")))) 5191; 5192val dfn'Zset_def = Def 5193 ("dfn'Zset", 5194 TP[Var("cond",CTy"Zcond"),bVar"have_rex",Var("rm",CTy"Zrm")], 5195 Close 5196 (qVar"state", 5197 Let(TP[bVar"v0",qVar"s"], 5198 Apply 5199 (Call 5200 ("read_cond",ATy(qTy,PTy(bTy,qTy)),Var("cond",CTy"Zcond")), 5201 qVar"state"), 5202 Apply 5203 (Call 5204 ("write'EA",ATy(qTy,qTy), 5205 TP[Mop(Cast F64,bVar"v0"), 5206 Apply 5207 (Call 5208 ("ea_Zrm",ATy(qTy,CTy"Zea"), 5209 TP[Call("Z8",CTy"Zsize",bVar"have_rex"), 5210 Var("rm",CTy"Zrm")]),qVar"state")]),qVar"s")))) 5211; 5212val dfn'Zxadd_def = Def 5213 ("dfn'Zxadd", 5214 TP[Var("size",CTy"Zsize"),Var("rm",CTy"Zrm"),Var("r",CTy"Zreg")], 5215 Close 5216 (qVar"state", 5217 Let(Var("ea_src",CTy"Zea"), 5218 Call 5219 ("Zea_r",CTy"Zea", 5220 TP[Var("size",CTy"Zsize"),Var("r",CTy"Zreg")]), 5221 Let(Var("v",CTy"Zea"), 5222 Apply 5223 (Call 5224 ("ea_Zrm",ATy(qTy,CTy"Zea"), 5225 TP[Var("size",CTy"Zsize"),Var("rm",CTy"Zrm")]), 5226 qVar"state"), 5227 Let(Var("v1",F64), 5228 Apply 5229 (Call("EA",ATy(qTy,F64),Var("v",CTy"Zea")),qVar"state"), 5230 Apply 5231 (Call 5232 ("write_binop",ATy(qTy,qTy), 5233 TP[Var("size",CTy"Zsize"), 5234 LC("Zadd",CTy"Zbinop_name"), 5235 Apply 5236 (Call 5237 ("EA",ATy(qTy,F64),Var("ea_src",CTy"Zea")), 5238 qVar"state"),Var("v1",F64),Var("v",CTy"Zea")]), 5239 Apply 5240 (Call 5241 ("write'EA",ATy(qTy,qTy), 5242 TP[Var("v1",F64),Var("ea_src",CTy"Zea")]), 5243 qVar"state"))))))) 5244; 5245val dfn'Zxchg_def = Def 5246 ("dfn'Zxchg", 5247 TP[Var("size",CTy"Zsize"),Var("rm",CTy"Zrm"),Var("r",CTy"Zreg")], 5248 Close 5249 (qVar"state", 5250 Let(Var("ea_src",CTy"Zea"), 5251 Call 5252 ("Zea_r",CTy"Zea", 5253 TP[Var("size",CTy"Zsize"),Var("r",CTy"Zreg")]), 5254 Let(Var("v",CTy"Zea"), 5255 Apply 5256 (Call 5257 ("ea_Zrm",ATy(qTy,CTy"Zea"), 5258 TP[Var("size",CTy"Zsize"),Var("rm",CTy"Zrm")]), 5259 qVar"state"), 5260 Apply 5261 (Call 5262 ("write'EA",ATy(qTy,qTy), 5263 TP[Apply 5264 (Call("EA",ATy(qTy,F64),Var("ea_src",CTy"Zea")), 5265 qVar"state"),Var("v",CTy"Zea")]), 5266 Apply 5267 (Call 5268 ("write'EA",ATy(qTy,qTy), 5269 TP[Apply 5270 (Call("EA",ATy(qTy,F64),Var("v",CTy"Zea")), 5271 qVar"state"),Var("ea_src",CTy"Zea")]), 5272 qVar"state")))))) 5273; 5274val dfn'Zcmc_def = Def 5275 ("dfn'Zcmc",qVar"state", 5276 Let(TP[bVar"v",qVar"s"], 5277 Apply(Const("CF",ATy(qTy,PTy(bTy,qTy))),qVar"state"), 5278 Apply(Call("write'CF",ATy(qTy,qTy),Mop(Not,bVar"v")),qVar"s"))) 5279; 5280val dfn'Zclc_def = Def 5281 ("dfn'Zclc",qVar"state", 5282 Apply(Call("write'CF",ATy(qTy,qTy),LF),qVar"state")) 5283; 5284val dfn'Zstc_def = Def 5285 ("dfn'Zstc",qVar"state", 5286 Apply(Call("write'CF",ATy(qTy,qTy),LT),qVar"state")) 5287; 5288val Run_def = Def 5289 ("Run",Var("v0",CTy"instruction"), 5290 Close 5291 (qVar"state", 5292 CS(Var("v0",CTy"instruction"), 5293 [(Const("Zclc",CTy"instruction"), 5294 Apply(Const("dfn'Zclc",ATy(qTy,qTy)),qVar"state")), 5295 (Const("Zcmc",CTy"instruction"), 5296 Apply(Const("dfn'Zcmc",ATy(qTy,qTy)),qVar"state")), 5297 (Const("Zleave",CTy"instruction"), 5298 Apply(Const("dfn'Zleave",ATy(qTy,qTy)),qVar"state")), 5299 (Const("Zstc",CTy"instruction"), 5300 Apply(Const("dfn'Zstc",ATy(qTy,qTy)),qVar"state")), 5301 (Call 5302 ("Zbinop",CTy"instruction", 5303 Var("v47", 5304 PTy(CTy"Zbinop_name",PTy(CTy"Zsize",CTy"Zdest_src")))), 5305 Apply 5306 (Call 5307 ("dfn'Zbinop",ATy(qTy,qTy), 5308 Var("v47", 5309 PTy(CTy"Zbinop_name",PTy(CTy"Zsize",CTy"Zdest_src")))), 5310 qVar"state")), 5311 (Call 5312 ("Zbit_test",CTy"instruction", 5313 Var("v48", 5314 PTy(CTy"Zbit_test_name",PTy(CTy"Zsize",CTy"Zdest_src")))), 5315 Apply 5316 (Call 5317 ("dfn'Zbit_test",ATy(qTy,qTy), 5318 Var("v48", 5319 PTy(CTy"Zbit_test_name", 5320 PTy(CTy"Zsize",CTy"Zdest_src")))),qVar"state")), 5321 (Call("Zcall",CTy"instruction",Var("v49",CTy"Zimm_rm")), 5322 Apply 5323 (Call("dfn'Zcall",ATy(qTy,qTy),Var("v49",CTy"Zimm_rm")), 5324 qVar"state")), 5325 (Call 5326 ("Zcmpxchg",CTy"instruction", 5327 Var("v50",PTy(CTy"Zsize",PTy(CTy"Zrm",CTy"Zreg")))), 5328 Apply 5329 (Call 5330 ("dfn'Zcmpxchg",ATy(qTy,qTy), 5331 Var("v50",PTy(CTy"Zsize",PTy(CTy"Zrm",CTy"Zreg")))), 5332 qVar"state")), 5333 (Call 5334 ("Zdiv",CTy"instruction",Var("v51",PTy(CTy"Zsize",CTy"Zrm"))), 5335 Apply 5336 (Call 5337 ("dfn'Zdiv",ATy(qTy,qTy), 5338 Var("v51",PTy(CTy"Zsize",CTy"Zrm"))),qVar"state")), 5339 (Call 5340 ("Zidiv",CTy"instruction",Var("v52",PTy(CTy"Zsize",CTy"Zrm"))), 5341 Apply 5342 (Call 5343 ("dfn'Zidiv",ATy(qTy,qTy), 5344 Var("v52",PTy(CTy"Zsize",CTy"Zrm"))),qVar"state")), 5345 (Call 5346 ("Zimul",CTy"instruction",Var("v53",PTy(CTy"Zsize",CTy"Zrm"))), 5347 Apply 5348 (Call 5349 ("dfn'Zimul",ATy(qTy,qTy), 5350 Var("v53",PTy(CTy"Zsize",CTy"Zrm"))),qVar"state")), 5351 (Call 5352 ("Zimul2",CTy"instruction", 5353 Var("v54",PTy(CTy"Zsize",PTy(CTy"Zreg",CTy"Zrm")))), 5354 Apply 5355 (Call 5356 ("dfn'Zimul2",ATy(qTy,qTy), 5357 Var("v54",PTy(CTy"Zsize",PTy(CTy"Zreg",CTy"Zrm")))), 5358 qVar"state")), 5359 (Call 5360 ("Zimul3",CTy"instruction", 5361 Var("v55",PTy(CTy"Zsize",PTy(CTy"Zreg",PTy(CTy"Zrm",F64))))), 5362 Apply 5363 (Call 5364 ("dfn'Zimul3",ATy(qTy,qTy), 5365 Var("v55", 5366 PTy(CTy"Zsize",PTy(CTy"Zreg",PTy(CTy"Zrm",F64))))), 5367 qVar"state")), 5368 (Call("Zjcc",CTy"instruction",Var("v56",PTy(CTy"Zcond",F64))), 5369 Apply 5370 (Call("dfn'Zjcc",ATy(qTy,qTy),Var("v56",PTy(CTy"Zcond",F64))), 5371 qVar"state")), 5372 (Call("Zjmp",CTy"instruction",Var("v57",CTy"Zrm")), 5373 Apply 5374 (Call("dfn'Zjmp",ATy(qTy,qTy),Var("v57",CTy"Zrm")), 5375 qVar"state")), 5376 (Call 5377 ("Zlea",CTy"instruction", 5378 Var("v58",PTy(CTy"Zsize",CTy"Zdest_src"))), 5379 Apply 5380 (Call 5381 ("dfn'Zlea",ATy(qTy,qTy), 5382 Var("v58",PTy(CTy"Zsize",CTy"Zdest_src"))),qVar"state")), 5383 (Call("Zloop",CTy"instruction",Var("v59",PTy(CTy"Zcond",F64))), 5384 Apply 5385 (Call 5386 ("dfn'Zloop",ATy(qTy,qTy),Var("v59",PTy(CTy"Zcond",F64))), 5387 qVar"state")), 5388 (Call 5389 ("Zmonop",CTy"instruction", 5390 Var("v60",PTy(CTy"Zmonop_name",PTy(CTy"Zsize",CTy"Zrm")))), 5391 Apply 5392 (Call 5393 ("dfn'Zmonop",ATy(qTy,qTy), 5394 Var("v60",PTy(CTy"Zmonop_name",PTy(CTy"Zsize",CTy"Zrm")))), 5395 qVar"state")), 5396 (Call 5397 ("Zmov",CTy"instruction", 5398 Var("v61",PTy(CTy"Zcond",PTy(CTy"Zsize",CTy"Zdest_src")))), 5399 Apply 5400 (Call 5401 ("dfn'Zmov",ATy(qTy,qTy), 5402 Var("v61",PTy(CTy"Zcond",PTy(CTy"Zsize",CTy"Zdest_src")))), 5403 qVar"state")), 5404 (Call 5405 ("Zmovsx",CTy"instruction", 5406 Var("v62",PTy(CTy"Zsize",PTy(CTy"Zdest_src",CTy"Zsize")))), 5407 Apply 5408 (Call 5409 ("dfn'Zmovsx",ATy(qTy,qTy), 5410 Var("v62",PTy(CTy"Zsize",PTy(CTy"Zdest_src",CTy"Zsize")))), 5411 qVar"state")), 5412 (Call 5413 ("Zmovzx",CTy"instruction", 5414 Var("v63",PTy(CTy"Zsize",PTy(CTy"Zdest_src",CTy"Zsize")))), 5415 Apply 5416 (Call 5417 ("dfn'Zmovzx",ATy(qTy,qTy), 5418 Var("v63",PTy(CTy"Zsize",PTy(CTy"Zdest_src",CTy"Zsize")))), 5419 qVar"state")), 5420 (Call 5421 ("Zmul",CTy"instruction",Var("v64",PTy(CTy"Zsize",CTy"Zrm"))), 5422 Apply 5423 (Call 5424 ("dfn'Zmul",ATy(qTy,qTy), 5425 Var("v64",PTy(CTy"Zsize",CTy"Zrm"))),qVar"state")), 5426 (Call("Znop",CTy"instruction",nVar"v65"),qVar"state"), 5427 (Call("Zpop",CTy"instruction",Var("v66",CTy"Zrm")), 5428 Apply 5429 (Call("dfn'Zpop",ATy(qTy,qTy),Var("v66",CTy"Zrm")), 5430 qVar"state")), 5431 (Call("Zpush",CTy"instruction",Var("v67",CTy"Zimm_rm")), 5432 Apply 5433 (Call("dfn'Zpush",ATy(qTy,qTy),Var("v67",CTy"Zimm_rm")), 5434 qVar"state")), 5435 (Call("Zret",CTy"instruction",Var("v68",F64)), 5436 Apply(Call("dfn'Zret",ATy(qTy,qTy),Var("v68",F64)),qVar"state")), 5437 (Call 5438 ("Zset",CTy"instruction", 5439 Var("v69",PTy(CTy"Zcond",PTy(bTy,CTy"Zrm")))), 5440 Apply 5441 (Call 5442 ("dfn'Zset",ATy(qTy,qTy), 5443 Var("v69",PTy(CTy"Zcond",PTy(bTy,CTy"Zrm")))),qVar"state")), 5444 (Call 5445 ("Zxadd",CTy"instruction", 5446 Var("v70",PTy(CTy"Zsize",PTy(CTy"Zrm",CTy"Zreg")))), 5447 Apply 5448 (Call 5449 ("dfn'Zxadd",ATy(qTy,qTy), 5450 Var("v70",PTy(CTy"Zsize",PTy(CTy"Zrm",CTy"Zreg")))), 5451 qVar"state")), 5452 (Call 5453 ("Zxchg",CTy"instruction", 5454 Var("v71",PTy(CTy"Zsize",PTy(CTy"Zrm",CTy"Zreg")))), 5455 Apply 5456 (Call 5457 ("dfn'Zxchg",ATy(qTy,qTy), 5458 Var("v71",PTy(CTy"Zsize",PTy(CTy"Zrm",CTy"Zreg")))), 5459 qVar"state")), 5460 (Call("SSE",CTy"instruction",Var("v1",CTy"SSE")), 5461 CS(Var("v1",CTy"SSE"), 5462 [(Call 5463 ("CMPPD",CTy"SSE", 5464 Var("v2",PTy(CTy"sse_compare",PTy(FTy 3,CTy"xmm_mem")))), 5465 Apply 5466 (Call 5467 ("dfn'CMPPD",ATy(qTy,qTy), 5468 Var("v2", 5469 PTy(CTy"sse_compare",PTy(FTy 3,CTy"xmm_mem")))), 5470 qVar"state")), 5471 (Call 5472 ("CMPPS",CTy"SSE", 5473 Var("v3",PTy(CTy"sse_compare",PTy(FTy 3,CTy"xmm_mem")))), 5474 Apply 5475 (Call 5476 ("dfn'CMPPS",ATy(qTy,qTy), 5477 Var("v3", 5478 PTy(CTy"sse_compare",PTy(FTy 3,CTy"xmm_mem")))), 5479 qVar"state")), 5480 (Call 5481 ("CMPSD",CTy"SSE", 5482 Var("v4",PTy(CTy"sse_compare",PTy(FTy 3,CTy"xmm_mem")))), 5483 Apply 5484 (Call 5485 ("dfn'CMPSD",ATy(qTy,qTy), 5486 Var("v4", 5487 PTy(CTy"sse_compare",PTy(FTy 3,CTy"xmm_mem")))), 5488 qVar"state")), 5489 (Call 5490 ("CMPSS",CTy"SSE", 5491 Var("v5",PTy(CTy"sse_compare",PTy(FTy 3,CTy"xmm_mem")))), 5492 Apply 5493 (Call 5494 ("dfn'CMPSS",ATy(qTy,qTy), 5495 Var("v5", 5496 PTy(CTy"sse_compare",PTy(FTy 3,CTy"xmm_mem")))), 5497 qVar"state")), 5498 (Call("COMISD",CTy"SSE",Var("v6",PTy(FTy 3,CTy"xmm_mem"))), 5499 Apply 5500 (Call 5501 ("dfn'COMISD",ATy(qTy,qTy), 5502 Var("v6",PTy(FTy 3,CTy"xmm_mem"))),qVar"state")), 5503 (Call("COMISS",CTy"SSE",Var("v7",PTy(FTy 3,CTy"xmm_mem"))), 5504 Apply 5505 (Call 5506 ("dfn'COMISS",ATy(qTy,qTy), 5507 Var("v7",PTy(FTy 3,CTy"xmm_mem"))),qVar"state")), 5508 (Call 5509 ("CVTDQ2PD",CTy"SSE",Var("v8",PTy(FTy 3,CTy"xmm_mem"))), 5510 Apply 5511 (Call 5512 ("dfn'CVTDQ2PD",ATy(qTy,qTy), 5513 Var("v8",PTy(FTy 3,CTy"xmm_mem"))),qVar"state")), 5514 (Call 5515 ("CVTDQ2PS",CTy"SSE",Var("v9",PTy(FTy 3,CTy"xmm_mem"))), 5516 Apply 5517 (Call 5518 ("dfn'CVTDQ2PS",ATy(qTy,qTy), 5519 Var("v9",PTy(FTy 3,CTy"xmm_mem"))),qVar"state")), 5520 (Call 5521 ("CVTPD2DQ",CTy"SSE", 5522 Var("v10",PTy(bTy,PTy(FTy 3,CTy"xmm_mem")))), 5523 Apply 5524 (Call 5525 ("dfn'CVTPD2DQ",ATy(qTy,qTy), 5526 Var("v10",PTy(bTy,PTy(FTy 3,CTy"xmm_mem")))), 5527 qVar"state")), 5528 (Call 5529 ("CVTPD2PS",CTy"SSE",Var("v11",PTy(FTy 3,CTy"xmm_mem"))), 5530 Apply 5531 (Call 5532 ("dfn'CVTPD2PS",ATy(qTy,qTy), 5533 Var("v11",PTy(FTy 3,CTy"xmm_mem"))),qVar"state")), 5534 (Call 5535 ("CVTPS2DQ",CTy"SSE", 5536 Var("v12",PTy(bTy,PTy(FTy 3,CTy"xmm_mem")))), 5537 Apply 5538 (Call 5539 ("dfn'CVTPS2DQ",ATy(qTy,qTy), 5540 Var("v12",PTy(bTy,PTy(FTy 3,CTy"xmm_mem")))), 5541 qVar"state")), 5542 (Call 5543 ("CVTPS2PD",CTy"SSE",Var("v13",PTy(FTy 3,CTy"xmm_mem"))), 5544 Apply 5545 (Call 5546 ("dfn'CVTPS2PD",ATy(qTy,qTy), 5547 Var("v13",PTy(FTy 3,CTy"xmm_mem"))),qVar"state")), 5548 (Call 5549 ("CVTSD2SI",CTy"SSE", 5550 Var("v14",PTy(bTy,PTy(bTy,PTy(CTy"Zreg",CTy"xmm_mem"))))), 5551 Apply 5552 (Call 5553 ("dfn'CVTSD2SI",ATy(qTy,qTy), 5554 Var("v14", 5555 PTy(bTy,PTy(bTy,PTy(CTy"Zreg",CTy"xmm_mem"))))), 5556 qVar"state")), 5557 (Call 5558 ("CVTSD2SS",CTy"SSE",Var("v15",PTy(FTy 3,CTy"xmm_mem"))), 5559 Apply 5560 (Call 5561 ("dfn'CVTSD2SS",ATy(qTy,qTy), 5562 Var("v15",PTy(FTy 3,CTy"xmm_mem"))),qVar"state")), 5563 (Call 5564 ("CVTSI2SD",CTy"SSE", 5565 Var("v16",PTy(bTy,PTy(FTy 3,CTy"Zrm")))), 5566 Apply 5567 (Call 5568 ("dfn'CVTSI2SD",ATy(qTy,qTy), 5569 Var("v16",PTy(bTy,PTy(FTy 3,CTy"Zrm")))),qVar"state")), 5570 (Call 5571 ("CVTSI2SS",CTy"SSE", 5572 Var("v17",PTy(bTy,PTy(FTy 3,CTy"Zrm")))), 5573 Apply 5574 (Call 5575 ("dfn'CVTSI2SS",ATy(qTy,qTy), 5576 Var("v17",PTy(bTy,PTy(FTy 3,CTy"Zrm")))),qVar"state")), 5577 (Call 5578 ("CVTSS2SD",CTy"SSE",Var("v18",PTy(FTy 3,CTy"xmm_mem"))), 5579 Apply 5580 (Call 5581 ("dfn'CVTSS2SD",ATy(qTy,qTy), 5582 Var("v18",PTy(FTy 3,CTy"xmm_mem"))),qVar"state")), 5583 (Call 5584 ("CVTSS2SI",CTy"SSE", 5585 Var("v19",PTy(bTy,PTy(bTy,PTy(CTy"Zreg",CTy"xmm_mem"))))), 5586 Apply 5587 (Call 5588 ("dfn'CVTSS2SI",ATy(qTy,qTy), 5589 Var("v19", 5590 PTy(bTy,PTy(bTy,PTy(CTy"Zreg",CTy"xmm_mem"))))), 5591 qVar"state")), 5592 (Call 5593 ("MOVAP_D_S",CTy"SSE", 5594 Var("v20",PTy(bTy,PTy(CTy"xmm_mem",CTy"xmm_mem")))), 5595 Apply 5596 (Call 5597 ("dfn'MOVAP_D_S",ATy(qTy,qTy), 5598 Var("v20",PTy(bTy,PTy(CTy"xmm_mem",CTy"xmm_mem")))), 5599 qVar"state")), 5600 (Call 5601 ("MOVQ",CTy"SSE", 5602 Var("v21",PTy(CTy"xmm_mem",CTy"xmm_mem"))), 5603 Apply 5604 (Call 5605 ("dfn'MOVQ",ATy(qTy,qTy), 5606 Var("v21",PTy(CTy"xmm_mem",CTy"xmm_mem"))), 5607 qVar"state")), 5608 (Call 5609 ("MOVSD",CTy"SSE", 5610 Var("v22",PTy(CTy"xmm_mem",CTy"xmm_mem"))), 5611 Apply 5612 (Call 5613 ("dfn'MOVSD",ATy(qTy,qTy), 5614 Var("v22",PTy(CTy"xmm_mem",CTy"xmm_mem"))), 5615 qVar"state")), 5616 (Call 5617 ("MOVSS",CTy"SSE", 5618 Var("v23",PTy(CTy"xmm_mem",CTy"xmm_mem"))), 5619 Apply 5620 (Call 5621 ("dfn'MOVSS",ATy(qTy,qTy), 5622 Var("v23",PTy(CTy"xmm_mem",CTy"xmm_mem"))), 5623 qVar"state")), 5624 (Call 5625 ("MOVUP_D_S",CTy"SSE", 5626 Var("v24",PTy(bTy,PTy(CTy"xmm_mem",CTy"xmm_mem")))), 5627 Apply 5628 (Call 5629 ("dfn'MOVUP_D_S",ATy(qTy,qTy), 5630 Var("v24",PTy(bTy,PTy(CTy"xmm_mem",CTy"xmm_mem")))), 5631 qVar"state")), 5632 (Call 5633 ("MOV_D_Q",CTy"SSE", 5634 Var("v25",PTy(bTy,PTy(bTy,PTy(FTy 3,CTy"Zrm"))))), 5635 Apply 5636 (Call 5637 ("dfn'MOV_D_Q",ATy(qTy,qTy), 5638 Var("v25",PTy(bTy,PTy(bTy,PTy(FTy 3,CTy"Zrm"))))), 5639 qVar"state")), 5640 (Call 5641 ("PCMPEQQ",CTy"SSE",Var("v26",PTy(FTy 3,CTy"xmm_mem"))), 5642 Apply 5643 (Call 5644 ("dfn'PCMPEQQ",ATy(qTy,qTy), 5645 Var("v26",PTy(FTy 3,CTy"xmm_mem"))),qVar"state")), 5646 (Call("PSLLDQ",CTy"SSE",Var("v27",PTy(FTy 3,F8))), 5647 Apply 5648 (Call 5649 ("dfn'PSLLDQ",ATy(qTy,qTy),Var("v27",PTy(FTy 3,F8))), 5650 qVar"state")), 5651 (Call("PSLLD_imm",CTy"SSE",Var("v28",PTy(FTy 3,F8))), 5652 Apply 5653 (Call 5654 ("dfn'PSLLD_imm",ATy(qTy,qTy), 5655 Var("v28",PTy(FTy 3,F8))),qVar"state")), 5656 (Call("PSLLQ_imm",CTy"SSE",Var("v29",PTy(FTy 3,F8))), 5657 Apply 5658 (Call 5659 ("dfn'PSLLQ_imm",ATy(qTy,qTy), 5660 Var("v29",PTy(FTy 3,F8))),qVar"state")), 5661 (Call("PSLLW_imm",CTy"SSE",Var("v30",PTy(FTy 3,F8))), 5662 Apply 5663 (Call 5664 ("dfn'PSLLW_imm",ATy(qTy,qTy), 5665 Var("v30",PTy(FTy 3,F8))),qVar"state")), 5666 (Call("PSRAD_imm",CTy"SSE",Var("v31",PTy(FTy 3,F8))), 5667 Apply 5668 (Call 5669 ("dfn'PSRAD_imm",ATy(qTy,qTy), 5670 Var("v31",PTy(FTy 3,F8))),qVar"state")), 5671 (Call("PSRAW_imm",CTy"SSE",Var("v32",PTy(FTy 3,F8))), 5672 Apply 5673 (Call 5674 ("dfn'PSRAW_imm",ATy(qTy,qTy), 5675 Var("v32",PTy(FTy 3,F8))),qVar"state")), 5676 (Call("PSRLDQ",CTy"SSE",Var("v33",PTy(FTy 3,F8))), 5677 Apply 5678 (Call 5679 ("dfn'PSRLDQ",ATy(qTy,qTy),Var("v33",PTy(FTy 3,F8))), 5680 qVar"state")), 5681 (Call("PSRLD_imm",CTy"SSE",Var("v34",PTy(FTy 3,F8))), 5682 Apply 5683 (Call 5684 ("dfn'PSRLD_imm",ATy(qTy,qTy), 5685 Var("v34",PTy(FTy 3,F8))),qVar"state")), 5686 (Call("PSRLQ_imm",CTy"SSE",Var("v35",PTy(FTy 3,F8))), 5687 Apply 5688 (Call 5689 ("dfn'PSRLQ_imm",ATy(qTy,qTy), 5690 Var("v35",PTy(FTy 3,F8))),qVar"state")), 5691 (Call("PSRLW_imm",CTy"SSE",Var("v36",PTy(FTy 3,F8))), 5692 Apply 5693 (Call 5694 ("dfn'PSRLW_imm",ATy(qTy,qTy), 5695 Var("v36",PTy(FTy 3,F8))),qVar"state")), 5696 (Call("SQRTPD",CTy"SSE",Var("v37",PTy(FTy 3,CTy"xmm_mem"))), 5697 Apply 5698 (Call 5699 ("dfn'SQRTPD",ATy(qTy,qTy), 5700 Var("v37",PTy(FTy 3,CTy"xmm_mem"))),qVar"state")), 5701 (Call("SQRTPS",CTy"SSE",Var("v38",PTy(FTy 3,CTy"xmm_mem"))), 5702 Apply 5703 (Call 5704 ("dfn'SQRTPS",ATy(qTy,qTy), 5705 Var("v38",PTy(FTy 3,CTy"xmm_mem"))),qVar"state")), 5706 (Call("SQRTSD",CTy"SSE",Var("v39",PTy(FTy 3,CTy"xmm_mem"))), 5707 Apply 5708 (Call 5709 ("dfn'SQRTSD",ATy(qTy,qTy), 5710 Var("v39",PTy(FTy 3,CTy"xmm_mem"))),qVar"state")), 5711 (Call("SQRTSS",CTy"SSE",Var("v40",PTy(FTy 3,CTy"xmm_mem"))), 5712 Apply 5713 (Call 5714 ("dfn'SQRTSS",ATy(qTy,qTy), 5715 Var("v40",PTy(FTy 3,CTy"xmm_mem"))),qVar"state")), 5716 (Call 5717 ("bin_PD",CTy"SSE", 5718 Var("v41",PTy(CTy"sse_binop",PTy(FTy 3,CTy"xmm_mem")))), 5719 Apply 5720 (Call 5721 ("dfn'bin_PD",ATy(qTy,qTy), 5722 Var("v41", 5723 PTy(CTy"sse_binop",PTy(FTy 3,CTy"xmm_mem")))), 5724 qVar"state")), 5725 (Call 5726 ("bin_PS",CTy"SSE", 5727 Var("v42",PTy(CTy"sse_binop",PTy(FTy 3,CTy"xmm_mem")))), 5728 Apply 5729 (Call 5730 ("dfn'bin_PS",ATy(qTy,qTy), 5731 Var("v42", 5732 PTy(CTy"sse_binop",PTy(FTy 3,CTy"xmm_mem")))), 5733 qVar"state")), 5734 (Call 5735 ("bin_SD",CTy"SSE", 5736 Var("v43",PTy(CTy"sse_binop",PTy(FTy 3,CTy"xmm_mem")))), 5737 Apply 5738 (Call 5739 ("dfn'bin_SD",ATy(qTy,qTy), 5740 Var("v43", 5741 PTy(CTy"sse_binop",PTy(FTy 3,CTy"xmm_mem")))), 5742 qVar"state")), 5743 (Call 5744 ("bin_SS",CTy"SSE", 5745 Var("v44",PTy(CTy"sse_binop",PTy(FTy 3,CTy"xmm_mem")))), 5746 Apply 5747 (Call 5748 ("dfn'bin_SS",ATy(qTy,qTy), 5749 Var("v44", 5750 PTy(CTy"sse_binop",PTy(FTy 3,CTy"xmm_mem")))), 5751 qVar"state")), 5752 (Call 5753 ("logic_PD",CTy"SSE", 5754 Var("v45",PTy(CTy"sse_logic",PTy(FTy 3,CTy"xmm_mem")))), 5755 Apply 5756 (Call 5757 ("dfn'logic_PD",ATy(qTy,qTy), 5758 Var("v45", 5759 PTy(CTy"sse_logic",PTy(FTy 3,CTy"xmm_mem")))), 5760 qVar"state")), 5761 (Call 5762 ("logic_PS",CTy"SSE", 5763 Var("v46",PTy(CTy"sse_logic",PTy(FTy 3,CTy"xmm_mem")))), 5764 Apply 5765 (Call 5766 ("dfn'logic_PS",ATy(qTy,qTy), 5767 Var("v46", 5768 PTy(CTy"sse_logic",PTy(FTy 3,CTy"xmm_mem")))), 5769 qVar"state"))]))]))) 5770; 5771val oimmediate8_def = Def 5772 ("oimmediate8",Var("strm",OTy(LTy F8)), 5773 CS(Var("strm",OTy(LTy F8)), 5774 [(Mop(Some,LLC([Var("b",F8)],Var("t",LTy F8))), 5775 TP[Mop(SE F64,Var("b",F8)),Mop(Some,Var("t",LTy F8))]), 5776 (AVar(OTy(LTy F8)),TP[LX F64,LO(LTy F8)])])) 5777; 5778val immediate8_def = Def 5779 ("immediate8",Var("strm",LTy F8), 5780 Call("oimmediate8",PTy(F64,OTy(LTy F8)),Mop(Some,Var("strm",LTy F8)))) 5781; 5782val immediate16_def = Def 5783 ("immediate16",Var("strm",LTy F8), 5784 CS(Var("strm",LTy F8), 5785 [(LLC([Var("b1",F8),Var("b2",F8)],Var("t",LTy F8)), 5786 TP[Mop(SE F64,CC[Var("b2",F8),Var("b1",F8)]), 5787 Mop(Some,Var("t",LTy F8))]), 5788 (AVar(LTy F8),TP[LX F64,LO(LTy F8)])])) 5789; 5790val immediate32_def = Def 5791 ("immediate32",Var("strm",LTy F8), 5792 CS(Var("strm",LTy F8), 5793 [(LLC([Var("b1",F8),Var("b2",F8),Var("b3",F8),Var("b4",F8)], 5794 Var("t",LTy F8)), 5795 TP[Mop(SE F64, 5796 CC[Var("b4",F8),Var("b3",F8),Var("b2",F8),Var("b1",F8)]), 5797 Mop(Some,Var("t",LTy F8))]), 5798 (AVar(LTy F8),TP[LX F64,LO(LTy F8)])])) 5799; 5800val immediate64_def = Def 5801 ("immediate64",Var("strm",LTy F8), 5802 CS(Var("strm",LTy F8), 5803 [(LLC([Var("b1",F8),Var("b2",F8),Var("b3",F8),Var("b4",F8), 5804 Var("b5",F8),Var("b6",F8),Var("b7",F8),Var("b8",F8)], 5805 Var("t",LTy F8)), 5806 TP[CC[Var("b8",F8),Var("b7",F8),Var("b6",F8),Var("b5",F8), 5807 Var("b4",F8),Var("b3",F8),Var("b2",F8),Var("b1",F8)], 5808 Mop(Some,Var("t",LTy F8))]), 5809 (AVar(LTy F8),TP[LX F64,LO(LTy F8)])])) 5810; 5811val immediate_def = Def 5812 ("immediate",TP[Var("size",CTy"Zsize"),Var("strm",LTy F8)], 5813 CS(Var("size",CTy"Zsize"), 5814 [(Call("Z8",CTy"Zsize",AVar bTy), 5815 Call("immediate8",PTy(F64,OTy(LTy F8)),Var("strm",LTy F8))), 5816 (Const("Z16",CTy"Zsize"), 5817 Call("immediate16",PTy(F64,OTy(LTy F8)),Var("strm",LTy F8))), 5818 (AVar(CTy"Zsize"), 5819 Call("immediate32",PTy(F64,OTy(LTy F8)),Var("strm",LTy F8)))])) 5820; 5821val oimmediate_def = Def 5822 ("oimmediate",TP[Var("size",CTy"Zsize"),Var("strm",OTy(LTy F8))], 5823 CS(Var("strm",OTy(LTy F8)), 5824 [(Mop(Some,Var("s",LTy F8)), 5825 Call 5826 ("immediate",PTy(F64,OTy(LTy F8)), 5827 TP[Var("size",CTy"Zsize"),Var("s",LTy F8)])), 5828 (LO(LTy F8),TP[LX F64,LO(LTy F8)])])) 5829; 5830val full_immediate_def = Def 5831 ("full_immediate",TP[Var("size",CTy"Zsize"),Var("strm",LTy F8)], 5832 ITE(EQ(Var("size",CTy"Zsize"),Const("Z64",CTy"Zsize")), 5833 Call("immediate64",PTy(F64,OTy(LTy F8)),Var("strm",LTy F8)), 5834 Call 5835 ("immediate",PTy(F64,OTy(LTy F8)), 5836 TP[Var("size",CTy"Zsize"),Var("strm",LTy F8)]))) 5837; 5838val rec'REX_def = Def 5839 ("rec'REX",Var("x",F4), 5840 Rec(CTy"REX", 5841 [Bop(Bit,Var("x",F4),LN 0),Bop(Bit,Var("x",F4),LN 2), 5842 Bop(Bit,Var("x",F4),LN 3),Bop(Bit,Var("x",F4),LN 1)])) 5843; 5844val reg'REX_def = Def 5845 ("reg'REX",Var("x",CTy"REX"), 5846 CS(Var("x",CTy"REX"), 5847 [(Rec(CTy"REX",[bVar"B",bVar"R",bVar"W",bVar"X"]), 5848 CC[Mop(Cast F1,bVar"W"),Mop(Cast F1,bVar"R"),Mop(Cast F1,bVar"X"), 5849 Mop(Cast F1,bVar"B")])])) 5850; 5851val write'rec'REX_def = Def 5852 ("write'rec'REX",TP[AVar F4,Var("x",CTy"REX")], 5853 Call("reg'REX",F4,Var("x",CTy"REX"))) 5854; 5855val write'reg'REX_def = Def 5856 ("write'reg'REX",TP[AVar(CTy"REX"),Var("x",F4)], 5857 Call("rec'REX",CTy"REX",Var("x",F4))) 5858; 5859val RexReg_def = Def 5860 ("RexReg",TP[bVar"b",Var("r",FTy 3)], 5861 Mop(Cast(CTy"Zreg"),CC[Mop(Cast F1,bVar"b"),Var("r",FTy 3)])) 5862; 5863val readDisplacement_def = Def 5864 ("readDisplacement",TP[Var("Mod",FTy 2),Var("strm",LTy F8)], 5865 ITB([(EQ(Var("Mod",FTy 2),LW(1,2)), 5866 Call("immediate8",PTy(F64,OTy(LTy F8)),Var("strm",LTy F8))), 5867 (EQ(Var("Mod",FTy 2),LW(2,2)), 5868 Call("immediate32",PTy(F64,OTy(LTy F8)),Var("strm",LTy F8)))], 5869 TP[LW(0,64),Mop(Some,Var("strm",LTy F8))])) 5870; 5871val readSibDisplacement_def = Def 5872 ("readSibDisplacement",TP[Var("Mod",FTy 2),Var("strm",LTy F8)], 5873 ITE(EQ(Var("Mod",FTy 2),LW(1,2)), 5874 Call("immediate8",PTy(F64,OTy(LTy F8)),Var("strm",LTy F8)), 5875 Call("immediate32",PTy(F64,OTy(LTy F8)),Var("strm",LTy F8)))) 5876; 5877val readSIB_def = Def 5878 ("readSIB",TP[Var("REX",CTy"REX"),Var("Mod",FTy 2),Var("strm",LTy F8)], 5879 CS(Var("strm",LTy F8), 5880 [(LLC([Var("v#0",F8)],Var("v#1",LTy F8)), 5881 CS(TP[BL(8,Var("v#0",F8)),Var("v#1",LTy F8)], 5882 [(TP[TP[bVar"SS'1",bVar"SS'0",bVar"Index'2",bVar"Index'1", 5883 bVar"Index'0",bVar"Base'2",bVar"Base'1",bVar"Base'0"], 5884 Var("strm1",LTy F8)], 5885 Let(Var("base",CTy"Zreg"), 5886 Call 5887 ("RexReg",CTy"Zreg", 5888 TP[Dest("B",bTy,Var("REX",CTy"REX")), 5889 Mop(Cast(FTy 3), 5890 LL[bVar"Base'2",bVar"Base'1",bVar"Base'0"])]), 5891 Let(Var("index",CTy"Zreg"), 5892 Call 5893 ("RexReg",CTy"Zreg", 5894 TP[Dest("X",bTy,Var("REX",CTy"REX")), 5895 Mop(Cast(FTy 3), 5896 LL[bVar"Index'2",bVar"Index'1", 5897 bVar"Index'0"])]), 5898 Let(Var("scaled_index",OTy(PTy(FTy 2,CTy"Zreg"))), 5899 ITE(EQ(Var("index",CTy"Zreg"),LC("RSP",CTy"Zreg")), 5900 LO(PTy(FTy 2,CTy"Zreg")), 5901 Mop(Some, 5902 TP[Mop(Cast(FTy 2), 5903 LL[bVar"SS'1",bVar"SS'0"]), 5904 Var("index",CTy"Zreg")])), 5905 ITE(EQ(Var("base",CTy"Zreg"),LC("RBP",CTy"Zreg")), 5906 Let(TP[Var("displacement",F64), 5907 Var("strm2",OTy(LTy F8))], 5908 Call 5909 ("readSibDisplacement", 5910 PTy(F64,OTy(LTy F8)), 5911 TP[Var("Mod",FTy 2), 5912 Var("strm1",LTy F8)]), 5913 TP[Call 5914 ("Zm",CTy"Zrm", 5915 TP[Var("scaled_index", 5916 OTy(PTy(FTy 2,CTy"Zreg"))), 5917 ITE(EQ(Var("Mod",FTy 2),LW(0,2)), 5918 Const("ZnoBase",CTy"Zbase"), 5919 Call 5920 ("ZregBase",CTy"Zbase", 5921 Var("base",CTy"Zreg"))), 5922 Var("displacement",F64)]), 5923 Var("strm2",OTy(LTy F8))]), 5924 Let(TP[Var("displacement",F64), 5925 Var("strm2",OTy(LTy F8))], 5926 Call 5927 ("readDisplacement", 5928 PTy(F64,OTy(LTy F8)), 5929 TP[Var("Mod",FTy 2), 5930 Var("strm1",LTy F8)]), 5931 TP[Call 5932 ("Zm",CTy"Zrm", 5933 TP[Var("scaled_index", 5934 OTy(PTy(FTy 2,CTy"Zreg"))), 5935 Call 5936 ("ZregBase",CTy"Zbase", 5937 Var("base",CTy"Zreg")), 5938 Var("displacement",F64)]), 5939 Var("strm2",OTy(LTy F8))]))))))])), 5940 (AVar(LTy F8),TP[LX(CTy"Zrm"),LO(LTy F8)])])) 5941; 5942val readModRM_def = Def 5943 ("readModRM",TP[Var("REX",CTy"REX"),Var("strm",LTy F8)], 5944 CS(Var("strm",LTy F8), 5945 [(LLC([Var("v#0",F8)],Var("v#1",LTy F8)), 5946 CS(TP[BL(8,Var("v#0",F8)),Var("v#1",LTy F8)], 5947 [(TP[TP[LF,LF,bVar"RegOpc'2",bVar"RegOpc'1",bVar"RegOpc'0",LT, 5948 LF,LT],Var("strm1",LTy F8)], 5949 Let(TP[Var("displacement",F64),Var("strm2",OTy(LTy F8))], 5950 Call 5951 ("immediate32",PTy(F64,OTy(LTy F8)),Var("strm1",LTy F8)), 5952 TP[Call 5953 ("RexReg",CTy"Zreg", 5954 TP[Dest("R",bTy,Var("REX",CTy"REX")), 5955 Mop(Cast(FTy 3), 5956 LL[bVar"RegOpc'2",bVar"RegOpc'1", 5957 bVar"RegOpc'0"])]), 5958 Call 5959 ("Zm",CTy"Zrm", 5960 TP[LO(PTy(FTy 2,CTy"Zreg")), 5961 Const("ZripBase",CTy"Zbase"), 5962 Var("displacement",F64)]), 5963 Var("strm2",OTy(LTy F8))])), 5964 (TP[TP[LT,LT,bVar"REG'2",bVar"REG'1",bVar"REG'0",bVar"RM'2", 5965 bVar"RM'1",bVar"RM'0"],Var("strm1",LTy F8)], 5966 TP[Call 5967 ("RexReg",CTy"Zreg", 5968 TP[Dest("R",bTy,Var("REX",CTy"REX")), 5969 Mop(Cast(FTy 3), 5970 LL[bVar"REG'2",bVar"REG'1",bVar"REG'0"])]), 5971 Call 5972 ("Zr",CTy"Zrm", 5973 Call 5974 ("RexReg",CTy"Zreg", 5975 TP[Dest("B",bTy,Var("REX",CTy"REX")), 5976 Mop(Cast(FTy 3), 5977 LL[bVar"RM'2",bVar"RM'1",bVar"RM'0"])])), 5978 Mop(Some,Var("strm1",LTy F8))]), 5979 (TP[TP[bVar"Mod'1",bVar"Mod'0",bVar"RegOpc'2",bVar"RegOpc'1", 5980 bVar"RegOpc'0",LT,LF,LF],Var("strm1",LTy F8)], 5981 Let(TP[Var("sib",CTy"Zrm"),Var("strm2",OTy(LTy F8))], 5982 Call 5983 ("readSIB",PTy(CTy"Zrm",OTy(LTy F8)), 5984 TP[Var("REX",CTy"REX"), 5985 Mop(Cast(FTy 2),LL[bVar"Mod'1",bVar"Mod'0"]), 5986 Var("strm1",LTy F8)]), 5987 TP[Call 5988 ("RexReg",CTy"Zreg", 5989 TP[Dest("R",bTy,Var("REX",CTy"REX")), 5990 Mop(Cast(FTy 3), 5991 LL[bVar"RegOpc'2",bVar"RegOpc'1", 5992 bVar"RegOpc'0"])]),Var("sib",CTy"Zrm"), 5993 Var("strm2",OTy(LTy F8))])), 5994 (TP[TP[bVar"Mod'1",bVar"Mod'0",bVar"RegOpc'2",bVar"RegOpc'1", 5995 bVar"RegOpc'0",bVar"RM'2",bVar"RM'1",bVar"RM'0"], 5996 Var("strm1",LTy F8)], 5997 Let(TP[Var("displacement",F64),Var("strm2",OTy(LTy F8))], 5998 Call 5999 ("readDisplacement",PTy(F64,OTy(LTy F8)), 6000 TP[Mop(Cast(FTy 2),LL[bVar"Mod'1",bVar"Mod'0"]), 6001 Var("strm1",LTy F8)]), 6002 TP[Call 6003 ("RexReg",CTy"Zreg", 6004 TP[Dest("R",bTy,Var("REX",CTy"REX")), 6005 Mop(Cast(FTy 3), 6006 LL[bVar"RegOpc'2",bVar"RegOpc'1", 6007 bVar"RegOpc'0"])]), 6008 Call 6009 ("Zm",CTy"Zrm", 6010 TP[LO(PTy(FTy 2,CTy"Zreg")), 6011 Call 6012 ("ZregBase",CTy"Zbase", 6013 Call 6014 ("RexReg",CTy"Zreg", 6015 TP[Dest("B",bTy,Var("REX",CTy"REX")), 6016 Mop(Cast(FTy 3), 6017 LL[bVar"RM'2",bVar"RM'1",bVar"RM'0"])])), 6018 Var("displacement",F64)]), 6019 Var("strm2",OTy(LTy F8))]))])), 6020 (AVar(LTy F8),TP[LX(CTy"Zreg"),LX(CTy"Zrm"),LO(LTy F8)])])) 6021; 6022val readOpcodeModRM_def = Def 6023 ("readOpcodeModRM",TP[Var("REX",CTy"REX"),Var("strm",LTy F8)], 6024 Let(TP[Var("opcode",CTy"Zreg"),Var("rm",CTy"Zrm"), 6025 Var("strm1",OTy(LTy F8))], 6026 Call 6027 ("readModRM",PTy(CTy"Zreg",PTy(CTy"Zrm",OTy(LTy F8))), 6028 TP[Var("REX",CTy"REX"),Var("strm",LTy F8)]), 6029 TP[Mop(Cast(FTy 3), 6030 Bop(Mod,Mop(Cast nTy,Var("opcode",CTy"Zreg")),LN 8)), 6031 Var("rm",CTy"Zrm"),Var("strm1",OTy(LTy F8))])) 6032; 6033val prefixGroup_def = Def 6034 ("prefixGroup",Var("b",F8), 6035 CS(Var("b",F8), 6036 [(LW(240,8),LN 1),(LW(242,8),LN 1),(LW(243,8),LN 1),(LW(38,8),LN 2), 6037 (LW(46,8),LN 2),(LW(54,8),LN 2),(LW(62,8),LN 2),(LW(100,8),LN 2), 6038 (LW(101,8),LN 2),(LW(102,8),LN 3),(LW(103,8),LN 4), 6039 (AVar F8,ITE(EQ(EX(Var("b",F8),LN 7,LN 4,F4),LW(4,4)),LN 5,LN 0))])) 6040; 6041val readPrefix_def = Def 6042 ("readPrefix",TP[Var("s",STy nTy),Var("p",LTy F8),Var("strm",LTy F8)], 6043 CS(Var("strm",LTy F8), 6044 [(LLC([Var("h",F8)],Var("strm1",LTy F8)), 6045 Let(nVar"group",Call("prefixGroup",nTy,Var("h",F8)), 6046 ITB([(EQ(nVar"group",LN 0), 6047 Mop(Some, 6048 TP[Var("p",LTy F8),LF, 6049 Call("rec'REX",CTy"REX",LW(0,4)), 6050 Var("strm",LTy F8)])), 6051 (EQ(nVar"group",LN 5), 6052 Mop(Some, 6053 TP[Var("p",LTy F8),LT, 6054 Call 6055 ("rec'REX",CTy"REX", 6056 EX(Var("h",F8),LN 3,LN 0,F4)), 6057 Var("strm1",LTy F8)])), 6058 (Bop(In,nVar"group",Var("s",STy nTy)), 6059 LO(PTy(LTy F8,PTy(bTy,PTy(CTy"REX",LTy F8)))))], 6060 Call 6061 ("readPrefix", 6062 OTy(PTy(LTy F8,PTy(bTy,PTy(CTy"REX",LTy F8)))), 6063 TP[Bop(Insert,nVar"group",Var("s",STy nTy)), 6064 LLC([Var("h",F8)],Var("p",LTy F8)), 6065 Var("strm1",LTy F8)])))), 6066 (LNL F8, 6067 Mop(Some,TP[Var("p",LTy F8),LF,LX(CTy"REX"),Var("strm",LTy F8)]))])) 6068; 6069val readPrefixes_def = Def 6070 ("readPrefixes",Var("strm",LTy F8), 6071 Call 6072 ("readPrefix",OTy(PTy(LTy F8,PTy(bTy,PTy(CTy"REX",LTy F8)))), 6073 TP[LE nTy,LNL F8,Var("strm",LTy F8)])) 6074; 6075val OpSize_def = Def 6076 ("OpSize",TP[bVar"have_rex",bVar"w",Var("v",F1),bVar"override"], 6077 ITB([(EQ(Var("v",F1),LW(0,1)),Call("Z8",CTy"Zsize",bVar"have_rex")), 6078 (bVar"w",Const("Z64",CTy"Zsize")), 6079 (bVar"override",Const("Z16",CTy"Zsize"))],Const("Z32",CTy"Zsize"))) 6080; 6081val isZm_def = Def 6082 ("isZm",Var("rm",CTy"Zrm"), 6083 CS(Var("rm",CTy"Zrm"), 6084 [(Call 6085 ("Zm",CTy"Zrm", 6086 AVar(PTy(OTy(PTy(FTy 2,CTy"Zreg")),PTy(CTy"Zbase",F64)))),LT), 6087 (AVar(CTy"Zrm"),LF)])) 6088; 6089val x64_decode_def = Def 6090 ("x64_decode",Var("strm",LTy F8), 6091 CS(Call 6092 ("readPrefixes",OTy(PTy(LTy F8,PTy(bTy,PTy(CTy"REX",LTy F8)))), 6093 Var("strm",LTy F8)), 6094 [(LO(PTy(LTy F8,PTy(bTy,PTy(CTy"REX",LTy F8)))), 6095 Call("Zdec_fail",CTy"Zinst",LS"Bad prefix")), 6096 (Mop(Some, 6097 TP[Var("p",LTy F8),bVar"have_rex",Var("REX",CTy"REX"), 6098 Var("strm1",LTy F8)]), 6099 Let(Var("prefixes",STy F8),Mop(SofL,Var("p",LTy F8)), 6100 Let(bVar"op_size_override", 6101 Bop(In,LW(102,8),Var("prefixes",STy F8)), 6102 ITE(Bop(In,LW(103,8),Var("prefixes",STy F8)), 6103 Call 6104 ("Zdec_fail",CTy"Zinst", 6105 LS"address override prefix not supported"), 6106 CS(Var("strm1",LTy F8), 6107 [(LLC([Var("v#0",F8)],Var("v#1",LTy F8)), 6108 CS(TP[BL(8,Var("v#0",F8)),Var("v#1",LTy F8)], 6109 [(TP[TP[LF,LF,bVar"opc'2",bVar"opc'1", 6110 bVar"opc'0",LF,bVar"x'0",bVar"v'0"], 6111 Var("strm2",LTy F8)], 6112 Let(TP[Var("reg",CTy"Zreg"), 6113 Var("rm",CTy"Zrm"), 6114 Var("strm3",OTy(LTy F8))], 6115 Call 6116 ("readModRM", 6117 PTy(CTy"Zreg", 6118 PTy(CTy"Zrm",OTy(LTy F8))), 6119 TP[Var("REX",CTy"REX"), 6120 Var("strm2",LTy F8)]), 6121 Call 6122 ("Zfull_inst",CTy"Zinst", 6123 TP[Var("p",LTy F8), 6124 Call 6125 ("Zbinop",CTy"instruction", 6126 TP[Mop(Cast(CTy"Zbinop_name"), 6127 Mop(Cast(FTy 3), 6128 LL[bVar"opc'2", 6129 bVar"opc'1", 6130 bVar"opc'0"])), 6131 Call 6132 ("OpSize",CTy"Zsize", 6133 TP[bVar"have_rex", 6134 Dest 6135 ("W",bTy, 6136 Var("REX",CTy"REX")), 6137 Mop(Cast F1, 6138 LL[bVar"v'0"]), 6139 bVar"op_size_override"]), 6140 ITE(EQ(Mop(Cast F1, 6141 LL[bVar"x'0"]), 6142 LW(0,1)), 6143 Call 6144 ("Zrm_r", 6145 CTy"Zdest_src", 6146 TP[Var("rm",CTy"Zrm"), 6147 Var("reg", 6148 CTy"Zreg")]), 6149 Call 6150 ("Zr_rm", 6151 CTy"Zdest_src", 6152 TP[Var("reg", 6153 CTy"Zreg"), 6154 Var("rm",CTy"Zrm")]))]), 6155 Var("strm3",OTy(LTy F8))]))), 6156 (TP[TP[LF,LF,bVar"opc'2",bVar"opc'1", 6157 bVar"opc'0",LT,LF,bVar"v'0"], 6158 Var("strm2",LTy F8)], 6159 Let(Var("size",CTy"Zsize"), 6160 Call 6161 ("OpSize",CTy"Zsize", 6162 TP[bVar"have_rex", 6163 Dest("W",bTy,Var("REX",CTy"REX")), 6164 Mop(Cast F1,LL[bVar"v'0"]), 6165 bVar"op_size_override"]), 6166 Let(TP[Var("imm",F64), 6167 Var("strm3",OTy(LTy F8))], 6168 Call 6169 ("immediate",PTy(F64,OTy(LTy F8)), 6170 TP[Var("size",CTy"Zsize"), 6171 Var("strm2",LTy F8)]), 6172 Call 6173 ("Zfull_inst",CTy"Zinst", 6174 TP[Var("p",LTy F8), 6175 Call 6176 ("Zbinop",CTy"instruction", 6177 TP[Mop(Cast 6178 (CTy"Zbinop_name"), 6179 Mop(Cast(FTy 3), 6180 LL[bVar"opc'2", 6181 bVar"opc'1", 6182 bVar"opc'0"])), 6183 Var("size",CTy"Zsize"), 6184 Call 6185 ("Zrm_i", 6186 CTy"Zdest_src", 6187 TP[Call 6188 ("Zr",CTy"Zrm", 6189 LC("RAX", 6190 CTy"Zreg")), 6191 Var("imm",F64)])]), 6192 Var("strm3",OTy(LTy F8))])))), 6193 (TP[TP[LF,LT,LF,LT,bVar"b'0",bVar"r'2", 6194 bVar"r'1",bVar"r'0"], 6195 Var("strm2",LTy F8)], 6196 Let(Var("reg",CTy"Zrm"), 6197 Call 6198 ("Zr",CTy"Zrm", 6199 Mop(Cast(CTy"Zreg"), 6200 CC[Mop(Cast F1, 6201 Dest 6202 ("B",bTy, 6203 Var("REX",CTy"REX"))), 6204 Mop(Cast(FTy 3), 6205 LL[bVar"r'2",bVar"r'1", 6206 bVar"r'0"])])), 6207 Call 6208 ("Zfull_inst",CTy"Zinst", 6209 TP[Var("p",LTy F8), 6210 ITE(EQ(Mop(Cast F1,LL[bVar"b'0"]), 6211 LW(0,1)), 6212 Call 6213 ("Zpush",CTy"instruction", 6214 Call 6215 ("Zrm",CTy"Zimm_rm", 6216 Var("reg",CTy"Zrm"))), 6217 Call 6218 ("Zpop",CTy"instruction", 6219 Var("reg",CTy"Zrm"))), 6220 Mop(Some,Var("strm2",LTy F8))]))), 6221 (TP[TP[LF,LT,LT,LF,LF,LF,LT,LT], 6222 Var("strm2",LTy F8)], 6223 Let(TP[Var("reg",CTy"Zreg"), 6224 Var("rm",CTy"Zrm"), 6225 Var("strm3",OTy(LTy F8))], 6226 Call 6227 ("readModRM", 6228 PTy(CTy"Zreg", 6229 PTy(CTy"Zrm",OTy(LTy F8))), 6230 TP[Var("REX",CTy"REX"), 6231 Var("strm2",LTy F8)]), 6232 Call 6233 ("Zfull_inst",CTy"Zinst", 6234 TP[Var("p",LTy F8), 6235 Call 6236 ("Zmovsx",CTy"instruction", 6237 TP[Const("Z32",CTy"Zsize"), 6238 Call 6239 ("Zr_rm",CTy"Zdest_src", 6240 TP[Var("reg",CTy"Zreg"), 6241 Var("rm",CTy"Zrm")]), 6242 Const("Z64",CTy"Zsize")]), 6243 Var("strm3",OTy(LTy F8))]))), 6244 (TP[TP[LF,LT,LT,LF,LT,LF,bVar"b'0",LF], 6245 Var("strm2",LTy F8)], 6246 Let(TP[Var("imm",F64), 6247 Var("strm3",OTy(LTy F8))], 6248 ITE(EQ(Mop(Cast F1,LL[bVar"b'0"]), 6249 LW(1,1)), 6250 Call 6251 ("immediate8", 6252 PTy(F64,OTy(LTy F8)), 6253 Var("strm2",LTy F8)), 6254 Call 6255 ("immediate32", 6256 PTy(F64,OTy(LTy F8)), 6257 Var("strm2",LTy F8))), 6258 Call 6259 ("Zfull_inst",CTy"Zinst", 6260 TP[Var("p",LTy F8), 6261 Call 6262 ("Zpush",CTy"instruction", 6263 Call 6264 ("Zimm",CTy"Zimm_rm", 6265 Var("imm",F64))), 6266 Var("strm3",OTy(LTy F8))]))), 6267 (TP[TP[LF,LT,LT,LF,LT,LF,bVar"b'0",LT], 6268 Var("strm2",LTy F8)], 6269 Let(TP[Var("reg",CTy"Zreg"), 6270 Var("rm",CTy"Zrm"), 6271 Var("strm3",OTy(LTy F8))], 6272 Call 6273 ("readModRM", 6274 PTy(CTy"Zreg", 6275 PTy(CTy"Zrm",OTy(LTy F8))), 6276 TP[Var("REX",CTy"REX"), 6277 Var("strm2",LTy F8)]), 6278 CS(Var("strm3",OTy(LTy F8)), 6279 [(LO(LTy F8), 6280 Call 6281 ("Zdec_fail",CTy"Zinst", 6282 LS"not enough bytes")), 6283 (Mop(Some,Var("s",LTy F8)), 6284 Let(TP[Var("imm",F64), 6285 Var("strm4",OTy(LTy F8))], 6286 ITE(EQ(Mop(Cast F1, 6287 LL[bVar"b'0"]), 6288 LW(1,1)), 6289 Call 6290 ("immediate8", 6291 PTy(F64,OTy(LTy F8)), 6292 Var("s",LTy F8)), 6293 Call 6294 ("immediate32", 6295 PTy(F64,OTy(LTy F8)), 6296 Var("s",LTy F8))), 6297 Call 6298 ("Zfull_inst",CTy"Zinst", 6299 TP[Var("p",LTy F8), 6300 Call 6301 ("Zimul3", 6302 CTy"instruction", 6303 TP[Call 6304 ("OpSize", 6305 CTy"Zsize", 6306 TP[bVar"have_rex", 6307 Dest 6308 ("W",bTy, 6309 Var("REX", 6310 CTy"REX")), 6311 LW(1,1), 6312 bVar"op_size_override"]), 6313 Var("reg",CTy"Zreg"), 6314 Var("rm",CTy"Zrm"), 6315 Var("imm",F64)]), 6316 Var("strm4",OTy(LTy F8))])))]))), 6317 (TP[TP[LF,LT,LT,LT,bVar"c'3",bVar"c'2", 6318 bVar"c'1",bVar"c'0"], 6319 Var("strm2",LTy F8)], 6320 Let(TP[Var("imm",F64), 6321 Var("strm3",OTy(LTy F8))], 6322 Call 6323 ("immediate8",PTy(F64,OTy(LTy F8)), 6324 Var("strm2",LTy F8)), 6325 Call 6326 ("Zfull_inst",CTy"Zinst", 6327 TP[Var("p",LTy F8), 6328 Call 6329 ("Zjcc",CTy"instruction", 6330 TP[Mop(Cast(CTy"Zcond"), 6331 Mop(Cast F4, 6332 LL[bVar"c'3", 6333 bVar"c'2", 6334 bVar"c'1", 6335 bVar"c'0"])), 6336 Var("imm",F64)]), 6337 Var("strm3",OTy(LTy F8))]))), 6338 (TP[TP[LT,LF,LF,LF,LF,LF,LF,bVar"v'0"], 6339 Var("strm2",LTy F8)], 6340 Let(Var("size",CTy"Zsize"), 6341 Call 6342 ("OpSize",CTy"Zsize", 6343 TP[bVar"have_rex", 6344 Dest("W",bTy,Var("REX",CTy"REX")), 6345 Mop(Cast F1,LL[bVar"v'0"]), 6346 bVar"op_size_override"]), 6347 Let(TP[Var("opcode",FTy 3), 6348 Var("rm",CTy"Zrm"), 6349 Var("strm3",OTy(LTy F8))], 6350 Call 6351 ("readOpcodeModRM", 6352 PTy(FTy 3, 6353 PTy(CTy"Zrm",OTy(LTy F8))), 6354 TP[Var("REX",CTy"REX"), 6355 Var("strm2",LTy F8)]), 6356 Let(TP[Var("imm",F64), 6357 Var("strm4",OTy(LTy F8))], 6358 Call 6359 ("oimmediate", 6360 PTy(F64,OTy(LTy F8)), 6361 TP[Var("size",CTy"Zsize"), 6362 Var("strm3",OTy(LTy F8))]), 6363 Call 6364 ("Zfull_inst",CTy"Zinst", 6365 TP[Var("p",LTy F8), 6366 Call 6367 ("Zbinop", 6368 CTy"instruction", 6369 TP[Mop(Cast 6370 (CTy"Zbinop_name"), 6371 Var("opcode", 6372 FTy 3)), 6373 Var("size", 6374 CTy"Zsize"), 6375 Call 6376 ("Zrm_i", 6377 CTy"Zdest_src", 6378 TP[Var("rm", 6379 CTy"Zrm"), 6380 Var("imm",F64)])]), 6381 Var("strm4",OTy(LTy F8))]))))), 6382 (TP[TP[LT,LF,LF,LF,LF,LF,LT,LT], 6383 Var("strm2",LTy F8)], 6384 Let(TP[Var("opcode",FTy 3), 6385 Var("rm",CTy"Zrm"), 6386 Var("strm3",OTy(LTy F8))], 6387 Call 6388 ("readOpcodeModRM", 6389 PTy(FTy 3,PTy(CTy"Zrm",OTy(LTy F8))), 6390 TP[Var("REX",CTy"REX"), 6391 Var("strm2",LTy F8)]), 6392 Let(TP[Var("imm",F64), 6393 Var("strm4",OTy(LTy F8))], 6394 Call 6395 ("oimmediate8", 6396 PTy(F64,OTy(LTy F8)), 6397 Var("strm3",OTy(LTy F8))), 6398 Call 6399 ("Zfull_inst",CTy"Zinst", 6400 TP[Var("p",LTy F8), 6401 Call 6402 ("Zbinop",CTy"instruction", 6403 TP[Mop(Cast 6404 (CTy"Zbinop_name"), 6405 Var("opcode",FTy 3)), 6406 Call 6407 ("OpSize",CTy"Zsize", 6408 TP[LF, 6409 Dest 6410 ("W",bTy, 6411 Var("REX", 6412 CTy"REX")), 6413 LW(1,1), 6414 bVar"op_size_override"]), 6415 Call 6416 ("Zrm_i", 6417 CTy"Zdest_src", 6418 TP[Var("rm",CTy"Zrm"), 6419 Var("imm",F64)])]), 6420 Var("strm4",OTy(LTy F8))])))), 6421 (TP[TP[LT,LF,LF,LF,LF,LT,LF,bVar"v'0"], 6422 Var("strm2",LTy F8)], 6423 Let(TP[Var("reg",CTy"Zreg"), 6424 Var("rm",CTy"Zrm"), 6425 Var("strm3",OTy(LTy F8))], 6426 Call 6427 ("readModRM", 6428 PTy(CTy"Zreg", 6429 PTy(CTy"Zrm",OTy(LTy F8))), 6430 TP[Var("REX",CTy"REX"), 6431 Var("strm2",LTy F8)]), 6432 Call 6433 ("Zfull_inst",CTy"Zinst", 6434 TP[Var("p",LTy F8), 6435 Call 6436 ("Zbinop",CTy"instruction", 6437 TP[LC("Ztest",CTy"Zbinop_name"), 6438 Call 6439 ("OpSize",CTy"Zsize", 6440 TP[bVar"have_rex", 6441 Dest 6442 ("W",bTy, 6443 Var("REX",CTy"REX")), 6444 Mop(Cast F1, 6445 LL[bVar"v'0"]), 6446 bVar"op_size_override"]), 6447 Call 6448 ("Zrm_r",CTy"Zdest_src", 6449 TP[Var("rm",CTy"Zrm"), 6450 Var("reg",CTy"Zreg")])]), 6451 Var("strm3",OTy(LTy F8))]))), 6452 (TP[TP[LT,LF,LF,LF,LF,LT,LT,bVar"v'0"], 6453 Var("strm2",LTy F8)], 6454 Let(TP[Var("reg",CTy"Zreg"), 6455 Var("rm",CTy"Zrm"), 6456 Var("strm3",OTy(LTy F8))], 6457 Call 6458 ("readModRM", 6459 PTy(CTy"Zreg", 6460 PTy(CTy"Zrm",OTy(LTy F8))), 6461 TP[Var("REX",CTy"REX"), 6462 Var("strm2",LTy F8)]), 6463 Call 6464 ("Zfull_inst",CTy"Zinst", 6465 TP[Var("p",LTy F8), 6466 Call 6467 ("Zxchg",CTy"instruction", 6468 TP[Call 6469 ("OpSize",CTy"Zsize", 6470 TP[bVar"have_rex", 6471 Dest 6472 ("W",bTy, 6473 Var("REX",CTy"REX")), 6474 Mop(Cast F1, 6475 LL[bVar"v'0"]), 6476 bVar"op_size_override"]), 6477 Var("rm",CTy"Zrm"), 6478 Var("reg",CTy"Zreg")]), 6479 Var("strm3",OTy(LTy F8))]))), 6480 (TP[TP[LT,LF,LF,LF,LT,LF,bVar"x'0",bVar"v'0"], 6481 Var("strm2",LTy F8)], 6482 Let(TP[Var("reg",CTy"Zreg"), 6483 Var("rm",CTy"Zrm"), 6484 Var("strm3",OTy(LTy F8))], 6485 Call 6486 ("readModRM", 6487 PTy(CTy"Zreg", 6488 PTy(CTy"Zrm",OTy(LTy F8))), 6489 TP[Var("REX",CTy"REX"), 6490 Var("strm2",LTy F8)]), 6491 Call 6492 ("Zfull_inst",CTy"Zinst", 6493 TP[Var("p",LTy F8), 6494 Call 6495 ("Zmov",CTy"instruction", 6496 TP[LC("Z_ALWAYS",CTy"Zcond"), 6497 Call 6498 ("OpSize",CTy"Zsize", 6499 TP[bVar"have_rex", 6500 Dest 6501 ("W",bTy, 6502 Var("REX",CTy"REX")), 6503 Mop(Cast F1, 6504 LL[bVar"v'0"]), 6505 bVar"op_size_override"]), 6506 ITE(EQ(Mop(Cast F1, 6507 LL[bVar"x'0"]), 6508 LW(0,1)), 6509 Call 6510 ("Zrm_r", 6511 CTy"Zdest_src", 6512 TP[Var("rm",CTy"Zrm"), 6513 Var("reg", 6514 CTy"Zreg")]), 6515 Call 6516 ("Zr_rm", 6517 CTy"Zdest_src", 6518 TP[Var("reg", 6519 CTy"Zreg"), 6520 Var("rm",CTy"Zrm")]))]), 6521 Var("strm3",OTy(LTy F8))]))), 6522 (TP[TP[LT,LF,LF,LF,LT,LT,LF,LT], 6523 Var("strm2",LTy F8)], 6524 Let(TP[Var("reg",CTy"Zreg"), 6525 Var("rm",CTy"Zrm"), 6526 Var("strm3",OTy(LTy F8))], 6527 Call 6528 ("readModRM", 6529 PTy(CTy"Zreg", 6530 PTy(CTy"Zrm",OTy(LTy F8))), 6531 TP[Var("REX",CTy"REX"), 6532 Var("strm2",LTy F8)]), 6533 ITE(Call("isZm",bTy,Var("rm",CTy"Zrm")), 6534 Call 6535 ("Zfull_inst",CTy"Zinst", 6536 TP[Var("p",LTy F8), 6537 Call 6538 ("Zlea",CTy"instruction", 6539 TP[Call 6540 ("OpSize",CTy"Zsize", 6541 TP[LT, 6542 Dest 6543 ("W",bTy, 6544 Var("REX", 6545 CTy"REX")), 6546 LW(1,1), 6547 bVar"op_size_override"]), 6548 Call 6549 ("Zr_rm", 6550 CTy"Zdest_src", 6551 TP[Var("reg", 6552 CTy"Zreg"), 6553 Var("rm",CTy"Zrm")])]), 6554 Var("strm3",OTy(LTy F8))]), 6555 Call 6556 ("Zdec_fail",CTy"Zinst", 6557 LS"LEA with register argument")))), 6558 (TP[TP[LT,LF,LF,LF,LT,LT,LT,LT], 6559 Var("strm2",LTy F8)], 6560 Let(TP[Var("opcode",FTy 3), 6561 Var("rm",CTy"Zrm"), 6562 Var("strm3",OTy(LTy F8))], 6563 Call 6564 ("readOpcodeModRM", 6565 PTy(FTy 3,PTy(CTy"Zrm",OTy(LTy F8))), 6566 TP[Var("REX",CTy"REX"), 6567 Var("strm2",LTy F8)]), 6568 ITE(EQ(Var("opcode",FTy 3),LW(0,3)), 6569 Call 6570 ("Zfull_inst",CTy"Zinst", 6571 TP[Var("p",LTy F8), 6572 Call 6573 ("Zpop",CTy"instruction", 6574 Var("rm",CTy"Zrm")), 6575 Var("strm3",OTy(LTy F8))]), 6576 Call 6577 ("Zdec_fail",CTy"Zinst", 6578 LS"Unsupported opcode: Group 1a")))), 6579 (TP[TP[LT,LF,LF,LT,LF,bVar"r'2",bVar"r'1", 6580 bVar"r'0"],Var("strm2",LTy F8)], 6581 Let(Var("reg",CTy"Zreg"), 6582 Call 6583 ("RexReg",CTy"Zreg", 6584 TP[Dest("B",bTy,Var("REX",CTy"REX")), 6585 Mop(Cast(FTy 3), 6586 LL[bVar"r'2",bVar"r'1", 6587 bVar"r'0"])]), 6588 ITE(EQ(Var("reg",CTy"Zreg"), 6589 LC("RAX",CTy"Zreg")), 6590 Call 6591 ("Zfull_inst",CTy"Zinst", 6592 TP[Var("p",LTy F8), 6593 Call 6594 ("Znop",CTy"instruction", 6595 Mop(Length, 6596 Var("strm",LTy F8))), 6597 Mop(Some,Var("strm2",LTy F8))]), 6598 Call 6599 ("Zfull_inst",CTy"Zinst", 6600 TP[Var("p",LTy F8), 6601 Call 6602 ("Zxchg",CTy"instruction", 6603 TP[Call 6604 ("OpSize",CTy"Zsize", 6605 TP[LT, 6606 Dest 6607 ("W",bTy, 6608 Var("REX", 6609 CTy"REX")), 6610 LW(1,1), 6611 bVar"op_size_override"]), 6612 Call 6613 ("Zr",CTy"Zrm", 6614 LC("RAX",CTy"Zreg")), 6615 Var("reg",CTy"Zreg")]), 6616 Mop(Some,Var("strm2",LTy F8))])))), 6617 (TP[TP[LT,LF,LT,LF,LT,LF,LF,bVar"v'0"], 6618 Var("strm2",LTy F8)], 6619 Let(Var("size",CTy"Zsize"), 6620 Call 6621 ("OpSize",CTy"Zsize", 6622 TP[LT, 6623 Dest("W",bTy,Var("REX",CTy"REX")), 6624 Mop(Cast F1,LL[bVar"v'0"]), 6625 bVar"op_size_override"]), 6626 Let(TP[Var("imm",F64), 6627 Var("strm3",OTy(LTy F8))], 6628 Call 6629 ("immediate",PTy(F64,OTy(LTy F8)), 6630 TP[Var("size",CTy"Zsize"), 6631 Var("strm2",LTy F8)]), 6632 Call 6633 ("Zfull_inst",CTy"Zinst", 6634 TP[Var("p",LTy F8), 6635 Call 6636 ("Zbinop",CTy"instruction", 6637 TP[LC("Ztest", 6638 CTy"Zbinop_name"), 6639 Var("size",CTy"Zsize"), 6640 Call 6641 ("Zrm_i", 6642 CTy"Zdest_src", 6643 TP[Call 6644 ("Zr",CTy"Zrm", 6645 LC("RAX", 6646 CTy"Zreg")), 6647 Var("imm",F64)])]), 6648 Var("strm3",OTy(LTy F8))])))), 6649 (TP[TP[LT,LF,LT,LT,bVar"v'0",bVar"r'2", 6650 bVar"r'1",bVar"r'0"], 6651 Var("strm2",LTy F8)], 6652 Let(Var("size",CTy"Zsize"), 6653 Call 6654 ("OpSize",CTy"Zsize", 6655 TP[bVar"have_rex", 6656 Dest("W",bTy,Var("REX",CTy"REX")), 6657 Mop(Cast F1,LL[bVar"v'0"]), 6658 bVar"op_size_override"]), 6659 Let(TP[Var("imm",F64), 6660 Var("strm3",OTy(LTy F8))], 6661 Call 6662 ("full_immediate", 6663 PTy(F64,OTy(LTy F8)), 6664 TP[Var("size",CTy"Zsize"), 6665 Var("strm2",LTy F8)]), 6666 Call 6667 ("Zfull_inst",CTy"Zinst", 6668 TP[Var("p",LTy F8), 6669 Call 6670 ("Zmov",CTy"instruction", 6671 TP[LC("Z_ALWAYS",CTy"Zcond"), 6672 Var("size",CTy"Zsize"), 6673 Call 6674 ("Zrm_i", 6675 CTy"Zdest_src", 6676 TP[Call 6677 ("Zr",CTy"Zrm", 6678 Call 6679 ("RexReg", 6680 CTy"Zreg", 6681 TP[Dest 6682 ("B", 6683 bTy, 6684 Var("REX", 6685 CTy"REX")), 6686 Mop(Cast 6687 (FTy 3), 6688 LL[bVar"r'2", 6689 bVar"r'1", 6690 bVar"r'0"])])), 6691 Var("imm",F64)])]), 6692 Var("strm3",OTy(LTy F8))])))), 6693 (TP[TP[LT,LT,LF,LF,LF,LF,LF,bVar"v'0"], 6694 Var("strm2",LTy F8)], 6695 Let(TP[Var("opcode",FTy 3), 6696 Var("rm",CTy"Zrm"), 6697 Var("strm3",OTy(LTy F8))], 6698 Call 6699 ("readOpcodeModRM", 6700 PTy(FTy 3,PTy(CTy"Zrm",OTy(LTy F8))), 6701 TP[Var("REX",CTy"REX"), 6702 Var("strm2",LTy F8)]), 6703 Let(TP[Var("imm",F64), 6704 Var("strm4",OTy(LTy F8))], 6705 Call 6706 ("oimmediate8", 6707 PTy(F64,OTy(LTy F8)), 6708 Var("strm3",OTy(LTy F8))), 6709 ITE(EQ(Var("opcode",FTy 3),LW(6,3)), 6710 Call 6711 ("Zdec_fail",CTy"Zinst", 6712 LS 6713 "Unsupported opcode: Shift Group 2"), 6714 Call 6715 ("Zfull_inst",CTy"Zinst", 6716 TP[Var("p",LTy F8), 6717 Call 6718 ("Zbinop", 6719 CTy"instruction", 6720 TP[Mop(Cast 6721 (CTy"Zbinop_name"), 6722 Bop(Add, 6723 Mop(Cast nTy, 6724 Var("opcode", 6725 FTy 3)), 6726 LN 8)), 6727 Call 6728 ("OpSize", 6729 CTy"Zsize", 6730 TP[bVar"have_rex", 6731 Dest 6732 ("W",bTy, 6733 Var("REX", 6734 CTy"REX")), 6735 Mop(Cast F1, 6736 LL[bVar"v'0"]), 6737 bVar"op_size_override"]), 6738 Call 6739 ("Zrm_i", 6740 CTy"Zdest_src", 6741 TP[Var("rm", 6742 CTy"Zrm"), 6743 Var("imm",F64)])]), 6744 Var("strm4",OTy(LTy F8))]))))), 6745 (TP[TP[LT,LT,LF,LF,LF,LF,LT,bVar"v'0"], 6746 Var("strm2",LTy F8)], 6747 ITE(EQ(Mop(Cast F1,LL[bVar"v'0"]),LW(0,1)), 6748 Let(TP[Var("imm",F64), 6749 Var("strm3",OTy(LTy F8))], 6750 Call 6751 ("immediate16", 6752 PTy(F64,OTy(LTy F8)), 6753 Var("strm2",LTy F8)), 6754 Call 6755 ("Zfull_inst",CTy"Zinst", 6756 TP[Var("p",LTy F8), 6757 Call 6758 ("Zret",CTy"instruction", 6759 Var("imm",F64)), 6760 Var("strm3",OTy(LTy F8))])), 6761 Call 6762 ("Zfull_inst",CTy"Zinst", 6763 TP[Var("p",LTy F8), 6764 Call 6765 ("Zret",CTy"instruction", 6766 LW(0,64)), 6767 Mop(Some,Var("strm2",LTy F8))]))), 6768 (TP[TP[LT,LT,LF,LF,LF,LT,LT,bVar"v'0"], 6769 Var("strm2",LTy F8)], 6770 Let(Var("size",CTy"Zsize"), 6771 Call 6772 ("OpSize",CTy"Zsize", 6773 TP[bVar"have_rex", 6774 Dest("W",bTy,Var("REX",CTy"REX")), 6775 Mop(Cast F1,LL[bVar"v'0"]), 6776 bVar"op_size_override"]), 6777 Let(TP[Var("opcode",FTy 3), 6778 Var("rm",CTy"Zrm"), 6779 Var("strm3",OTy(LTy F8))], 6780 Call 6781 ("readOpcodeModRM", 6782 PTy(FTy 3, 6783 PTy(CTy"Zrm",OTy(LTy F8))), 6784 TP[Var("REX",CTy"REX"), 6785 Var("strm2",LTy F8)]), 6786 Let(TP[Var("imm",F64), 6787 Var("strm4",OTy(LTy F8))], 6788 Call 6789 ("oimmediate", 6790 PTy(F64,OTy(LTy F8)), 6791 TP[Var("size",CTy"Zsize"), 6792 Var("strm3",OTy(LTy F8))]), 6793 ITE(EQ(Var("opcode",FTy 3), 6794 LW(0,3)), 6795 Call 6796 ("Zfull_inst",CTy"Zinst", 6797 TP[Var("p",LTy F8), 6798 Call 6799 ("Zmov", 6800 CTy"instruction", 6801 TP[LC("Z_ALWAYS", 6802 CTy"Zcond"), 6803 Var("size", 6804 CTy"Zsize"), 6805 Call 6806 ("Zrm_i", 6807 CTy"Zdest_src", 6808 TP[Var("rm", 6809 CTy"Zrm"), 6810 Var("imm", 6811 F64)])]), 6812 Var("strm4", 6813 OTy(LTy F8))]), 6814 Call 6815 ("Zdec_fail",CTy"Zinst", 6816 LS 6817 "Unsupported opcode: Group 11")))))), 6818 (TP[TP[LT,LT,LF,LF,LT,LF,LF,LT], 6819 Var("strm2",LTy F8)], 6820 Call 6821 ("Zfull_inst",CTy"Zinst", 6822 TP[Var("p",LTy F8), 6823 Const("Zleave",CTy"instruction"), 6824 Mop(Some,Var("strm2",LTy F8))])), 6825 (TP[TP[LT,LT,LF,LT,LF,LF,bVar"b'0",bVar"v'0"], 6826 Var("strm2",LTy F8)], 6827 Let(TP[Var("opcode",FTy 3), 6828 Var("rm",CTy"Zrm"), 6829 Var("strm3",OTy(LTy F8))], 6830 Call 6831 ("readOpcodeModRM", 6832 PTy(FTy 3,PTy(CTy"Zrm",OTy(LTy F8))), 6833 TP[Var("REX",CTy"REX"), 6834 Var("strm2",LTy F8)]), 6835 ITE(EQ(Var("opcode",FTy 3),LW(6,3)), 6836 Call 6837 ("Zdec_fail",CTy"Zinst", 6838 LS 6839 "Unsupported opcode: Shift Group 2"), 6840 Call 6841 ("Zfull_inst",CTy"Zinst", 6842 TP[Var("p",LTy F8), 6843 Call 6844 ("Zbinop",CTy"instruction", 6845 TP[Mop(Cast 6846 (CTy"Zbinop_name"), 6847 Bop(Add, 6848 Mop(Cast nTy, 6849 Var("opcode", 6850 FTy 3)), 6851 LN 8)), 6852 Call 6853 ("OpSize",CTy"Zsize", 6854 TP[bVar"have_rex", 6855 Dest 6856 ("W",bTy, 6857 Var("REX", 6858 CTy"REX")), 6859 Mop(Cast F1, 6860 LL[bVar"v'0"]), 6861 bVar"op_size_override"]), 6862 ITE(EQ(Mop(Cast F1, 6863 LL[bVar"b'0"]), 6864 LW(0,1)), 6865 Call 6866 ("Zrm_i", 6867 CTy"Zdest_src", 6868 TP[Var("rm", 6869 CTy"Zrm"), 6870 LW(1,64)]), 6871 Call 6872 ("Zrm_r", 6873 CTy"Zdest_src", 6874 TP[Var("rm", 6875 CTy"Zrm"), 6876 LC("RCX", 6877 CTy"Zreg")]))]), 6878 Var("strm3",OTy(LTy F8))])))), 6879 (TP[TP[LT,LT,LT,LF,LF,LF,LF,bVar"b'0"], 6880 Var("strm2",LTy F8)], 6881 Let(TP[Var("imm",F64), 6882 Var("strm3",OTy(LTy F8))], 6883 Call 6884 ("immediate8",PTy(F64,OTy(LTy F8)), 6885 Var("strm2",LTy F8)), 6886 Call 6887 ("Zfull_inst",CTy"Zinst", 6888 TP[Var("p",LTy F8), 6889 Call 6890 ("Zloop",CTy"instruction", 6891 TP[ITE(EQ(Mop(Cast F1, 6892 LL[bVar"b'0"]), 6893 LW(0,1)), 6894 LC("Z_NE",CTy"Zcond"), 6895 LC("Z_E",CTy"Zcond")), 6896 Var("imm",F64)]), 6897 Var("strm3",OTy(LTy F8))]))), 6898 (TP[TP[LT,LT,LT,LF,LF,LF,LT,LF], 6899 Var("strm2",LTy F8)], 6900 Let(TP[Var("imm",F64), 6901 Var("strm3",OTy(LTy F8))], 6902 Call 6903 ("immediate8",PTy(F64,OTy(LTy F8)), 6904 Var("strm2",LTy F8)), 6905 Call 6906 ("Zfull_inst",CTy"Zinst", 6907 TP[Var("p",LTy F8), 6908 Call 6909 ("Zloop",CTy"instruction", 6910 TP[LC("Z_ALWAYS",CTy"Zcond"), 6911 Var("imm",F64)]), 6912 Var("strm3",OTy(LTy F8))]))), 6913 (TP[TP[LT,LT,LT,LF,LT,LF,LF,LF], 6914 Var("strm2",LTy F8)], 6915 Let(TP[Var("imm",F64), 6916 Var("strm3",OTy(LTy F8))], 6917 Call 6918 ("immediate32",PTy(F64,OTy(LTy F8)), 6919 Var("strm2",LTy F8)), 6920 Call 6921 ("Zfull_inst",CTy"Zinst", 6922 TP[Var("p",LTy F8), 6923 Call 6924 ("Zcall",CTy"instruction", 6925 Call 6926 ("Zimm",CTy"Zimm_rm", 6927 Var("imm",F64))), 6928 Var("strm3",OTy(LTy F8))]))), 6929 (TP[TP[LT,LT,LT,LF,LT,LF,bVar"b'0",LT], 6930 Var("strm2",LTy F8)], 6931 Let(TP[Var("imm",F64), 6932 Var("strm3",OTy(LTy F8))], 6933 ITE(EQ(Mop(Cast F1,LL[bVar"b'0"]), 6934 LW(0,1)), 6935 Call 6936 ("immediate32", 6937 PTy(F64,OTy(LTy F8)), 6938 Var("strm2",LTy F8)), 6939 Call 6940 ("immediate8", 6941 PTy(F64,OTy(LTy F8)), 6942 Var("strm2",LTy F8))), 6943 Call 6944 ("Zfull_inst",CTy"Zinst", 6945 TP[Var("p",LTy F8), 6946 Call 6947 ("Zjcc",CTy"instruction", 6948 TP[LC("Z_ALWAYS",CTy"Zcond"), 6949 Var("imm",F64)]), 6950 Var("strm3",OTy(LTy F8))]))), 6951 (TP[TP[LT,LT,LT,LT,LF,LT,LF,LT], 6952 Var("strm2",LTy F8)], 6953 Call 6954 ("Zfull_inst",CTy"Zinst", 6955 TP[Var("p",LTy F8), 6956 Const("Zcmc",CTy"instruction"), 6957 Mop(Some,Var("strm2",LTy F8))])), 6958 (TP[TP[LT,LT,LT,LT,LF,LT,LT,bVar"v'0"], 6959 Var("strm2",LTy F8)], 6960 Let(Var("size",CTy"Zsize"), 6961 Call 6962 ("OpSize",CTy"Zsize", 6963 TP[bVar"have_rex", 6964 Dest("W",bTy,Var("REX",CTy"REX")), 6965 Mop(Cast F1,LL[bVar"v'0"]), 6966 bVar"op_size_override"]), 6967 Let(TP[Var("opcode",FTy 3), 6968 Var("rm",CTy"Zrm"), 6969 Var("strm3",OTy(LTy F8))], 6970 Call 6971 ("readOpcodeModRM", 6972 PTy(FTy 3, 6973 PTy(CTy"Zrm",OTy(LTy F8))), 6974 TP[Var("REX",CTy"REX"), 6975 Var("strm2",LTy F8)]), 6976 CS(Var("opcode",FTy 3), 6977 [(LW(0,3), 6978 Let(TP[Var("imm",F64), 6979 Var("strm4",OTy(LTy F8))], 6980 Call 6981 ("oimmediate", 6982 PTy(F64,OTy(LTy F8)), 6983 TP[Var("size",CTy"Zsize"), 6984 Var("strm3", 6985 OTy(LTy F8))]), 6986 Call 6987 ("Zfull_inst",CTy"Zinst", 6988 TP[Var("p",LTy F8), 6989 Call 6990 ("Zbinop", 6991 CTy"instruction", 6992 TP[LC("Ztest", 6993 CTy"Zbinop_name"), 6994 Var("size", 6995 CTy"Zsize"), 6996 Call 6997 ("Zrm_i", 6998 CTy"Zdest_src", 6999 TP[Var("rm", 7000 CTy"Zrm"), 7001 Var("imm", 7002 F64)])]), 7003 Var("strm4", 7004 OTy(LTy F8))]))), 7005 (LW(2,3), 7006 Call 7007 ("Zfull_inst",CTy"Zinst", 7008 TP[Var("p",LTy F8), 7009 Call 7010 ("Zmonop", 7011 CTy"instruction", 7012 TP[LC("Znot", 7013 CTy"Zmonop_name"), 7014 Var("size", 7015 CTy"Zsize"), 7016 Var("rm",CTy"Zrm")]), 7017 Var("strm3",OTy(LTy F8))])), 7018 (LW(3,3), 7019 Call 7020 ("Zfull_inst",CTy"Zinst", 7021 TP[Var("p",LTy F8), 7022 Call 7023 ("Zmonop", 7024 CTy"instruction", 7025 TP[LC("Zneg", 7026 CTy"Zmonop_name"), 7027 Var("size", 7028 CTy"Zsize"), 7029 Var("rm",CTy"Zrm")]), 7030 Var("strm3",OTy(LTy F8))])), 7031 (LW(4,3), 7032 Call 7033 ("Zfull_inst",CTy"Zinst", 7034 TP[Var("p",LTy F8), 7035 Call 7036 ("Zmul", 7037 CTy"instruction", 7038 TP[Var("size", 7039 CTy"Zsize"), 7040 Var("rm",CTy"Zrm")]), 7041 Var("strm3",OTy(LTy F8))])), 7042 (LW(5,3), 7043 Call 7044 ("Zfull_inst",CTy"Zinst", 7045 TP[Var("p",LTy F8), 7046 Call 7047 ("Zimul", 7048 CTy"instruction", 7049 TP[Var("size", 7050 CTy"Zsize"), 7051 Var("rm",CTy"Zrm")]), 7052 Var("strm3",OTy(LTy F8))])), 7053 (LW(6,3), 7054 Call 7055 ("Zfull_inst",CTy"Zinst", 7056 TP[Var("p",LTy F8), 7057 Call 7058 ("Zdiv", 7059 CTy"instruction", 7060 TP[Var("size", 7061 CTy"Zsize"), 7062 Var("rm",CTy"Zrm")]), 7063 Var("strm3",OTy(LTy F8))])), 7064 (LW(7,3), 7065 Call 7066 ("Zfull_inst",CTy"Zinst", 7067 TP[Var("p",LTy F8), 7068 Call 7069 ("Zidiv", 7070 CTy"instruction", 7071 TP[Var("size", 7072 CTy"Zsize"), 7073 Var("rm",CTy"Zrm")]), 7074 Var("strm3",OTy(LTy F8))])), 7075 (AVar(FTy 3), 7076 Call 7077 ("Zdec_fail",CTy"Zinst", 7078 LS 7079 "Unsupported opcode: Unary Group 3"))])))), 7080 (TP[TP[LT,LT,LT,LT,LT,LF,LF,LF], 7081 Var("strm2",LTy F8)], 7082 Call 7083 ("Zfull_inst",CTy"Zinst", 7084 TP[Var("p",LTy F8), 7085 Const("Zclc",CTy"instruction"), 7086 Mop(Some,Var("strm2",LTy F8))])), 7087 (TP[TP[LT,LT,LT,LT,LT,LF,LF,LT], 7088 Var("strm2",LTy F8)], 7089 Call 7090 ("Zfull_inst",CTy"Zinst", 7091 TP[Var("p",LTy F8), 7092 Const("Zstc",CTy"instruction"), 7093 Mop(Some,Var("strm2",LTy F8))])), 7094 (TP[TP[LT,LT,LT,LT,LT,LT,LT,LF], 7095 Var("strm2",LTy F8)], 7096 Let(TP[Var("opcode",FTy 3), 7097 Var("rm",CTy"Zrm"), 7098 Var("strm3",OTy(LTy F8))], 7099 Call 7100 ("readOpcodeModRM", 7101 PTy(FTy 3,PTy(CTy"Zrm",OTy(LTy F8))), 7102 TP[Var("REX",CTy"REX"), 7103 Var("strm2",LTy F8)]), 7104 ITB([(EQ(Var("opcode",FTy 3),LW(0,3)), 7105 Call 7106 ("Zfull_inst",CTy"Zinst", 7107 TP[Var("p",LTy F8), 7108 Call 7109 ("Zmonop", 7110 CTy"instruction", 7111 TP[LC("Zinc", 7112 CTy"Zmonop_name"), 7113 Call 7114 ("Z8",CTy"Zsize", 7115 bVar"have_rex"), 7116 Var("rm",CTy"Zrm")]), 7117 Var("strm3",OTy(LTy F8))])), 7118 (EQ(Var("opcode",FTy 3),LW(1,3)), 7119 Call 7120 ("Zfull_inst",CTy"Zinst", 7121 TP[Var("p",LTy F8), 7122 Call 7123 ("Zmonop", 7124 CTy"instruction", 7125 TP[LC("Zdec", 7126 CTy"Zmonop_name"), 7127 Call 7128 ("Z8",CTy"Zsize", 7129 bVar"have_rex"), 7130 Var("rm",CTy"Zrm")]), 7131 Var("strm3",OTy(LTy F8))]))], 7132 Call 7133 ("Zdec_fail",CTy"Zinst", 7134 LS 7135 "Unsupported opcode: INC/DEC Group 4")))), 7136 (TP[TP[LT,LT,LT,LT,LT,LT,LT,LT], 7137 Var("strm2",LTy F8)], 7138 Let(Var("size",CTy"Zsize"), 7139 Call 7140 ("OpSize",CTy"Zsize", 7141 TP[bVar"have_rex", 7142 Dest("W",bTy,Var("REX",CTy"REX")), 7143 LW(1,1),bVar"op_size_override"]), 7144 Let(TP[Var("opcode",FTy 3), 7145 Var("rm",CTy"Zrm"), 7146 Var("strm3",OTy(LTy F8))], 7147 Call 7148 ("readOpcodeModRM", 7149 PTy(FTy 3, 7150 PTy(CTy"Zrm",OTy(LTy F8))), 7151 TP[Var("REX",CTy"REX"), 7152 Var("strm2",LTy F8)]), 7153 CS(Var("opcode",FTy 3), 7154 [(LW(0,3), 7155 Call 7156 ("Zfull_inst",CTy"Zinst", 7157 TP[Var("p",LTy F8), 7158 Call 7159 ("Zmonop", 7160 CTy"instruction", 7161 TP[LC("Zinc", 7162 CTy"Zmonop_name"), 7163 Var("size", 7164 CTy"Zsize"), 7165 Var("rm",CTy"Zrm")]), 7166 Var("strm3",OTy(LTy F8))])), 7167 (LW(1,3), 7168 Call 7169 ("Zfull_inst",CTy"Zinst", 7170 TP[Var("p",LTy F8), 7171 Call 7172 ("Zmonop", 7173 CTy"instruction", 7174 TP[LC("Zdec", 7175 CTy"Zmonop_name"), 7176 Var("size", 7177 CTy"Zsize"), 7178 Var("rm",CTy"Zrm")]), 7179 Var("strm3",OTy(LTy F8))])), 7180 (LW(2,3), 7181 Call 7182 ("Zfull_inst",CTy"Zinst", 7183 TP[Var("p",LTy F8), 7184 Call 7185 ("Zcall", 7186 CTy"instruction", 7187 Call 7188 ("Zrm",CTy"Zimm_rm", 7189 Var("rm",CTy"Zrm"))), 7190 Var("strm3",OTy(LTy F8))])), 7191 (LW(4,3), 7192 Call 7193 ("Zfull_inst",CTy"Zinst", 7194 TP[Var("p",LTy F8), 7195 Call 7196 ("Zjmp", 7197 CTy"instruction", 7198 Var("rm",CTy"Zrm")), 7199 Var("strm3",OTy(LTy F8))])), 7200 (LW(6,3), 7201 Call 7202 ("Zfull_inst",CTy"Zinst", 7203 TP[Var("p",LTy F8), 7204 Call 7205 ("Zpush", 7206 CTy"instruction", 7207 Call 7208 ("Zrm",CTy"Zimm_rm", 7209 Var("rm",CTy"Zrm"))), 7210 Var("strm3",OTy(LTy F8))])), 7211 (AVar(FTy 3), 7212 Call 7213 ("Zdec_fail",CTy"Zinst", 7214 LS 7215 "Unsupported opcode: INC/DEC Group 5"))])))), 7216 (TP[TP[LF,LF,LF,LF,LT,LT,LT,LT], 7217 LLC([LW(56,8),Var("opc",F8)], 7218 Var("strm2",LTy F8))], 7219 CS(Var("opc",F8), 7220 [(LW(41,8), 7221 ITE(EQ(Var("p",LTy F8),LL[LW(102,8)]), 7222 Let(TP[Var("reg",FTy 3), 7223 Var("rm",CTy"Zrm"), 7224 Var("strm3",OTy(LTy F8))], 7225 Call 7226 ("readOpcodeModRM", 7227 PTy(FTy 3, 7228 PTy(CTy"Zrm",OTy(LTy F8))), 7229 TP[Var("REX",CTy"REX"), 7230 Var("strm2",LTy F8)]), 7231 Call 7232 ("Zfull_inst",CTy"Zinst", 7233 TP[Var("p",LTy F8), 7234 Call 7235 ("SSE", 7236 CTy"instruction", 7237 Call 7238 ("PCMPEQQ",CTy"SSE", 7239 TP[Var("reg",FTy 3), 7240 Call 7241 ("rm_to_xmm_mem", 7242 CTy"xmm_mem", 7243 Var("rm", 7244 CTy"Zrm"))])), 7245 Var("strm3",OTy(LTy F8))])), 7246 Call 7247 ("Zdec_fail",CTy"Zinst", 7248 CC[LS 7249 "Unsupported opcode: 0F 38 ", 7250 Mop(Cast sTy,Var("opc",F8))]))), 7251 (AVar F8, 7252 Call 7253 ("Zdec_fail",CTy"Zinst", 7254 CC[LS"Unsupported opcode: 0F 38 ", 7255 Mop(Cast sTy,Var("opc",F8))]))])), 7256 (TP[TP[LF,LF,LF,LF,LT,LT,LT,LT], 7257 LLC([LW(58,8),Var("opc",F8)],AVar(LTy F8))], 7258 Call 7259 ("Zdec_fail",CTy"Zinst", 7260 CC[LS"Unsupported opcode: 0F 3A ", 7261 Mop(Cast sTy,Var("opc",F8))])), 7262 (TP[TP[LF,LF,LF,LF,LT,LT,LT,LT], 7263 LLC([Var("opc",F8)],Var("strm2",LTy F8))], 7264 Let(TP[bVar"b'7",bVar"b'6",bVar"b'5", 7265 bVar"b'4",bVar"b'3",bVar"b'2", 7266 bVar"b'1",bVar"b'0"], 7267 BL(8,Var("opc",F8)), 7268 ITB([(bVar"b'5", 7269 ITB([(bVar"b'7", 7270 ITB([(Bop(And, 7271 Mop(Not,bVar"b'6"), 7272 Bop(And, 7273 Mop(Not, 7274 bVar"b'2"), 7275 Bop(And, 7276 bVar"b'1", 7277 bVar"b'0"))), 7278 Let(TP[Var("reg", 7279 CTy"Zreg"), 7280 Var("rm", 7281 CTy"Zrm"), 7282 Var("strm3", 7283 OTy(LTy F8))], 7284 Call 7285 ("readModRM", 7286 PTy(CTy"Zreg", 7287 PTy(CTy"Zrm", 7288 OTy(LTy F8))), 7289 TP[Var("REX", 7290 CTy"REX"), 7291 Var("strm2", 7292 LTy F8)]), 7293 Call 7294 ("Zfull_inst", 7295 CTy"Zinst", 7296 TP[Var("p", 7297 LTy F8), 7298 Call 7299 ("Zbit_test", 7300 CTy"instruction", 7301 TP[Mop(Cast 7302 (CTy"Zbit_test_name"), 7303 Mop(Cast 7304 (FTy 2), 7305 LL[bVar"b'4", 7306 bVar"b'3"])), 7307 Call 7308 ("OpSize", 7309 CTy"Zsize", 7310 TP[bVar"have_rex", 7311 Dest 7312 ("W", 7313 bTy, 7314 Var("REX", 7315 CTy"REX")), 7316 LW(1, 7317 1), 7318 bVar"op_size_override"]), 7319 Call 7320 ("Zrm_r", 7321 CTy"Zdest_src", 7322 TP[Var("rm", 7323 CTy"Zrm"), 7324 Var("reg", 7325 CTy"Zreg")])]), 7326 Var("strm3", 7327 OTy(LTy F8))]))), 7328 (Bop(And, 7329 Mop(Not,bVar"b'6"), 7330 Bop(And,bVar"b'4", 7331 Bop(And, 7332 bVar"b'3", 7333 Bop(And, 7334 Mop(Not, 7335 bVar"b'2"), 7336 Bop(And, 7337 bVar"b'1", 7338 Mop(Not, 7339 bVar"b'0")))))), 7340 Let(TP[Var("opcode", 7341 FTy 3), 7342 Var("rm", 7343 CTy"Zrm"), 7344 Var("strm3", 7345 OTy(LTy F8))], 7346 Call 7347 ("readOpcodeModRM", 7348 PTy(FTy 3, 7349 PTy(CTy"Zrm", 7350 OTy(LTy F8))), 7351 TP[Var("REX", 7352 CTy"REX"), 7353 Var("strm2", 7354 LTy F8)]), 7355 Let(TP[Var("imm", 7356 F64), 7357 Var("strm4", 7358 OTy(LTy F8))], 7359 Call 7360 ("oimmediate8", 7361 PTy(F64, 7362 OTy(LTy F8)), 7363 Var("strm3", 7364 OTy(LTy F8))), 7365 CS(BL(3, 7366 Var("opcode", 7367 FTy 3)), 7368 [(TP[LT, 7369 bVar"x'1", 7370 bVar"x'0"], 7371 Call 7372 ("Zfull_inst", 7373 CTy"Zinst", 7374 TP[Var("p", 7375 LTy F8), 7376 Call 7377 ("Zbit_test", 7378 CTy"instruction", 7379 TP[Mop(Cast 7380 (CTy"Zbit_test_name"), 7381 Mop(Cast 7382 (FTy 2), 7383 LL[bVar"x'1", 7384 bVar"x'0"])), 7385 Call 7386 ("OpSize", 7387 CTy"Zsize", 7388 TP[bVar"have_rex", 7389 Dest 7390 ("W", 7391 bTy, 7392 Var("REX", 7393 CTy"REX")), 7394 LW(1, 7395 1), 7396 bVar"op_size_override"]), 7397 Call 7398 ("Zrm_i", 7399 CTy"Zdest_src", 7400 TP[Var("rm", 7401 CTy"Zrm"), 7402 Var("imm", 7403 F64)])]), 7404 Var("strm4", 7405 OTy(LTy F8))])), 7406 (TP[AVar 7407 bTy, 7408 AVar 7409 bTy, 7410 AVar 7411 bTy], 7412 Call 7413 ("Zdec_fail", 7414 CTy"Zinst", 7415 LS 7416 "Unsupported opcode: Group 8"))])))), 7417 (Bop(And, 7418 Mop(Not,bVar"b'6"), 7419 Bop(And, 7420 Mop(Not, 7421 bVar"b'4"), 7422 Bop(And, 7423 bVar"b'3", 7424 Bop(And, 7425 bVar"b'2", 7426 Bop(And, 7427 bVar"b'1", 7428 bVar"b'0"))))), 7429 Let(TP[Var("reg", 7430 CTy"Zreg"), 7431 Var("rm", 7432 CTy"Zrm"), 7433 Var("strm3", 7434 OTy(LTy F8))], 7435 Call 7436 ("readModRM", 7437 PTy(CTy"Zreg", 7438 PTy(CTy"Zrm", 7439 OTy(LTy F8))), 7440 TP[Var("REX", 7441 CTy"REX"), 7442 Var("strm2", 7443 LTy F8)]), 7444 Call 7445 ("Zfull_inst", 7446 CTy"Zinst", 7447 TP[Var("p", 7448 LTy F8), 7449 Call 7450 ("Zimul2", 7451 CTy"instruction", 7452 TP[Call 7453 ("OpSize", 7454 CTy"Zsize", 7455 TP[bVar"have_rex", 7456 Dest 7457 ("W", 7458 bTy, 7459 Var("REX", 7460 CTy"REX")), 7461 LW(1, 7462 1), 7463 bVar"op_size_override"]), 7464 Var("reg", 7465 CTy"Zreg"), 7466 Var("rm", 7467 CTy"Zrm")]), 7468 Var("strm3", 7469 OTy(LTy F8))]))), 7470 (Bop(And, 7471 Mop(Not,bVar"b'6"), 7472 Bop(And,bVar"b'4", 7473 Bop(And, 7474 Mop(Not, 7475 bVar"b'3"), 7476 Bop(And, 7477 Mop(Not, 7478 bVar"b'2"), 7479 Mop(Not, 7480 bVar"b'1"))))), 7481 Let(TP[Var("reg", 7482 CTy"Zreg"), 7483 Var("rm", 7484 CTy"Zrm"), 7485 Var("strm3", 7486 OTy(LTy F8))], 7487 Call 7488 ("readModRM", 7489 PTy(CTy"Zreg", 7490 PTy(CTy"Zrm", 7491 OTy(LTy F8))), 7492 TP[Var("REX", 7493 CTy"REX"), 7494 Var("strm2", 7495 LTy F8)]), 7496 Call 7497 ("Zfull_inst", 7498 CTy"Zinst", 7499 TP[Var("p", 7500 LTy F8), 7501 Call 7502 ("Zcmpxchg", 7503 CTy"instruction", 7504 TP[Call 7505 ("OpSize", 7506 CTy"Zsize", 7507 TP[bVar"have_rex", 7508 Dest 7509 ("W", 7510 bTy, 7511 Var("REX", 7512 CTy"REX")), 7513 Mop(Cast 7514 F1, 7515 LL[bVar"b'0"]), 7516 bVar"op_size_override"]), 7517 Var("rm", 7518 CTy"Zrm"), 7519 Var("reg", 7520 CTy"Zreg")]), 7521 Var("strm3", 7522 OTy(LTy F8))]))), 7523 (Bop(And, 7524 Mop(Not,bVar"b'6"), 7525 Bop(And,bVar"b'4", 7526 Bop(And, 7527 bVar"b'2", 7528 bVar"b'1"))), 7529 Let(TP[Var("reg", 7530 CTy"Zreg"), 7531 Var("rm", 7532 CTy"Zrm"), 7533 Var("strm3", 7534 OTy(LTy F8))], 7535 Call 7536 ("readModRM", 7537 PTy(CTy"Zreg", 7538 PTy(CTy"Zrm", 7539 OTy(LTy F8))), 7540 TP[Var("REX", 7541 CTy"REX"), 7542 Var("strm2", 7543 LTy F8)]), 7544 Let(TP[Var("arg0", 7545 CTy"Zsize"), 7546 Var("arg1", 7547 CTy"Zdest_src"), 7548 Var("arg2", 7549 CTy"Zsize")], 7550 TP[ITE(EQ(Mop(Cast 7551 F1, 7552 LL[bVar"b'0"]), 7553 LW(1, 7554 1)), 7555 Const 7556 ("Z16", 7557 CTy"Zsize"), 7558 Call 7559 ("Z8", 7560 CTy"Zsize", 7561 bVar"have_rex")), 7562 Call 7563 ("Zr_rm", 7564 CTy"Zdest_src", 7565 TP[Var("reg", 7566 CTy"Zreg"), 7567 Var("rm", 7568 CTy"Zrm")]), 7569 Call 7570 ("OpSize", 7571 CTy"Zsize", 7572 TP[bVar"have_rex", 7573 Dest 7574 ("W", 7575 bTy, 7576 Var("REX", 7577 CTy"REX")), 7578 LW(1, 7579 1), 7580 bVar"op_size_override"])], 7581 Call 7582 ("Zfull_inst", 7583 CTy"Zinst", 7584 TP[Var("p", 7585 LTy F8), 7586 ITE(EQ(Mop(Cast 7587 F1, 7588 LL[bVar"b'3"]), 7589 LW(1, 7590 1)), 7591 Call 7592 ("Zmovsx", 7593 CTy"instruction", 7594 TP[Var("arg0", 7595 CTy"Zsize"), 7596 Var("arg1", 7597 CTy"Zdest_src"), 7598 Var("arg2", 7599 CTy"Zsize")]), 7600 Call 7601 ("Zmovzx", 7602 CTy"instruction", 7603 TP[Var("arg0", 7604 CTy"Zsize"), 7605 Var("arg1", 7606 CTy"Zdest_src"), 7607 Var("arg2", 7608 CTy"Zsize")])), 7609 Var("strm3", 7610 OTy(LTy F8))])))), 7611 (Bop(And,bVar"b'6", 7612 Bop(And, 7613 Mop(Not, 7614 bVar"b'4"), 7615 Bop(And, 7616 Mop(Not, 7617 bVar"b'3"), 7618 Bop(And, 7619 bVar"b'2", 7620 Bop(And, 7621 bVar"b'1", 7622 Mop(Not, 7623 bVar"b'0")))))), 7624 Let(TP[Var("reg",FTy 3), 7625 Var("rm", 7626 CTy"Zrm"), 7627 Var("strm3", 7628 OTy(LTy F8))], 7629 Call 7630 ("readOpcodeModRM", 7631 PTy(FTy 3, 7632 PTy(CTy"Zrm", 7633 OTy(LTy F8))), 7634 TP[Var("REX", 7635 CTy"REX"), 7636 Var("strm2", 7637 LTy F8)]), 7638 Let(Var("a1", 7639 CTy"xmm_mem"), 7640 Call 7641 ("rm_to_xmm_mem", 7642 CTy"xmm_mem", 7643 Var("rm", 7644 CTy"Zrm")), 7645 CS(Var("p", 7646 LTy F8), 7647 [(LL[LW(102, 7648 8)], 7649 Call 7650 ("Zfull_inst", 7651 CTy"Zinst", 7652 TP[Var("p", 7653 LTy F8), 7654 Call 7655 ("SSE", 7656 CTy"instruction", 7657 Call 7658 ("CVTPD2DQ", 7659 CTy"SSE", 7660 TP[LT, 7661 Var("reg", 7662 FTy 3), 7663 Var("a1", 7664 CTy"xmm_mem")])), 7665 Var("strm3", 7666 OTy(LTy F8))])), 7667 (LL[LW(243, 7668 8)], 7669 Call 7670 ("Zfull_inst", 7671 CTy"Zinst", 7672 TP[Var("p", 7673 LTy F8), 7674 Call 7675 ("SSE", 7676 CTy"instruction", 7677 Call 7678 ("CVTDQ2PD", 7679 CTy"SSE", 7680 TP[Var("reg", 7681 FTy 3), 7682 Var("a1", 7683 CTy"xmm_mem")])), 7684 Var("strm3", 7685 OTy(LTy F8))])), 7686 (LL[LW(242, 7687 8)], 7688 Call 7689 ("Zfull_inst", 7690 CTy"Zinst", 7691 TP[Var("p", 7692 LTy F8), 7693 Call 7694 ("SSE", 7695 CTy"instruction", 7696 Call 7697 ("CVTPD2DQ", 7698 CTy"SSE", 7699 TP[LF, 7700 Var("reg", 7701 FTy 3), 7702 Var("a1", 7703 CTy"xmm_mem")])), 7704 Var("strm3", 7705 OTy(LTy F8))])), 7706 (AVar 7707 (LTy F8), 7708 Call 7709 ("Zdec_fail", 7710 CTy"Zinst", 7711 CC[LS 7712 "Unsupported opcode: ", 7713 Mop(Cast 7714 sTy, 7715 Var("opc", 7716 F8))]))]))))], 7717 Call 7718 ("Zdec_fail", 7719 CTy"Zinst", 7720 CC[LS 7721 "Unsupported opcode: 0F ", 7722 Mop(Cast sTy, 7723 Var("opc",F8))]))), 7724 (bVar"b'1", 7725 ITB([(Bop(And, 7726 Mop(Not,bVar"b'6"), 7727 Bop(And, 7728 Mop(Not, 7729 bVar"b'4"), 7730 Bop(And, 7731 bVar"b'3", 7732 Bop(And, 7733 Mop(Not, 7734 bVar"b'2"), 7735 Mop(Not, 7736 bVar"b'0"))))), 7737 Let(TP[Var("reg",FTy 3), 7738 Var("rm", 7739 CTy"Zrm"), 7740 Var("strm3", 7741 OTy(LTy F8))], 7742 Call 7743 ("readOpcodeModRM", 7744 PTy(FTy 3, 7745 PTy(CTy"Zrm", 7746 OTy(LTy F8))), 7747 TP[Var("REX", 7748 CTy"REX"), 7749 Var("strm2", 7750 LTy F8)]), 7751 Let(bVar"a0", 7752 Dest 7753 ("W",bTy, 7754 Var("REX", 7755 CTy"REX")), 7756 CS(Var("p", 7757 LTy F8), 7758 [(LL[LW(243, 7759 8)], 7760 Call 7761 ("Zfull_inst", 7762 CTy"Zinst", 7763 TP[Var("p", 7764 LTy F8), 7765 Call 7766 ("SSE", 7767 CTy"instruction", 7768 Call 7769 ("CVTSI2SS", 7770 CTy"SSE", 7771 TP[bVar"a0", 7772 Var("reg", 7773 FTy 3), 7774 Var("rm", 7775 CTy"Zrm")])), 7776 Var("strm3", 7777 OTy(LTy F8))])), 7778 (LL[LW(242, 7779 8)], 7780 Call 7781 ("Zfull_inst", 7782 CTy"Zinst", 7783 TP[Var("p", 7784 LTy F8), 7785 Call 7786 ("SSE", 7787 CTy"instruction", 7788 Call 7789 ("CVTSI2SD", 7790 CTy"SSE", 7791 TP[bVar"a0", 7792 Var("reg", 7793 FTy 3), 7794 Var("rm", 7795 CTy"Zrm")])), 7796 Var("strm3", 7797 OTy(LTy F8))])), 7798 (AVar 7799 (LTy F8), 7800 Call 7801 ("Zdec_fail", 7802 CTy"Zinst", 7803 CC[LS 7804 "Unsupported opcode: 0F ", 7805 Mop(Cast 7806 sTy, 7807 Var("opc", 7808 F8))]))])))), 7809 (Bop(And, 7810 Mop(Not,bVar"b'6"), 7811 Bop(And, 7812 Mop(Not, 7813 bVar"b'4"), 7814 Bop(And, 7815 bVar"b'3", 7816 Bop(And, 7817 bVar"b'2", 7818 bVar"b'0")))), 7819 Let(TP[Var("reg",FTy 3), 7820 Var("rm", 7821 CTy"Zrm"), 7822 Var("strm3", 7823 OTy(LTy F8))], 7824 Call 7825 ("readOpcodeModRM", 7826 PTy(FTy 3, 7827 PTy(CTy"Zrm", 7828 OTy(LTy F8))), 7829 TP[Var("REX", 7830 CTy"REX"), 7831 Var("strm2", 7832 LTy F8)]), 7833 Let(Var("a1", 7834 CTy"xmm_mem"), 7835 Call 7836 ("rm_to_xmm_mem", 7837 CTy"xmm_mem", 7838 Var("rm", 7839 CTy"Zrm")), 7840 CS(Var("p", 7841 LTy F8), 7842 [(LL[LW(102, 7843 8)], 7844 Call 7845 ("Zfull_inst", 7846 CTy"Zinst", 7847 TP[Var("p", 7848 LTy F8), 7849 Call 7850 ("SSE", 7851 CTy"instruction", 7852 Call 7853 ("COMISD", 7854 CTy"SSE", 7855 TP[Var("reg", 7856 FTy 3), 7857 Var("a1", 7858 CTy"xmm_mem")])), 7859 Var("strm3", 7860 OTy(LTy F8))])), 7861 (AVar 7862 (LTy F8), 7863 Call 7864 ("Zfull_inst", 7865 CTy"Zinst", 7866 TP[Var("p", 7867 LTy F8), 7868 Call 7869 ("SSE", 7870 CTy"instruction", 7871 Call 7872 ("COMISS", 7873 CTy"SSE", 7874 TP[Var("reg", 7875 FTy 3), 7876 Var("a1", 7877 CTy"xmm_mem")])), 7878 Var("strm3", 7879 OTy(LTy F8))]))])))), 7880 (Bop(And,bVar"b'6", 7881 Bop(And,bVar"b'4", 7882 Bop(And, 7883 Mop(Not, 7884 bVar"b'3"), 7885 Bop(And, 7886 Mop(Not, 7887 bVar"b'2"), 7888 Mop(Not, 7889 bVar"b'0"))))), 7890 ITE(EQ(Var("p",LTy F8), 7891 LL[LW(102,8)]), 7892 Let(TP[Var("opcode", 7893 FTy 3), 7894 Var("rm", 7895 CTy"Zrm"), 7896 Var("strm3", 7897 OTy(LTy F8))], 7898 Call 7899 ("readOpcodeModRM", 7900 PTy(FTy 3, 7901 PTy(CTy"Zrm", 7902 OTy(LTy F8))), 7903 TP[Var("REX", 7904 CTy"REX"), 7905 Var("strm2", 7906 LTy F8)]), 7907 Let(TP[Var("imm", 7908 F64), 7909 Var("strm4", 7910 OTy(LTy F8))], 7911 Call 7912 ("oimmediate8", 7913 PTy(F64, 7914 OTy(LTy F8)), 7915 Var("strm3", 7916 OTy(LTy F8))), 7917 CS(TP[Var("opcode", 7918 FTy 3), 7919 Var("rm", 7920 CTy"Zrm")], 7921 [(TP[LW(2, 7922 3), 7923 Call 7924 ("Zr", 7925 CTy"Zrm", 7926 Var("r", 7927 CTy"Zreg"))], 7928 Call 7929 ("Zfull_inst", 7930 CTy"Zinst", 7931 TP[Var("p", 7932 LTy F8), 7933 Call 7934 ("SSE", 7935 CTy"instruction", 7936 Call 7937 ("PSRLD_imm", 7938 CTy"SSE", 7939 TP[Mop(Cast 7940 (FTy 3), 7941 Var("r", 7942 CTy"Zreg")), 7943 Mop(Cast 7944 F8, 7945 Var("imm", 7946 F64))])), 7947 Var("strm4", 7948 OTy(LTy F8))])), 7949 (TP[LW(4, 7950 3), 7951 Call 7952 ("Zr", 7953 CTy"Zrm", 7954 Var("r", 7955 CTy"Zreg"))], 7956 Call 7957 ("Zfull_inst", 7958 CTy"Zinst", 7959 TP[Var("p", 7960 LTy F8), 7961 Call 7962 ("SSE", 7963 CTy"instruction", 7964 Call 7965 ("PSRAD_imm", 7966 CTy"SSE", 7967 TP[Mop(Cast 7968 (FTy 3), 7969 Var("r", 7970 CTy"Zreg")), 7971 Mop(Cast 7972 F8, 7973 Var("imm", 7974 F64))])), 7975 Var("strm4", 7976 OTy(LTy F8))])), 7977 (TP[LW(6, 7978 3), 7979 Call 7980 ("Zr", 7981 CTy"Zrm", 7982 Var("r", 7983 CTy"Zreg"))], 7984 Call 7985 ("Zfull_inst", 7986 CTy"Zinst", 7987 TP[Var("p", 7988 LTy F8), 7989 Call 7990 ("SSE", 7991 CTy"instruction", 7992 Call 7993 ("PSLLD_imm", 7994 CTy"SSE", 7995 TP[Mop(Cast 7996 (FTy 3), 7997 Var("r", 7998 CTy"Zreg")), 7999 Mop(Cast 8000 F8, 8001 Var("imm", 8002 F64))])), 8003 Var("strm4", 8004 OTy(LTy F8))])), 8005 (AVar 8006 (PTy(FTy 3, 8007 CTy"Zrm")), 8008 Call 8009 ("Zdec_fail", 8010 CTy"Zinst", 8011 LS 8012 "Unsupported group 13 opcode: 0F 72"))]))), 8013 Call 8014 ("Zdec_fail", 8015 CTy"Zinst", 8016 LS 8017 "Unsupported group 13 opcode: 0F 71"))), 8018 (Bop(And,bVar"b'6", 8019 Bop(And,bVar"b'4", 8020 Bop(And, 8021 Mop(Not, 8022 bVar"b'3"), 8023 Bop(And, 8024 Mop(Not, 8025 bVar"b'2"), 8026 bVar"b'0")))), 8027 ITE(EQ(Var("p",LTy F8), 8028 LL[LW(102,8)]), 8029 Let(TP[Var("opcode", 8030 FTy 3), 8031 Var("rm", 8032 CTy"Zrm"), 8033 Var("strm3", 8034 OTy(LTy F8))], 8035 Call 8036 ("readOpcodeModRM", 8037 PTy(FTy 3, 8038 PTy(CTy"Zrm", 8039 OTy(LTy F8))), 8040 TP[Var("REX", 8041 CTy"REX"), 8042 Var("strm2", 8043 LTy F8)]), 8044 Let(TP[Var("imm", 8045 F64), 8046 Var("strm4", 8047 OTy(LTy F8))], 8048 Call 8049 ("oimmediate8", 8050 PTy(F64, 8051 OTy(LTy F8)), 8052 Var("strm3", 8053 OTy(LTy F8))), 8054 CS(TP[Var("opcode", 8055 FTy 3), 8056 Var("rm", 8057 CTy"Zrm")], 8058 [(TP[LW(2, 8059 3), 8060 Call 8061 ("Zr", 8062 CTy"Zrm", 8063 Var("r", 8064 CTy"Zreg"))], 8065 Call 8066 ("Zfull_inst", 8067 CTy"Zinst", 8068 TP[Var("p", 8069 LTy F8), 8070 Call 8071 ("SSE", 8072 CTy"instruction", 8073 Call 8074 ("PSRLQ_imm", 8075 CTy"SSE", 8076 TP[Mop(Cast 8077 (FTy 3), 8078 Var("r", 8079 CTy"Zreg")), 8080 Mop(Cast 8081 F8, 8082 Var("imm", 8083 F64))])), 8084 Var("strm4", 8085 OTy(LTy F8))])), 8086 (TP[LW(3, 8087 3), 8088 Call 8089 ("Zr", 8090 CTy"Zrm", 8091 Var("r", 8092 CTy"Zreg"))], 8093 Call 8094 ("Zfull_inst", 8095 CTy"Zinst", 8096 TP[Var("p", 8097 LTy F8), 8098 Call 8099 ("SSE", 8100 CTy"instruction", 8101 Call 8102 ("PSRLDQ", 8103 CTy"SSE", 8104 TP[Mop(Cast 8105 (FTy 3), 8106 Var("r", 8107 CTy"Zreg")), 8108 Mop(Cast 8109 F8, 8110 Var("imm", 8111 F64))])), 8112 Var("strm4", 8113 OTy(LTy F8))])), 8114 (TP[LW(6, 8115 3), 8116 Call 8117 ("Zr", 8118 CTy"Zrm", 8119 Var("r", 8120 CTy"Zreg"))], 8121 Call 8122 ("Zfull_inst", 8123 CTy"Zinst", 8124 TP[Var("p", 8125 LTy F8), 8126 Call 8127 ("SSE", 8128 CTy"instruction", 8129 Call 8130 ("PSLLQ_imm", 8131 CTy"SSE", 8132 TP[Mop(Cast 8133 (FTy 3), 8134 Var("r", 8135 CTy"Zreg")), 8136 Mop(Cast 8137 F8, 8138 Var("imm", 8139 F64))])), 8140 Var("strm4", 8141 OTy(LTy F8))])), 8142 (TP[LW(7, 8143 3), 8144 Call 8145 ("Zr", 8146 CTy"Zrm", 8147 Var("r", 8148 CTy"Zreg"))], 8149 Call 8150 ("Zfull_inst", 8151 CTy"Zinst", 8152 TP[Var("p", 8153 LTy F8), 8154 Call 8155 ("SSE", 8156 CTy"instruction", 8157 Call 8158 ("PSLLDQ", 8159 CTy"SSE", 8160 TP[Mop(Cast 8161 (FTy 3), 8162 Var("r", 8163 CTy"Zreg")), 8164 Mop(Cast 8165 F8, 8166 Var("imm", 8167 F64))])), 8168 Var("strm4", 8169 OTy(LTy F8))])), 8170 (AVar 8171 (PTy(FTy 3, 8172 CTy"Zrm")), 8173 Call 8174 ("Zdec_fail", 8175 CTy"Zinst", 8176 LS 8177 "Unsupported group 14 opcode: 0F 73"))]))), 8178 Call 8179 ("Zdec_fail", 8180 CTy"Zinst", 8181 LS 8182 "Unsupported group 14 opcode: 0F 71"))), 8183 (Bop(And,bVar"b'6", 8184 Bop(And,bVar"b'3", 8185 Bop(And, 8186 bVar"b'2", 8187 Mop(Not, 8188 bVar"b'0")))), 8189 Let(Var("b",F1), 8190 Mop(Cast F1, 8191 LL[bVar"b'4"]), 8192 Let(TP[Var("reg", 8193 FTy 3), 8194 Var("rm", 8195 CTy"Zrm"), 8196 Var("strm3", 8197 OTy(LTy F8))], 8198 Call 8199 ("readOpcodeModRM", 8200 PTy(FTy 3, 8201 PTy(CTy"Zrm", 8202 OTy(LTy F8))), 8203 TP[Var("REX", 8204 CTy"REX"), 8205 Var("strm2", 8206 LTy F8)]), 8207 CS(Var("p", 8208 LTy F8), 8209 [(LL[LW(102, 8210 8)], 8211 Call 8212 ("Zfull_inst", 8213 CTy"Zinst", 8214 TP[Var("p", 8215 LTy F8), 8216 Call 8217 ("SSE", 8218 CTy"instruction", 8219 Call 8220 ("MOV_D_Q", 8221 CTy"SSE", 8222 TP[Mop(Not, 8223 Mop(Cast 8224 bTy, 8225 Var("b", 8226 F1))), 8227 Dest 8228 ("W", 8229 bTy, 8230 Var("REX", 8231 CTy"REX")), 8232 Var("reg", 8233 FTy 3), 8234 Var("rm", 8235 CTy"Zrm")])), 8236 Var("strm3", 8237 OTy(LTy F8))])), 8238 (LL[LW(243, 8239 8)], 8240 ITE(EQ(Var("b", 8241 F1), 8242 LW(1, 8243 1)), 8244 Call 8245 ("Zfull_inst", 8246 CTy"Zinst", 8247 TP[Var("p", 8248 LTy F8), 8249 Call 8250 ("SSE", 8251 CTy"instruction", 8252 Call 8253 ("MOVQ", 8254 CTy"SSE", 8255 TP[Call 8256 ("xmm_reg", 8257 CTy"xmm_mem", 8258 Var("reg", 8259 FTy 3)), 8260 Call 8261 ("rm_to_xmm_mem", 8262 CTy"xmm_mem", 8263 Var("rm", 8264 CTy"Zrm"))])), 8265 Var("strm3", 8266 OTy(LTy F8))]), 8267 Call 8268 ("Zdec_fail", 8269 CTy"Zinst", 8270 CC[LS 8271 "Unsupported opcode: 0F ", 8272 Mop(Cast 8273 sTy, 8274 Var("opc", 8275 F8))]))), 8276 (AVar 8277 (LTy F8), 8278 Call 8279 ("Zdec_fail", 8280 CTy"Zinst", 8281 CC[LS 8282 "Unsupported opcode: 0F ", 8283 Mop(Cast 8284 sTy, 8285 Var("opc", 8286 F8))]))]))))], 8287 Call 8288 ("Zdec_fail", 8289 CTy"Zinst", 8290 CC[LS 8291 "Unsupported opcode: 0F ", 8292 Mop(Cast sTy, 8293 Var("opc",F8))]))), 8294 (Bop(And,Mop(Not,bVar"b'6"), 8295 Bop(And, 8296 Mop(Not,bVar"b'4"), 8297 Bop(And,bVar"b'3", 8298 Bop(And, 8299 Mop(Not, 8300 bVar"b'2"), 8301 Mop(Not, 8302 bVar"b'0"))))), 8303 Let(TP[Var("reg",FTy 3), 8304 Var("rm",CTy"Zrm"), 8305 Var("strm3", 8306 OTy(LTy F8))], 8307 Call 8308 ("readOpcodeModRM", 8309 PTy(FTy 3, 8310 PTy(CTy"Zrm", 8311 OTy(LTy F8))), 8312 TP[Var("REX",CTy"REX"), 8313 Var("strm2",LTy F8)]), 8314 Call 8315 ("Zfull_inst", 8316 CTy"Zinst", 8317 TP[Var("p",LTy F8), 8318 Call 8319 ("SSE", 8320 CTy"instruction", 8321 Call 8322 ("MOVAP_D_S", 8323 CTy"SSE", 8324 TP[EQ(Var("p", 8325 LTy F8), 8326 LL[LW(102, 8327 8)]), 8328 Call 8329 ("xmm_reg", 8330 CTy"xmm_mem", 8331 Var("reg", 8332 FTy 3)), 8333 Call 8334 ("rm_to_xmm_mem", 8335 CTy"xmm_mem", 8336 Var("rm", 8337 CTy"Zrm"))])), 8338 Var("strm3", 8339 OTy(LTy F8))]))), 8340 (Bop(And,Mop(Not,bVar"b'6"), 8341 Bop(And, 8342 Mop(Not,bVar"b'4"), 8343 Bop(And,bVar"b'3", 8344 Bop(And, 8345 Mop(Not, 8346 bVar"b'2"), 8347 bVar"b'0")))), 8348 Let(TP[Var("reg",FTy 3), 8349 Var("rm",CTy"Zrm"), 8350 Var("strm3", 8351 OTy(LTy F8))], 8352 Call 8353 ("readOpcodeModRM", 8354 PTy(FTy 3, 8355 PTy(CTy"Zrm", 8356 OTy(LTy F8))), 8357 TP[Var("REX",CTy"REX"), 8358 Var("strm2",LTy F8)]), 8359 Call 8360 ("Zfull_inst", 8361 CTy"Zinst", 8362 TP[Var("p",LTy F8), 8363 Call 8364 ("SSE", 8365 CTy"instruction", 8366 Call 8367 ("MOVAP_D_S", 8368 CTy"SSE", 8369 TP[EQ(Var("p", 8370 LTy F8), 8371 LL[LW(102, 8372 8)]), 8373 Call 8374 ("rm_to_xmm_mem", 8375 CTy"xmm_mem", 8376 Var("rm", 8377 CTy"Zrm")), 8378 Call 8379 ("xmm_reg", 8380 CTy"xmm_mem", 8381 Var("reg", 8382 FTy 3))])), 8383 Var("strm3", 8384 OTy(LTy F8))]))), 8385 (Bop(And,Mop(Not,bVar"b'6"), 8386 Bop(And, 8387 Mop(Not,bVar"b'4"), 8388 Bop(And,bVar"b'3", 8389 bVar"b'2"))), 8390 Let(TP[Var("reg",CTy"Zreg"), 8391 Var("rm",CTy"Zrm"), 8392 Var("strm3", 8393 OTy(LTy F8))], 8394 Call 8395 ("readModRM", 8396 PTy(CTy"Zreg", 8397 PTy(CTy"Zrm", 8398 OTy(LTy F8))), 8399 TP[Var("REX",CTy"REX"), 8400 Var("strm2",LTy F8)]), 8401 Let(TP[bVar"a0", 8402 bVar"a1", 8403 Var("a3", 8404 CTy"xmm_mem")], 8405 TP[Mop(Not, 8406 Mop(Cast bTy, 8407 Mop(Cast 8408 F1, 8409 LL[bVar"b'0"]))), 8410 Dest 8411 ("W",bTy, 8412 Var("REX", 8413 CTy"REX")), 8414 Call 8415 ("rm_to_xmm_mem", 8416 CTy"xmm_mem", 8417 Var("rm", 8418 CTy"Zrm"))], 8419 CS(Var("p",LTy F8), 8420 [(LL[LW(243,8)], 8421 Call 8422 ("Zfull_inst", 8423 CTy"Zinst", 8424 TP[Var("p", 8425 LTy F8), 8426 Call 8427 ("SSE", 8428 CTy"instruction", 8429 Call 8430 ("CVTSS2SI", 8431 CTy"SSE", 8432 TP[bVar"a0", 8433 bVar"a1", 8434 Var("reg", 8435 CTy"Zreg"), 8436 Var("a3", 8437 CTy"xmm_mem")])), 8438 Var("strm3", 8439 OTy(LTy F8))])), 8440 (LL[LW(242,8)], 8441 Call 8442 ("Zfull_inst", 8443 CTy"Zinst", 8444 TP[Var("p", 8445 LTy F8), 8446 Call 8447 ("SSE", 8448 CTy"instruction", 8449 Call 8450 ("CVTSD2SI", 8451 CTy"SSE", 8452 TP[bVar"a0", 8453 bVar"a1", 8454 Var("reg", 8455 CTy"Zreg"), 8456 Var("a3", 8457 CTy"xmm_mem")])), 8458 Var("strm3", 8459 OTy(LTy F8))])), 8460 (AVar(LTy F8), 8461 Call 8462 ("Zdec_fail", 8463 CTy"Zinst", 8464 CC[LS 8465 "Unsupported opcode: 0F ", 8466 Mop(Cast 8467 sTy, 8468 Var("opc", 8469 F8))]))])))), 8470 (Bop(And,bVar"b'6", 8471 Bop(And,bVar"b'4", 8472 Bop(And, 8473 Mop(Not, 8474 bVar"b'3"), 8475 Bop(And, 8476 Mop(Not, 8477 bVar"b'2"), 8478 bVar"b'0")))), 8479 ITE(EQ(Var("p",LTy F8), 8480 LL[LW(102,8)]), 8481 Let(TP[Var("opcode", 8482 FTy 3), 8483 Var("rm",CTy"Zrm"), 8484 Var("strm3", 8485 OTy(LTy F8))], 8486 Call 8487 ("readOpcodeModRM", 8488 PTy(FTy 3, 8489 PTy(CTy"Zrm", 8490 OTy(LTy F8))), 8491 TP[Var("REX", 8492 CTy"REX"), 8493 Var("strm2", 8494 LTy F8)]), 8495 Let(TP[Var("imm",F64), 8496 Var("strm4", 8497 OTy(LTy F8))], 8498 Call 8499 ("oimmediate8", 8500 PTy(F64, 8501 OTy(LTy F8)), 8502 Var("strm3", 8503 OTy(LTy F8))), 8504 CS(TP[Var("opcode", 8505 FTy 3), 8506 Var("rm", 8507 CTy"Zrm")], 8508 [(TP[LW(2,3), 8509 Call 8510 ("Zr", 8511 CTy"Zrm", 8512 Var("r", 8513 CTy"Zreg"))], 8514 Call 8515 ("Zfull_inst", 8516 CTy"Zinst", 8517 TP[Var("p", 8518 LTy F8), 8519 Call 8520 ("SSE", 8521 CTy"instruction", 8522 Call 8523 ("PSRLW_imm", 8524 CTy"SSE", 8525 TP[Mop(Cast 8526 (FTy 3), 8527 Var("r", 8528 CTy"Zreg")), 8529 Mop(Cast 8530 F8, 8531 Var("imm", 8532 F64))])), 8533 Var("strm4", 8534 OTy(LTy F8))])), 8535 (TP[LW(4,3), 8536 Call 8537 ("Zr", 8538 CTy"Zrm", 8539 Var("r", 8540 CTy"Zreg"))], 8541 Call 8542 ("Zfull_inst", 8543 CTy"Zinst", 8544 TP[Var("p", 8545 LTy F8), 8546 Call 8547 ("SSE", 8548 CTy"instruction", 8549 Call 8550 ("PSRAW_imm", 8551 CTy"SSE", 8552 TP[Mop(Cast 8553 (FTy 3), 8554 Var("r", 8555 CTy"Zreg")), 8556 Mop(Cast 8557 F8, 8558 Var("imm", 8559 F64))])), 8560 Var("strm4", 8561 OTy(LTy F8))])), 8562 (TP[LW(6,3), 8563 Call 8564 ("Zr", 8565 CTy"Zrm", 8566 Var("r", 8567 CTy"Zreg"))], 8568 Call 8569 ("Zfull_inst", 8570 CTy"Zinst", 8571 TP[Var("p", 8572 LTy F8), 8573 Call 8574 ("SSE", 8575 CTy"instruction", 8576 Call 8577 ("PSLLW_imm", 8578 CTy"SSE", 8579 TP[Mop(Cast 8580 (FTy 3), 8581 Var("r", 8582 CTy"Zreg")), 8583 Mop(Cast 8584 F8, 8585 Var("imm", 8586 F64))])), 8587 Var("strm4", 8588 OTy(LTy F8))])), 8589 (AVar 8590 (PTy(FTy 3, 8591 CTy"Zrm")), 8592 Call 8593 ("Zdec_fail", 8594 CTy"Zinst", 8595 LS 8596 "Unsupported group 12 opcode: 0F 71"))]))), 8597 Call 8598 ("Zdec_fail", 8599 CTy"Zinst", 8600 LS 8601 "Unsupported group 12 opcode: 0F 71")))], 8602 Call 8603 ("Zdec_fail",CTy"Zinst", 8604 CC[LS 8605 "Unsupported opcode: 0F ", 8606 Mop(Cast sTy, 8607 Var("opc",F8))]))), 8608 (bVar"b'7", 8609 ITB([(Bop(And,bVar"b'6", 8610 Bop(And,bVar"b'4", 8611 Bop(And, 8612 Mop(Not, 8613 bVar"b'3"), 8614 Bop(And, 8615 bVar"b'2", 8616 Bop(And, 8617 bVar"b'1", 8618 Mop(Not, 8619 bVar"b'0")))))), 8620 Let(TP[Var("reg",FTy 3), 8621 Var("rm",CTy"Zrm"), 8622 Var("strm3", 8623 OTy(LTy F8))], 8624 Call 8625 ("readOpcodeModRM", 8626 PTy(FTy 3, 8627 PTy(CTy"Zrm", 8628 OTy(LTy F8))), 8629 TP[Var("REX",CTy"REX"), 8630 Var("strm2",LTy F8)]), 8631 CS(Var("p",LTy F8), 8632 [(LL[LW(102,8)], 8633 Call 8634 ("Zfull_inst", 8635 CTy"Zinst", 8636 TP[Var("p", 8637 LTy F8), 8638 Call 8639 ("SSE", 8640 CTy"instruction", 8641 Call 8642 ("MOVQ", 8643 CTy"SSE", 8644 TP[Call 8645 ("rm_to_xmm_mem", 8646 CTy"xmm_mem", 8647 Var("rm", 8648 CTy"Zrm")), 8649 Call 8650 ("xmm_reg", 8651 CTy"xmm_mem", 8652 Var("reg", 8653 FTy 3))])), 8654 Var("strm3", 8655 OTy(LTy F8))])), 8656 (AVar(LTy F8), 8657 Call 8658 ("Zdec_fail", 8659 CTy"Zinst", 8660 CC[LS 8661 "Unsupported opcode: 0F ", 8662 Mop(Cast sTy, 8663 Var("opc", 8664 F8))]))]))), 8665 (Bop(And,Mop(Not,bVar"b'6"), 8666 Mop(Not,bVar"b'4")), 8667 Let(TP[Var("imm",F64), 8668 Var("strm3", 8669 OTy(LTy F8))], 8670 Call 8671 ("immediate32", 8672 PTy(F64,OTy(LTy F8)), 8673 Var("strm2",LTy F8)), 8674 Call 8675 ("Zfull_inst", 8676 CTy"Zinst", 8677 TP[Var("p",LTy F8), 8678 Call 8679 ("Zjcc", 8680 CTy"instruction", 8681 TP[Mop(Cast 8682 (CTy"Zcond"), 8683 Mop(Cast 8684 F4, 8685 LL[bVar"b'3", 8686 bVar"b'2", 8687 bVar"b'1", 8688 bVar"b'0"])), 8689 Var("imm", 8690 F64)]), 8691 Var("strm3", 8692 OTy(LTy F8))]))), 8693 (Bop(And,Mop(Not,bVar"b'6"), 8694 bVar"b'4"), 8695 Let(TP[AVar(CTy"Zreg"), 8696 Var("rm",CTy"Zrm"), 8697 Var("strm3", 8698 OTy(LTy F8))], 8699 Call 8700 ("readModRM", 8701 PTy(CTy"Zreg", 8702 PTy(CTy"Zrm", 8703 OTy(LTy F8))), 8704 TP[Var("REX",CTy"REX"), 8705 Var("strm2",LTy F8)]), 8706 Call 8707 ("Zfull_inst", 8708 CTy"Zinst", 8709 TP[Var("p",LTy F8), 8710 Call 8711 ("Zset", 8712 CTy"instruction", 8713 TP[Mop(Cast 8714 (CTy"Zcond"), 8715 Mop(Cast 8716 F4, 8717 LL[bVar"b'3", 8718 bVar"b'2", 8719 bVar"b'1", 8720 bVar"b'0"])), 8721 bVar"have_rex", 8722 Var("rm", 8723 CTy"Zrm")]), 8724 Var("strm3", 8725 OTy(LTy F8))]))), 8726 (Bop(And,bVar"b'6", 8727 Bop(And, 8728 Mop(Not,bVar"b'4"), 8729 Bop(And, 8730 Mop(Not, 8731 bVar"b'3"), 8732 Bop(And, 8733 Mop(Not, 8734 bVar"b'2"), 8735 Mop(Not, 8736 bVar"b'1"))))), 8737 Let(TP[Var("reg",CTy"Zreg"), 8738 Var("rm",CTy"Zrm"), 8739 Var("strm3", 8740 OTy(LTy F8))], 8741 Call 8742 ("readModRM", 8743 PTy(CTy"Zreg", 8744 PTy(CTy"Zrm", 8745 OTy(LTy F8))), 8746 TP[Var("REX",CTy"REX"), 8747 Var("strm2",LTy F8)]), 8748 Call 8749 ("Zfull_inst", 8750 CTy"Zinst", 8751 TP[Var("p",LTy F8), 8752 Call 8753 ("Zxadd", 8754 CTy"instruction", 8755 TP[Call 8756 ("OpSize", 8757 CTy"Zsize", 8758 TP[bVar"have_rex", 8759 Dest 8760 ("W", 8761 bTy, 8762 Var("REX", 8763 CTy"REX")), 8764 Mop(Cast 8765 F1, 8766 LL[bVar"b'0"]), 8767 bVar"op_size_override"]), 8768 Var("rm", 8769 CTy"Zrm"), 8770 Var("reg", 8771 CTy"Zreg")]), 8772 Var("strm3", 8773 OTy(LTy F8))]))), 8774 (Bop(And,bVar"b'6", 8775 Bop(And, 8776 Mop(Not,bVar"b'4"), 8777 Bop(And, 8778 Mop(Not, 8779 bVar"b'3"), 8780 Bop(And, 8781 Mop(Not, 8782 bVar"b'2"), 8783 Bop(And, 8784 bVar"b'1", 8785 Mop(Not, 8786 bVar"b'0")))))), 8787 Let(TP[Var("reg",FTy 3), 8788 Var("rm",CTy"Zrm"), 8789 Var("strm3", 8790 OTy(LTy F8))], 8791 Call 8792 ("readOpcodeModRM", 8793 PTy(FTy 3, 8794 PTy(CTy"Zrm", 8795 OTy(LTy F8))), 8796 TP[Var("REX",CTy"REX"), 8797 Var("strm2",LTy F8)]), 8798 Let(TP[Var("imm",F64), 8799 Var("strm4", 8800 OTy(LTy F8))], 8801 Call 8802 ("oimmediate8", 8803 PTy(F64, 8804 OTy(LTy F8)), 8805 Var("strm3", 8806 OTy(LTy F8))), 8807 Let(TP[Var("a0", 8808 CTy"sse_compare"), 8809 Var("a2", 8810 CTy"xmm_mem")], 8811 TP[Mop(Cast 8812 (CTy"sse_compare"), 8813 Var("imm", 8814 F64)), 8815 Call 8816 ("rm_to_xmm_mem", 8817 CTy"xmm_mem", 8818 Var("rm", 8819 CTy"Zrm"))], 8820 CS(Var("p", 8821 LTy F8), 8822 [(LL[LW(102,8)], 8823 Call 8824 ("Zfull_inst", 8825 CTy"Zinst", 8826 TP[Var("p", 8827 LTy F8), 8828 Call 8829 ("SSE", 8830 CTy"instruction", 8831 Call 8832 ("CMPPD", 8833 CTy"SSE", 8834 TP[Var("a0", 8835 CTy"sse_compare"), 8836 Var("reg", 8837 FTy 3), 8838 Var("a2", 8839 CTy"xmm_mem")])), 8840 Var("strm4", 8841 OTy(LTy F8))])), 8842 (LL[LW(243,8)], 8843 Call 8844 ("Zfull_inst", 8845 CTy"Zinst", 8846 TP[Var("p", 8847 LTy F8), 8848 Call 8849 ("SSE", 8850 CTy"instruction", 8851 Call 8852 ("CMPSS", 8853 CTy"SSE", 8854 TP[Var("a0", 8855 CTy"sse_compare"), 8856 Var("reg", 8857 FTy 3), 8858 Var("a2", 8859 CTy"xmm_mem")])), 8860 Var("strm4", 8861 OTy(LTy F8))])), 8862 (LL[LW(242,8)], 8863 Call 8864 ("Zfull_inst", 8865 CTy"Zinst", 8866 TP[Var("p", 8867 LTy F8), 8868 Call 8869 ("SSE", 8870 CTy"instruction", 8871 Call 8872 ("CMPSD", 8873 CTy"SSE", 8874 TP[Var("a0", 8875 CTy"sse_compare"), 8876 Var("reg", 8877 FTy 3), 8878 Var("a2", 8879 CTy"xmm_mem")])), 8880 Var("strm4", 8881 OTy(LTy F8))])), 8882 (AVar 8883 (LTy F8), 8884 Call 8885 ("Zfull_inst", 8886 CTy"Zinst", 8887 TP[Var("p", 8888 LTy F8), 8889 Call 8890 ("SSE", 8891 CTy"instruction", 8892 Call 8893 ("CMPPS", 8894 CTy"SSE", 8895 TP[Var("a0", 8896 CTy"sse_compare"), 8897 Var("reg", 8898 FTy 3), 8899 Var("a2", 8900 CTy"xmm_mem")])), 8901 Var("strm4", 8902 OTy(LTy F8))]))])))))], 8903 Call 8904 ("Zdec_fail",CTy"Zinst", 8905 CC[LS 8906 "Unsupported opcode: 0F ", 8907 Mop(Cast sTy, 8908 Var("opc",F8))]))), 8909 (Bop(And,Mop(Not,bVar"b'6"), 8910 Bop(And,bVar"b'4", 8911 Bop(And, 8912 Mop(Not,bVar"b'3"), 8913 Bop(And, 8914 Mop(Not,bVar"b'2"), 8915 Bop(And, 8916 Mop(Not, 8917 bVar"b'1"), 8918 Mop(Not, 8919 bVar"b'0")))))), 8920 Let(TP[Var("reg",FTy 3), 8921 Var("rm",CTy"Zrm"), 8922 Var("strm3",OTy(LTy F8))], 8923 Call 8924 ("readOpcodeModRM", 8925 PTy(FTy 3, 8926 PTy(CTy"Zrm", 8927 OTy(LTy F8))), 8928 TP[Var("REX",CTy"REX"), 8929 Var("strm2",LTy F8)]), 8930 Let(TP[Var("a0",CTy"xmm_mem"), 8931 Var("a1",CTy"xmm_mem")], 8932 TP[Call 8933 ("xmm_reg", 8934 CTy"xmm_mem", 8935 Var("reg",FTy 3)), 8936 Call 8937 ("rm_to_xmm_mem", 8938 CTy"xmm_mem", 8939 Var("rm",CTy"Zrm"))], 8940 CS(Var("p",LTy F8), 8941 [(LL[LW(102,8)], 8942 Call 8943 ("Zfull_inst", 8944 CTy"Zinst", 8945 TP[Var("p",LTy F8), 8946 Call 8947 ("SSE", 8948 CTy"instruction", 8949 Call 8950 ("MOVUP_D_S", 8951 CTy"SSE", 8952 TP[LT, 8953 Var("a0", 8954 CTy"xmm_mem"), 8955 Var("a1", 8956 CTy"xmm_mem")])), 8957 Var("strm3", 8958 OTy(LTy F8))])), 8959 (LL[LW(242,8)], 8960 Call 8961 ("Zfull_inst", 8962 CTy"Zinst", 8963 TP[Var("p",LTy F8), 8964 Call 8965 ("SSE", 8966 CTy"instruction", 8967 Call 8968 ("MOVSD", 8969 CTy"SSE", 8970 TP[Var("a0", 8971 CTy"xmm_mem"), 8972 Var("a1", 8973 CTy"xmm_mem")])), 8974 Var("strm3", 8975 OTy(LTy F8))])), 8976 (LL[LW(243,8)], 8977 Call 8978 ("Zfull_inst", 8979 CTy"Zinst", 8980 TP[Var("p",LTy F8), 8981 Call 8982 ("SSE", 8983 CTy"instruction", 8984 Call 8985 ("MOVSS", 8986 CTy"SSE", 8987 TP[Var("a0", 8988 CTy"xmm_mem"), 8989 Var("a1", 8990 CTy"xmm_mem")])), 8991 Var("strm3", 8992 OTy(LTy F8))])), 8993 (AVar(LTy F8), 8994 Call 8995 ("Zfull_inst", 8996 CTy"Zinst", 8997 TP[Var("p",LTy F8), 8998 Call 8999 ("SSE", 9000 CTy"instruction", 9001 Call 9002 ("MOVUP_D_S", 9003 CTy"SSE", 9004 TP[LF, 9005 Var("a0", 9006 CTy"xmm_mem"), 9007 Var("a1", 9008 CTy"xmm_mem")])), 9009 Var("strm3", 9010 OTy(LTy F8))]))])))), 9011 (Bop(And,Mop(Not,bVar"b'6"), 9012 Bop(And,bVar"b'4", 9013 Bop(And, 9014 Mop(Not,bVar"b'3"), 9015 Bop(And, 9016 Mop(Not,bVar"b'2"), 9017 Bop(And, 9018 Mop(Not, 9019 bVar"b'1"), 9020 bVar"b'0"))))), 9021 Let(TP[Var("reg",FTy 3), 9022 Var("rm",CTy"Zrm"), 9023 Var("strm3",OTy(LTy F8))], 9024 Call 9025 ("readOpcodeModRM", 9026 PTy(FTy 3, 9027 PTy(CTy"Zrm", 9028 OTy(LTy F8))), 9029 TP[Var("REX",CTy"REX"), 9030 Var("strm2",LTy F8)]), 9031 Let(TP[Var("a0",CTy"xmm_mem"), 9032 Var("a1",CTy"xmm_mem")], 9033 TP[Call 9034 ("rm_to_xmm_mem", 9035 CTy"xmm_mem", 9036 Var("rm",CTy"Zrm")), 9037 Call 9038 ("xmm_reg", 9039 CTy"xmm_mem", 9040 Var("reg",FTy 3))], 9041 CS(Var("p",LTy F8), 9042 [(LL[LW(102,8)], 9043 Call 9044 ("Zfull_inst", 9045 CTy"Zinst", 9046 TP[Var("p",LTy F8), 9047 Call 9048 ("SSE", 9049 CTy"instruction", 9050 Call 9051 ("MOVUP_D_S", 9052 CTy"SSE", 9053 TP[LT, 9054 Var("a0", 9055 CTy"xmm_mem"), 9056 Var("a1", 9057 CTy"xmm_mem")])), 9058 Var("strm3", 9059 OTy(LTy F8))])), 9060 (LL[LW(242,8)], 9061 Call 9062 ("Zfull_inst", 9063 CTy"Zinst", 9064 TP[Var("p",LTy F8), 9065 Call 9066 ("SSE", 9067 CTy"instruction", 9068 Call 9069 ("MOVSD", 9070 CTy"SSE", 9071 TP[Var("a0", 9072 CTy"xmm_mem"), 9073 Var("a1", 9074 CTy"xmm_mem")])), 9075 Var("strm3", 9076 OTy(LTy F8))])), 9077 (LL[LW(243,8)], 9078 Call 9079 ("Zfull_inst", 9080 CTy"Zinst", 9081 TP[Var("p",LTy F8), 9082 Call 9083 ("SSE", 9084 CTy"instruction", 9085 Call 9086 ("MOVSS", 9087 CTy"SSE", 9088 TP[Var("a0", 9089 CTy"xmm_mem"), 9090 Var("a1", 9091 CTy"xmm_mem")])), 9092 Var("strm3", 9093 OTy(LTy F8))])), 9094 (AVar(LTy F8), 9095 Call 9096 ("Zfull_inst", 9097 CTy"Zinst", 9098 TP[Var("p",LTy F8), 9099 Call 9100 ("SSE", 9101 CTy"instruction", 9102 Call 9103 ("MOVUP_D_S", 9104 CTy"SSE", 9105 TP[LF, 9106 Var("a0", 9107 CTy"xmm_mem"), 9108 Var("a1", 9109 CTy"xmm_mem")])), 9110 Var("strm3", 9111 OTy(LTy F8))]))])))), 9112 (Bop(And,Mop(Not,bVar"b'6"), 9113 Bop(And,bVar"b'4", 9114 Bop(And,bVar"b'3", 9115 Bop(And,bVar"b'2", 9116 Bop(And,bVar"b'1", 9117 bVar"b'0"))))), 9118 Let(TP[AVar(FTy 3),AVar(CTy"Zrm"), 9119 Var("strm3",OTy(LTy F8))], 9120 Call 9121 ("readOpcodeModRM", 9122 PTy(FTy 3, 9123 PTy(CTy"Zrm", 9124 OTy(LTy F8))), 9125 TP[Var("REX",CTy"REX"), 9126 Var("strm2",LTy F8)]), 9127 Call 9128 ("Zfull_inst",CTy"Zinst", 9129 TP[Var("p",LTy F8), 9130 Call 9131 ("Znop", 9132 CTy"instruction", 9133 Mop(Length, 9134 Var("strm",LTy F8))), 9135 Var("strm3",OTy(LTy F8))]))), 9136 (Bop(And,bVar"b'6", 9137 Mop(Not,bVar"b'4")), 9138 Let(TP[Var("reg",CTy"Zreg"), 9139 Var("rm",CTy"Zrm"), 9140 Var("strm3",OTy(LTy F8))], 9141 Call 9142 ("readModRM", 9143 PTy(CTy"Zreg", 9144 PTy(CTy"Zrm", 9145 OTy(LTy F8))), 9146 TP[Var("REX",CTy"REX"), 9147 Var("strm2",LTy F8)]), 9148 Call 9149 ("Zfull_inst",CTy"Zinst", 9150 TP[Var("p",LTy F8), 9151 Call 9152 ("Zmov", 9153 CTy"instruction", 9154 TP[Mop(Cast 9155 (CTy"Zcond"), 9156 Mop(Cast F4, 9157 LL[bVar"b'3", 9158 bVar"b'2", 9159 bVar"b'1", 9160 bVar"b'0"])), 9161 Call 9162 ("OpSize", 9163 CTy"Zsize", 9164 TP[LT, 9165 Dest 9166 ("W",bTy, 9167 Var("REX", 9168 CTy"REX")), 9169 LW(1,1), 9170 bVar"op_size_override"]), 9171 Call 9172 ("Zr_rm", 9173 CTy"Zdest_src", 9174 TP[Var("reg", 9175 CTy"Zreg"), 9176 Var("rm", 9177 CTy"Zrm")])]), 9178 Var("strm3",OTy(LTy F8))]))), 9179 (Bop(And,bVar"b'6", 9180 Bop(And,bVar"b'4", 9181 Bop(And, 9182 Mop(Not,bVar"b'3"), 9183 Bop(And, 9184 Mop(Not,bVar"b'2"), 9185 Bop(And, 9186 Mop(Not, 9187 bVar"b'1"), 9188 bVar"b'0"))))), 9189 Let(TP[Var("reg",FTy 3), 9190 Var("rm",CTy"Zrm"), 9191 Var("strm3",OTy(LTy F8))], 9192 Call 9193 ("readOpcodeModRM", 9194 PTy(FTy 3, 9195 PTy(CTy"Zrm", 9196 OTy(LTy F8))), 9197 TP[Var("REX",CTy"REX"), 9198 Var("strm2",LTy F8)]), 9199 Let(Var("a1",CTy"xmm_mem"), 9200 Call 9201 ("rm_to_xmm_mem", 9202 CTy"xmm_mem", 9203 Var("rm",CTy"Zrm")), 9204 CS(Var("p",LTy F8), 9205 [(LL[LW(102,8)], 9206 Call 9207 ("Zfull_inst", 9208 CTy"Zinst", 9209 TP[Var("p",LTy F8), 9210 Call 9211 ("SSE", 9212 CTy"instruction", 9213 Call 9214 ("SQRTPD", 9215 CTy"SSE", 9216 TP[Var("reg", 9217 FTy 3), 9218 Var("a1", 9219 CTy"xmm_mem")])), 9220 Var("strm3", 9221 OTy(LTy F8))])), 9222 (LL[LW(243,8)], 9223 Call 9224 ("Zfull_inst", 9225 CTy"Zinst", 9226 TP[Var("p",LTy F8), 9227 Call 9228 ("SSE", 9229 CTy"instruction", 9230 Call 9231 ("SQRTSS", 9232 CTy"SSE", 9233 TP[Var("reg", 9234 FTy 3), 9235 Var("a1", 9236 CTy"xmm_mem")])), 9237 Var("strm3", 9238 OTy(LTy F8))])), 9239 (LL[LW(242,8)], 9240 Call 9241 ("Zfull_inst", 9242 CTy"Zinst", 9243 TP[Var("p",LTy F8), 9244 Call 9245 ("SSE", 9246 CTy"instruction", 9247 Call 9248 ("SQRTSD", 9249 CTy"SSE", 9250 TP[Var("reg", 9251 FTy 3), 9252 Var("a1", 9253 CTy"xmm_mem")])), 9254 Var("strm3", 9255 OTy(LTy F8))])), 9256 (AVar(LTy F8), 9257 Call 9258 ("Zfull_inst", 9259 CTy"Zinst", 9260 TP[Var("p",LTy F8), 9261 Call 9262 ("SSE", 9263 CTy"instruction", 9264 Call 9265 ("SQRTPS", 9266 CTy"SSE", 9267 TP[Var("reg", 9268 FTy 3), 9269 Var("a1", 9270 CTy"xmm_mem")])), 9271 Var("strm3", 9272 OTy(LTy F8))]))])))), 9273 (Bop(And,bVar"b'6", 9274 Bop(And,bVar"b'4", 9275 Bop(And, 9276 Mop(Not,bVar"b'3"), 9277 bVar"b'2"))), 9278 Let(TP[Var("reg",FTy 3), 9279 Var("rm",CTy"Zrm"), 9280 Var("strm3",OTy(LTy F8))], 9281 Call 9282 ("readOpcodeModRM", 9283 PTy(FTy 3, 9284 PTy(CTy"Zrm", 9285 OTy(LTy F8))), 9286 TP[Var("REX",CTy"REX"), 9287 Var("strm2",LTy F8)]), 9288 Let(TP[Var("a0",CTy"sse_logic"), 9289 Var("a2",CTy"xmm_mem")], 9290 TP[Mop(Cast 9291 (CTy"sse_logic"), 9292 Mop(Cast(FTy 2), 9293 LL[bVar"b'1", 9294 bVar"b'0"])), 9295 Call 9296 ("rm_to_xmm_mem", 9297 CTy"xmm_mem", 9298 Var("rm",CTy"Zrm"))], 9299 CS(Var("p",LTy F8), 9300 [(LL[LW(102,8)], 9301 Call 9302 ("Zfull_inst", 9303 CTy"Zinst", 9304 TP[Var("p",LTy F8), 9305 Call 9306 ("SSE", 9307 CTy"instruction", 9308 Call 9309 ("logic_PD", 9310 CTy"SSE", 9311 TP[Var("a0", 9312 CTy"sse_logic"), 9313 Var("reg", 9314 FTy 3), 9315 Var("a2", 9316 CTy"xmm_mem")])), 9317 Var("strm3", 9318 OTy(LTy F8))])), 9319 (AVar(LTy F8), 9320 Call 9321 ("Zfull_inst", 9322 CTy"Zinst", 9323 TP[Var("p",LTy F8), 9324 Call 9325 ("SSE", 9326 CTy"instruction", 9327 Call 9328 ("logic_PS", 9329 CTy"SSE", 9330 TP[Var("a0", 9331 CTy"sse_logic"), 9332 Var("reg", 9333 FTy 3), 9334 Var("a2", 9335 CTy"xmm_mem")])), 9336 Var("strm3", 9337 OTy(LTy F8))]))])))), 9338 (Bop(And,bVar"b'6", 9339 Bop(And,bVar"b'4",bVar"b'3")), 9340 Let(TP[Var("reg",FTy 3), 9341 Var("rm",CTy"Zrm"), 9342 Var("strm3",OTy(LTy F8))], 9343 Call 9344 ("readOpcodeModRM", 9345 PTy(FTy 3, 9346 PTy(CTy"Zrm", 9347 OTy(LTy F8))), 9348 TP[Var("REX",CTy"REX"), 9349 Var("strm2",LTy F8)]), 9350 Let(Var("a1",CTy"xmm_mem"), 9351 Call 9352 ("rm_to_xmm_mem", 9353 CTy"xmm_mem", 9354 Var("rm",CTy"Zrm")), 9355 CS(TP[Mop(Cast(FTy 3), 9356 LL[bVar"b'2", 9357 bVar"b'1", 9358 bVar"b'0"]), 9359 Var("p",LTy F8)], 9360 [(TP[LW(0,3), 9361 LL[LW(102,8)]], 9362 Call 9363 ("Zfull_inst", 9364 CTy"Zinst", 9365 TP[Var("p",LTy F8), 9366 Call 9367 ("SSE", 9368 CTy"instruction", 9369 Call 9370 ("bin_PD", 9371 CTy"SSE", 9372 TP[LC("sse_add", 9373 CTy"sse_binop"), 9374 Var("reg", 9375 FTy 3), 9376 Var("a1", 9377 CTy"xmm_mem")])), 9378 Var("strm3", 9379 OTy(LTy F8))])), 9380 (TP[LW(0,3), 9381 LL[LW(243,8)]], 9382 Call 9383 ("Zfull_inst", 9384 CTy"Zinst", 9385 TP[Var("p",LTy F8), 9386 Call 9387 ("SSE", 9388 CTy"instruction", 9389 Call 9390 ("bin_SS", 9391 CTy"SSE", 9392 TP[LC("sse_add", 9393 CTy"sse_binop"), 9394 Var("reg", 9395 FTy 3), 9396 Var("a1", 9397 CTy"xmm_mem")])), 9398 Var("strm3", 9399 OTy(LTy F8))])), 9400 (TP[LW(0,3), 9401 LL[LW(242,8)]], 9402 Call 9403 ("Zfull_inst", 9404 CTy"Zinst", 9405 TP[Var("p",LTy F8), 9406 Call 9407 ("SSE", 9408 CTy"instruction", 9409 Call 9410 ("bin_SD", 9411 CTy"SSE", 9412 TP[LC("sse_add", 9413 CTy"sse_binop"), 9414 Var("reg", 9415 FTy 3), 9416 Var("a1", 9417 CTy"xmm_mem")])), 9418 Var("strm3", 9419 OTy(LTy F8))])), 9420 (TP[LW(0,3), 9421 AVar(LTy F8)], 9422 Call 9423 ("Zfull_inst", 9424 CTy"Zinst", 9425 TP[Var("p",LTy F8), 9426 Call 9427 ("SSE", 9428 CTy"instruction", 9429 Call 9430 ("bin_PS", 9431 CTy"SSE", 9432 TP[LC("sse_add", 9433 CTy"sse_binop"), 9434 Var("reg", 9435 FTy 3), 9436 Var("a1", 9437 CTy"xmm_mem")])), 9438 Var("strm3", 9439 OTy(LTy F8))])), 9440 (TP[LW(1,3), 9441 LL[LW(102,8)]], 9442 Call 9443 ("Zfull_inst", 9444 CTy"Zinst", 9445 TP[Var("p",LTy F8), 9446 Call 9447 ("SSE", 9448 CTy"instruction", 9449 Call 9450 ("bin_PD", 9451 CTy"SSE", 9452 TP[LC("sse_mul", 9453 CTy"sse_binop"), 9454 Var("reg", 9455 FTy 3), 9456 Var("a1", 9457 CTy"xmm_mem")])), 9458 Var("strm3", 9459 OTy(LTy F8))])), 9460 (TP[LW(1,3), 9461 LL[LW(243,8)]], 9462 Call 9463 ("Zfull_inst", 9464 CTy"Zinst", 9465 TP[Var("p",LTy F8), 9466 Call 9467 ("SSE", 9468 CTy"instruction", 9469 Call 9470 ("bin_SS", 9471 CTy"SSE", 9472 TP[LC("sse_mul", 9473 CTy"sse_binop"), 9474 Var("reg", 9475 FTy 3), 9476 Var("a1", 9477 CTy"xmm_mem")])), 9478 Var("strm3", 9479 OTy(LTy F8))])), 9480 (TP[LW(1,3), 9481 LL[LW(242,8)]], 9482 Call 9483 ("Zfull_inst", 9484 CTy"Zinst", 9485 TP[Var("p",LTy F8), 9486 Call 9487 ("SSE", 9488 CTy"instruction", 9489 Call 9490 ("bin_SD", 9491 CTy"SSE", 9492 TP[LC("sse_mul", 9493 CTy"sse_binop"), 9494 Var("reg", 9495 FTy 3), 9496 Var("a1", 9497 CTy"xmm_mem")])), 9498 Var("strm3", 9499 OTy(LTy F8))])), 9500 (TP[LW(1,3), 9501 AVar(LTy F8)], 9502 Call 9503 ("Zfull_inst", 9504 CTy"Zinst", 9505 TP[Var("p",LTy F8), 9506 Call 9507 ("SSE", 9508 CTy"instruction", 9509 Call 9510 ("bin_PS", 9511 CTy"SSE", 9512 TP[LC("sse_mul", 9513 CTy"sse_binop"), 9514 Var("reg", 9515 FTy 3), 9516 Var("a1", 9517 CTy"xmm_mem")])), 9518 Var("strm3", 9519 OTy(LTy F8))])), 9520 (TP[LW(2,3), 9521 LL[LW(102,8)]], 9522 Call 9523 ("Zfull_inst", 9524 CTy"Zinst", 9525 TP[Var("p",LTy F8), 9526 Call 9527 ("SSE", 9528 CTy"instruction", 9529 Call 9530 ("CVTPD2PS", 9531 CTy"SSE", 9532 TP[Var("reg", 9533 FTy 3), 9534 Var("a1", 9535 CTy"xmm_mem")])), 9536 Var("strm3", 9537 OTy(LTy F8))])), 9538 (TP[LW(2,3), 9539 LL[LW(243,8)]], 9540 Call 9541 ("Zfull_inst", 9542 CTy"Zinst", 9543 TP[Var("p",LTy F8), 9544 Call 9545 ("SSE", 9546 CTy"instruction", 9547 Call 9548 ("CVTSS2SD", 9549 CTy"SSE", 9550 TP[Var("reg", 9551 FTy 3), 9552 Var("a1", 9553 CTy"xmm_mem")])), 9554 Var("strm3", 9555 OTy(LTy F8))])), 9556 (TP[LW(2,3), 9557 LL[LW(242,8)]], 9558 Call 9559 ("Zfull_inst", 9560 CTy"Zinst", 9561 TP[Var("p",LTy F8), 9562 Call 9563 ("SSE", 9564 CTy"instruction", 9565 Call 9566 ("CVTSD2SS", 9567 CTy"SSE", 9568 TP[Var("reg", 9569 FTy 3), 9570 Var("a1", 9571 CTy"xmm_mem")])), 9572 Var("strm3", 9573 OTy(LTy F8))])), 9574 (TP[LW(2,3), 9575 AVar(LTy F8)], 9576 Call 9577 ("Zfull_inst", 9578 CTy"Zinst", 9579 TP[Var("p",LTy F8), 9580 Call 9581 ("SSE", 9582 CTy"instruction", 9583 Call 9584 ("CVTPS2PD", 9585 CTy"SSE", 9586 TP[Var("reg", 9587 FTy 3), 9588 Var("a1", 9589 CTy"xmm_mem")])), 9590 Var("strm3", 9591 OTy(LTy F8))])), 9592 (TP[LW(3,3), 9593 LL[LW(102,8)]], 9594 Call 9595 ("Zfull_inst", 9596 CTy"Zinst", 9597 TP[Var("p",LTy F8), 9598 Call 9599 ("SSE", 9600 CTy"instruction", 9601 Call 9602 ("CVTPS2DQ", 9603 CTy"SSE", 9604 TP[LF, 9605 Var("reg", 9606 FTy 3), 9607 Var("a1", 9608 CTy"xmm_mem")])), 9609 Var("strm3", 9610 OTy(LTy F8))])), 9611 (TP[LW(3,3), 9612 LL[LW(243,8)]], 9613 Call 9614 ("Zfull_inst", 9615 CTy"Zinst", 9616 TP[Var("p",LTy F8), 9617 Call 9618 ("SSE", 9619 CTy"instruction", 9620 Call 9621 ("CVTPS2DQ", 9622 CTy"SSE", 9623 TP[LT, 9624 Var("reg", 9625 FTy 3), 9626 Var("a1", 9627 CTy"xmm_mem")])), 9628 Var("strm3", 9629 OTy(LTy F8))])), 9630 (TP[LW(3,3), 9631 LL[LW(242,8)]], 9632 Call 9633 ("Zdec_fail", 9634 CTy"Zinst", 9635 CC[LS 9636 "Unsupported opcode: 0F ", 9637 Mop(Cast sTy, 9638 Var("opc", 9639 F8))])), 9640 (TP[LW(3,3), 9641 AVar(LTy F8)], 9642 Call 9643 ("Zfull_inst", 9644 CTy"Zinst", 9645 TP[Var("p",LTy F8), 9646 Call 9647 ("SSE", 9648 CTy"instruction", 9649 Call 9650 ("CVTDQ2PS", 9651 CTy"SSE", 9652 TP[Var("reg", 9653 FTy 3), 9654 Var("a1", 9655 CTy"xmm_mem")])), 9656 Var("strm3", 9657 OTy(LTy F8))])), 9658 (TP[LW(4,3), 9659 LL[LW(102,8)]], 9660 Call 9661 ("Zfull_inst", 9662 CTy"Zinst", 9663 TP[Var("p",LTy F8), 9664 Call 9665 ("SSE", 9666 CTy"instruction", 9667 Call 9668 ("bin_PD", 9669 CTy"SSE", 9670 TP[LC("sse_sub", 9671 CTy"sse_binop"), 9672 Var("reg", 9673 FTy 3), 9674 Var("a1", 9675 CTy"xmm_mem")])), 9676 Var("strm3", 9677 OTy(LTy F8))])), 9678 (TP[LW(4,3), 9679 LL[LW(243,8)]], 9680 Call 9681 ("Zfull_inst", 9682 CTy"Zinst", 9683 TP[Var("p",LTy F8), 9684 Call 9685 ("SSE", 9686 CTy"instruction", 9687 Call 9688 ("bin_SS", 9689 CTy"SSE", 9690 TP[LC("sse_sub", 9691 CTy"sse_binop"), 9692 Var("reg", 9693 FTy 3), 9694 Var("a1", 9695 CTy"xmm_mem")])), 9696 Var("strm3", 9697 OTy(LTy F8))])), 9698 (TP[LW(4,3), 9699 LL[LW(242,8)]], 9700 Call 9701 ("Zfull_inst", 9702 CTy"Zinst", 9703 TP[Var("p",LTy F8), 9704 Call 9705 ("SSE", 9706 CTy"instruction", 9707 Call 9708 ("bin_SD", 9709 CTy"SSE", 9710 TP[LC("sse_sub", 9711 CTy"sse_binop"), 9712 Var("reg", 9713 FTy 3), 9714 Var("a1", 9715 CTy"xmm_mem")])), 9716 Var("strm3", 9717 OTy(LTy F8))])), 9718 (TP[LW(4,3), 9719 AVar(LTy F8)], 9720 Call 9721 ("Zfull_inst", 9722 CTy"Zinst", 9723 TP[Var("p",LTy F8), 9724 Call 9725 ("SSE", 9726 CTy"instruction", 9727 Call 9728 ("bin_PS", 9729 CTy"SSE", 9730 TP[LC("sse_sub", 9731 CTy"sse_binop"), 9732 Var("reg", 9733 FTy 3), 9734 Var("a1", 9735 CTy"xmm_mem")])), 9736 Var("strm3", 9737 OTy(LTy F8))])), 9738 (TP[LW(5,3), 9739 LL[LW(102,8)]], 9740 Call 9741 ("Zfull_inst", 9742 CTy"Zinst", 9743 TP[Var("p",LTy F8), 9744 Call 9745 ("SSE", 9746 CTy"instruction", 9747 Call 9748 ("bin_PD", 9749 CTy"SSE", 9750 TP[LC("sse_min", 9751 CTy"sse_binop"), 9752 Var("reg", 9753 FTy 3), 9754 Var("a1", 9755 CTy"xmm_mem")])), 9756 Var("strm3", 9757 OTy(LTy F8))])), 9758 (TP[LW(5,3), 9759 LL[LW(243,8)]], 9760 Call 9761 ("Zfull_inst", 9762 CTy"Zinst", 9763 TP[Var("p",LTy F8), 9764 Call 9765 ("SSE", 9766 CTy"instruction", 9767 Call 9768 ("bin_SS", 9769 CTy"SSE", 9770 TP[LC("sse_min", 9771 CTy"sse_binop"), 9772 Var("reg", 9773 FTy 3), 9774 Var("a1", 9775 CTy"xmm_mem")])), 9776 Var("strm3", 9777 OTy(LTy F8))])), 9778 (TP[LW(5,3), 9779 LL[LW(242,8)]], 9780 Call 9781 ("Zfull_inst", 9782 CTy"Zinst", 9783 TP[Var("p",LTy F8), 9784 Call 9785 ("SSE", 9786 CTy"instruction", 9787 Call 9788 ("bin_SD", 9789 CTy"SSE", 9790 TP[LC("sse_min", 9791 CTy"sse_binop"), 9792 Var("reg", 9793 FTy 3), 9794 Var("a1", 9795 CTy"xmm_mem")])), 9796 Var("strm3", 9797 OTy(LTy F8))])), 9798 (TP[LW(5,3), 9799 AVar(LTy F8)], 9800 Call 9801 ("Zfull_inst", 9802 CTy"Zinst", 9803 TP[Var("p",LTy F8), 9804 Call 9805 ("SSE", 9806 CTy"instruction", 9807 Call 9808 ("bin_PS", 9809 CTy"SSE", 9810 TP[LC("sse_min", 9811 CTy"sse_binop"), 9812 Var("reg", 9813 FTy 3), 9814 Var("a1", 9815 CTy"xmm_mem")])), 9816 Var("strm3", 9817 OTy(LTy F8))])), 9818 (TP[LW(6,3), 9819 LL[LW(102,8)]], 9820 Call 9821 ("Zfull_inst", 9822 CTy"Zinst", 9823 TP[Var("p",LTy F8), 9824 Call 9825 ("SSE", 9826 CTy"instruction", 9827 Call 9828 ("bin_PD", 9829 CTy"SSE", 9830 TP[LC("sse_div", 9831 CTy"sse_binop"), 9832 Var("reg", 9833 FTy 3), 9834 Var("a1", 9835 CTy"xmm_mem")])), 9836 Var("strm3", 9837 OTy(LTy F8))])), 9838 (TP[LW(6,3), 9839 LL[LW(243,8)]], 9840 Call 9841 ("Zfull_inst", 9842 CTy"Zinst", 9843 TP[Var("p",LTy F8), 9844 Call 9845 ("SSE", 9846 CTy"instruction", 9847 Call 9848 ("bin_SS", 9849 CTy"SSE", 9850 TP[LC("sse_div", 9851 CTy"sse_binop"), 9852 Var("reg", 9853 FTy 3), 9854 Var("a1", 9855 CTy"xmm_mem")])), 9856 Var("strm3", 9857 OTy(LTy F8))])), 9858 (TP[LW(6,3), 9859 LL[LW(242,8)]], 9860 Call 9861 ("Zfull_inst", 9862 CTy"Zinst", 9863 TP[Var("p",LTy F8), 9864 Call 9865 ("SSE", 9866 CTy"instruction", 9867 Call 9868 ("bin_SD", 9869 CTy"SSE", 9870 TP[LC("sse_div", 9871 CTy"sse_binop"), 9872 Var("reg", 9873 FTy 3), 9874 Var("a1", 9875 CTy"xmm_mem")])), 9876 Var("strm3", 9877 OTy(LTy F8))])), 9878 (TP[LW(6,3), 9879 AVar(LTy F8)], 9880 Call 9881 ("Zfull_inst", 9882 CTy"Zinst", 9883 TP[Var("p",LTy F8), 9884 Call 9885 ("SSE", 9886 CTy"instruction", 9887 Call 9888 ("bin_PS", 9889 CTy"SSE", 9890 TP[LC("sse_div", 9891 CTy"sse_binop"), 9892 Var("reg", 9893 FTy 3), 9894 Var("a1", 9895 CTy"xmm_mem")])), 9896 Var("strm3", 9897 OTy(LTy F8))])), 9898 (TP[LW(7,3), 9899 LL[LW(102,8)]], 9900 Call 9901 ("Zfull_inst", 9902 CTy"Zinst", 9903 TP[Var("p",LTy F8), 9904 Call 9905 ("SSE", 9906 CTy"instruction", 9907 Call 9908 ("bin_PD", 9909 CTy"SSE", 9910 TP[LC("sse_max", 9911 CTy"sse_binop"), 9912 Var("reg", 9913 FTy 3), 9914 Var("a1", 9915 CTy"xmm_mem")])), 9916 Var("strm3", 9917 OTy(LTy F8))])), 9918 (TP[LW(7,3), 9919 LL[LW(243,8)]], 9920 Call 9921 ("Zfull_inst", 9922 CTy"Zinst", 9923 TP[Var("p",LTy F8), 9924 Call 9925 ("SSE", 9926 CTy"instruction", 9927 Call 9928 ("bin_SS", 9929 CTy"SSE", 9930 TP[LC("sse_max", 9931 CTy"sse_binop"), 9932 Var("reg", 9933 FTy 3), 9934 Var("a1", 9935 CTy"xmm_mem")])), 9936 Var("strm3", 9937 OTy(LTy F8))])), 9938 (TP[LW(7,3), 9939 LL[LW(242,8)]], 9940 Call 9941 ("Zfull_inst", 9942 CTy"Zinst", 9943 TP[Var("p",LTy F8), 9944 Call 9945 ("SSE", 9946 CTy"instruction", 9947 Call 9948 ("bin_SD", 9949 CTy"SSE", 9950 TP[LC("sse_max", 9951 CTy"sse_binop"), 9952 Var("reg", 9953 FTy 3), 9954 Var("a1", 9955 CTy"xmm_mem")])), 9956 Var("strm3", 9957 OTy(LTy F8))])), 9958 (TP[LW(7,3), 9959 AVar(LTy F8)], 9960 Call 9961 ("Zfull_inst", 9962 CTy"Zinst", 9963 TP[Var("p",LTy F8), 9964 Call 9965 ("SSE", 9966 CTy"instruction", 9967 Call 9968 ("bin_PS", 9969 CTy"SSE", 9970 TP[LC("sse_max", 9971 CTy"sse_binop"), 9972 Var("reg", 9973 FTy 3), 9974 Var("a1", 9975 CTy"xmm_mem")])), 9976 Var("strm3", 9977 OTy(LTy F8))]))]))))], 9978 Call 9979 ("Zdec_fail",CTy"Zinst", 9980 CC[LS"Unsupported opcode: 0F ", 9981 Mop(Cast sTy,Var("opc",F8))])))), 9982 (TP[TP[bVar"opc'7",bVar"opc'6",bVar"opc'5", 9983 bVar"opc'4",bVar"opc'3",bVar"opc'2", 9984 bVar"opc'1",bVar"opc'0"],AVar(LTy F8)], 9985 Call 9986 ("Zdec_fail",CTy"Zinst", 9987 CC[LS"Unsupported opcode: ", 9988 Mop(Cast sTy, 9989 Mop(Cast F8, 9990 LL[bVar"opc'7",bVar"opc'6", 9991 bVar"opc'5",bVar"opc'4", 9992 bVar"opc'3",bVar"opc'2", 9993 bVar"opc'1",bVar"opc'0"]))]))])), 9994 (LNL F8,Call("Zdec_fail",CTy"Zinst",LS"No opcode"))])))))])) 9995; 9996val x64_fetch_def = Def 9997 ("x64_fetch",qVar"state", 9998 Mop(Fst, 9999 Mop(Snd, 10000 Apply 10001 (For(TP[LN 19,LN 0, 10002 Close 10003 (nVar"i", 10004 Close 10005 (Var("state",PTy(LTy F8,qTy)), 10006 TP[LU, 10007 LLC([Apply 10008 (Dest 10009 ("MEM",ATy(F64,F8), 10010 Mop(Snd, 10011 Var("state",PTy(LTy F8,qTy)))), 10012 Bop(Add, 10013 Dest 10014 ("RIP",F64, 10015 Mop(Snd, 10016 Var("state", 10017 PTy(LTy F8,qTy)))), 10018 Mop(Cast F64,nVar"i")))], 10019 Mop(Fst,Var("state",PTy(LTy F8,qTy)))), 10020 Mop(Snd,Var("state",PTy(LTy F8,qTy)))]))]), 10021 TP[LNL F8,qVar"state"])))) 10022; 10023val x64_next_def = Def 10024 ("x64_next",qVar"state", 10025 CS(Call 10026 ("x64_decode",CTy"Zinst", 10027 Apply(Const("x64_fetch",ATy(qTy,LTy F8)),qVar"state")), 10028 [(Call 10029 ("Zfull_inst",CTy"Zinst", 10030 TP[AVar(LTy F8),Var("i",CTy"instruction"), 10031 Mop(Some,Var("strm1",LTy F8))]), 10032 Apply 10033 (Call("Run",ATy(qTy,qTy),Var("i",CTy"instruction")), 10034 Rupd 10035 ("RIP", 10036 TP[qVar"state", 10037 Bop(Add,Dest("RIP",F64,qVar"state"), 10038 Mop(Cast F64, 10039 Bop(Sub,LN 20,Mop(Length,Var("strm1",LTy F8)))))]))), 10040 (Call 10041 ("Zfull_inst",CTy"Zinst", 10042 TP[AVar(LTy F8),AVar(CTy"instruction"),LO(LTy F8)]), 10043 Mop(Snd, 10044 Apply 10045 (Call 10046 ("raise'exception",ATy(qTy,PTy(uTy,qTy)), 10047 Call("FAILURE",CTy"exception",LS"not enough bytes")), 10048 qVar"state"))), 10049 (Call("Zdec_fail",CTy"Zinst",sVar"s0"), 10050 Mop(Snd, 10051 Apply 10052 (Call 10053 ("raise'exception",ATy(qTy,PTy(uTy,qTy)), 10054 Call("FAILURE",CTy"exception",sVar"s0")),qVar"state")))])) 10055; 10056val e_imm8_def = Def 10057 ("e_imm8",Var("imm",F64), 10058 ITE(Bop(And,Bop(Le,LW(18446744073709551488,64),Var("imm",F64)), 10059 Bop(Le,Var("imm",F64),LW(127,64))), 10060 LL[EX(Var("imm",F64),LN 7,LN 0,F8)],LNL F8)) 10061; 10062val e_imm16_def = Def 10063 ("e_imm16",Var("imm",F64), 10064 ITE(Bop(And,Bop(Le,LW(18446744073709518848,64),Var("imm",F64)), 10065 Bop(Le,Var("imm",F64),LW(32767,64))), 10066 LL[EX(Var("imm",F64),LN 7,LN 0,F8),EX(Var("imm",F64),LN 15,LN 8,F8)], 10067 LNL F8)) 10068; 10069val e_imm32_def = Def 10070 ("e_imm32",Var("imm",F64), 10071 ITE(Bop(And,Bop(Le,LW(18446744071562067968,64),Var("imm",F64)), 10072 Bop(Le,Var("imm",F64),LW(2147483647,64))), 10073 LL[EX(Var("imm",F64),LN 7,LN 0,F8), 10074 EX(Var("imm",F64),LN 15,LN 8,F8), 10075 EX(Var("imm",F64),LN 23,LN 16,F8), 10076 EX(Var("imm",F64),LN 31,LN 24,F8)],LNL F8)) 10077; 10078val e_imm64_def = Def 10079 ("e_imm64",Var("imm",F64), 10080 LL[EX(Var("imm",F64),LN 7,LN 0,F8),EX(Var("imm",F64),LN 15,LN 8,F8), 10081 EX(Var("imm",F64),LN 23,LN 16,F8),EX(Var("imm",F64),LN 31,LN 24,F8), 10082 EX(Var("imm",F64),LN 39,LN 32,F8),EX(Var("imm",F64),LN 47,LN 40,F8), 10083 EX(Var("imm",F64),LN 55,LN 48,F8),EX(Var("imm",F64),LN 63,LN 56,F8)]) 10084; 10085val e_imm_def = Def 10086 ("e_imm",Var("imm",F64), 10087 CS(Call("e_imm8",LTy F8,Var("imm",F64)), 10088 [(LNL F8, 10089 CS(Call("e_imm16",LTy F8,Var("imm",F64)), 10090 [(LNL F8, 10091 CS(Call("e_imm32",LTy F8,Var("imm",F64)), 10092 [(LNL F8,Call("e_imm64",LTy F8,Var("imm",F64))), 10093 (Var("l",LTy F8),Var("l",LTy F8))])), 10094 (Var("l",LTy F8),Var("l",LTy F8))])), 10095 (Var("l",LTy F8),Var("l",LTy F8))])) 10096; 10097val e_imm_8_32_def = Def 10098 ("e_imm_8_32",Var("imm",F64), 10099 CS(Call("e_imm8",LTy F8,Var("imm",F64)), 10100 [(LNL F8, 10101 CS(Call("e_imm32",LTy F8,Var("imm",F64)), 10102 [(LNL F8,TP[LN 8,LNL F8]), 10103 (Var("l",LTy F8),TP[LN 4,Var("l",LTy F8)])])), 10104 (Var("l",LTy F8),TP[LN 1,Var("l",LTy F8)])])) 10105; 10106val e_ModRM_def = Def 10107 ("e_ModRM",TP[Var("r",F4),Var("rm",CTy"Zrm")], 10108 CS(Var("rm",CTy"Zrm"), 10109 [(Call 10110 ("Zm",CTy"Zrm", 10111 TP[LO(PTy(FTy 2,CTy"Zreg")),Const("ZripBase",CTy"Zbase"), 10112 Var("displacement",F64)]), 10113 Mop(Some, 10114 TP[CC[LW(0,1),EX(Var("r",F4),LN 3,LN 3,F1),LW(0,2)], 10115 LLC([CC[LW(0,2),EX(Var("r",F4),LN 2,LN 0,FTy 3),LW(5,3)]], 10116 Call("e_imm32",LTy F8,Var("displacement",F64)))])), 10117 (Call("Zr",CTy"Zrm",Var("rm",CTy"Zreg")), 10118 Let(Var("rm",F4),Mop(Cast F4,Var("rm",CTy"Zreg")), 10119 Mop(Some, 10120 TP[CC[LW(0,1),EX(Var("r",F4),LN 3,LN 3,F1),LW(0,1), 10121 EX(Var("rm",F4),LN 3,LN 3,F1)], 10122 LL[CC[LW(3,2),EX(Var("r",F4),LN 2,LN 0,FTy 3), 10123 EX(Var("rm",F4),LN 2,LN 0,FTy 3)]]]))), 10124 (Call 10125 ("Zm",CTy"Zrm", 10126 TP[LO(PTy(FTy 2,CTy"Zreg")),Const("ZnoBase",CTy"Zbase"), 10127 Var("imm",F64)]), 10128 CS(Call("e_imm32",LTy F8,Var("imm",F64)), 10129 [(LNL F8,LO(PTy(F4,LTy F8))), 10130 (Var("l",LTy F8), 10131 Mop(Some, 10132 TP[CC[LW(0,1),EX(Var("r",F4),LN 3,LN 3,F1),LW(0,2)], 10133 CC[LL[CC[LW(0,2),EX(Var("r",F4),LN 2,LN 0,FTy 3), 10134 LW(4,3)],LW(37,8)],Var("l",LTy F8)]]))])), 10135 (Call 10136 ("Zm",CTy"Zrm", 10137 TP[Mop(Some,TP[Var("ss",FTy 2),Var("index",CTy"Zreg")]), 10138 Const("ZnoBase",CTy"Zbase"),Var("imm",F64)]), 10139 Let(Var("i",F4),Mop(Cast F4,Var("index",CTy"Zreg")), 10140 CS(Call("e_imm32",LTy F8,Var("imm",F64)), 10141 [(LNL F8,LO(PTy(F4,LTy F8))), 10142 (Var("l",LTy F8), 10143 Mop(Some, 10144 TP[CC[LW(0,1),EX(Var("r",F4),LN 3,LN 3,F1), 10145 EX(Var("i",F4),LN 3,LN 3,F1),LW(0,1)], 10146 CC[LL[CC[LW(0,2),EX(Var("r",F4),LN 2,LN 0,FTy 3), 10147 LW(4,3)], 10148 CC[Var("ss",FTy 2), 10149 EX(Var("i",F4),LN 2,LN 0,FTy 3),LW(5,3)]], 10150 Var("l",LTy F8)]]))]))), 10151 (Call 10152 ("Zm",CTy"Zrm", 10153 TP[Mop(Some,TP[Var("ss",FTy 2),Var("index",CTy"Zreg")]), 10154 Call("ZregBase",CTy"Zbase",Var("base",CTy"Zreg")), 10155 Var("imm",F64)]), 10156 Let(Var("b",F4),Mop(Cast F4,Var("base",CTy"Zreg")), 10157 Let(Var("i",F4),Mop(Cast F4,Var("index",CTy"Zreg")), 10158 Let(Var("b20",FTy 3),EX(Var("b",F4),LN 2,LN 0,FTy 3), 10159 Let(TP[nVar"s",Var("l",LTy F8)], 10160 ITE(Bop(And,EQ(Var("imm",F64),LW(0,64)), 10161 Mop(Not,EQ(Var("b20",FTy 3),LW(5,3)))), 10162 TP[LN 0,LNL F8], 10163 Call 10164 ("e_imm_8_32",PTy(nTy,LTy F8),Var("imm",F64))), 10165 ITE(Bop(In,nVar"s",SL[LN 0,LN 1,LN 4]), 10166 Mop(Some, 10167 TP[CC[LW(0,1), 10168 EX(Var("r",F4),LN 3,LN 3,F1), 10169 EX(Var("i",F4),LN 3,LN 3,F1), 10170 EX(Var("b",F4),LN 3,LN 3,F1)], 10171 CC[LL[CC[CS(nVar"s", 10172 [(LN 0,LW(0,2)), 10173 (LN 1,LW(1,2)), 10174 (AVar nTy,LW(2,2))]), 10175 EX(Var("r",F4),LN 2,LN 0,FTy 3), 10176 LW(4,3)], 10177 CC[Var("ss",FTy 2), 10178 EX(Var("i",F4),LN 2,LN 0,FTy 3), 10179 Var("b20",FTy 3)]], 10180 Var("l",LTy F8)]]), 10181 LO(PTy(F4,LTy F8)))))))), 10182 (Call 10183 ("Zm",CTy"Zrm", 10184 TP[LO(PTy(FTy 2,CTy"Zreg")), 10185 Call("ZregBase",CTy"Zbase",Var("base",CTy"Zreg")), 10186 Var("imm",F64)]), 10187 Let(Var("base",F4),Mop(Cast F4,Var("base",CTy"Zreg")), 10188 Let(Var("base20",FTy 3),EX(Var("base",F4),LN 2,LN 0,FTy 3), 10189 Let(TP[nVar"s",Var("l",LTy F8)], 10190 ITE(Bop(And,EQ(Var("imm",F64),LW(0,64)), 10191 Mop(Not,EQ(Var("base20",FTy 3),LW(5,3)))), 10192 TP[LN 0,LNL F8], 10193 Call("e_imm_8_32",PTy(nTy,LTy F8),Var("imm",F64))), 10194 ITE(Bop(In,nVar"s",SL[LN 0,LN 1,LN 4]), 10195 Mop(Some, 10196 TP[CC[LW(0,1),EX(Var("r",F4),LN 3,LN 3,F1), 10197 LW(0,1),EX(Var("base",F4),LN 3,LN 3,F1)], 10198 CC[LLC([CC[CS(nVar"s", 10199 [(LN 0,LW(0,2)), 10200 (LN 1,LW(1,2)), 10201 (AVar nTy,LW(2,2))]), 10202 EX(Var("r",F4),LN 2,LN 0,FTy 3), 10203 Var("base20",FTy 3)]], 10204 ITE(EQ(Var("base20",FTy 3),LW(4,3)), 10205 LL[CC[LW(4,5), 10206 Var("base20",FTy 3)]], 10207 LNL F8)),Var("l",LTy F8)]]), 10208 LO(PTy(F4,LTy F8))))))), 10209 (AVar(CTy"Zrm"),LO(PTy(F4,LTy F8)))])) 10210; 10211val rex_prefix_def = Def 10212 ("rex_prefix",Var("rex",F4), 10213 ITE(EQ(Var("rex",F4),LW(0,4)),LNL F8,LL[CC[LW(4,4),Var("rex",F4)]])) 10214; 10215val e_opsize_def = Def 10216 ("e_opsize",TP[Var("sz",CTy"Zsize"),Var("rex",F4)], 10217 CS(Var("sz",CTy"Zsize"), 10218 [(Call("Z8",CTy"Zsize",bVar"have_rex"), 10219 Let(Var("p",LTy F8),Call("rex_prefix",LTy F8,Var("rex",F4)), 10220 TP[ITE(Bop(And,bVar"have_rex",EQ(Var("p",LTy F8),LNL F8)), 10221 LL[LW(64,8)],Var("p",LTy F8)),LW(0,8)])), 10222 (Const("Z16",CTy"Zsize"), 10223 TP[CC[LL[LW(102,8)], 10224 Call("rex_prefix",LTy F8,Bop(BAnd,Var("rex",F4),LW(7,4)))], 10225 LW(1,8)]), 10226 (Const("Z32",CTy"Zsize"), 10227 TP[Call("rex_prefix",LTy F8,Bop(BAnd,Var("rex",F4),LW(7,4))), 10228 LW(1,8)]), 10229 (Const("Z64",CTy"Zsize"), 10230 TP[Call("rex_prefix",LTy F8,Bop(BOr,Var("rex",F4),LW(8,4))), 10231 LW(1,8)])])) 10232; 10233val e_opsize_imm_def = Def 10234 ("e_opsize_imm", 10235 TP[Var("sz",CTy"Zsize"),Var("rex",F4),Var("imm",F64),bVar"normal"], 10236 Let(TP[Var("prefixes",LTy F8),Var("v",F8)], 10237 Call 10238 ("e_opsize",PTy(LTy F8,F8),TP[Var("sz",CTy"Zsize"),Var("rex",F4)]), 10239 CS(ITE(Bop(And,EQ(Var("sz",CTy"Zsize"),Const("Z64",CTy"Zsize")), 10240 bVar"normal"),Const("Z32",CTy"Zsize"), 10241 Var("sz",CTy"Zsize")), 10242 [(Call("Z8",CTy"Zsize",AVar bTy), 10243 CS(Call("e_imm8",LTy F8,Var("imm",F64)), 10244 [(LNL F8,LO(PTy(LTy F8,PTy(F8,LTy F8)))), 10245 (Var("l",LTy F8), 10246 ITE(EQ(Var("v",F8),LW(0,8)), 10247 Mop(Some, 10248 TP[Var("prefixes",LTy F8),Var("v",F8), 10249 Var("l",LTy F8)]), 10250 LO(PTy(LTy F8,PTy(F8,LTy F8)))))])), 10251 (Const("Z16",CTy"Zsize"), 10252 CS(Call("e_imm16",LTy F8,Var("imm",F64)), 10253 [(LNL F8,LO(PTy(LTy F8,PTy(F8,LTy F8)))), 10254 (Var("l",LTy F8), 10255 ITE(EQ(Var("v",F8),LW(1,8)), 10256 Mop(Some, 10257 TP[Var("prefixes",LTy F8),Var("v",F8), 10258 Var("l",LTy F8)]), 10259 LO(PTy(LTy F8,PTy(F8,LTy F8)))))])), 10260 (Const("Z32",CTy"Zsize"), 10261 CS(Call("e_imm32",LTy F8,Var("imm",F64)), 10262 [(LNL F8,LO(PTy(LTy F8,PTy(F8,LTy F8)))), 10263 (Var("l",LTy F8), 10264 ITE(EQ(Var("v",F8),LW(1,8)), 10265 Mop(Some, 10266 TP[Var("prefixes",LTy F8),Var("v",F8), 10267 Var("l",LTy F8)]), 10268 LO(PTy(LTy F8,PTy(F8,LTy F8)))))])), 10269 (Const("Z64",CTy"Zsize"), 10270 ITE(EQ(Var("v",F8),LW(1,8)), 10271 Mop(Some, 10272 TP[Var("prefixes",LTy F8),Var("v",F8), 10273 Call("e_imm64",LTy F8,Var("imm",F64))]), 10274 LO(PTy(LTy F8,PTy(F8,LTy F8)))))]))) 10275; 10276val e_opc_def = Def 10277 ("e_opc",TP[Var("opc1",F8),Var("opc2",FTy 3),Var("rm",CTy"Zrm")], 10278 CS(Call 10279 ("e_ModRM",OTy(PTy(F4,LTy F8)), 10280 TP[Mop(Cast F4,Var("opc2",FTy 3)),Var("rm",CTy"Zrm")]), 10281 [(LO(PTy(F4,LTy F8)),LNL F8), 10282 (Mop(Some,TP[Var("rex",F4),Var("strm",LTy F8)]), 10283 CC[Call("rex_prefix",LTy F8,Var("rex",F4)), 10284 LLC([Var("opc1",F8)],Var("strm",LTy F8))])])) 10285; 10286val e_gen_rm_reg_def = Def 10287 ("e_gen_rm_reg", 10288 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"),Var("r",F4),Var("p",LTy F8), 10289 Var("opc",F8),Var("mo",OTy F8)], 10290 CS(Call 10291 ("e_ModRM",OTy(PTy(F4,LTy F8)),TP[Var("r",F4),Var("rm",CTy"Zrm")]), 10292 [(LO(PTy(F4,LTy F8)),LNL F8), 10293 (Mop(Some,TP[Var("rex",F4),Var("strm",LTy F8)]), 10294 Let(TP[Var("prefixes",LTy F8),Var("v",F8)], 10295 Call 10296 ("e_opsize",PTy(LTy F8,F8), 10297 TP[Var("sz",CTy"Zsize"),Var("rex",F4)]), 10298 CC[Var("prefixes",LTy F8),Var("p",LTy F8), 10299 LL[Bop(BOr,Var("opc",F8), 10300 CS(Var("mo",OTy F8), 10301 [(Mop(Some,Var("x",F8)),Var("x",F8)), 10302 (LO F8,Var("v",F8))]))],Var("strm",LTy F8)]))])) 10303; 10304val e_rm_imm_def = Def 10305 ("e_rm_imm", 10306 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"),Var("imm",F64), 10307 Var("opc1",F4),Var("opc2",F8)], 10308 CS(Call 10309 ("e_ModRM",OTy(PTy(F4,LTy F8)), 10310 TP[Var("opc1",F4),Var("rm",CTy"Zrm")]), 10311 [(LO(PTy(F4,LTy F8)),LNL F8), 10312 (Mop(Some,TP[Var("rex",F4),Var("strm",LTy F8)]), 10313 CS(Call 10314 ("e_opsize_imm",OTy(PTy(LTy F8,PTy(F8,LTy F8))), 10315 TP[Var("sz",CTy"Zsize"),Var("rex",F4),Var("imm",F64),LT]), 10316 [(Mop(Some, 10317 TP[Var("prefixes",LTy F8),Var("v",F8),Var("l",LTy F8)]), 10318 CC[Var("prefixes",LTy F8), 10319 LL[Bop(BOr,Var("opc2",F8),Var("v",F8))], 10320 Var("strm",LTy F8),Var("l",LTy F8)]), 10321 (LO(PTy(LTy F8,PTy(F8,LTy F8))),LNL F8)]))])) 10322; 10323val e_rm_imm8_def = Def 10324 ("e_rm_imm8", 10325 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"),Var("imm",F64), 10326 Var("opc1",F4),Var("opc2",F8)], 10327 CS(Call 10328 ("e_ModRM",OTy(PTy(F4,LTy F8)), 10329 TP[Var("opc1",F4),Var("rm",CTy"Zrm")]), 10330 [(LO(PTy(F4,LTy F8)),LNL F8), 10331 (Mop(Some,TP[Var("rex",F4),Var("strm",LTy F8)]), 10332 Let(TP[Var("prefixes",LTy F8),Var("v",F8)], 10333 Call 10334 ("e_opsize",PTy(LTy F8,F8), 10335 TP[Var("sz",CTy"Zsize"),Var("rex",F4)]), 10336 CS(Call("e_imm8",LTy F8,Var("imm",F64)), 10337 [(LNL F8,LNL F8), 10338 (Var("l",LTy F8), 10339 CC[Var("prefixes",LTy F8), 10340 LL[Bop(BOr,Var("opc2",F8),Var("v",F8))], 10341 Var("strm",LTy F8),Var("l",LTy F8)])])))])) 10342; 10343val e_rm_imm8b_def = Def 10344 ("e_rm_imm8b", 10345 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"),Var("imm",F64), 10346 Var("opc1",F4),Var("opc2",LTy F8)], 10347 CS(Call 10348 ("e_ModRM",OTy(PTy(F4,LTy F8)), 10349 TP[Var("opc1",F4),Var("rm",CTy"Zrm")]), 10350 [(Mop(Some,TP[Var("rex",F4),LLC([Var("s",F8)],Var("t",LTy F8))]), 10351 CS(Call("e_imm8",LTy F8,Var("imm",F64)), 10352 [(LNL F8,LNL F8), 10353 (Var("l",LTy F8), 10354 CC[Mop(Fst, 10355 Call 10356 ("e_opsize",PTy(LTy F8,F8), 10357 TP[Var("sz",CTy"Zsize"),Var("rex",F4)])), 10358 Var("opc2",LTy F8),LL[Bop(BOr,Var("s",F8),LW(32,8))], 10359 Var("t",LTy F8),Var("l",LTy F8)])])), 10360 (AVar(OTy(PTy(F4,LTy F8))),LNL F8)])) 10361; 10362val e_rax_imm_def = Def 10363 ("e_rax_imm",TP[Var("sz",CTy"Zsize"),Var("imm",F64),Var("opc",F8)], 10364 CS(Call 10365 ("e_opsize_imm",OTy(PTy(LTy F8,PTy(F8,LTy F8))), 10366 TP[Var("sz",CTy"Zsize"),LW(0,4),Var("imm",F64),LT]), 10367 [(Mop(Some,TP[Var("prefixes",LTy F8),Var("v",F8),Var("l",LTy F8)]), 10368 CC[Var("prefixes",LTy F8),LL[Bop(BOr,Var("opc",F8),Var("v",F8))], 10369 Var("l",LTy F8)]),(LO(PTy(LTy F8,PTy(F8,LTy F8))),LNL F8)])) 10370; 10371val e_jcc_rel32_def = Def 10372 ("e_jcc_rel32",Var("i",CTy"instruction"), 10373 CS(Var("i",CTy"instruction"), 10374 [(Call 10375 ("Zjcc",CTy"instruction", 10376 TP[Var("cond",CTy"Zcond"),Var("imm",F64)]), 10377 CS(TP[Call("e_imm32",LTy F8,Var("imm",F64)),Var("cond",CTy"Zcond")], 10378 [(TP[LNL F8,AVar(CTy"Zcond")],LNL F8), 10379 (TP[Var("l",LTy F8),LC("Z_ALWAYS",CTy"Zcond")], 10380 LLC([LW(233,8)],Var("l",LTy F8))), 10381 (TP[Var("l",LTy F8),AVar(CTy"Zcond")], 10382 CC[LL[LW(15,8), 10383 CC[LW(8,4),Mop(Cast F4,Var("cond",CTy"Zcond"))]], 10384 Var("l",LTy F8)])])),(AVar(CTy"instruction"),LNL F8)])) 10385; 10386val not_byte_def = Def 10387 ("not_byte",Var("sz",CTy"Zsize"), 10388 CS(Var("sz",CTy"Zsize"), 10389 [(Call("Z8",CTy"Zsize",AVar bTy),LF),(AVar(CTy"Zsize"),LT)])) 10390; 10391val is_rax_def = Def 10392 ("is_rax",Var("rm",CTy"Zrm"), 10393 CS(Var("rm",CTy"Zrm"), 10394 [(Call("Zr",CTy"Zrm",LC("RAX",CTy"Zreg")),LT),(AVar(CTy"Zrm"),LF)])) 10395; 10396val xmm_mem_to_rm_def = Def 10397 ("xmm_mem_to_rm",Var("x",CTy"xmm_mem"), 10398 CS(Var("x",CTy"xmm_mem"), 10399 [(Call("xmm_reg",CTy"xmm_mem",Var("r",FTy 3)), 10400 Call("Zr",CTy"Zrm",Mop(Cast(CTy"Zreg"),Var("r",FTy 3)))), 10401 (Call 10402 ("xmm_mem",CTy"xmm_mem", 10403 Var("m",PTy(OTy(PTy(FTy 2,CTy"Zreg")),PTy(CTy"Zbase",F64)))), 10404 Call 10405 ("Zm",CTy"Zrm", 10406 Var("m",PTy(OTy(PTy(FTy 2,CTy"Zreg")),PTy(CTy"Zbase",F64)))))])) 10407; 10408val encode_sse_binop_def = Def 10409 ("encode_sse_binop",Var("bop",CTy"sse_binop"), 10410 CS(Var("bop",CTy"sse_binop"), 10411 [(LC("sse_add",CTy"sse_binop"),LW(0,3)), 10412 (LC("sse_mul",CTy"sse_binop"),LW(1,3)), 10413 (LC("sse_sub",CTy"sse_binop"),LW(4,3)), 10414 (LC("sse_min",CTy"sse_binop"),LW(5,3)), 10415 (LC("sse_div",CTy"sse_binop"),LW(6,3)), 10416 (LC("sse_max",CTy"sse_binop"),LW(7,3))])) 10417; 10418val encode_sse_def = Def 10419 ("encode_sse",Var("i",CTy"SSE"), 10420 CS(Var("i",CTy"SSE"), 10421 [(Call 10422 ("bin_PD",CTy"SSE", 10423 TP[Var("bop",CTy"sse_binop"),Var("dst",FTy 3), 10424 Var("src",CTy"xmm_mem")]), 10425 LLC([LW(102,8)], 10426 Call 10427 ("e_gen_rm_reg",LTy F8, 10428 TP[Const("Z32",CTy"Zsize"), 10429 Call("xmm_mem_to_rm",CTy"Zrm",Var("src",CTy"xmm_mem")), 10430 Mop(Cast F4,Var("dst",FTy 3)),LL[LW(15,8)], 10431 CC[LW(5,4),LW(1,1), 10432 Call 10433 ("encode_sse_binop",FTy 3,Var("bop",CTy"sse_binop"))], 10434 Mop(Some,LW(0,8))]))), 10435 (Call 10436 ("bin_PS",CTy"SSE", 10437 TP[Var("bop",CTy"sse_binop"),Var("dst",FTy 3), 10438 Var("src",CTy"xmm_mem")]), 10439 Call 10440 ("e_gen_rm_reg",LTy F8, 10441 TP[Const("Z32",CTy"Zsize"), 10442 Call("xmm_mem_to_rm",CTy"Zrm",Var("src",CTy"xmm_mem")), 10443 Mop(Cast F4,Var("dst",FTy 3)),LL[LW(15,8)], 10444 CC[LW(5,4),LW(1,1), 10445 Call("encode_sse_binop",FTy 3,Var("bop",CTy"sse_binop"))], 10446 Mop(Some,LW(0,8))])), 10447 (Call 10448 ("bin_SD",CTy"SSE", 10449 TP[Var("bop",CTy"sse_binop"),Var("dst",FTy 3), 10450 Var("src",CTy"xmm_mem")]), 10451 LLC([LW(242,8)], 10452 Call 10453 ("e_gen_rm_reg",LTy F8, 10454 TP[Const("Z32",CTy"Zsize"), 10455 Call("xmm_mem_to_rm",CTy"Zrm",Var("src",CTy"xmm_mem")), 10456 Mop(Cast F4,Var("dst",FTy 3)),LL[LW(15,8)], 10457 CC[LW(5,4),LW(1,1), 10458 Call 10459 ("encode_sse_binop",FTy 3,Var("bop",CTy"sse_binop"))], 10460 Mop(Some,LW(0,8))]))), 10461 (Call 10462 ("bin_SS",CTy"SSE", 10463 TP[Var("bop",CTy"sse_binop"),Var("dst",FTy 3), 10464 Var("src",CTy"xmm_mem")]), 10465 LLC([LW(243,8)], 10466 Call 10467 ("e_gen_rm_reg",LTy F8, 10468 TP[Const("Z32",CTy"Zsize"), 10469 Call("xmm_mem_to_rm",CTy"Zrm",Var("src",CTy"xmm_mem")), 10470 Mop(Cast F4,Var("dst",FTy 3)),LL[LW(15,8)], 10471 CC[LW(5,4),LW(1,1), 10472 Call 10473 ("encode_sse_binop",FTy 3,Var("bop",CTy"sse_binop"))], 10474 Mop(Some,LW(0,8))]))), 10475 (Call 10476 ("logic_PD",CTy"SSE", 10477 TP[Var("bop",CTy"sse_logic"),Var("dst",FTy 3), 10478 Var("src",CTy"xmm_mem")]), 10479 LLC([LW(102,8)], 10480 Call 10481 ("e_gen_rm_reg",LTy F8, 10482 TP[Const("Z32",CTy"Zsize"), 10483 Call("xmm_mem_to_rm",CTy"Zrm",Var("src",CTy"xmm_mem")), 10484 Mop(Cast F4,Var("dst",FTy 3)),LL[LW(15,8)], 10485 CC[LW(5,4),LW(1,2), 10486 Mop(Cast(FTy 2),Var("bop",CTy"sse_logic"))], 10487 Mop(Some,LW(0,8))]))), 10488 (Call 10489 ("logic_PS",CTy"SSE", 10490 TP[Var("bop",CTy"sse_logic"),Var("dst",FTy 3), 10491 Var("src",CTy"xmm_mem")]), 10492 Call 10493 ("e_gen_rm_reg",LTy F8, 10494 TP[Const("Z32",CTy"Zsize"), 10495 Call("xmm_mem_to_rm",CTy"Zrm",Var("src",CTy"xmm_mem")), 10496 Mop(Cast F4,Var("dst",FTy 3)),LL[LW(15,8)], 10497 CC[LW(5,4),LW(1,2), 10498 Mop(Cast(FTy 2),Var("bop",CTy"sse_logic"))], 10499 Mop(Some,LW(0,8))])), 10500 (Call 10501 ("CMPPD",CTy"SSE", 10502 TP[Var("bop",CTy"sse_compare"),Var("dst",FTy 3), 10503 Var("src",CTy"xmm_mem")]), 10504 CC[LLC([LW(102,8)], 10505 Call 10506 ("e_gen_rm_reg",LTy F8, 10507 TP[Const("Z32",CTy"Zsize"), 10508 Call 10509 ("xmm_mem_to_rm",CTy"Zrm",Var("src",CTy"xmm_mem")), 10510 Mop(Cast F4,Var("dst",FTy 3)),LL[LW(15,8)],LW(194,8), 10511 Mop(Some,LW(0,8))])), 10512 LL[Mop(Cast F8,Var("bop",CTy"sse_compare"))]]), 10513 (Call 10514 ("CMPPS",CTy"SSE", 10515 TP[Var("bop",CTy"sse_compare"),Var("dst",FTy 3), 10516 Var("src",CTy"xmm_mem")]), 10517 CC[Call 10518 ("e_gen_rm_reg",LTy F8, 10519 TP[Const("Z32",CTy"Zsize"), 10520 Call("xmm_mem_to_rm",CTy"Zrm",Var("src",CTy"xmm_mem")), 10521 Mop(Cast F4,Var("dst",FTy 3)),LL[LW(15,8)],LW(194,8), 10522 Mop(Some,LW(0,8))]), 10523 LL[Mop(Cast F8,Var("bop",CTy"sse_compare"))]]), 10524 (Call 10525 ("CMPSD",CTy"SSE", 10526 TP[Var("bop",CTy"sse_compare"),Var("dst",FTy 3), 10527 Var("src",CTy"xmm_mem")]), 10528 CC[LLC([LW(242,8)], 10529 Call 10530 ("e_gen_rm_reg",LTy F8, 10531 TP[Const("Z32",CTy"Zsize"), 10532 Call 10533 ("xmm_mem_to_rm",CTy"Zrm",Var("src",CTy"xmm_mem")), 10534 Mop(Cast F4,Var("dst",FTy 3)),LL[LW(15,8)],LW(194,8), 10535 Mop(Some,LW(0,8))])), 10536 LL[Mop(Cast F8,Var("bop",CTy"sse_compare"))]]), 10537 (Call 10538 ("CMPSS",CTy"SSE", 10539 TP[Var("bop",CTy"sse_compare"),Var("dst",FTy 3), 10540 Var("src",CTy"xmm_mem")]), 10541 CC[LLC([LW(243,8)], 10542 Call 10543 ("e_gen_rm_reg",LTy F8, 10544 TP[Const("Z32",CTy"Zsize"), 10545 Call 10546 ("xmm_mem_to_rm",CTy"Zrm",Var("src",CTy"xmm_mem")), 10547 Mop(Cast F4,Var("dst",FTy 3)),LL[LW(15,8)],LW(194,8), 10548 Mop(Some,LW(0,8))])), 10549 LL[Mop(Cast F8,Var("bop",CTy"sse_compare"))]]), 10550 (Call 10551 ("COMISD",CTy"SSE", 10552 TP[Var("src1",FTy 3),Var("src2",CTy"xmm_mem")]), 10553 LLC([LW(102,8)], 10554 Call 10555 ("e_gen_rm_reg",LTy F8, 10556 TP[Const("Z32",CTy"Zsize"), 10557 Call("xmm_mem_to_rm",CTy"Zrm",Var("src2",CTy"xmm_mem")), 10558 Mop(Cast F4,Var("src1",FTy 3)),LL[LW(15,8)],LW(47,8), 10559 Mop(Some,LW(0,8))]))), 10560 (Call 10561 ("COMISS",CTy"SSE", 10562 TP[Var("src1",FTy 3),Var("src2",CTy"xmm_mem")]), 10563 Call 10564 ("e_gen_rm_reg",LTy F8, 10565 TP[Const("Z32",CTy"Zsize"), 10566 Call("xmm_mem_to_rm",CTy"Zrm",Var("src2",CTy"xmm_mem")), 10567 Mop(Cast F4,Var("src1",FTy 3)),LL[LW(15,8)],LW(47,8),LO F8])), 10568 (Call 10569 ("CVTDQ2PD",CTy"SSE", 10570 TP[Var("dst",FTy 3),Var("src",CTy"xmm_mem")]), 10571 LLC([LW(243,8)], 10572 Call 10573 ("e_gen_rm_reg",LTy F8, 10574 TP[Const("Z32",CTy"Zsize"), 10575 Call("xmm_mem_to_rm",CTy"Zrm",Var("src",CTy"xmm_mem")), 10576 Mop(Cast F4,Var("dst",FTy 3)),LL[LW(15,8)],LW(230,8), 10577 Mop(Some,LW(0,8))]))), 10578 (Call 10579 ("CVTDQ2PS",CTy"SSE", 10580 TP[Var("dst",FTy 3),Var("src",CTy"xmm_mem")]), 10581 Call 10582 ("e_gen_rm_reg",LTy F8, 10583 TP[Const("Z32",CTy"Zsize"), 10584 Call("xmm_mem_to_rm",CTy"Zrm",Var("src",CTy"xmm_mem")), 10585 Mop(Cast F4,Var("dst",FTy 3)),LL[LW(15,8)],LW(91,8), 10586 Mop(Some,LW(0,8))])), 10587 (Call 10588 ("CVTPD2DQ",CTy"SSE", 10589 TP[bVar"truncate",Var("dst",FTy 3),Var("src",CTy"xmm_mem")]), 10590 LLC([ITE(bVar"truncate",LW(102,8),LW(242,8))], 10591 Call 10592 ("e_gen_rm_reg",LTy F8, 10593 TP[Const("Z32",CTy"Zsize"), 10594 Call("xmm_mem_to_rm",CTy"Zrm",Var("src",CTy"xmm_mem")), 10595 Mop(Cast F4,Var("dst",FTy 3)),LL[LW(15,8)],LW(230,8), 10596 Mop(Some,LW(0,8))]))), 10597 (Call 10598 ("CVTPD2PS",CTy"SSE", 10599 TP[Var("dst",FTy 3),Var("src",CTy"xmm_mem")]), 10600 LLC([LW(102,8)], 10601 Call 10602 ("e_gen_rm_reg",LTy F8, 10603 TP[Const("Z32",CTy"Zsize"), 10604 Call("xmm_mem_to_rm",CTy"Zrm",Var("src",CTy"xmm_mem")), 10605 Mop(Cast F4,Var("dst",FTy 3)),LL[LW(15,8)],LW(90,8), 10606 Mop(Some,LW(0,8))]))), 10607 (Call 10608 ("CVTPS2DQ",CTy"SSE", 10609 TP[bVar"truncate",Var("dst",FTy 3),Var("src",CTy"xmm_mem")]), 10610 LLC([ITE(bVar"truncate",LW(243,8),LW(102,8))], 10611 Call 10612 ("e_gen_rm_reg",LTy F8, 10613 TP[Const("Z32",CTy"Zsize"), 10614 Call("xmm_mem_to_rm",CTy"Zrm",Var("src",CTy"xmm_mem")), 10615 Mop(Cast F4,Var("dst",FTy 3)),LL[LW(15,8)],LW(91,8), 10616 Mop(Some,LW(0,8))]))), 10617 (Call 10618 ("CVTPS2PD",CTy"SSE", 10619 TP[Var("dst",FTy 3),Var("src",CTy"xmm_mem")]), 10620 Call 10621 ("e_gen_rm_reg",LTy F8, 10622 TP[Const("Z32",CTy"Zsize"), 10623 Call("xmm_mem_to_rm",CTy"Zrm",Var("src",CTy"xmm_mem")), 10624 Mop(Cast F4,Var("dst",FTy 3)),LL[LW(15,8)],LW(90,8), 10625 Mop(Some,LW(0,8))])), 10626 (Call 10627 ("CVTSD2SI",CTy"SSE", 10628 TP[bVar"truncate",bVar"quad",Var("dst",CTy"Zreg"), 10629 Var("src",CTy"xmm_mem")]), 10630 LLC([LW(242,8)], 10631 Call 10632 ("e_gen_rm_reg",LTy F8, 10633 TP[ITE(bVar"quad",Const("Z64",CTy"Zsize"), 10634 Const("Z32",CTy"Zsize")), 10635 Call("xmm_mem_to_rm",CTy"Zrm",Var("src",CTy"xmm_mem")), 10636 Mop(Cast F4,Var("dst",CTy"Zreg")),LL[LW(15,8)],LW(44,8), 10637 Mop(Some,Mop(Cast F8,Mop(Not,bVar"truncate")))]))), 10638 (Call 10639 ("CVTSD2SS",CTy"SSE", 10640 TP[Var("dst",FTy 3),Var("src",CTy"xmm_mem")]), 10641 LLC([LW(242,8)], 10642 Call 10643 ("e_gen_rm_reg",LTy F8, 10644 TP[Const("Z32",CTy"Zsize"), 10645 Call("xmm_mem_to_rm",CTy"Zrm",Var("src",CTy"xmm_mem")), 10646 Mop(Cast F4,Var("dst",FTy 3)),LL[LW(15,8)],LW(90,8), 10647 Mop(Some,LW(0,8))]))), 10648 (Call 10649 ("CVTSI2SD",CTy"SSE", 10650 TP[bVar"quad",Var("reg",FTy 3),Var("src",CTy"Zrm")]), 10651 LLC([LW(242,8)], 10652 Call 10653 ("e_gen_rm_reg",LTy F8, 10654 TP[ITE(bVar"quad",Const("Z64",CTy"Zsize"), 10655 Const("Z32",CTy"Zsize")),Var("src",CTy"Zrm"), 10656 Mop(Cast F4,Var("reg",FTy 3)),LL[LW(15,8)],LW(42,8), 10657 Mop(Some,LW(0,8))]))), 10658 (Call 10659 ("CVTSI2SS",CTy"SSE", 10660 TP[bVar"quad",Var("reg",FTy 3),Var("src",CTy"Zrm")]), 10661 LLC([LW(243,8)], 10662 Call 10663 ("e_gen_rm_reg",LTy F8, 10664 TP[ITE(bVar"quad",Const("Z64",CTy"Zsize"), 10665 Const("Z32",CTy"Zsize")),Var("src",CTy"Zrm"), 10666 Mop(Cast F4,Var("reg",FTy 3)),LL[LW(15,8)],LW(42,8), 10667 Mop(Some,LW(0,8))]))), 10668 (Call 10669 ("CVTSS2SD",CTy"SSE", 10670 TP[Var("dst",FTy 3),Var("src",CTy"xmm_mem")]), 10671 LLC([LW(243,8)], 10672 Call 10673 ("e_gen_rm_reg",LTy F8, 10674 TP[Const("Z32",CTy"Zsize"), 10675 Call("xmm_mem_to_rm",CTy"Zrm",Var("src",CTy"xmm_mem")), 10676 Mop(Cast F4,Var("dst",FTy 3)),LL[LW(15,8)],LW(90,8), 10677 Mop(Some,LW(0,8))]))), 10678 (Call 10679 ("CVTSS2SI",CTy"SSE", 10680 TP[bVar"truncate",bVar"quad",Var("dst",CTy"Zreg"), 10681 Var("src",CTy"xmm_mem")]), 10682 LLC([LW(243,8)], 10683 Call 10684 ("e_gen_rm_reg",LTy F8, 10685 TP[ITE(bVar"quad",Const("Z64",CTy"Zsize"), 10686 Const("Z32",CTy"Zsize")), 10687 Call("xmm_mem_to_rm",CTy"Zrm",Var("src",CTy"xmm_mem")), 10688 Mop(Cast F4,Var("dst",CTy"Zreg")),LL[LW(15,8)],LW(44,8), 10689 Mop(Some,Mop(Cast F8,Mop(Not,bVar"truncate")))]))), 10690 (Call 10691 ("MOVAP_D_S",CTy"SSE", 10692 TP[bVar"double",Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 10693 Var("src",CTy"xmm_mem")]), 10694 CC[ITE(bVar"double",LL[LW(102,8)],LNL F8), 10695 Call 10696 ("e_gen_rm_reg",LTy F8, 10697 TP[Const("Z32",CTy"Zsize"), 10698 Call("xmm_mem_to_rm",CTy"Zrm",Var("src",CTy"xmm_mem")), 10699 Mop(Cast F4,Var("dst",FTy 3)),LL[LW(15,8)],LW(40,8), 10700 Mop(Some,LW(0,8))])]), 10701 (Call 10702 ("MOVAP_D_S",CTy"SSE", 10703 TP[bVar"double",Var("dst",CTy"xmm_mem"), 10704 Call("xmm_reg",CTy"xmm_mem",Var("src",FTy 3))]), 10705 CC[ITE(bVar"double",LL[LW(102,8)],LNL F8), 10706 Call 10707 ("e_gen_rm_reg",LTy F8, 10708 TP[Const("Z32",CTy"Zsize"), 10709 Call("xmm_mem_to_rm",CTy"Zrm",Var("dst",CTy"xmm_mem")), 10710 Mop(Cast F4,Var("src",FTy 3)),LL[LW(15,8)],LW(41,8), 10711 Mop(Some,LW(0,8))])]), 10712 (Call 10713 ("MOVAP_D_S",CTy"SSE", 10714 AVar(PTy(bTy,PTy(CTy"xmm_mem",CTy"xmm_mem")))),LNL F8), 10715 (Call 10716 ("MOVUP_D_S",CTy"SSE", 10717 TP[bVar"double",Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 10718 Var("src",CTy"xmm_mem")]), 10719 CC[ITE(bVar"double",LL[LW(102,8)],LNL F8), 10720 Call 10721 ("e_gen_rm_reg",LTy F8, 10722 TP[Const("Z32",CTy"Zsize"), 10723 Call("xmm_mem_to_rm",CTy"Zrm",Var("src",CTy"xmm_mem")), 10724 Mop(Cast F4,Var("dst",FTy 3)),LL[LW(15,8)],LW(16,8), 10725 Mop(Some,LW(0,8))])]), 10726 (Call 10727 ("MOVUP_D_S",CTy"SSE", 10728 TP[bVar"double",Var("dst",CTy"xmm_mem"), 10729 Call("xmm_reg",CTy"xmm_mem",Var("src",FTy 3))]), 10730 CC[ITE(bVar"double",LL[LW(102,8)],LNL F8), 10731 Call 10732 ("e_gen_rm_reg",LTy F8, 10733 TP[Const("Z32",CTy"Zsize"), 10734 Call("xmm_mem_to_rm",CTy"Zrm",Var("dst",CTy"xmm_mem")), 10735 Mop(Cast F4,Var("src",FTy 3)),LL[LW(15,8)],LW(17,8), 10736 Mop(Some,LW(0,8))])]), 10737 (Call 10738 ("MOVUP_D_S",CTy"SSE", 10739 AVar(PTy(bTy,PTy(CTy"xmm_mem",CTy"xmm_mem")))),LNL F8), 10740 (Call 10741 ("MOVSD",CTy"SSE", 10742 TP[Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 10743 Var("src",CTy"xmm_mem")]), 10744 LLC([LW(242,8)], 10745 Call 10746 ("e_gen_rm_reg",LTy F8, 10747 TP[Const("Z32",CTy"Zsize"), 10748 Call("xmm_mem_to_rm",CTy"Zrm",Var("src",CTy"xmm_mem")), 10749 Mop(Cast F4,Var("dst",FTy 3)),LL[LW(15,8)],LW(16,8), 10750 Mop(Some,LW(0,8))]))), 10751 (Call 10752 ("MOVSD",CTy"SSE", 10753 TP[Var("dst",CTy"xmm_mem"), 10754 Call("xmm_reg",CTy"xmm_mem",Var("src",FTy 3))]), 10755 LLC([LW(242,8)], 10756 Call 10757 ("e_gen_rm_reg",LTy F8, 10758 TP[Const("Z32",CTy"Zsize"), 10759 Call("xmm_mem_to_rm",CTy"Zrm",Var("dst",CTy"xmm_mem")), 10760 Mop(Cast F4,Var("src",FTy 3)),LL[LW(15,8)],LW(17,8), 10761 Mop(Some,LW(0,8))]))), 10762 (Call("MOVSD",CTy"SSE",AVar(PTy(CTy"xmm_mem",CTy"xmm_mem"))),LNL F8), 10763 (Call 10764 ("MOVSS",CTy"SSE", 10765 TP[Call("xmm_reg",CTy"xmm_mem",Var("dst",FTy 3)), 10766 Var("src",CTy"xmm_mem")]), 10767 LLC([LW(243,8)], 10768 Call 10769 ("e_gen_rm_reg",LTy F8, 10770 TP[Const("Z32",CTy"Zsize"), 10771 Call("xmm_mem_to_rm",CTy"Zrm",Var("src",CTy"xmm_mem")), 10772 Mop(Cast F4,Var("dst",FTy 3)),LL[LW(15,8)],LW(16,8), 10773 Mop(Some,LW(0,8))]))), 10774 (Call 10775 ("MOVSS",CTy"SSE", 10776 TP[Var("dst",CTy"xmm_mem"), 10777 Call("xmm_reg",CTy"xmm_mem",Var("src",FTy 3))]), 10778 LLC([LW(243,8)], 10779 Call 10780 ("e_gen_rm_reg",LTy F8, 10781 TP[Const("Z32",CTy"Zsize"), 10782 Call("xmm_mem_to_rm",CTy"Zrm",Var("dst",CTy"xmm_mem")), 10783 Mop(Cast F4,Var("src",FTy 3)),LL[LW(15,8)],LW(17,8), 10784 Mop(Some,LW(0,8))]))), 10785 (Call("MOVSS",CTy"SSE",AVar(PTy(CTy"xmm_mem",CTy"xmm_mem"))),LNL F8), 10786 (Call 10787 ("MOV_D_Q",CTy"SSE", 10788 TP[bVar"to_xmm",bVar"quad",Var("xmm",FTy 3),Var("rm",CTy"Zrm")]), 10789 LLC([LW(102,8)], 10790 Call 10791 ("e_gen_rm_reg",LTy F8, 10792 TP[ITE(bVar"quad",Const("Z64",CTy"Zsize"), 10793 Const("Z32",CTy"Zsize")),Var("rm",CTy"Zrm"), 10794 Mop(Cast F4,Var("xmm",FTy 3)),LL[LW(15,8)], 10795 CC[LW(3,3),Mop(Cast F1,Mop(Not,bVar"to_xmm")),LW(14,4)], 10796 Mop(Some,LW(0,8))]))), 10797 (Call 10798 ("MOVQ",CTy"SSE", 10799 TP[Call 10800 ("xmm_mem",CTy"xmm_mem", 10801 Var("m", 10802 PTy(OTy(PTy(FTy 2,CTy"Zreg")),PTy(CTy"Zbase",F64)))), 10803 Call("xmm_reg",CTy"xmm_mem",Var("src",FTy 3))]), 10804 LLC([LW(102,8)], 10805 Call 10806 ("e_gen_rm_reg",LTy F8, 10807 TP[Call("Z8",CTy"Zsize",LF), 10808 Call 10809 ("Zm",CTy"Zrm", 10810 Var("m", 10811 PTy(OTy(PTy(FTy 2,CTy"Zreg")),PTy(CTy"Zbase",F64)))), 10812 Mop(Cast F4,Var("src",FTy 3)),LL[LW(15,8)],LW(214,8), 10813 LO F8]))), 10814 (Call 10815 ("MOVQ",CTy"SSE", 10816 TP[Call("xmm_reg",CTy"xmm_mem",Var("r",FTy 3)), 10817 Var("src",CTy"xmm_mem")]), 10818 LLC([LW(243,8)], 10819 Call 10820 ("e_gen_rm_reg",LTy F8, 10821 TP[Call("Z8",CTy"Zsize",LF), 10822 Call("xmm_mem_to_rm",CTy"Zrm",Var("src",CTy"xmm_mem")), 10823 Mop(Cast F4,Var("r",FTy 3)),LL[LW(15,8)],LW(126,8),LO F8]))), 10824 (Call("MOVQ",CTy"SSE",AVar(PTy(CTy"xmm_mem",CTy"xmm_mem"))),LNL F8), 10825 (Call 10826 ("PCMPEQQ",CTy"SSE",TP[Var("dst",FTy 3),Var("src",CTy"xmm_mem")]), 10827 LLC([LW(102,8)], 10828 Call 10829 ("e_gen_rm_reg",LTy F8, 10830 TP[Const("Z32",CTy"Zsize"), 10831 Call("xmm_mem_to_rm",CTy"Zrm",Var("src",CTy"xmm_mem")), 10832 Mop(Cast F4,Var("dst",FTy 3)),LL[LW(15,8),LW(56,8)], 10833 LW(41,8),Mop(Some,LW(0,8))]))), 10834 (Call("PSRLW_imm",CTy"SSE",TP[Var("dst",FTy 3),Var("imm",F8)]), 10835 CC[LLC([LW(102,8)], 10836 Call 10837 ("e_gen_rm_reg",LTy F8, 10838 TP[Const("Z32",CTy"Zsize"), 10839 Call 10840 ("Zr",CTy"Zrm", 10841 Mop(Cast(CTy"Zreg"),Var("dst",FTy 3))),LW(2,4), 10842 LL[LW(15,8)],LW(113,8),Mop(Some,LW(0,8))])), 10843 LL[Var("imm",F8)]]), 10844 (Call("PSRAW_imm",CTy"SSE",TP[Var("dst",FTy 3),Var("imm",F8)]), 10845 CC[LLC([LW(102,8)], 10846 Call 10847 ("e_gen_rm_reg",LTy F8, 10848 TP[Const("Z32",CTy"Zsize"), 10849 Call 10850 ("Zr",CTy"Zrm", 10851 Mop(Cast(CTy"Zreg"),Var("dst",FTy 3))),LW(4,4), 10852 LL[LW(15,8)],LW(113,8),Mop(Some,LW(0,8))])), 10853 LL[Var("imm",F8)]]), 10854 (Call("PSLLW_imm",CTy"SSE",TP[Var("dst",FTy 3),Var("imm",F8)]), 10855 CC[LLC([LW(102,8)], 10856 Call 10857 ("e_gen_rm_reg",LTy F8, 10858 TP[Const("Z32",CTy"Zsize"), 10859 Call 10860 ("Zr",CTy"Zrm", 10861 Mop(Cast(CTy"Zreg"),Var("dst",FTy 3))),LW(6,4), 10862 LL[LW(15,8)],LW(113,8),Mop(Some,LW(0,8))])), 10863 LL[Var("imm",F8)]]), 10864 (Call("PSRLD_imm",CTy"SSE",TP[Var("dst",FTy 3),Var("imm",F8)]), 10865 CC[LLC([LW(102,8)], 10866 Call 10867 ("e_gen_rm_reg",LTy F8, 10868 TP[Const("Z32",CTy"Zsize"), 10869 Call 10870 ("Zr",CTy"Zrm", 10871 Mop(Cast(CTy"Zreg"),Var("dst",FTy 3))),LW(2,4), 10872 LL[LW(15,8)],LW(114,8),Mop(Some,LW(0,8))])), 10873 LL[Var("imm",F8)]]), 10874 (Call("PSRAD_imm",CTy"SSE",TP[Var("dst",FTy 3),Var("imm",F8)]), 10875 CC[LLC([LW(102,8)], 10876 Call 10877 ("e_gen_rm_reg",LTy F8, 10878 TP[Const("Z32",CTy"Zsize"), 10879 Call 10880 ("Zr",CTy"Zrm", 10881 Mop(Cast(CTy"Zreg"),Var("dst",FTy 3))),LW(4,4), 10882 LL[LW(15,8)],LW(114,8),Mop(Some,LW(0,8))])), 10883 LL[Var("imm",F8)]]), 10884 (Call("PSLLD_imm",CTy"SSE",TP[Var("dst",FTy 3),Var("imm",F8)]), 10885 CC[LLC([LW(102,8)], 10886 Call 10887 ("e_gen_rm_reg",LTy F8, 10888 TP[Const("Z32",CTy"Zsize"), 10889 Call 10890 ("Zr",CTy"Zrm", 10891 Mop(Cast(CTy"Zreg"),Var("dst",FTy 3))),LW(6,4), 10892 LL[LW(15,8)],LW(114,8),Mop(Some,LW(0,8))])), 10893 LL[Var("imm",F8)]]), 10894 (Call("PSRLQ_imm",CTy"SSE",TP[Var("dst",FTy 3),Var("imm",F8)]), 10895 CC[LLC([LW(102,8)], 10896 Call 10897 ("e_gen_rm_reg",LTy F8, 10898 TP[Const("Z32",CTy"Zsize"), 10899 Call 10900 ("Zr",CTy"Zrm", 10901 Mop(Cast(CTy"Zreg"),Var("dst",FTy 3))),LW(2,4), 10902 LL[LW(15,8)],LW(115,8),Mop(Some,LW(0,8))])), 10903 LL[Var("imm",F8)]]), 10904 (Call("PSRLDQ",CTy"SSE",TP[Var("dst",FTy 3),Var("imm",F8)]), 10905 CC[LLC([LW(102,8)], 10906 Call 10907 ("e_gen_rm_reg",LTy F8, 10908 TP[Const("Z32",CTy"Zsize"), 10909 Call 10910 ("Zr",CTy"Zrm", 10911 Mop(Cast(CTy"Zreg"),Var("dst",FTy 3))),LW(3,4), 10912 LL[LW(15,8)],LW(115,8),Mop(Some,LW(0,8))])), 10913 LL[Var("imm",F8)]]), 10914 (Call("PSLLQ_imm",CTy"SSE",TP[Var("dst",FTy 3),Var("imm",F8)]), 10915 CC[LLC([LW(102,8)], 10916 Call 10917 ("e_gen_rm_reg",LTy F8, 10918 TP[Const("Z32",CTy"Zsize"), 10919 Call 10920 ("Zr",CTy"Zrm", 10921 Mop(Cast(CTy"Zreg"),Var("dst",FTy 3))),LW(6,4), 10922 LL[LW(15,8)],LW(115,8),Mop(Some,LW(0,8))])), 10923 LL[Var("imm",F8)]]), 10924 (Call("PSLLDQ",CTy"SSE",TP[Var("dst",FTy 3),Var("imm",F8)]), 10925 CC[LLC([LW(102,8)], 10926 Call 10927 ("e_gen_rm_reg",LTy F8, 10928 TP[Const("Z32",CTy"Zsize"), 10929 Call 10930 ("Zr",CTy"Zrm", 10931 Mop(Cast(CTy"Zreg"),Var("dst",FTy 3))),LW(7,4), 10932 LL[LW(15,8)],LW(115,8),Mop(Some,LW(0,8))])), 10933 LL[Var("imm",F8)]]), 10934 (Call 10935 ("SQRTPD",CTy"SSE",TP[Var("dst",FTy 3),Var("src",CTy"xmm_mem")]), 10936 LLC([LW(102,8)], 10937 Call 10938 ("e_gen_rm_reg",LTy F8, 10939 TP[Const("Z32",CTy"Zsize"), 10940 Call("xmm_mem_to_rm",CTy"Zrm",Var("src",CTy"xmm_mem")), 10941 Mop(Cast F4,Var("dst",FTy 3)),LL[LW(15,8)],LW(81,8), 10942 Mop(Some,LW(0,8))]))), 10943 (Call 10944 ("SQRTSD",CTy"SSE",TP[Var("dst",FTy 3),Var("src",CTy"xmm_mem")]), 10945 LLC([LW(242,8)], 10946 Call 10947 ("e_gen_rm_reg",LTy F8, 10948 TP[Const("Z32",CTy"Zsize"), 10949 Call("xmm_mem_to_rm",CTy"Zrm",Var("src",CTy"xmm_mem")), 10950 Mop(Cast F4,Var("dst",FTy 3)),LL[LW(15,8)],LW(81,8), 10951 Mop(Some,LW(0,8))]))), 10952 (Call 10953 ("SQRTPS",CTy"SSE",TP[Var("dst",FTy 3),Var("src",CTy"xmm_mem")]), 10954 Call 10955 ("e_gen_rm_reg",LTy F8, 10956 TP[Const("Z32",CTy"Zsize"), 10957 Call("xmm_mem_to_rm",CTy"Zrm",Var("src",CTy"xmm_mem")), 10958 Mop(Cast F4,Var("dst",FTy 3)),LL[LW(15,8)],LW(81,8), 10959 Mop(Some,LW(0,8))])), 10960 (Call 10961 ("SQRTSS",CTy"SSE",TP[Var("dst",FTy 3),Var("src",CTy"xmm_mem")]), 10962 LLC([LW(243,8)], 10963 Call 10964 ("e_gen_rm_reg",LTy F8, 10965 TP[Const("Z32",CTy"Zsize"), 10966 Call("xmm_mem_to_rm",CTy"Zrm",Var("src",CTy"xmm_mem")), 10967 Mop(Cast F4,Var("dst",FTy 3)),LL[LW(15,8)],LW(81,8), 10968 Mop(Some,LW(0,8))])))])) 10969; 10970val encode_def = Def 10971 ("encode",Var("i",CTy"instruction"), 10972 CS(Var("i",CTy"instruction"), 10973 [(Call("SSE",CTy"instruction",Var("j",CTy"SSE")), 10974 Call("encode_sse",LTy F8,Var("j",CTy"SSE"))), 10975 (Call 10976 ("Zbinop",CTy"instruction", 10977 TP[Var("bop",CTy"Zbinop_name"),Var("sz",CTy"Zsize"), 10978 Call 10979 ("Zrm_i",CTy"Zdest_src", 10980 TP[Var("rm",CTy"Zrm"),Var("imm",F64)])]), 10981 ITE(EQ(Var("bop",CTy"Zbinop_name"),LC("Ztest",CTy"Zbinop_name")), 10982 ITE(Call("is_rax",bTy,Var("rm",CTy"Zrm")), 10983 Call 10984 ("e_rax_imm",LTy F8, 10985 TP[Var("sz",CTy"Zsize"),Var("imm",F64),LW(168,8)]), 10986 Call 10987 ("e_rm_imm",LTy F8, 10988 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"), 10989 Var("imm",F64),LW(0,4),LW(246,8)])), 10990 Let(Var("opc",F4),Mop(Cast F4,Var("bop",CTy"Zbinop_name")), 10991 ITB([(Bop(Bit,Var("opc",F4),LN 3), 10992 ITE(EQ(Var("imm",F64),LW(1,64)), 10993 Call 10994 ("e_gen_rm_reg",LTy F8, 10995 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"), 10996 Bop(BAnd,Var("opc",F4),LW(7,4)),LNL F8, 10997 LW(208,8),LO F8]), 10998 Call 10999 ("e_rm_imm8",LTy F8, 11000 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"), 11001 Var("imm",F64), 11002 Bop(BAnd,Var("opc",F4),LW(7,4)),LW(192,8)]))), 11003 (Bop(And,Call("not_byte",bTy,Var("sz",CTy"Zsize")), 11004 Mop(Not, 11005 EQ(Call("e_imm8",LTy F8,Var("imm",F64)), 11006 LNL F8))), 11007 Call 11008 ("e_rm_imm8",LTy F8, 11009 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"), 11010 Var("imm",F64),Var("opc",F4),LW(131,8)])), 11011 (Call("is_rax",bTy,Var("rm",CTy"Zrm")), 11012 Call 11013 ("e_rax_imm",LTy F8, 11014 TP[Var("sz",CTy"Zsize"),Var("imm",F64), 11015 CC[LW(0,2),EX(Var("opc",F4),LN 2,LN 0,FTy 3), 11016 LW(4,3)]]))], 11017 Call 11018 ("e_rm_imm",LTy F8, 11019 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"), 11020 Var("imm",F64),Var("opc",F4),LW(128,8)]))))), 11021 (Call 11022 ("Zbinop",CTy"instruction", 11023 TP[Var("bop",CTy"Zbinop_name"),Var("sz",CTy"Zsize"), 11024 Call 11025 ("Zrm_r",CTy"Zdest_src", 11026 TP[Var("rm",CTy"Zrm"),Var("r",CTy"Zreg")])]), 11027 ITE(EQ(Var("bop",CTy"Zbinop_name"),LC("Ztest",CTy"Zbinop_name")), 11028 Call 11029 ("e_gen_rm_reg",LTy F8, 11030 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"), 11031 Mop(Cast F4,Var("r",CTy"Zreg")),LNL F8,LW(132,8),LO F8]), 11032 Let(Var("opc",F4),Mop(Cast F4,Var("bop",CTy"Zbinop_name")), 11033 ITE(Bop(Bit,Var("opc",F4),LN 3), 11034 ITE(EQ(Var("r",CTy"Zreg"),LC("RCX",CTy"Zreg")), 11035 Call 11036 ("e_gen_rm_reg",LTy F8, 11037 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"), 11038 Bop(BAnd,Var("opc",F4),LW(7,4)),LNL F8, 11039 LW(210,8),LO F8]),LNL F8), 11040 Call 11041 ("e_gen_rm_reg",LTy F8, 11042 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"), 11043 Mop(Cast F4,Var("r",CTy"Zreg")),LNL F8, 11044 CC[LW(0,2),EX(Var("opc",F4),LN 2,LN 0,FTy 3), 11045 LW(0,3)],LO F8]))))), 11046 (Call 11047 ("Zbinop",CTy"instruction", 11048 TP[Var("bop",CTy"Zbinop_name"),Var("sz",CTy"Zsize"), 11049 Call 11050 ("Zr_rm",CTy"Zdest_src", 11051 TP[Var("r",CTy"Zreg"),Var("rm",CTy"Zrm")])]), 11052 Let(Var("opc",F4),Mop(Cast F4,Var("bop",CTy"Zbinop_name")), 11053 ITE(Bop(Bit,Var("opc",F4),LN 3),LNL F8, 11054 Call 11055 ("e_gen_rm_reg",LTy F8, 11056 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"), 11057 Mop(Cast F4,Var("r",CTy"Zreg")),LNL F8, 11058 CC[LW(0,2),EX(Var("opc",F4),LN 2,LN 0,FTy 3),LW(2,3)], 11059 LO F8])))), 11060 (Call 11061 ("Zbit_test",CTy"instruction", 11062 TP[Var("bt",CTy"Zbit_test_name"),Var("sz",CTy"Zsize"), 11063 Call 11064 ("Zrm_r",CTy"Zdest_src", 11065 TP[Var("rm",CTy"Zrm"),Var("r",CTy"Zreg")])]), 11066 Call 11067 ("e_gen_rm_reg",LTy F8, 11068 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"), 11069 Mop(Cast F4,Var("r",CTy"Zreg")),LL[LW(15,8)], 11070 CC[LW(5,3),Mop(Cast(FTy 2),Var("bt",CTy"Zbit_test_name")), 11071 LW(3,3)],LO F8])), 11072 (Call 11073 ("Zbit_test",CTy"instruction", 11074 TP[Var("bt",CTy"Zbit_test_name"),Var("sz",CTy"Zsize"), 11075 Call 11076 ("Zrm_i",CTy"Zdest_src", 11077 TP[Var("rm",CTy"Zrm"),Var("i",F64)])]), 11078 Call 11079 ("e_rm_imm8b",LTy F8, 11080 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"),Var("i",F64), 11081 Mop(Cast F4,Var("bt",CTy"Zbit_test_name")), 11082 LL[LW(15,8),LW(186,8)]])), 11083 (Call 11084 ("Zbit_test",CTy"instruction", 11085 AVar(PTy(CTy"Zbit_test_name",PTy(CTy"Zsize",CTy"Zdest_src")))), 11086 LNL F8), 11087 (Call 11088 ("Zcall",CTy"instruction", 11089 Call("Zrm",CTy"Zimm_rm",Var("rm",CTy"Zrm"))), 11090 Call("e_opc",LTy F8,TP[LW(255,8),LW(2,3),Var("rm",CTy"Zrm")])), 11091 (Call 11092 ("Zcall",CTy"instruction", 11093 Call("Zimm",CTy"Zimm_rm",Var("imm",F64))), 11094 CS(Call("e_imm32",LTy F8,Var("imm",F64)), 11095 [(LNL F8,LNL F8), 11096 (Var("l",LTy F8),LLC([LW(232,8)],Var("l",LTy F8)))])), 11097 (Const("Zcmc",CTy"instruction"),LL[LW(245,8)]), 11098 (Const("Zclc",CTy"instruction"),LL[LW(248,8)]), 11099 (Const("Zstc",CTy"instruction"),LL[LW(249,8)]), 11100 (Call 11101 ("Zcmpxchg",CTy"instruction", 11102 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"),Var("r",CTy"Zreg")]), 11103 Call 11104 ("e_gen_rm_reg",LTy F8, 11105 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"), 11106 Mop(Cast F4,Var("r",CTy"Zreg")),LL[LW(15,8)],LW(176,8),LO F8])), 11107 (Call 11108 ("Zdiv",CTy"instruction", 11109 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm")]), 11110 Call 11111 ("e_gen_rm_reg",LTy F8, 11112 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"),LW(6,4),LNL F8, 11113 LW(246,8),LO F8])), 11114 (Call 11115 ("Zidiv",CTy"instruction", 11116 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm")]), 11117 Call 11118 ("e_gen_rm_reg",LTy F8, 11119 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"),LW(7,4),LNL F8, 11120 LW(246,8),LO F8])), 11121 (Call 11122 ("Zjcc",CTy"instruction", 11123 TP[Var("cond",CTy"Zcond"),Var("imm",F64)]), 11124 Let(TP[nVar"s",Var("l",LTy F8)], 11125 Call("e_imm_8_32",PTy(nTy,LTy F8),Var("imm",F64)), 11126 ITB([(EQ(Var("cond",CTy"Zcond"),LC("Z_ALWAYS",CTy"Zcond")), 11127 ITB([(EQ(nVar"s",LN 1),LLC([LW(235,8)],Var("l",LTy F8))), 11128 (EQ(nVar"s",LN 4),LLC([LW(233,8)],Var("l",LTy F8)))], 11129 LNL F8)), 11130 (EQ(nVar"s",LN 1), 11131 LLC([CC[LW(7,4),Mop(Cast F4,Var("cond",CTy"Zcond"))]], 11132 Var("l",LTy F8))), 11133 (EQ(nVar"s",LN 4), 11134 CC[LL[LW(15,8), 11135 CC[LW(8,4),Mop(Cast F4,Var("cond",CTy"Zcond"))]], 11136 Var("l",LTy F8)])],LNL F8))), 11137 (Call("Zjmp",CTy"instruction",Var("rm",CTy"Zrm")), 11138 Call("e_opc",LTy F8,TP[LW(255,8),LW(4,3),Var("rm",CTy"Zrm")])), 11139 (Call 11140 ("Zlea",CTy"instruction", 11141 TP[Call("Z8",CTy"Zsize",AVar bTy),AVar(CTy"Zdest_src")]),LNL F8), 11142 (Call 11143 ("Zlea",CTy"instruction", 11144 TP[Var("sz",CTy"Zsize"), 11145 Call 11146 ("Zr_rm",CTy"Zdest_src", 11147 TP[Var("r",CTy"Zreg"), 11148 Call 11149 ("Zm",CTy"Zrm", 11150 Var("m", 11151 PTy(OTy(PTy(FTy 2,CTy"Zreg")), 11152 PTy(CTy"Zbase",F64))))])]), 11153 Call 11154 ("e_gen_rm_reg",LTy F8, 11155 TP[Var("sz",CTy"Zsize"), 11156 Call 11157 ("Zm",CTy"Zrm", 11158 Var("m", 11159 PTy(OTy(PTy(FTy 2,CTy"Zreg")),PTy(CTy"Zbase",F64)))), 11160 Mop(Cast F4,Var("r",CTy"Zreg")),LNL F8,LW(141,8),LO F8])), 11161 (Call("Zlea",CTy"instruction",AVar(PTy(CTy"Zsize",CTy"Zdest_src"))), 11162 LNL F8),(Const("Zleave",CTy"instruction"),LL[LW(201,8)]), 11163 (Call 11164 ("Zloop",CTy"instruction", 11165 TP[Var("cond",CTy"Zcond"),Var("imm",F64)]), 11166 CS(TP[Var("cond",CTy"Zcond"),Call("e_imm8",LTy F8,Var("imm",F64))], 11167 [(TP[AVar(CTy"Zcond"),LNL F8],LNL F8), 11168 (TP[LC("Z_NE",CTy"Zcond"),Var("l",LTy F8)], 11169 LLC([LW(224,8)],Var("l",LTy F8))), 11170 (TP[LC("Z_E",CTy"Zcond"),Var("l",LTy F8)], 11171 LLC([LW(225,8)],Var("l",LTy F8))), 11172 (TP[LC("Z_ALWAYS",CTy"Zcond"),Var("l",LTy F8)], 11173 LLC([LW(226,8)],Var("l",LTy F8))), 11174 (AVar(PTy(CTy"Zcond",LTy F8)),LNL F8)])), 11175 (Call 11176 ("Zmonop",CTy"instruction", 11177 TP[LC("Zinc",CTy"Zmonop_name"),Call("Z8",CTy"Zsize",AVar bTy), 11178 Var("rm",CTy"Zrm")]), 11179 Call("e_opc",LTy F8,TP[LW(254,8),LW(0,3),Var("rm",CTy"Zrm")])), 11180 (Call 11181 ("Zmonop",CTy"instruction", 11182 TP[LC("Zdec",CTy"Zmonop_name"),Call("Z8",CTy"Zsize",AVar bTy), 11183 Var("rm",CTy"Zrm")]), 11184 Call("e_opc",LTy F8,TP[LW(254,8),LW(1,3),Var("rm",CTy"Zrm")])), 11185 (Call 11186 ("Zmonop",CTy"instruction", 11187 TP[LC("Zinc",CTy"Zmonop_name"),Var("sz",CTy"Zsize"), 11188 Var("rm",CTy"Zrm")]), 11189 Call 11190 ("e_gen_rm_reg",LTy F8, 11191 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"),LW(0,4),LNL F8, 11192 LW(255,8),LO F8])), 11193 (Call 11194 ("Zmonop",CTy"instruction", 11195 TP[LC("Zdec",CTy"Zmonop_name"),Var("sz",CTy"Zsize"), 11196 Var("rm",CTy"Zrm")]), 11197 Call 11198 ("e_gen_rm_reg",LTy F8, 11199 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"),LW(1,4),LNL F8, 11200 LW(255,8),LO F8])), 11201 (Call 11202 ("Zmonop",CTy"instruction", 11203 TP[LC("Znot",CTy"Zmonop_name"),Var("sz",CTy"Zsize"), 11204 Var("rm",CTy"Zrm")]), 11205 Call 11206 ("e_gen_rm_reg",LTy F8, 11207 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"),LW(2,4),LNL F8, 11208 LW(246,8),LO F8])), 11209 (Call 11210 ("Zmonop",CTy"instruction", 11211 TP[LC("Zneg",CTy"Zmonop_name"),Var("sz",CTy"Zsize"), 11212 Var("rm",CTy"Zrm")]), 11213 Call 11214 ("e_gen_rm_reg",LTy F8, 11215 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"),LW(3,4),LNL F8, 11216 LW(246,8),LO F8])), 11217 (Call 11218 ("Zmov",CTy"instruction", 11219 TP[LC("Z_ALWAYS",CTy"Zcond"),Var("sz",CTy"Zsize"), 11220 Call 11221 ("Zrm_r",CTy"Zdest_src", 11222 TP[Var("rm",CTy"Zrm"),Var("r",CTy"Zreg")])]), 11223 Call 11224 ("e_gen_rm_reg",LTy F8, 11225 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"), 11226 Mop(Cast F4,Var("r",CTy"Zreg")),LNL F8,LW(136,8),LO F8])), 11227 (Call 11228 ("Zmov",CTy"instruction", 11229 TP[LC("Z_ALWAYS",CTy"Zcond"),Var("sz",CTy"Zsize"), 11230 Call 11231 ("Zr_rm",CTy"Zdest_src", 11232 TP[Var("r",CTy"Zreg"),Var("rm",CTy"Zrm")])]), 11233 Call 11234 ("e_gen_rm_reg",LTy F8, 11235 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"), 11236 Mop(Cast F4,Var("r",CTy"Zreg")),LNL F8,LW(138,8),LO F8])), 11237 (Call 11238 ("Zmov",CTy"instruction", 11239 TP[LC("Z_ALWAYS",CTy"Zcond"),Var("sz",CTy"Zsize"), 11240 Call 11241 ("Zrm_i",CTy"Zdest_src", 11242 TP[Call("Zr",CTy"Zrm",Var("reg",CTy"Zreg")), 11243 Var("imm",F64)])]), 11244 Let(Var("r",F4),Mop(Cast F4,Var("reg",CTy"Zreg")), 11245 CS(Call 11246 ("e_opsize_imm",OTy(PTy(LTy F8,PTy(F8,LTy F8))), 11247 TP[Var("sz",CTy"Zsize"), 11248 ITE(Bop(Bit,Var("r",F4),LN 3),LW(1,4),LW(0,4)), 11249 Var("imm",F64),LF]), 11250 [(Mop(Some, 11251 TP[Var("prefixes",LTy F8),Var("v",F8),Var("l",LTy F8)]), 11252 CC[Var("prefixes",LTy F8), 11253 LL[CC[LW(11,4),Mop(Cast F1,Var("v",F8)), 11254 EX(Var("r",F4),LN 2,LN 0,FTy 3)]], 11255 Var("l",LTy F8)]), 11256 (LO(PTy(LTy F8,PTy(F8,LTy F8))),LNL F8)]))), 11257 (Call 11258 ("Zmov",CTy"instruction", 11259 TP[LC("Z_ALWAYS",CTy"Zcond"),Var("sz",CTy"Zsize"), 11260 Call 11261 ("Zrm_i",CTy"Zdest_src", 11262 TP[Var("rm",CTy"Zrm"),Var("imm",F64)])]), 11263 Call 11264 ("e_rm_imm",LTy F8, 11265 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"),Var("imm",F64), 11266 LW(0,4),LW(198,8)])), 11267 (Call 11268 ("Zmov",CTy"instruction", 11269 TP[Var("cond",CTy"Zcond"),Call("Z8",CTy"Zsize",AVar bTy), 11270 AVar(CTy"Zdest_src")]),LNL F8), 11271 (Call 11272 ("Zmov",CTy"instruction", 11273 TP[Var("cond",CTy"Zcond"),Var("sz",CTy"Zsize"), 11274 Call 11275 ("Zr_rm",CTy"Zdest_src", 11276 TP[Var("r",CTy"Zreg"),Var("rm",CTy"Zrm")])]), 11277 Call 11278 ("e_gen_rm_reg",LTy F8, 11279 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"), 11280 Mop(Cast F4,Var("r",CTy"Zreg")),LL[LW(15,8)],LW(64,8), 11281 Mop(Some,Mop(Cast F8,Var("cond",CTy"Zcond")))])), 11282 (Call 11283 ("Zmov",CTy"instruction", 11284 AVar(PTy(CTy"Zcond",PTy(CTy"Zsize",CTy"Zdest_src")))),LNL F8), 11285 (Call 11286 ("Zmovsx",CTy"instruction", 11287 TP[Const("Z32",CTy"Zsize"), 11288 Call 11289 ("Zr_rm",CTy"Zdest_src", 11290 TP[Var("r",CTy"Zreg"),Var("rm",CTy"Zrm")]), 11291 Const("Z64",CTy"Zsize")]), 11292 Call 11293 ("e_gen_rm_reg",LTy F8, 11294 TP[Const("Z64",CTy"Zsize"),Var("rm",CTy"Zrm"), 11295 Mop(Cast F4,Var("r",CTy"Zreg")),LNL F8,LW(99,8),LO F8])), 11296 (Call 11297 ("Zmovsx",CTy"instruction", 11298 TP[Var("sz1",CTy"Zsize"), 11299 Call 11300 ("Zr_rm",CTy"Zdest_src", 11301 TP[Var("r",CTy"Zreg"),Var("rm",CTy"Zrm")]), 11302 Var("sz2",CTy"Zsize")]), 11303 ITE(Bop(Lt,Call("Zsize_width",nTy,Var("sz1",CTy"Zsize")), 11304 Call("Zsize_width",nTy,Var("sz2",CTy"Zsize"))), 11305 Call 11306 ("e_gen_rm_reg",LTy F8, 11307 TP[Var("sz2",CTy"Zsize"),Var("rm",CTy"Zrm"), 11308 Mop(Cast F4,Var("r",CTy"Zreg")),LL[LW(15,8)],LW(190,8), 11309 Mop(Some, 11310 ITE(EQ(Var("sz1",CTy"Zsize"),Const("Z16",CTy"Zsize")), 11311 LW(1,8),LW(0,8)))]),LNL F8)), 11312 (Call 11313 ("Zmovsx",CTy"instruction", 11314 AVar(PTy(CTy"Zsize",PTy(CTy"Zdest_src",CTy"Zsize")))),LNL F8), 11315 (Call 11316 ("Zmovzx",CTy"instruction", 11317 TP[Var("sz1",CTy"Zsize"), 11318 Call 11319 ("Zr_rm",CTy"Zdest_src", 11320 TP[Var("r",CTy"Zreg"),Var("rm",CTy"Zrm")]), 11321 Var("sz2",CTy"Zsize")]), 11322 ITE(Bop(And, 11323 Bop(Lt,Call("Zsize_width",nTy,Var("sz1",CTy"Zsize")), 11324 Call("Zsize_width",nTy,Var("sz2",CTy"Zsize"))), 11325 Mop(Not,EQ(Var("sz1",CTy"Zsize"),Const("Z32",CTy"Zsize")))), 11326 Call 11327 ("e_gen_rm_reg",LTy F8, 11328 TP[Var("sz2",CTy"Zsize"),Var("rm",CTy"Zrm"), 11329 Mop(Cast F4,Var("r",CTy"Zreg")),LL[LW(15,8)],LW(182,8), 11330 Mop(Some, 11331 ITE(EQ(Var("sz1",CTy"Zsize"),Const("Z16",CTy"Zsize")), 11332 LW(1,8),LW(0,8)))]),LNL F8)), 11333 (Call 11334 ("Zmovzx",CTy"instruction", 11335 AVar(PTy(CTy"Zsize",PTy(CTy"Zdest_src",CTy"Zsize")))),LNL F8), 11336 (Call 11337 ("Zmul",CTy"instruction", 11338 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm")]), 11339 Call 11340 ("e_gen_rm_reg",LTy F8, 11341 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"),LW(4,4),LNL F8, 11342 LW(246,8),LO F8])), 11343 (Call 11344 ("Zimul",CTy"instruction", 11345 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm")]), 11346 Call 11347 ("e_gen_rm_reg",LTy F8, 11348 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"),LW(5,4),LNL F8, 11349 LW(246,8),LO F8])), 11350 (Call 11351 ("Zimul2",CTy"instruction", 11352 TP[Call("Z8",CTy"Zsize",AVar bTy),AVar(CTy"Zreg"), 11353 AVar(CTy"Zrm")]),LNL F8), 11354 (Call 11355 ("Zimul2",CTy"instruction", 11356 TP[Var("sz",CTy"Zsize"),Var("r",CTy"Zreg"),Var("rm",CTy"Zrm")]), 11357 Call 11358 ("e_gen_rm_reg",LTy F8, 11359 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"), 11360 Mop(Cast F4,Var("r",CTy"Zreg")),LL[LW(15,8)],LW(175,8),LO F8])), 11361 (Call 11362 ("Zimul3",CTy"instruction", 11363 TP[Call("Z8",CTy"Zsize",AVar bTy),AVar(CTy"Zreg"), 11364 AVar(PTy(CTy"Zrm",F64))]),LNL F8), 11365 (Call 11366 ("Zimul3",CTy"instruction", 11367 TP[Var("sz",CTy"Zsize"),Var("r",CTy"Zreg"),Var("rm",CTy"Zrm"), 11368 Var("imm",F64)]), 11369 Let(TP[nVar"s",Var("l",LTy F8)], 11370 Call("e_imm_8_32",PTy(nTy,LTy F8),Var("imm",F64)), 11371 ITB([(EQ(nVar"s",LN 1), 11372 CC[Call 11373 ("e_gen_rm_reg",LTy F8, 11374 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"), 11375 Mop(Cast F4,Var("r",CTy"Zreg")),LNL F8, 11376 LW(107,8),LO F8]),Var("l",LTy F8)]), 11377 (EQ(nVar"s",LN 4), 11378 CC[Call 11379 ("e_gen_rm_reg",LTy F8, 11380 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"), 11381 Mop(Cast F4,Var("r",CTy"Zreg")),LNL F8, 11382 LW(105,8),LO F8]),Var("l",LTy F8)])],LNL F8))), 11383 (Call("Znop",CTy"instruction",LN 1),LL[LW(144,8)]), 11384 (Call("Znop",CTy"instruction",LN 2),LL[LW(102,8),LW(144,8)]), 11385 (Call("Znop",CTy"instruction",LN 3),LL[LW(15,8),LW(31,8),LW(0,8)]), 11386 (Call("Znop",CTy"instruction",LN 4), 11387 LL[LW(15,8),LW(31,8),LW(64,8),LW(0,8)]), 11388 (Call("Znop",CTy"instruction",LN 5), 11389 LL[LW(15,8),LW(31,8),LW(68,8),LW(0,8),LW(0,8)]), 11390 (Call("Znop",CTy"instruction",LN 6), 11391 LL[LW(102,8),LW(15,8),LW(31,8),LW(68,8),LW(0,8),LW(0,8)]), 11392 (Call("Znop",CTy"instruction",LN 7), 11393 LL[LW(15,8),LW(31,8),LW(128,8),LW(0,8),LW(0,8),LW(0,8),LW(0,8)]), 11394 (Call("Znop",CTy"instruction",LN 8), 11395 LL[LW(15,8),LW(31,8),LW(132,8),LW(0,8),LW(0,8),LW(0,8),LW(0,8), 11396 LW(0,8)]), 11397 (Call("Znop",CTy"instruction",LN 9), 11398 LL[LW(102,8),LW(15,8),LW(31,8),LW(132,8),LW(0,8),LW(0,8),LW(0,8), 11399 LW(0,8),LW(0,8)]), 11400 (Call("Znop",CTy"instruction",AVar nTy),LNL F8), 11401 (Call 11402 ("Zpop",CTy"instruction", 11403 Call("Zr",CTy"Zrm",Var("reg",CTy"Zreg"))), 11404 Let(Var("r",F4),Mop(Cast F4,Var("reg",CTy"Zreg")), 11405 CC[ITE(Bop(Bit,Var("r",F4),LN 3),LL[LW(73,8)],LNL F8), 11406 LL[CC[LW(11,5),EX(Var("r",F4),LN 2,LN 0,FTy 3)]]])), 11407 (Call("Zpop",CTy"instruction",Var("rm",CTy"Zrm")), 11408 Call("e_opc",LTy F8,TP[LW(143,8),LW(0,3),Var("rm",CTy"Zrm")])), 11409 (Call 11410 ("Zpush",CTy"instruction", 11411 Call 11412 ("Zrm",CTy"Zimm_rm",Call("Zr",CTy"Zrm",Var("reg",CTy"Zreg")))), 11413 Let(Var("r",F4),Mop(Cast F4,Var("reg",CTy"Zreg")), 11414 CC[ITE(Bop(Bit,Var("r",F4),LN 3),LL[LW(73,8)],LNL F8), 11415 LL[CC[LW(10,5),EX(Var("r",F4),LN 2,LN 0,FTy 3)]]])), 11416 (Call 11417 ("Zpush",CTy"instruction", 11418 Call("Zrm",CTy"Zimm_rm",Var("rm",CTy"Zrm"))), 11419 Call("e_opc",LTy F8,TP[LW(255,8),LW(6,3),Var("rm",CTy"Zrm")])), 11420 (Call 11421 ("Zpush",CTy"instruction", 11422 Call("Zimm",CTy"Zimm_rm",Var("imm",F64))), 11423 Let(TP[nVar"s",Var("l",LTy F8)], 11424 Call("e_imm_8_32",PTy(nTy,LTy F8),Var("imm",F64)), 11425 ITB([(EQ(nVar"s",LN 1),LLC([LW(106,8)],Var("l",LTy F8))), 11426 (EQ(nVar"s",LN 4),LLC([LW(104,8)],Var("l",LTy F8)))], 11427 LNL F8))), 11428 (Call("Zret",CTy"instruction",LW(0,64)),LL[LW(195,8)]), 11429 (Call("Zret",CTy"instruction",Var("imm",F64)), 11430 CS(Call("e_imm16",LTy F8,Var("imm",F64)), 11431 [(LNL F8,LNL F8), 11432 (Var("l",LTy F8),LLC([LW(194,8)],Var("l",LTy F8)))])), 11433 (Call 11434 ("Zset",CTy"instruction", 11435 TP[LC("Z_ALWAYS",CTy"Zcond"),bVar"have_rex",Var("rm",CTy"Zrm")]), 11436 LNL F8), 11437 (Call 11438 ("Zset",CTy"instruction", 11439 TP[Var("cond",CTy"Zcond"),bVar"have_rex",Var("rm",CTy"Zrm")]), 11440 Call 11441 ("e_gen_rm_reg",LTy F8, 11442 TP[Call("Z8",CTy"Zsize",bVar"have_rex"),Var("rm",CTy"Zrm"), 11443 LW(0,4),LL[LW(15,8)], 11444 CC[LW(9,4),Mop(Cast F4,Var("cond",CTy"Zcond"))],LO F8])), 11445 (Call 11446 ("Zxadd",CTy"instruction", 11447 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"),Var("r",CTy"Zreg")]), 11448 Call 11449 ("e_gen_rm_reg",LTy F8, 11450 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"), 11451 Mop(Cast F4,Var("r",CTy"Zreg")),LL[LW(15,8)],LW(192,8),LO F8])), 11452 (Call 11453 ("Zxchg",CTy"instruction", 11454 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"),Var("reg",CTy"Zreg")]), 11455 ITE(Bop(And,Call("not_byte",bTy,Var("sz",CTy"Zsize")), 11456 Bop(Or,EQ(Var("reg",CTy"Zreg"),LC("RAX",CTy"Zreg")), 11457 Call("is_rax",bTy,Var("rm",CTy"Zrm")))), 11458 Let(Var("r",F4),Mop(Cast F4,Var("reg",CTy"Zreg")), 11459 Let(TP[Var("prefixes",LTy F8),Var("v",F8)], 11460 Call 11461 ("e_opsize",PTy(LTy F8,F8), 11462 TP[Var("sz",CTy"Zsize"), 11463 ITE(Bop(Bit,Var("r",F4),LN 3),LW(1,4),LW(0,4))]), 11464 ITE(EQ(Var("v",F8),LW(1,8)), 11465 CC[Var("prefixes",LTy F8), 11466 LL[CC[LW(18,5),EX(Var("r",F4),LN 2,LN 0,FTy 3)]]], 11467 LNL F8))), 11468 Call 11469 ("e_gen_rm_reg",LTy F8, 11470 TP[Var("sz",CTy"Zsize"),Var("rm",CTy"Zrm"), 11471 Mop(Cast F4,Var("reg",CTy"Zreg")),LNL F8,LW(134,8),LO F8])))])) 11472 11473val () = Import.finish 0