1 /** 2 * Instruction tables for inline assembler. 3 * 4 * Copyright: Copyright (C) 1985-1998 by Symantec 5 * Copyright (C) 2000-2021 by The D Language Foundation, All Rights Reserved 6 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) 7 * Source: $(LINK2 https://github.com/dlang/dmd/blob/master/src/dmd/backend/ptrntab.d, backend/ptrntab.d) 8 * Documentation: https://dlang.org/phobos/dmd_backend_ptrntab.html 9 * Coverage: https://codecov.io/gh/dlang/dmd/src/master/src/dmd/backend/ptrntab.d 10 */ 11 12 module dmd.backend.ptrntab; 13 14 version (SCPP) 15 version = COMPILE; 16 version (MARS) 17 version = COMPILE; 18 19 version (COMPILE) 20 { 21 22 import core.stdc.stdio; 23 import core.stdc.string; 24 25 version (SCPP) extern (C) char* strlwr(return char* s); 26 27 import dmd.backend.cc; 28 import dmd.backend.cdef; 29 import dmd.backend.code_x86; 30 import dmd.backend.iasm; 31 import dmd.backend.oper; 32 import dmd.backend.code; 33 import dmd.backend.global; 34 import dmd.backend.xmm; 35 36 import dmd.backend.cdef; 37 import dmd.backend.dlist; 38 import dmd.backend.ty; 39 40 nothrow: 41 42 // 43 // NOTE: For 0 operand instructions, the opcode is taken from 44 // the first entry and no subsequent entries are required. 45 // for instructions with operands, a NULL entry is required at the end 46 // as a terminator 47 // 48 // 0 Operand instructions 49 // 50 51 immutable 52 { 53 54 template OPTABLE0(opcode_t op, opflag_t mod) 55 { 56 immutable PTRNTAB0[1] OPTABLE0 = [ { op, mod }, ]; 57 } 58 59 alias aptb0AAA = OPTABLE0!( 0x37 ,_i64_bit | _modax); 60 alias aptb0AAD = OPTABLE0!( 0xd50a,_i64_bit | _modax); 61 alias aptb0AAM = OPTABLE0!( 0xd40a,_i64_bit | _modax); 62 alias aptb0AAS = OPTABLE0!( 0x3f, _i64_bit | _modax); 63 alias aptb0CBW = OPTABLE0!( 0x98,_16_bit | _modax); 64 alias aptb0CWDE = OPTABLE0!( 0x98,_32_bit | _I386 | _modax); 65 alias aptb0CDQE = OPTABLE0!( 0x98,_64_bit | _modax); 66 alias aptb0CLC = OPTABLE0!( 0xf8,0); 67 alias aptb0CLD = OPTABLE0!( 0xfc,0); 68 alias aptb0CLI = OPTABLE0!( 0xfa,0); 69 alias aptb0CLTS = OPTABLE0!( 0x0f06,0); 70 alias aptb0CMC = OPTABLE0!( 0xf5,0); 71 alias aptb0CMPSB = OPTABLE0!( 0xa6,_modsidi); 72 alias aptb0CMPSW = OPTABLE0!( 0xa7,_16_bit | _modsidi); 73 //alias aptb0CMPSD = OPTABLE0!( 0xa7,_32_bit | _I386 | _modsidi); 74 alias aptb0CMPSQ = OPTABLE0!( 0xa7,_64_bit | _modsidi); 75 alias aptb0CWD = OPTABLE0!( 0x99, _16_bit | _modaxdx); 76 alias aptb0CDQ = OPTABLE0!( 0x99,_32_bit | _I386 | _modaxdx); 77 alias aptb0CQO = OPTABLE0!( 0x99, _64_bit | _modaxdx); 78 alias aptb0DAA = OPTABLE0!( 0x27,_i64_bit | _modax ); 79 alias aptb0DAS = OPTABLE0!( 0x2f,_i64_bit | _modax ); 80 alias aptb0HLT = OPTABLE0!( 0xf4,0); 81 alias aptb0INSB = OPTABLE0!( 0x6c,_I386 | _modsi); 82 alias aptb0INSW = OPTABLE0!( 0x6d,_16_bit | _I386 | _modsi); 83 alias aptb0INSD = OPTABLE0!( 0x6d,_32_bit | _I386 | _modsi); 84 alias aptb0INTO = OPTABLE0!( 0xce,_i64_bit); 85 alias aptb0INVD = OPTABLE0!( 0x0f08,_I386); // Actually a 486 only instruction 86 alias aptb0IRET = OPTABLE0!( 0xcf,_16_bit); 87 alias aptb0IRETD = OPTABLE0!( 0xcf,_32_bit | _I386); 88 alias aptb0IRETQ = OPTABLE0!( 0xcf,_64_bit | _I386); 89 alias aptb0LAHF = OPTABLE0!( 0x9f,_modax); 90 alias aptb0LEAVE = OPTABLE0!( 0xc9,_I386); 91 alias aptb0LOCK = OPTABLE0!( 0xf0,0); 92 alias aptb0LODSB = OPTABLE0!( 0xac,_modsiax); 93 alias aptb0LODSW = OPTABLE0!( 0xad,_16_bit | _modsiax); 94 alias aptb0LODSD = OPTABLE0!( 0xad,_32_bit | _I386 | _modsiax); 95 alias aptb0LODSQ = OPTABLE0!( 0xad,_64_bit | _modsiax); 96 alias aptb0MOVSB = OPTABLE0!( 0xa4, _modsidi); 97 alias aptb0MOVSW = OPTABLE0!( 0xa5, _16_bit | _modsidi); 98 alias aptb0MOVSQ = OPTABLE0!( 0xa5, _64_bit | _modsidi); 99 alias aptb0NOP = OPTABLE0!( 0x90, 0); 100 alias aptb0OUTSB = OPTABLE0!( 0x6e, _I386 | _modsi); 101 alias aptb0OUTSW = OPTABLE0!( 0x6f, _16_bit | _I386 | _modsi); 102 alias aptb0OUTSD = OPTABLE0!( 0x6f, _32_bit | _I386 | _modsi); 103 alias aptb0POPA = OPTABLE0!( 0x61,_i64_bit | _16_bit | _I386 | _modall); 104 alias aptb0POPAD = OPTABLE0!( 0x61,_i64_bit | _32_bit | _I386 | _modall); 105 alias aptb0POPF = OPTABLE0!( 0x9d, _16_bit); 106 alias aptb0POPFD = OPTABLE0!( 0x9d,_i64_bit | _32_bit | _I386); 107 alias aptb0POPFQ = OPTABLE0!( 0x9d, _64_bit); 108 alias aptb0PUSHA = OPTABLE0!( 0x60,_i64_bit | _16_bit | _I386); 109 alias aptb0PUSHAD = OPTABLE0!( 0x60,_i64_bit | _32_bit | _I386); 110 alias aptb0PUSHF = OPTABLE0!( 0x9c, _16_bit); 111 alias aptb0PUSHFD = OPTABLE0!( 0x9c,_i64_bit | _32_bit | _I386); 112 alias aptb0PUSHFQ = OPTABLE0!( 0x9c, _64_bit); // TODO REX_W override is implicit 113 alias aptb0REP = OPTABLE0!( 0xf3, _modcx); 114 alias aptb0REPNE = OPTABLE0!( 0xf2, _modcx); 115 alias aptb0SAHF = OPTABLE0!( 0x9e, 0); 116 alias aptb0SCASB = OPTABLE0!( 0xAE, _moddi); 117 alias aptb0SCASW = OPTABLE0!( 0xAF, _16_bit | _moddi); 118 alias aptb0SCASD = OPTABLE0!( 0xAF, _32_bit | _I386 | _moddi); 119 alias aptb0SCASQ = OPTABLE0!( 0xAF, _64_bit | _moddi); 120 alias aptb0STC = OPTABLE0!( 0xf9, 0); 121 alias aptb0STD = OPTABLE0!( 0xfd, 0); 122 alias aptb0STI = OPTABLE0!( 0xfb, 0); 123 alias aptb0STOSB = OPTABLE0!( 0xaa, _moddi); 124 alias aptb0STOSW = OPTABLE0!( 0xAB, _16_bit | _moddi); 125 alias aptb0STOSD = OPTABLE0!( 0xAB, _32_bit | _I386 | _moddi); 126 alias aptb0STOSQ = OPTABLE0!( 0xAB, _64_bit | _moddi); 127 alias aptb0WAIT = OPTABLE0!( 0x9B, 0); 128 alias aptb0WBINVD = OPTABLE0!( 0x0f09, _I386); // Really a 486 opcode 129 alias aptb0XLATB = OPTABLE0!( 0xd7, _modax); 130 alias aptb0CPUID = OPTABLE0!( 0x0fa2, _I386 | _modall); 131 alias aptb0RDMSR = OPTABLE0!( 0x0f32, _I386 | _modaxdx); 132 alias aptb0RDPMC = OPTABLE0!( 0x0f33, _I386 | _modaxdx); 133 alias aptb0RDTSC = OPTABLE0!( 0x0f31, _I386 | _modaxdx); 134 alias aptb0RDTSCP = OPTABLE0!( 0x0f01f9, _I386 | _modaxdx | _modcx); 135 alias aptb0WRMSR = OPTABLE0!( 0x0f30, _I386); 136 alias aptb0RSM = OPTABLE0!( 0x0faa,_i64_bit | _I386); 137 138 // 139 // Now come the one operand instructions 140 // These will prove to be a little more challenging than the 0 141 // operand instructions 142 // 143 PTRNTAB1[3] aptb1BSWAP = /* BSWAP */ [ 144 // Really is a 486 only instruction 145 { 0x0fc8, _I386, _plus_r | _r32 }, 146 { 0x0fc8, _64_bit, _plus_r | _r64 }, 147 { ASM_END } 148 ]; 149 150 PTRNTAB1[13] aptb1CALL = /* CALL */ [ 151 { 0xe8, _cw| _i64_bit | _modall, _rel16 }, 152 { 0xff, _2 | _i64_bit | _16_bit | _modall, _r16 }, 153 { 0xff, _2 | _i64_bit | _modall, _m16 }, 154 { 0x9a, _cd| _i64_bit | _modall, _p1616 }, 155 { 0xff, _3 | _modall, _m1616 }, 156 { 0xe8, _cd| _modall, _rel32 }, 157 { 0xff, _2 | _i64_bit | _32_bit | _modall, _r32 }, 158 { 0xff, _2 | _32_bit | _modall, _r64 }, // REX_W override is implicit 159 { 0xff, _2 | _i64_bit | _modall, _m32 }, 160 { 0xff, _2 | _64_bit | _modall, _m64 }, // TODO REX_W override is implicit 161 { 0x9a, _cp| _i64_bit | _modall, _p1632 }, 162 { 0xff, _3 | _modall, _m1632 }, 163 { ASM_END } 164 ]; 165 166 PTRNTAB1[7] aptb1DEC = /* DEC */ [ 167 { 0xfe, _1, _rm8 }, 168 { 0x48, _rw | _i64_bit | _16_bit, _r16 | _plus_r }, 169 { 0x48, _rd | _i64_bit | _32_bit, _r32 | _plus_r }, 170 { 0xff, _1 | _16_bit, _rm16 }, 171 { 0xff, _1 | _32_bit, _rm32 }, 172 { 0xff, _1 | _64_bit, _rm64 }, 173 { ASM_END } 174 ]; 175 176 PTRNTAB1[7] aptb1INC = /* INC */ [ 177 { 0xfe, _0, _rm8 }, 178 { 0x40, _rw | _i64_bit | _16_bit, _r16 | _plus_r }, 179 { 0x40, _rd | _i64_bit | _32_bit, _r32 | _plus_r }, 180 { 0xff, _0 | _16_bit, _rm16 }, 181 { 0xff, _0 | _32_bit, _rm32 }, 182 { 0xff, _0 | _64_bit, _rm64 }, 183 { ASM_END } 184 ]; 185 // INT and INT 3 186 PTRNTAB1[3] aptb1INT= /* INT */ [ 187 { 0xcc, 3, 0 }, // The ulFlags here are meant to 188 // be the value of the immediate 189 // operand 190 { 0xcd, 0, _imm8 }, 191 { ASM_END } 192 ]; 193 PTRNTAB1[2] aptb1INVLPG = /* INVLPG */ [ // 486 only instruction 194 { 0x0f01, _I386|_7, _m48_32_16_8 }, 195 { ASM_END } 196 ]; 197 198 199 template OPTABLE_J(opcode_t op) 200 { 201 immutable PTRNTAB1[4] OPTABLE_J = 202 [ 203 { 0x70|op, _cb, _rel8 }, 204 { 0x0f80|op, _cw|_i64_bit,_rel16 }, 205 { 0x0f80|op, _cd, _rel32 }, 206 { ASM_END } 207 ]; 208 } 209 210 alias aptb1JO = OPTABLE_J!(0); 211 alias aptb1JNO = OPTABLE_J!(1); 212 alias aptb1JB = OPTABLE_J!(2); 213 alias aptb1JNB = OPTABLE_J!(3); 214 alias aptb1JZ = OPTABLE_J!(4); 215 alias aptb1JNZ = OPTABLE_J!(5); 216 alias aptb1JBE = OPTABLE_J!(6); 217 alias aptb1JNBE = OPTABLE_J!(7); 218 alias aptb1JS = OPTABLE_J!(8); 219 alias aptb1JNS = OPTABLE_J!(9); 220 alias aptb1JP = OPTABLE_J!(0xA); 221 alias aptb1JNP = OPTABLE_J!(0xB); 222 alias aptb1JL = OPTABLE_J!(0xC); 223 alias aptb1JNL = OPTABLE_J!(0xD); 224 alias aptb1JLE = OPTABLE_J!(0xE); 225 alias aptb1JNLE = OPTABLE_J!(0xF); 226 227 PTRNTAB1[2] aptb1JCXZ = /* JCXZ */ [ 228 { 0xe3, _cb | _i64_bit | _16_bit_addr, _rel8 }, 229 { ASM_END } 230 ]; 231 PTRNTAB1[2] aptb1JECXZ = /* JECXZ */ [ 232 { 0xe3, _cb | _32_bit_addr | _I386,_rel8 }, 233 { ASM_END } 234 ]; 235 PTRNTAB1[11] aptb1JMP = /* JMP */ [ 236 { 0xe9, _cw| _i64_bit, _rel16 }, 237 { 0xe9, _cd, _rel32 }, 238 { 0xeb, _cb, _rel8 }, 239 { 0xff, _4 | _i64_bit | _16_bit, _rm16 }, 240 { 0xea, _cd| _i64_bit, _p1616 }, 241 { 0xff, _5, _m1616 }, 242 { 0xff, _4 | _i64_bit | _32_bit, _rm32 }, 243 { 0xff, _4 | _64_bit, _rm64 }, // TODO REX_W override is implicit 244 { 0xea, _cp| _i64_bit, _p1632 }, 245 { 0xff, _5, _m1632 }, 246 { ASM_END } 247 ]; 248 PTRNTAB1[2] aptb1LGDT = /* LGDT */ [ 249 { 0x0f01, _2, _m48 }, 250 { ASM_END } 251 ]; 252 PTRNTAB1[2] aptb1LIDT = /* LIDT */ [ 253 { 0x0f01, _3, _m48 }, 254 { ASM_END } 255 ]; 256 PTRNTAB1[2] aptb1LLDT = /* LLDT */ [ 257 { 0x0f00, _2|_modnot1, _rm16 }, 258 { ASM_END } 259 ]; 260 PTRNTAB1[2] aptb1LMSW = /* LMSW */ [ 261 { 0x0f01, _6|_modnot1, _rm16 }, 262 { ASM_END } 263 ]; 264 PTRNTAB1[4] aptb1LODS = /* LODS */ [ 265 { 0xac, _modax,_m8 }, 266 { 0xad, _16_bit | _modax,_m16 }, 267 { 0xad, _32_bit | _I386 | _modax,_m32 }, 268 { ASM_END } 269 ]; 270 PTRNTAB1[2] aptb1LOOP = /* LOOP */ [ 271 { 0xe2, _cb | _modcx,_rel8 }, 272 { ASM_END } 273 ]; 274 PTRNTAB1[2] aptb1LOOPE = /* LOOPE/LOOPZ */ [ 275 { 0xe1, _cb | _modcx,_rel8 }, 276 { ASM_END } 277 ]; 278 PTRNTAB1[2] aptb1LOOPNE = /* LOOPNE/LOOPNZ */ [ 279 { 0xe0, _cb | _modcx,_rel8 }, 280 { ASM_END } 281 ]; 282 PTRNTAB1[2] aptb1LTR = /* LTR */ [ 283 { 0x0f00, _3|_modnot1, _rm16 }, 284 { ASM_END } 285 ]; 286 PTRNTAB1[5] aptb1NEG = /* NEG */ [ 287 { 0xf6, _3, _rm8 }, 288 { 0xf7, _3 | _16_bit, _rm16 }, 289 { 0xf7, _3 | _32_bit, _rm32 }, 290 { 0xf7, _3 | _64_bit, _rm64 }, 291 { ASM_END } 292 ]; 293 PTRNTAB1[5] aptb1NOT = /* NOT */ [ 294 { 0xf6, _2, _rm8 }, 295 { 0xf7, _2 | _16_bit, _rm16 }, 296 { 0xf7, _2 | _32_bit, _rm32 }, 297 { 0xf7, _2 | _64_bit, _rm64 }, 298 { ASM_END } 299 ]; 300 PTRNTAB1[12] aptb1POP = /* POP */ [ 301 { 0x8f, _0 | _16_bit, _m16 }, 302 { 0x8f, _0 | _i64_bit | _32_bit, _m32 }, 303 { 0x8f, _0 | _64_bit, _m64 }, // TODO REX_W override is implicit 304 { 0x58, _rw | _16_bit, _r16 | _plus_r }, 305 { 0x58, _rd | _i64_bit | _32_bit, _r32 | _plus_r }, 306 { 0x58, _r | _32_bit, _r64 | _plus_r }, // REX_W override is implicit 307 { 0x1f, _i64_bit, _ds | _seg }, 308 { 0x07, _i64_bit | _modes, _es | _seg }, 309 { 0x17, _i64_bit, _ss | _seg }, 310 { 0x0fa1, 0, _fs | _seg }, 311 { 0x0fa9, 0, _gs | _seg }, 312 { ASM_END } 313 ]; 314 PTRNTAB1[18] aptb1PUSH = /* PUSH */ [ 315 { 0xff, _6 | _16_bit, _m16 }, 316 { 0xff, _6 | _i64_bit | _32_bit, _m32 }, 317 { 0xff, _6 | _64_bit, _m64 }, // TODO REX_W override is implicit 318 { 0x50, _r | _16_bit, _r16 | _plus_r }, 319 { 0x50, _r | _i64_bit | _32_bit, _r32 | _plus_r }, 320 { 0x50, _r | _32_bit, _r64 | _plus_r }, // REX_W override is implicit 321 { 0x6a, 0,_imm8 }, 322 { 0x68, _16_bit,_imm16 }, 323 { 0x68, _16_bit,_rel16 }, 324 { 0x68, _32_bit,_imm32 }, 325 { 0x68, _32_bit,_rel32 }, 326 { 0x0e, _i64_bit,_cs | _seg }, 327 { 0x16, _i64_bit,_ss | _seg }, 328 { 0x1e, _i64_bit,_ds | _seg }, 329 { 0x06, _i64_bit,_es | _seg }, 330 { 0x0fa0, 0,_fs | _seg}, 331 { 0x0fa8, 0,_gs | _seg}, 332 { ASM_END } 333 ]; 334 PTRNTAB1[3] aptb1RET = /* RET */ [ 335 { 0xc3, 0, 0 }, 336 { 0xc2, _iw, _imm16 }, 337 { ASM_END } 338 ]; 339 PTRNTAB1[3] aptb1RETF = /* RETF */ [ 340 { 0xcb, 0, 0 }, 341 { 0xca, _iw, _imm16 }, 342 { ASM_END } 343 ]; 344 PTRNTAB1[4] aptb1SCAS = /* SCAS */ [ 345 { 0xae, _moddi, _m8 }, 346 { 0xaf, _16_bit | _moddi, _m16 }, 347 { 0xaf, _32_bit | _moddi, _m32 }, 348 { ASM_END } 349 ]; 350 351 template OPTABLE_SET(opcode_t op) 352 { 353 immutable PTRNTAB1[2] OPTABLE_SET = 354 [ 355 { 0xf90|op, _cb, _rm8 }, 356 { ASM_END } 357 ]; 358 } 359 360 alias aptb1SETO = OPTABLE_SET!(0); 361 alias aptb1SETNO = OPTABLE_SET!(1); 362 alias aptb1SETB = OPTABLE_SET!(2); 363 alias aptb1SETNB = OPTABLE_SET!(3); 364 alias aptb1SETZ = OPTABLE_SET!(4); 365 alias aptb1SETNZ = OPTABLE_SET!(5); 366 alias aptb1SETBE = OPTABLE_SET!(6); 367 alias aptb1SETNBE = OPTABLE_SET!(7); 368 alias aptb1SETS = OPTABLE_SET!(8); 369 alias aptb1SETNS = OPTABLE_SET!(9); 370 alias aptb1SETP = OPTABLE_SET!(0xA); 371 alias aptb1SETNP = OPTABLE_SET!(0xB); 372 alias aptb1SETL = OPTABLE_SET!(0xC); 373 alias aptb1SETNL = OPTABLE_SET!(0xD); 374 alias aptb1SETLE = OPTABLE_SET!(0xE); 375 alias aptb1SETNLE = OPTABLE_SET!(0xF); 376 377 378 PTRNTAB1[2] aptb1SGDT= /* SGDT */ [ 379 { 0xf01, _0, _m48 }, 380 { ASM_END } 381 ]; 382 PTRNTAB1[2] aptb1SIDT = /* SIDT */ [ 383 { 0xf01, _1, _m48 }, 384 { ASM_END } 385 ]; 386 PTRNTAB1[2] aptb1SLDT = /* SLDT */ [ 387 { 0xf00, _0, _rm16 }, 388 { ASM_END } 389 ]; 390 PTRNTAB1[3] aptb1SMSW = /* SMSW */ [ 391 { 0xf01, _4, _rm16 }, 392 { 0xf01, _4, _r32 }, 393 { ASM_END } 394 ]; 395 PTRNTAB1[4] aptb1STOS = /* STOS */ [ 396 { 0xaa, _moddi, _m8 }, 397 { 0xab, _16_bit | _moddi, _m16 }, 398 { 0xab, _32_bit | _moddi, _m32 }, 399 { ASM_END } 400 ]; 401 PTRNTAB1[2] aptb1STR = /* STR */ [ 402 { 0xf00, _1, _rm16 }, 403 { ASM_END } 404 ]; 405 PTRNTAB1[2] aptb1VERR = /* VERR */ [ 406 { 0xf00, _4|_modnot1, _rm16 }, 407 { ASM_END } 408 ]; 409 PTRNTAB1[2] aptb1VERW = /* VERW */ [ 410 { 0xf00, _5|_modnot1, _rm16 }, 411 { ASM_END } 412 ]; 413 PTRNTAB1[3] aptb1XLAT = /* XLAT */ [ 414 { 0xd7, _modax, 0 }, 415 { 0xd7, _modax, _m8 }, 416 { ASM_END } 417 ]; 418 PTRNTAB1[2] aptb1CMPXCHG8B = /* CMPXCHG8B */ [ 419 { 0x0fc7, _1 | _modaxdx | _I386, _m64 }, 420 { ASM_END } 421 ]; 422 423 PTRNTAB1[2] aptb1CMPXCHG16B = /* CMPXCHG16B */ [ 424 { 0x0fc7, _1 | _modaxdx | _64_bit, _m128 }, 425 { ASM_END } 426 ]; 427 428 template OPTABLE_ARITH(opcode_t op, uint rr, uint m) 429 { 430 immutable PTRNTAB2[20] OPTABLE_ARITH = 431 [ 432 { op+4, _ib|m, _al, _imm8 }, 433 { 0x83, rr|_ib|_16_bit|m, _rm16, _imm8 }, 434 { op+5, _iw|_16_bit|m, _ax, _imm16 }, 435 { 0x83, rr|_ib|_32_bit|m, _rm32, _imm8 }, 436 { 0x83, rr|_ib|_64_bit|m, _rm64, _imm8 }, 437 { op+5, _id|_32_bit|m, _eax, _imm32 }, 438 { op+5, _id|_64_bit|m, _rax, _imm32 }, 439 { 0x80, rr|_ib|m, _rm8, _imm8 }, 440 { 0x81, rr|_iw|_16_bit|m, _rm16, _imm16 }, 441 { 0x81, rr|_id|_32_bit|m, _rm32, _imm32 }, 442 { 0x81, rr|_id|_64_bit|m, _rm64, _imm32 }, 443 { op+0, _r|m, _rm8, _r8 }, 444 { op+1, _r|_16_bit|m, _rm16, _r16 }, 445 { op+1, _r|_32_bit|m, _rm32, _r32 }, 446 { op+1, _r|_64_bit|m, _rm64, _r64 }, 447 { op+2, _r|m, _r8, _rm8 }, 448 { op+3, _r|_16_bit|m, _r16, _rm16 }, 449 { op+3, _r|_32_bit|m, _r32, _rm32 }, 450 { op+3, _r|_64_bit|m, _r64, _rm64 }, 451 { ASM_END } 452 ]; 453 } 454 455 alias aptb2ADD = OPTABLE_ARITH!(0x00,_0,0); 456 alias aptb2OR = OPTABLE_ARITH!( 0x08,_1,0); 457 alias aptb2ADC = OPTABLE_ARITH!(0x10,_2,0); 458 alias aptb2SBB = OPTABLE_ARITH!(0x18,_3,0); 459 alias aptb2AND = OPTABLE_ARITH!(0x20,_4,0); 460 alias aptb2SUB = OPTABLE_ARITH!(0x28,_5,0); 461 alias aptb2XOR = OPTABLE_ARITH!(0x30,_6,0); 462 alias aptb2CMP = OPTABLE_ARITH!(0x38,_7,_modnot1); 463 464 465 PTRNTAB2[2] aptb2ARPL = /* ARPL */ [ 466 { 0x63, _r|_i64_bit, _rm16, _r16 }, 467 { ASM_END } 468 ]; 469 PTRNTAB2[3] aptb2BOUND = /* BOUND */ [ 470 { 0x62, _r|_i64_bit|_16_bit|_modnot1,_r16,_m16 },// Should really b3 _m16_16 471 { 0x62, _r|_i64_bit|_32_bit|_modnot1,_r32,_m32 },// Should really be _m32_32 472 { ASM_END } 473 ]; 474 PTRNTAB2[4] aptb2BSF = /* BSF */ [ 475 { 0x0fbc, _cw | _16_bit, _r16, _rm16 }, 476 { 0x0fbc, _cd|_32_bit, _r32, _rm32 }, 477 { 0x0fbc, _cq|_64_bit, _r64, _rm64 }, 478 { ASM_END } 479 ]; 480 PTRNTAB2[4] aptb2BSR = /* BSR */ [ 481 { 0x0fbd, _cw|_16_bit, _r16, _rm16 }, 482 { 0x0fbd, _cd|_32_bit, _r32, _rm32 }, 483 { 0x0fbd, _cq|_64_bit, _r64, _rm64 }, 484 { ASM_END } 485 ]; 486 PTRNTAB2[7] aptb2BT = /* BT */ [ 487 { 0x0fa3, _cw|_16_bit|_modnot1, _rm16, _r16 }, 488 { 0x0fa3, _cd|_32_bit|_modnot1, _rm32, _r32 }, 489 { 0x0fa3, _cq|_64_bit|_modnot1, _rm64, _r64 }, 490 { 0x0fba, _4|_ib|_16_bit|_modnot1, _rm16, _imm8 }, 491 { 0x0fba, _4|_ib|_32_bit|_modnot1, _rm32, _imm8 }, 492 { 0x0fba, _4|_ib|_64_bit|_modnot1, _rm64, _imm8 }, 493 { ASM_END } 494 ]; 495 PTRNTAB2[7] aptb2BTC = /* BTC */ [ 496 { 0x0fbb, _cw|_16_bit, _rm16, _r16 }, 497 { 0x0fbb, _cd|_32_bit, _rm32, _r32 }, 498 { 0x0fbb, _cq|_64_bit, _rm64, _r64 }, 499 { 0x0fba, _7|_ib|_16_bit, _rm16, _imm8 }, 500 { 0x0fba, _7|_ib|_32_bit, _rm32, _imm8 }, 501 { 0x0fba, _7|_ib|_64_bit, _rm64, _imm8 }, 502 { ASM_END } 503 ]; 504 PTRNTAB2[7] aptb2BTR = /* BTR */ [ 505 { 0x0fb3, _cw|_16_bit, _rm16, _r16 }, 506 { 0x0fb3, _cd|_32_bit, _rm32, _r32 }, 507 { 0x0fb3, _cq|_64_bit, _rm64, _r64 }, 508 { 0x0fba, _6|_ib|_16_bit, _rm16, _imm8 }, 509 { 0x0fba, _6|_ib|_32_bit, _rm32, _imm8 }, 510 { 0x0fba, _6|_ib|_64_bit, _rm64, _imm8 }, 511 { ASM_END } 512 ]; 513 PTRNTAB2[7] aptb2BTS = /* BTS */ [ 514 { 0x0fab, _cw|_16_bit, _rm16, _r16 }, 515 { 0x0fab, _cd|_32_bit, _rm32, _r32 }, 516 { 0x0fab, _cq|_64_bit, _rm64, _r64 }, 517 { 0x0fba, _5|_ib|_16_bit, _rm16, _imm8 }, 518 { 0x0fba, _5|_ib|_32_bit, _rm32, _imm8 }, 519 { 0x0fba, _5|_ib|_64_bit, _rm64, _imm8 }, 520 { ASM_END } 521 ]; 522 PTRNTAB2[4] aptb2CMPS = /* CMPS */ [ 523 { 0xa6, _modsidi, _m8, _m8 }, 524 { 0xa7, _modsidi, _m16, _m16 }, 525 { 0xa7, _modsidi, _m32, _m32 }, 526 { ASM_END } 527 ]; 528 PTRNTAB2[5] aptb2CMPXCHG = /* CMPXCHG */ [ 529 { 0xfb0, _I386 | _cb|_mod2, _rm8, _r8 }, 530 // This is really a 486 only 531 // instruction 532 { 0xfb1, _I386 | _cw | _16_bit|_mod2, _rm16, _r16 }, 533 { 0xfb1, _I386 | _cd | _32_bit|_mod2, _rm32, _r32 }, 534 { 0xfb1, _I386 | _cq | _64_bit|_mod2, _rm64, _r64 }, 535 { ASM_END } 536 ]; 537 PTRNTAB2[9] aptb2DIV = /* DIV */ [ 538 { 0xf6, _6, _al, _rm8 }, 539 { 0xf7, _6 | _16_bit | _moddx, _ax, _rm16 }, 540 { 0xf7, _6 | _32_bit | _moddx, _eax, _rm32 }, 541 { 0xf7, _6 | _64_bit | _moddx, _rax, _rm64 }, 542 { 0xf6, _6 | _modax, _rm8, 0 }, 543 { 0xf7, _6 | _16_bit | _modaxdx, _rm16, 0 }, 544 { 0xf7, _6 | _32_bit | _modaxdx, _rm32, 0 }, 545 { 0xf7, _6 | _64_bit | _modaxdx, _rm64, 0 }, 546 { ASM_END } 547 ]; 548 PTRNTAB2[2] aptb2ENTER = /* ENTER */ [ 549 { 0xc8, _iw|_ib, _imm16, _imm8 }, 550 { ASM_END } 551 ]; 552 PTRNTAB2[9] aptb2IDIV = /* IDIV */ [ 553 { 0xf6, _7, _al, _rm8 }, 554 { 0xf7, _7|_16_bit|_moddx, _ax, _rm16 }, 555 { 0xf7, _7|_32_bit|_moddx, _eax, _rm32 }, 556 { 0xf7, _7|_64_bit|_moddx, _rax, _rm64 }, 557 { 0xf6, _7 | _modax, _rm8, 0 }, 558 { 0xf7, _7|_16_bit|_modaxdx, _rm16, 0 }, 559 { 0xf7, _7|_32_bit|_modaxdx, _rm32, 0 }, 560 { 0xf7, _7|_64_bit|_modaxdx, _rm64, 0 }, 561 { ASM_END } 562 ]; 563 PTRNTAB2[7] aptb2IN = /* IN */ [ 564 { 0xe4, _ib, _al, _imm8 }, 565 { 0xe5, _ib|_16_bit,_ax, _imm8 }, 566 { 0xe5, _ib|_32_bit,_eax, _imm8 }, 567 { 0xec, 0, _al, _dx }, 568 { 0xed, _16_bit, _ax, _dx }, 569 { 0xed, _32_bit, _eax, _dx }, 570 { ASM_END } 571 ]; 572 PTRNTAB2[4] aptb2INS = /* INS */ [ 573 { 0x6c, _modsi, _rm8, _dx }, 574 { 0x6d, _modsi|_16_bit, _rm16, _dx }, 575 { 0x6d, _32_bit|_modsi, _rm32, _dx }, 576 { ASM_END } 577 ]; 578 579 PTRNTAB2[3] aptb2LAR = /* LAR */ [ 580 { 0x0f02, _r|_16_bit, _r16, _rm16 }, 581 { 0x0f02, _r|_32_bit, _r32, _rm32 }, 582 { ASM_END } 583 ]; 584 PTRNTAB2[3] aptb2LDS = /* LDS */ [ 585 { 0xc5, _r|_i64_bit|_16_bit, _r16, _m32 }, 586 { 0xc5, _r|_i64_bit|_32_bit, _r32, _m48 }, 587 { ASM_END } 588 ]; 589 590 PTRNTAB2[7] aptb2LEA = /* LEA */ [ 591 { 0x8d, _r|_16_bit, _r16, _m48_32_16_8 }, 592 { 0x8d, _r|_32_bit, _r32, _m48_32_16_8 }, 593 { 0x8d, _r|_64_bit, _r64, _m64_48_32_16_8 }, 594 { 0x8d, _r|_16_bit, _r16, _rel16 }, 595 { 0x8d, _r|_32_bit, _r32, _rel32 }, 596 { 0x8d, _r|_64_bit, _r64, _rel32 }, 597 { ASM_END } 598 ]; 599 PTRNTAB2[3] aptb2LES = /* LES */ [ 600 { 0xc4, _r|_i64_bit|_16_bit|_modes, _r16, _m32 }, 601 { 0xc4, _r|_i64_bit|_32_bit|_modes, _r32, _m48 }, 602 { ASM_END } 603 ]; 604 PTRNTAB2[3] aptb2LFS = /* LFS */ [ 605 { 0x0fb4, _r|_16_bit, _r16, _m32 }, 606 { 0x0fb4, _r|_32_bit, _r32, _m48 }, 607 { ASM_END } 608 ]; 609 PTRNTAB2[3] aptb2LGS = /* LGS */ [ 610 { 0x0fb5, _r|_16_bit, _r16, _m32 }, 611 { 0x0fb5, _r|_32_bit, _r32, _m48 }, 612 { ASM_END } 613 ]; 614 PTRNTAB2[3] aptb2LSS = /* LSS */ [ 615 { 0x0fb2, _r|_16_bit, _r16, _m32 }, 616 { 0x0fb2, _r|_32_bit, _r32, _m48 }, 617 { ASM_END } 618 ]; 619 PTRNTAB2[3] aptb2LSL = /* LSL */ [ 620 { 0x0f03, _r|_16_bit, _r16, _rm16 }, 621 { 0x0f03, _r|_32_bit, _r32, _rm32 }, 622 { ASM_END } 623 ]; 624 625 PTRNTAB2[26] aptb2MOV = /* MOV */ [ 626 /+ // Let pinholeopt() do this 627 { 0xa0, 0, _al, _moffs8 }, 628 { 0xa1, _16_bit, _ax, _moffs16 }, 629 { 0xa1, _32_bit, _eax, _moffs32 }, 630 { 0xa2, 0, _moffs8, _al }, 631 { 0xa3, _16_bit, _moffs16, _ax }, 632 { 0xa3, _32_bit, _moffs32, _eax }, 633 +/ 634 { 0x88, _r, _rm8, _r8 }, 635 { 0x89, _r|_16_bit, _rm16, _r16 }, 636 { 0x89, _r|_32_bit, _rm32, _r32 }, 637 { 0x89, _r|_64_bit, _rm64, _r64 }, 638 { 0x8a, _r, _r8, _rm8 }, 639 { 0x8b, _r|_16_bit, _r16, _rm16 }, 640 { 0x8b, _r|_32_bit, _r32, _rm32 }, 641 { 0x8b, _r|_64_bit, _r64, _rm64 }, 642 { 0x8c, _r, _rm16, _seg|_ds|_es| _ss | _fs | _gs | _cs }, 643 { 0x8e, _r, _seg|_ds|_es|_ss|_fs|_gs|_cs, _rm16 }, 644 { 0xb0, _rb, _r8 | _plus_r, _imm8 }, 645 { 0xb8, _rw | _16_bit, _r16 | _plus_r, _imm16 }, 646 { 0xb8, _rd|_32_bit, _r32 | _plus_r, _imm32 }, 647 { 0xb8, _rd|_64_bit, _r64 | _plus_r, _imm64 }, 648 { 0xc6, _cb, _rm8, _imm8 }, 649 { 0xc7, _cw|_16_bit, _rm16, _imm16 }, 650 { 0xc7, _cd|_32_bit, _rm32, _imm32 }, 651 /+ // Let pinholeopt() do this 652 { 0xc6, _cb, _moffs8, _imm8 }, 653 { 0xc7, _cw|_16_bit, _moffs16, _imm16 }, 654 { 0xc7, _cd|_32_bit, _moffs32, _imm32 }, 655 +/ 656 { 0x0f20, _r, _r32, _special | _crn }, 657 { 0x0f22, _r, _special|_crn, _r32 }, 658 { 0x0f20, _r, _r64, _special | _crn }, 659 { 0x0f22, _r, _special|_crn, _r64 }, 660 { 0x0f21, _r, _r32, _special | _drn }, 661 { 0x0f23, _r, _special|_drn, _r32 }, 662 { 0x0f24, _r, _r32, _special | _trn }, 663 { 0x0f26, _r, _special|_trn, _r32 }, 664 { ASM_END } 665 ]; 666 667 PTRNTAB2[4] aptb2MOVS = /* MOVS */ [ 668 { 0xa4, _modsidi , _m8, _m8 }, 669 { 0xa5, _modsidi | _16_bit, _m16, _m16 }, 670 { 0xa5, _modsidi | _32_bit, _m32, _m32 }, 671 { ASM_END } 672 ]; 673 PTRNTAB2[7] aptb2MOVSX = /* MOVSX */ [ 674 { MOVSXb, _r|_16_bit, _r16, _rm8 }, 675 { MOVSXb, _r|_32_bit, _r32, _rm8 }, 676 { MOVSXb, _r|_64_bit, _r64, _rm8 }, // TODO: REX_W override is implicit 677 { MOVSXw, _r|_16_bit, _r16, _rm16 }, 678 { MOVSXw, _r|_32_bit, _r32, _rm16 }, 679 { MOVSXw, _r|_64_bit, _r64, _rm16 }, // TODO: REX_W override is implicit 680 { ASM_END } 681 ]; 682 PTRNTAB2[2] aptb2MOVSXD = /* MOVSXD */ [ 683 { 0x63, _r|_64_bit, _r64, _rm32 }, // TODO: REX_W override is implicit 684 { ASM_END } 685 ]; 686 PTRNTAB2[7] aptb2MOVZX = /* MOVZX */ [ 687 { MOVZXb, _r|_16_bit, _r16, _rm8 }, 688 { MOVZXb, _r|_32_bit, _r32, _rm8 }, 689 { MOVZXb, _r|_64_bit, _r64, _rm8 }, // TODO: REX_W override is implicit 690 { MOVZXw, _r|_16_bit, _r16, _rm16 }, 691 { MOVZXw, _r|_32_bit, _r32, _rm16 }, 692 { MOVZXw, _r|_64_bit, _r64, _rm16 }, // TODO: REX_W override is implicit 693 { ASM_END } 694 ]; 695 PTRNTAB2[9] aptb2MUL = /* MUL */ [ 696 { 0xf6, _4, _al, _rm8 }, 697 { 0xf7, _4|_16_bit|_moddx, _ax, _rm16 }, 698 { 0xf7, _4|_32_bit|_moddx, _eax, _rm32 }, 699 { 0xf7, _4|_64_bit|_moddx, _rax, _rm64 }, 700 { 0xf6, _4|_modax, _rm8, 0 }, 701 { 0xf7, _4|_16_bit|_modaxdx, _rm16, 0 }, 702 { 0xf7, _4|_32_bit|_modaxdx, _rm32, 0 }, 703 { 0xf7, _4|_64_bit|_modaxdx, _rm64, 0 }, 704 { ASM_END } 705 ]; 706 PTRNTAB2[4] aptb2TZCNT = /* TZCNT */ [ 707 { 0xf30fbc, _cw|_16_bit, _r16, _rm16 }, 708 { 0xf30fbc, _cd|_32_bit, _r32, _rm32 }, 709 { 0xf30fbc, _cq|_64_bit, _r64, _rm64 }, 710 { ASM_END } 711 ]; 712 PTRNTAB2[4] aptb2LZCNT = /* LZCNT */ [ 713 { 0xf30fbd, _cw|_16_bit, _r16, _rm16 }, 714 { 0xf30fbd, _cd|_32_bit, _r32, _rm32 }, 715 { 0xf30fbd, _cq|_64_bit, _r64, _rm64 }, 716 { ASM_END } 717 ]; 718 PTRNTAB2[7] aptb2OUT = /* OUT */ [ 719 { 0xe6, _ib, _imm8, _al }, 720 { 0xe7, _ib|_16_bit, _imm8, _ax }, 721 { 0xe7, _ib|_32_bit, _imm8, _eax }, 722 { 0xee, _modnot1, _dx, _al }, 723 { 0xef, _16_bit|_modnot1, _dx, _ax }, 724 { 0xef, _32_bit|_modnot1, _dx, _eax }, 725 { ASM_END } 726 ]; 727 PTRNTAB2[4] aptb2OUTS = /* OUTS */ [ 728 { 0x6e, _modsinot1, _dx, _rm8 }, 729 { 0x6f, _16_bit | _I386 |_modsinot1, _dx, _rm16 }, 730 { 0x6f, _32_bit | _I386| _modsinot1, _dx, _rm32 }, 731 { ASM_END } 732 ]; 733 734 735 template OPTABLE_SHIFT(opcode_t op) 736 { 737 immutable PTRNTAB2[9] OPTABLE_SHIFT = 738 [ 739 { 0xd2, op, _rm8, _cl }, 740 { 0xc0, op|_ib, _rm8, _imm8 }, 741 { 0xd3, op|_16_bit, _rm16, _cl }, 742 { 0xc1, op|_ib|_16_bit, _rm16, _imm8 }, 743 { 0xd3, op|_32_bit, _rm32, _cl }, 744 { 0xc1, op|_ib|_32_bit, _rm32, _imm8, }, 745 { 0xd3, op|_64_bit, _rm64, _cl }, 746 { 0xc1, op|_ib|_64_bit, _rm64, _imm8, }, 747 { ASM_END } 748 ]; 749 } 750 751 alias aptb2ROL = OPTABLE_SHIFT!(_0); 752 alias aptb2ROR = OPTABLE_SHIFT!(_1); 753 alias aptb2RCL = OPTABLE_SHIFT!(_2); 754 alias aptb2RCR = OPTABLE_SHIFT!(_3); 755 alias aptb2SHL = OPTABLE_SHIFT!(_4); 756 alias aptb2SHR = OPTABLE_SHIFT!(_5); 757 alias aptb2SAR = OPTABLE_SHIFT!(_7); 758 759 760 PTRNTAB2[13] aptb2TEST = /* TEST */ [ 761 { 0xa8, _ib|_modnot1, _al, _imm8 }, 762 { 0xa9, _iw|_16_bit|_modnot1, _ax, _imm16 }, 763 { 0xa9, _id|_32_bit|_modnot1, _eax, _imm32 }, 764 { 0xa9, _id|_64_bit|_modnot1, _rax, _imm32 }, 765 { 0xf6, _0|_modnot1, _rm8, _imm8 }, 766 { 0xf7, _0|_16_bit|_modnot1, _rm16, _imm16 }, 767 { 0xf7, _0|_32_bit|_modnot1, _rm32, _imm32 }, 768 { 0xf7, _0|_64_bit|_modnot1, _rm64, _imm32 }, 769 { 0x84, _r|_modnot1, _rm8, _r8 }, 770 { 0x85, _r|_16_bit|_modnot1, _rm16, _r16 }, 771 { 0x85, _r|_32_bit|_modnot1, _rm32, _r32 }, 772 { 0x85, _r|_64_bit|_modnot1, _rm64, _r64 }, 773 { ASM_END } 774 ]; 775 PTRNTAB2[5] aptb2XADD = /* XADD */ [ // 486 only instruction 776 // { 0x0fc0, _ib | _I386|_mod2, _rm8, _r8 }, 777 // { 0x0fc1, _iw | _I386|_16_bit|_mod2, _rm16, _r16 }, 778 // { 0x0fc1, _id | _I386|_32_bit|_mod2, _rm32, _r32 }, 779 { 0x0fc0, _r | _I386|_mod2, _rm8, _r8 }, 780 { 0x0fc1, _r | _I386|_16_bit|_mod2, _rm16, _r16 }, 781 { 0x0fc1, _r | _I386|_32_bit|_mod2, _rm32, _r32 }, 782 { 0x0fc1, _r | _64_bit|_mod2, _rm64, _r64 }, 783 { ASM_END } 784 ]; 785 PTRNTAB2[13] aptb2XCHG = /* XCHG */ [ 786 { 0x90, _r|_16_bit|_mod2, _ax , _r16 | _plus_r }, 787 { 0x90, _r|_16_bit|_mod2, _r16 | _plus_r, _ax }, 788 { 0x90, _r|_32_bit|_mod2, _eax, _r32 | _plus_r }, 789 { 0x90, _r|_32_bit|_mod2, _r32 | _plus_r, _eax }, 790 { 0x86, _r|_mod2, _rm8, _r8 }, 791 { 0x86, _r|_mod2, _r8, _rm8 }, 792 { 0x87, _r|_16_bit|_mod2, _rm16, _r16 }, 793 { 0x87, _r|_16_bit|_mod2, _r16, _rm16 }, 794 { 0x87, _r|_32_bit|_mod2, _rm32, _r32 }, 795 { 0x87, _r|_32_bit|_mod2, _r32, _rm32 }, 796 { 0x87, _r|_64_bit|_mod2, _rm64, _r64 }, 797 { 0x87, _r|_64_bit|_mod2, _r64, _rm64 }, 798 { ASM_END } 799 ]; 800 801 802 template OPTABLE_CMOV(opcode_t op) 803 { 804 immutable PTRNTAB2[4] OPTABLE_CMOV = 805 [ 806 { 0x0F40|op, _r|_16_bit, _r16, _rm16 }, 807 { 0x0F40|op, _r|_32_bit, _r32, _rm32 }, 808 { 0x0F40|op, _r|_64_bit, _r64, _rm64 }, 809 { ASM_END } 810 ]; 811 } 812 813 alias aptb2CMOVO = OPTABLE_CMOV!(0); 814 alias aptb2CMOVNO = OPTABLE_CMOV!(1); 815 alias aptb2CMOVB = OPTABLE_CMOV!(2); 816 alias aptb2CMOVNB = OPTABLE_CMOV!(3); 817 alias aptb2CMOVZ = OPTABLE_CMOV!(4); 818 alias aptb2CMOVNZ = OPTABLE_CMOV!(5); 819 alias aptb2CMOVBE = OPTABLE_CMOV!(6); 820 alias aptb2CMOVNBE = OPTABLE_CMOV!(7); 821 alias aptb2CMOVS = OPTABLE_CMOV!(8); 822 alias aptb2CMOVNS = OPTABLE_CMOV!(9); 823 alias aptb2CMOVP = OPTABLE_CMOV!(0xA); 824 alias aptb2CMOVNP = OPTABLE_CMOV!(0xB); 825 alias aptb2CMOVL = OPTABLE_CMOV!(0xC); 826 alias aptb2CMOVNL = OPTABLE_CMOV!(0xD); 827 alias aptb2CMOVLE = OPTABLE_CMOV!(0xE); 828 alias aptb2CMOVNLE = OPTABLE_CMOV!(0xF); 829 830 831 PTRNTAB3[19] aptb3IMUL = /* IMUL */ [ 832 { 0x0faf, _r|_16_bit, _r16, _rm16, 0 }, 833 { 0x0faf, _r|_32_bit, _r32, _rm32, 0 }, 834 { 0x0faf, _r|_64_bit, _r64, _rm64, 0 }, 835 { 0xf6, _5|_modax, _rm8, 0, 0 }, 836 { 0xf7, _5|_16_bit|_modaxdx, _rm16, 0, 0 }, 837 { 0xf7, _5|_32_bit|_modaxdx, _rm32, 0, 0 }, 838 { 0xf7, _5|_64_bit|_modaxdx, _rm64, 0, 0 }, 839 { 0x6b, _r|_ib|_16_bit, _r16, _imm8, 0 }, 840 { 0x6b, _r|_ib|_32_bit, _r32, _imm8, 0 }, 841 { 0x69, _r|_iw|_16_bit, _r16, _imm16, 0 }, 842 { 0x69, _r|_id|_32_bit, _r32, _imm32, 0 }, 843 { 0x69, _r|_id|_64_bit, _r64, _imm32, 0 }, 844 { 0x6b, _r|_ib|_16_bit, _r16, _rm16, _imm8 }, 845 { 0x6b, _r|_ib|_32_bit, _r32, _rm32, _imm8 }, 846 { 0x6b, _r|_ib|_64_bit, _r64, _rm64, _imm8 }, 847 { 0x69, _r|_iw|_16_bit, _r16, _rm16, _imm16 }, 848 { 0x69, _r|_id|_32_bit, _r32, _rm32, _imm32 }, 849 { 0x69, _r|_id|_64_bit, _r64, _rm64, _imm32 }, 850 { ASM_END } 851 ]; 852 PTRNTAB3[7] aptb3SHLD = /* SHLD */ [ 853 { 0x0fa4, _cw|_16_bit, _rm16, _r16, _imm8 }, 854 { 0x0fa4, _cd|_32_bit, _rm32, _r32, _imm8 }, 855 { 0x0fa4, _cq|_64_bit, _rm64, _r64, _imm8 }, 856 { 0x0fa5, _cw|_16_bit, _rm16, _r16, _cl }, 857 { 0x0fa5, _cd|_32_bit, _rm32, _r32, _cl }, 858 { 0x0fa5, _cq|_64_bit, _rm64, _r64, _cl }, 859 { ASM_END } 860 ]; 861 PTRNTAB3[7] aptb3SHRD = /* SHRD */ [ 862 { 0x0fac, _cw|_16_bit, _rm16, _r16, _imm8 }, 863 { 0x0fac, _cd|_32_bit, _rm32, _r32, _imm8 }, 864 { 0x0fac, _cq|_64_bit, _rm64, _r64, _imm8 }, 865 { 0x0fad, _cw|_16_bit, _rm16, _r16, _cl }, 866 { 0x0fad, _cd|_32_bit, _rm32, _r32, _cl }, 867 { 0x0fad, _cq|_64_bit, _rm64, _r64, _cl }, 868 { ASM_END } 869 ]; 870 // 871 // Floating point instructions which have entirely different flag 872 // interpretations 873 // 874 875 alias aptb0F2XM1 = OPTABLE0!( 0xd9f0,0); 876 alias aptb0FABS = OPTABLE0!( 0xd9e1,0); 877 alias aptb0FCHS = OPTABLE0!( 0xd9e0,0); 878 alias aptb0FCLEX = OPTABLE0!( 0xdbe2,_fwait); 879 alias aptb0FNCLEX = OPTABLE0!( 0xdbe2, _nfwait); 880 alias aptb0FCOMPP = OPTABLE0!( 0xded9, 0); 881 alias aptb0FCOS = OPTABLE0!( 0xd9ff, 0); 882 alias aptb0FUCOMPP = OPTABLE0!( 0xdae9, 0); 883 alias aptb0FDECSTP = OPTABLE0!( 0xd9f6, 0); 884 alias aptb0FINCSTP = OPTABLE0!( 0xd9f7, 0); 885 alias aptb0FINIT = OPTABLE0!( 0xdbe3, _fwait); 886 alias aptb0FNINIT = OPTABLE0!( 0xdbe3, _nfwait); 887 alias aptb0FENI = OPTABLE0!( 0xdbe0, _fwait); 888 alias aptb0FNENI = OPTABLE0!( 0xdbe0, _nfwait); 889 alias aptb0FDISI = OPTABLE0!( 0xdbe1, _fwait); 890 alias aptb0FNDISI = OPTABLE0!( 0xdbe1, _nfwait); 891 alias aptb0FLD1 = OPTABLE0!( 0xd9e8, 0); 892 alias aptb0FLDL2T = OPTABLE0!( 0xd9e9, 0); 893 alias aptb0FLDL2E = OPTABLE0!( 0xd9ea, 0); 894 alias aptb0FLDPI = OPTABLE0!( 0xd9eb, 0); 895 alias aptb0FLDLG2 = OPTABLE0!( 0xd9ec, 0); 896 alias aptb0FLDLN2 = OPTABLE0!( 0xd9ed, 0); 897 alias aptb0FLDZ = OPTABLE0!( 0xd9ee, 0); 898 alias aptb0FNOP = OPTABLE0!( 0xd9d0, 0); 899 alias aptb0FPATAN = OPTABLE0!( 0xd9f3, 0); 900 alias aptb0FPREM = OPTABLE0!( 0xd9f8, 0); 901 alias aptb0FPREM1 = OPTABLE0!( 0xd9f5, 0); 902 alias aptb0FPTAN = OPTABLE0!( 0xd9f2, 0); 903 alias aptb0FRNDINT = OPTABLE0!( 0xd9fc, 0); 904 alias aptb0FSCALE = OPTABLE0!( 0xd9fd, 0); 905 alias aptb0FSETPM = OPTABLE0!( 0xdbe4, 0); 906 alias aptb0FSIN = OPTABLE0!( 0xd9fe, 0); 907 alias aptb0FSINCOS = OPTABLE0!( 0xd9fb, 0); 908 alias aptb0FSQRT = OPTABLE0!( 0xd9fa, 0); 909 alias aptb0FTST = OPTABLE0!( 0xd9e4, 0); 910 alias aptb0FWAIT = OPTABLE0!( 0x9b, 0); 911 alias aptb0FXAM = OPTABLE0!( 0xd9e5, 0); 912 alias aptb0FXTRACT = OPTABLE0!( 0xd9f4, 0); 913 alias aptb0FYL2X = OPTABLE0!( 0xd9f1, 0); 914 alias aptb0FYL2XP1 = OPTABLE0!( 0xd9f9, 0); 915 // 916 // Floating point instructions which have entirely different flag 917 // interpretations but they overlap, only asm_determine_operator 918 // flags needs to know the difference 919 // 1 operand floating point instructions follow 920 // 921 PTRNTAB1[2] aptb1FBLD = /* FBLD */ [ 922 { 0xdf, _4, _fm80 }, 923 { ASM_END } 924 ]; 925 926 PTRNTAB1[2] aptb1FBSTP = /* FBSTP */ [ 927 { 0xdf, _6, _fm80 }, 928 { ASM_END } 929 ]; 930 PTRNTAB2[3] aptb2FCMOVB = /* FCMOVB */ [ 931 { 0xdac0, 0, _st, _sti | _plus_r }, 932 { 0xdac1, 0, 0 }, 933 { ASM_END } 934 ]; 935 PTRNTAB2[3] aptb2FCMOVE = /* FCMOVE */ [ 936 { 0xdac8, 0, _st, _sti | _plus_r }, 937 { 0xdac9, 0, 0 }, 938 { ASM_END } 939 ]; 940 PTRNTAB2[3] aptb2FCMOVBE = /* FCMOVBE */ [ 941 { 0xdad0, 0, _st, _sti | _plus_r }, 942 { 0xdad1, 0, 0 }, 943 { ASM_END } 944 ]; 945 PTRNTAB2[3] aptb2FCMOVU = /* FCMOVU */ [ 946 { 0xdad8, 0, _st, _sti | _plus_r }, 947 { 0xdad9, 0, 0 }, 948 { ASM_END } 949 ]; 950 PTRNTAB2[3] aptb2FCMOVNB = /* FCMOVNB */ [ 951 { 0xdbc0, 0, _st, _sti | _plus_r }, 952 { 0xdbc1, 0, 0 }, 953 { ASM_END } 954 ]; 955 PTRNTAB2[3] aptb2FCMOVNE = /* FCMOVNE */ [ 956 { 0xdbc8, 0, _st, _sti | _plus_r }, 957 { 0xdbc9, 0, 0 }, 958 { ASM_END } 959 ]; 960 PTRNTAB2[3] aptb2FCMOVNBE = /* FCMOVNBE */ [ 961 { 0xdbd0, 0, _st, _sti | _plus_r }, 962 { 0xdbd1, 0, 0 }, 963 { ASM_END } 964 ]; 965 PTRNTAB2[3] aptb2FCMOVNU = /* FCMOVNU */ [ 966 { 0xdbd8, 0, _st, _sti | _plus_r }, 967 { 0xdbd9, 0, 0 }, 968 { ASM_END } 969 ]; 970 PTRNTAB1[5] aptb1FCOM = /* FCOM */ [ 971 { 0xd8, _2, _m32 }, 972 { 0xdc, _2, _fm64 }, 973 { 0xd8d0, 0, _sti | _plus_r }, 974 { 0xd8d1, 0, 0 }, 975 { ASM_END } 976 ]; 977 978 PTRNTAB2[4] aptb2FCOMI = /* FCOMI */ [ 979 { 0xdbf0, 0, _st, _sti | _plus_r }, 980 { 0xdbf0, 0, _sti | _plus_r, 0 }, 981 { 0xdbf1, 0, 0, 0 }, 982 { ASM_END } 983 ]; 984 PTRNTAB2[4] aptb2FCOMIP = /* FCOMIP */ [ 985 { 0xdff0, 0, _st, _sti | _plus_r }, 986 { 0xdff0, 0, _sti | _plus_r, 0 }, 987 { 0xdff1, 0, 0, 0 }, 988 { ASM_END } 989 ]; 990 PTRNTAB2[4] aptb2FUCOMI = /* FUCOMI */ [ 991 { 0xdbe8, 0, _st, _sti | _plus_r }, 992 { 0xdbe8, 0, _sti | _plus_r, 0 }, 993 { 0xdbe9, 0, 0, 0 }, 994 { ASM_END } 995 ]; 996 PTRNTAB2[4] aptb2FUCOMIP = /* FUCOMIP */ [ 997 { 0xdfe8, 0, _st, _sti | _plus_r }, 998 { 0xdfe8, 0, _sti | _plus_r, 0 }, 999 { 0xdfe9, 0, 0, 0 }, 1000 { ASM_END } 1001 ]; 1002 1003 PTRNTAB1[5] aptb1FCOMP = /* FCOMP */ [ 1004 { 0xd8, _3, _m32 }, 1005 { 0xdc, _3, _fm64 }, 1006 { 0xd8d8, 0, _sti | _plus_r }, 1007 { 0xd8d9, 0, 0 }, 1008 { ASM_END } 1009 ]; 1010 PTRNTAB1[2] aptb1FFREE = /* FFREE */ [ 1011 { 0xddc0, 0, _sti | _plus_r }, 1012 { ASM_END } 1013 ]; 1014 PTRNTAB1[3] aptb1FICOM = /* FICOM */ [ 1015 { 0xde, _2, _m16 }, 1016 { 0xda, _2, _m32 }, 1017 { ASM_END } 1018 ]; 1019 PTRNTAB1[3] aptb1FICOMP = /* FICOMP */ [ 1020 { 0xde, _3, _m16 }, 1021 { 0xda, _3, _m32 }, 1022 { ASM_END } 1023 ]; 1024 PTRNTAB1[4] aptb1FILD = /* FILD */ [ 1025 { 0xdf, _0, _m16 }, 1026 { 0xdb, _0, _m32 }, 1027 { 0xdf, _5, _fm64 }, 1028 { ASM_END } 1029 ]; 1030 PTRNTAB1[3] aptb1FIST = /* FIST */ [ 1031 { 0xdf, _2, _m16 }, 1032 { 0xdb, _2, _m32 }, 1033 { ASM_END } 1034 ]; 1035 PTRNTAB1[4] aptb1FISTP = /* FISTP */ [ 1036 { 0xdf, _3, _m16 }, 1037 { 0xdb, _3, _m32 }, 1038 { 0xdf, _7, _fm64 }, 1039 { ASM_END } 1040 ]; 1041 PTRNTAB1[5] aptb1FLD = /* FLD */ [ 1042 { 0xd9, _0, _m32 }, 1043 { 0xdd, _0, _fm64 }, 1044 { 0xdb, _5, _fm80 }, 1045 { 0xd9c0, 0, _sti | _plus_r }, 1046 { ASM_END } 1047 ]; 1048 PTRNTAB1[2] aptb1FLDCW = /* FLDCW */ [ 1049 { 0xd9, _5, _m16 }, 1050 { ASM_END } 1051 ]; 1052 PTRNTAB1[2] aptb1FLDENV = /* FLDENV */ [ 1053 { 0xd9, _4, _m112 | _m224 }, 1054 { ASM_END } 1055 ]; 1056 PTRNTAB1[2] aptb1FRSTOR = /* FRSTOR */ [ 1057 { 0xdd, _4, _m112 | _m224 }, 1058 { ASM_END } 1059 ]; 1060 PTRNTAB1[2] aptb1FSAVE = /* FSAVE */ [ 1061 { 0xdd, _6 | _fwait, _m112 | _m224 }, 1062 { ASM_END } 1063 ]; 1064 PTRNTAB1[2] aptb1FNSAVE = /* FNSAVE */ [ 1065 { 0xdd, _6 | _nfwait, _m112 | _m224 }, 1066 { ASM_END } 1067 ]; 1068 PTRNTAB1[4] aptb1FST = /* FST */ [ 1069 { 0xd9, _2, _m32 }, 1070 { 0xdd, _2, _fm64 }, 1071 { 0xddd0, 0, _sti | _plus_r }, 1072 { ASM_END } 1073 ]; 1074 1075 PTRNTAB1[5] aptb1FSTP = /* FSTP */ [ 1076 { 0xd9, _3, _m32 }, 1077 { 0xdd, _3, _fm64 }, 1078 { 0xdb, _7, _fm80 }, 1079 { 0xddd8, 0, _sti | _plus_r }, 1080 { ASM_END } 1081 ]; 1082 PTRNTAB1[2] aptb1FSTCW = /* FSTCW */ [ 1083 { 0xd9, _7 | _fwait , _m16 }, 1084 { ASM_END } 1085 ]; 1086 PTRNTAB1[2] aptb1FNSTCW = /* FNSTCW */ [ 1087 { 0xd9, _7 | _nfwait , _m16 }, 1088 { ASM_END } 1089 ]; 1090 PTRNTAB1[2] aptb1FSTENV = /* FSTENV */ [ 1091 { 0xd9, _6 | _fwait, _m112 | _m224 }, 1092 { ASM_END } 1093 ]; 1094 PTRNTAB1[2] aptb1FNSTENV = /* FNSTENV */ [ 1095 { 0xd9, _6 | _nfwait, _m112 | _m224 }, 1096 { ASM_END } 1097 ]; 1098 PTRNTAB1[3] aptb1FSTSW = /* FSTSW */ [ 1099 { 0xdd, _7 | _fwait, _m16 }, 1100 { 0xdfe0, _fwait | _modax, _ax }, 1101 { ASM_END } 1102 ]; 1103 PTRNTAB1[3] aptb1FNSTSW = /* FNSTSW */ [ 1104 { 0xdd, _7 | _nfwait, _m16 }, 1105 { 0xdfe0, _nfwait | _modax, _ax }, 1106 { ASM_END } 1107 ]; 1108 PTRNTAB1[3] aptb1FUCOM = /* FUCOM */ [ 1109 { 0xdde0, 0, _sti | _plus_r }, 1110 { 0xdde1, 0, 0 }, 1111 { ASM_END } 1112 ]; 1113 PTRNTAB1[3] aptb1FUCOMP = /* FUCOMP */ [ 1114 { 0xdde8, 0, _sti | _plus_r }, 1115 { 0xdde9, 0, 0 }, 1116 { ASM_END } 1117 ]; 1118 PTRNTAB1[3] aptb1FXCH = /* FXCH */ [ 1119 { 0xd9c8, 0, _sti | _plus_r }, 1120 { 0xd9c9, 0, 0 }, 1121 { ASM_END } 1122 ]; 1123 // 1124 // Floating point instructions which have entirely different flag 1125 // interpretations but they overlap, only asm_determine_operator 1126 // flags needs to know the difference 1127 // 2 operand floating point instructions follow 1128 // 1129 PTRNTAB2[6] aptb2FADD = /* FADD */ [ 1130 { 0xd8, _0, _m32, 0 }, 1131 { 0xdc, _0, _fm64, 0 }, 1132 { 0xd8c0, 0, _st, _sti | _plus_r }, 1133 { 0xdcc0, 0, _sti | _plus_r, _st }, 1134 { 0xdec1, 0, 0, 0 }, 1135 { ASM_END } 1136 ]; 1137 1138 PTRNTAB2[3] aptb2FADDP = /* FADDP */ [ 1139 { 0xdec0, 0, _sti | _plus_r, _st }, 1140 { 0xdec1, 0, 0, 0 }, 1141 { ASM_END } 1142 ]; 1143 PTRNTAB2[3] aptb2FIADD = /* FIADD */ [ 1144 { 0xda, _0, _m32, 0 }, 1145 { 0xde, _0, _m16, 0 }, 1146 { ASM_END } 1147 ]; 1148 PTRNTAB2[6] aptb2FDIV = /* FDIV */ [ 1149 { 0xd8, _6, _m32, 0 }, 1150 { 0xdc, _6, _fm64, 0 }, 1151 { 0xd8f0, 0, _st, _sti | _plus_r }, 1152 { 0xdcf8, 0, _sti | _plus_r, _st }, 1153 { 0xdef9, 0, 0, 0 }, 1154 { ASM_END } 1155 ]; 1156 PTRNTAB2[3] aptb2FDIVP = /* FDIVP */ [ 1157 { 0xdef9, 0, 0, 0 }, 1158 { 0xdef8, 0, _sti | _plus_r, _st }, 1159 { ASM_END } 1160 ]; 1161 PTRNTAB2[3] aptb2FIDIV = /* FIDIV */ [ 1162 { 0xda, _6, _m32, 0 }, 1163 { 0xde, _6, _m16, 0 }, 1164 { ASM_END } 1165 ]; 1166 PTRNTAB2[6] aptb2FDIVR = /* FDIVR */ [ 1167 { 0xd8, _7, _m32, 0 }, 1168 { 0xdc, _7, _fm64, 0 }, 1169 { 0xd8f8, 0, _st, _sti | _plus_r }, 1170 { 0xdcf0, 0, _sti | _plus_r, _st }, 1171 { 0xdef1, 0, 0, 0 }, 1172 { ASM_END } 1173 ]; 1174 PTRNTAB2[3] aptb2FDIVRP = /* FDIVRP */ [ 1175 { 0xdef1, 0, 0, 0 }, 1176 { 0xdef0, 0, _sti | _plus_r, _st }, 1177 { ASM_END } 1178 ]; 1179 PTRNTAB2[3] aptb2FIDIVR = /* FIDIVR */ [ 1180 { 0xda, _7, _m32, 0 }, 1181 { 0xde, _7, _m16, 0 }, 1182 { ASM_END } 1183 ]; 1184 PTRNTAB2[6] aptb2FMUL = /* FMUL */ [ 1185 { 0xd8, _1, _m32, 0 }, 1186 { 0xdc, _1, _fm64, 0 }, 1187 { 0xd8c8, 0, _st, _sti | _plus_r }, 1188 { 0xdcc8, 0, _sti | _plus_r, _st }, 1189 { 0xdec9, 0, 0, 0 }, 1190 { ASM_END } 1191 ]; 1192 PTRNTAB2[3] aptb2FMULP = /* FMULP */ [ 1193 { 0xdec8, 0, _sti | _plus_r, _st }, 1194 { 0xdec9, 0, 0, 0 }, 1195 { ASM_END } 1196 ]; 1197 PTRNTAB2[3] aptb2FIMUL = /* FIMUL */ [ 1198 { 0xda, _1, _m32, 0 }, 1199 { 0xde, _1, _m16, 0 }, 1200 { ASM_END } 1201 ]; 1202 PTRNTAB2[6] aptb2FSUB = /* FSUB */ [ 1203 { 0xd8, _4, _m32, 0 }, 1204 { 0xdc, _4, _fm64, 0 }, 1205 { 0xd8e0, 0, _st, _sti | _plus_r }, 1206 { 0xdce8, 0, _sti | _plus_r, _st }, 1207 { 0xdee9, 0, 0, 0 }, 1208 { ASM_END } 1209 ]; 1210 PTRNTAB2[3] aptb2FSUBP = /* FSUBP */ [ 1211 { 0xdee8, 0, _sti | _plus_r, _st }, 1212 { 0xdee9, 0, 0, 0 }, 1213 { ASM_END } 1214 ]; 1215 PTRNTAB2[3] aptb2FISUB = /* FISUB */ [ 1216 { 0xda, _4, _m32, 0 }, 1217 { 0xde, _4, _m16, 0 }, 1218 { ASM_END } 1219 ]; 1220 PTRNTAB2[6] aptb2FSUBR = /* FSUBR */ [ 1221 { 0xd8, _5, _m32, 0 }, 1222 { 0xdc, _5, _fm64, 0 }, 1223 { 0xd8e8, 0, _st, _sti | _plus_r }, 1224 { 0xdce0, 0, _sti | _plus_r, _st }, 1225 { 0xdee1, 0, 0, 0 }, 1226 { ASM_END } 1227 ]; 1228 PTRNTAB2[3] aptb2FSUBRP = /* FSUBRP */ [ 1229 { 0xdee0, 0, _sti | _plus_r, _st }, 1230 { 0xdee1, 0, 0, 0 }, 1231 { ASM_END } 1232 ]; 1233 PTRNTAB2[3] aptb2FISUBR = /* FISUBR */ [ 1234 { 0xda, _5, _m32, 0 }, 1235 { 0xde, _5, _m16, 0 }, 1236 { ASM_END } 1237 ]; 1238 1239 ///////////////////////////// MMX Extensions ///////////////////////// 1240 1241 PTRNTAB0[1] aptb0EMMS = /* EMMS */ [ 1242 { 0x0F77, 0 } 1243 ]; 1244 1245 PTRNTAB2[5] aptb2MOVD = /* MOVD */ [ 1246 { 0x0F6E,_r,_mm,_rm32 }, 1247 { 0x0F7E,_r,_rm32,_mm }, 1248 { LODD,_r,_xmm,_rm32 }, 1249 { STOD,_r,_rm32,_xmm }, 1250 { ASM_END } 1251 ]; 1252 1253 PTRNTAB2[3] aptb2VMOVD = /* VMOVD */ [ 1254 { VEX_128_WIG(LODD), _r, _xmm, _rm32 }, 1255 { VEX_128_WIG(STOD), _r, _rm32, _xmm }, 1256 { ASM_END } 1257 ]; 1258 1259 PTRNTAB2[9] aptb2MOVQ = /* MOVQ */ [ 1260 { 0x0F6F,_r,_mm,_mmm64 }, 1261 { 0x0F7F,_r,_mmm64,_mm }, 1262 { LODQ,_r,_xmm,_xmm_m64 }, 1263 { STOQ,_r,_xmm_m64,_xmm }, 1264 { 0x0F6E, _r|_64_bit,_mm, _rm64 }, 1265 { 0x0F7E, _r|_64_bit,_rm64,_mm }, 1266 { LODD,_r|_64_bit,_xmm, _rm64 }, 1267 { STOD,_r|_64_bit,_rm64,_xmm }, 1268 { ASM_END } 1269 ]; 1270 1271 PTRNTAB2[3] aptb2VMOVQ = /* VMOVQ */ [ 1272 { VEX_128_W1(LODD), _r, _xmm, _rm64 }, 1273 { VEX_128_W1(STOD), _r, _rm64, _xmm }, 1274 { ASM_END } 1275 ]; 1276 1277 PTRNTAB2[3] aptb2PACKSSDW = /* PACKSSDW */ [ 1278 { 0x0F6B, _r,_mm,_mmm64 }, 1279 { PACKSSDW, _r,_xmm,_xmm_m128 }, 1280 { ASM_END } 1281 ]; 1282 1283 PTRNTAB3[2] aptb3VPACKSSDW = /* VPACKSSDW */ [ 1284 { VEX_NDS_128_WIG(PACKSSDW), _r,_xmm,_xmm,_xmm_m128 }, 1285 { ASM_END } 1286 ]; 1287 1288 PTRNTAB2[3] aptb2PACKSSWB = /* PACKSSWB */ [ 1289 { 0x0F63, _r,_mm,_mmm64 }, 1290 { PACKSSWB, _r,_xmm,_xmm_m128 }, 1291 { ASM_END } 1292 ]; 1293 1294 PTRNTAB3[2] aptb3VPACKSSWB = /* VPACKSSWB */ [ 1295 { VEX_NDS_128_WIG(PACKSSWB), _r,_xmm,_xmm,_xmm_m128 }, 1296 { ASM_END } 1297 ]; 1298 1299 PTRNTAB2[3] aptb2PACKUSWB = /* PACKUSWB */ [ 1300 { 0x0F67, _r,_mm,_mmm64 }, 1301 { PACKUSWB, _r,_xmm,_xmm_m128 }, 1302 { ASM_END } 1303 ]; 1304 1305 PTRNTAB3[2] aptb3VPACKUSWB = /* VPACKUSWB */ [ 1306 { VEX_NDS_128_WIG(PACKUSWB), _r,_xmm,_xmm,_xmm_m128 }, 1307 { ASM_END } 1308 ]; 1309 1310 PTRNTAB2[3] aptb2PADDB = /* PADDB */ [ 1311 { 0x0FFC, _r,_mm,_mmm64 }, 1312 { PADDB, _r,_xmm,_xmm_m128 }, 1313 { ASM_END } 1314 ]; 1315 1316 PTRNTAB3[2] aptb3VPADDB = /* VPADDB */ [ 1317 { VEX_NDS_128_WIG(PADDB), _r, _xmm, _xmm, _xmm_m128 }, 1318 { ASM_END } 1319 ]; 1320 1321 PTRNTAB2[3] aptb2PADDD = /* PADDD */ [ 1322 { 0x0FFE, _r,_mm,_mmm64 }, 1323 { PADDD, _r,_xmm,_xmm_m128 }, 1324 { ASM_END } 1325 ]; 1326 1327 PTRNTAB3[2] aptb3VPADDD = /* VPADDD */ [ 1328 { VEX_NDS_128_WIG(PADDD), _r, _xmm, _xmm, _xmm_m128 }, 1329 { ASM_END } 1330 ]; 1331 1332 PTRNTAB2[3] aptb2PADDSB = /* PADDSB */ [ 1333 { 0x0FEC, _r,_mm,_mmm64 }, 1334 { PADDSB, _r,_xmm,_xmm_m128 }, 1335 { ASM_END } 1336 ]; 1337 1338 PTRNTAB3[2] aptb3VPADDSB = /* VPADDSB */ [ 1339 { VEX_NDS_128_WIG(PADDSB), _r, _xmm, _xmm, _xmm_m128 }, 1340 { ASM_END } 1341 ]; 1342 1343 PTRNTAB2[3] aptb2PADDSW = /* PADDSW */ [ 1344 { 0x0FED, _r,_mm,_mmm64 }, 1345 { PADDSW, _r,_xmm,_xmm_m128 }, 1346 { ASM_END } 1347 ]; 1348 1349 PTRNTAB3[2] aptb3VPADDSW = /* VPADDSW */ [ 1350 { VEX_NDS_128_WIG(PADDSW), _r, _xmm, _xmm, _xmm_m128 }, 1351 { ASM_END } 1352 ]; 1353 1354 PTRNTAB2[3] aptb2PADDUSB = /* PADDUSB */ [ 1355 { 0x0FDC, _r,_mm,_mmm64 }, 1356 { PADDUSB, _r,_xmm,_xmm_m128 }, 1357 { ASM_END } 1358 ]; 1359 1360 PTRNTAB3[2] aptb3VPADDUSB = /* VPADDUSB */ [ 1361 { VEX_NDS_128_WIG(PADDUSB), _r, _xmm, _xmm, _xmm_m128 }, 1362 { ASM_END } 1363 ]; 1364 1365 PTRNTAB2[3] aptb2PADDUSW = /* PADDUSW */ [ 1366 { 0x0FDD, _r,_mm,_mmm64 }, 1367 { PADDUSW, _r,_xmm,_xmm_m128 }, 1368 { ASM_END } 1369 ]; 1370 1371 PTRNTAB3[2] aptb3VPADDUSW = /* VPADDUSW */ [ 1372 { VEX_NDS_128_WIG(PADDUSW), _r, _xmm, _xmm, _xmm_m128 }, 1373 { ASM_END } 1374 ]; 1375 1376 PTRNTAB2[3] aptb2PADDW = /* PADDW */ [ 1377 { 0x0FFD, _r,_mm,_mmm64 }, 1378 { PADDW, _r,_xmm,_xmm_m128 }, 1379 { ASM_END } 1380 ]; 1381 1382 PTRNTAB3[2] aptb3VPADDW = /* VPADDW */ [ 1383 { VEX_NDS_128_WIG(PADDW), _r, _xmm, _xmm, _xmm_m128 }, 1384 { ASM_END } 1385 ]; 1386 1387 PTRNTAB2[3] aptb2PAND = /* PAND */ [ 1388 { 0x0FDB, _r,_mm,_mmm64 }, 1389 { PAND, _r,_xmm,_xmm_m128 }, 1390 { ASM_END } 1391 ]; 1392 1393 PTRNTAB3[2] aptb3VPAND = /* VPAND */ [ 1394 { VEX_NDS_128_WIG(PAND), _r,_xmm,_xmm,_xmm_m128 }, 1395 { ASM_END } 1396 ]; 1397 1398 PTRNTAB2[3] aptb2PANDN = /* PANDN */ [ 1399 { 0x0FDF, _r,_mm,_mmm64 }, 1400 { PANDN, _r,_xmm,_xmm_m128 }, 1401 { ASM_END } 1402 ]; 1403 1404 PTRNTAB3[2] aptb3VPANDN = /* VPANDN */ [ 1405 { VEX_NDS_128_WIG(PANDN), _r,_xmm,_xmm,_xmm_m128 }, 1406 { ASM_END } 1407 ]; 1408 1409 PTRNTAB2[3] aptb2PCMPEQB = /* PCMPEQB */ [ 1410 { 0x0F74, _r,_mm,_mmm64 }, 1411 { PCMPEQB, _r,_xmm,_xmm_m128 }, 1412 { ASM_END } 1413 ]; 1414 1415 PTRNTAB3[2] aptb3VPCMPEQB = /* VPCMPEQB */ [ 1416 { VEX_NDS_128_WIG(PCMPEQB), _r, _xmm, _xmm, _xmm_m128 }, 1417 { ASM_END } 1418 ]; 1419 1420 PTRNTAB2[3] aptb2PCMPEQD = /* PCMPEQD */ [ 1421 { 0x0F76, _r,_mm,_mmm64 }, 1422 { PCMPEQD, _r,_xmm,_xmm_m128 }, 1423 { ASM_END } 1424 ]; 1425 1426 PTRNTAB3[2] aptb3VPCMPEQD = /* VPCMPEQD */ [ 1427 { VEX_NDS_128_WIG(PCMPEQD), _r, _xmm, _xmm, _xmm_m128 }, 1428 { ASM_END } 1429 ]; 1430 1431 PTRNTAB2[3] aptb2PCMPEQW = /* PCMPEQW */ [ 1432 { 0x0F75, _r,_mm,_mmm64 }, 1433 { PCMPEQW, _r,_xmm,_xmm_m128 }, 1434 { ASM_END } 1435 ]; 1436 1437 PTRNTAB3[2] aptb3VPCMPEQW = /* VPCMPEQW */ [ 1438 { VEX_NDS_128_WIG(PCMPEQW), _r, _xmm, _xmm, _xmm_m128 }, 1439 { ASM_END } 1440 ]; 1441 1442 PTRNTAB2[3] aptb2PCMPGTB = /* PCMPGTB */ [ 1443 { 0x0F64, _r,_mm,_mmm64 }, 1444 { PCMPGTB, _r,_xmm,_xmm_m128 }, 1445 { ASM_END } 1446 ]; 1447 1448 PTRNTAB3[2] aptb3VPCMPGTB = /* VPCMPGTB */ [ 1449 { VEX_NDS_128_WIG(PCMPGTB), _r, _xmm, _xmm, _xmm_m128 }, 1450 { ASM_END } 1451 ]; 1452 1453 PTRNTAB2[3] aptb2PCMPGTD = /* PCMPGTD */ [ 1454 { 0x0F66, _r,_mm,_mmm64 }, 1455 { PCMPGTD, _r,_xmm,_xmm_m128 }, 1456 { ASM_END } 1457 ]; 1458 1459 PTRNTAB3[2] aptb3VPCMPGTD = /* VPCMPGTD */ [ 1460 { VEX_NDS_128_WIG(PCMPGTD), _r, _xmm, _xmm, _xmm_m128 }, 1461 { ASM_END } 1462 ]; 1463 1464 PTRNTAB2[3] aptb2PCMPGTW = /* PCMPGTW */ [ 1465 { 0x0F65, _r,_mm,_mmm64 }, 1466 { PCMPGTW, _r,_xmm,_xmm_m128 }, 1467 { ASM_END } 1468 ]; 1469 1470 PTRNTAB3[2] aptb3VPCMPGTW = /* VPCMPGTW */ [ 1471 { VEX_NDS_128_WIG(PCMPGTW), _r, _xmm, _xmm, _xmm_m128 }, 1472 { ASM_END } 1473 ]; 1474 1475 PTRNTAB2[3] aptb2PMADDWD = /* PMADDWD */ [ 1476 { 0x0FF5, _r,_mm,_mmm64 }, 1477 { PMADDWD, _r,_xmm,_xmm_m128 }, 1478 { ASM_END } 1479 ]; 1480 1481 PTRNTAB3[2] aptb3VPMADDWD = /* VPMADDWD */ [ 1482 { VEX_NDS_128_WIG(PMADDWD), _r, _xmm, _xmm, _xmm_m128 }, 1483 { ASM_END } 1484 ]; 1485 1486 PTRNTAB2[5] aptb2PSLLW = /* PSLLW */ [ 1487 { 0x0FF1, _r,_mm,_mmm64 }, 1488 { 0x0F71, _6,_mm,_imm8 }, 1489 { PSLLW, _r,_xmm,_xmm_m128 }, 1490 { 0x660F71, _6,_xmm,_imm8 }, 1491 { ASM_END } 1492 ]; 1493 1494 PTRNTAB3[3] aptb3VPSLLW = /* VPSLLW */ [ 1495 { VEX_NDS_128_WIG(PSLLW), _r, _xmm, _xmm, _xmm_m128 }, 1496 { VEX_NDD_128_WIG(0x660F71), _6, _xmm, _xmm, _imm8 }, 1497 { ASM_END } 1498 ]; 1499 1500 PTRNTAB2[5] aptb2PSLLD = /* PSLLD */ [ 1501 { 0x0FF2, _r,_mm,_mmm64 }, 1502 { 0x0F72, _6,_mm,_imm8 }, 1503 { PSLLD, _r,_xmm,_xmm_m128 }, 1504 { 0x660F72, _6,_xmm,_imm8 }, 1505 { ASM_END } 1506 ]; 1507 1508 PTRNTAB3[3] aptb3VPSLLD = /* VPSLLD */ [ 1509 { VEX_NDS_128_WIG(PSLLD), _r, _xmm, _xmm, _xmm_m128 }, 1510 { VEX_NDD_128_WIG(0x660F72), _6, _xmm, _xmm, _imm8 }, 1511 { ASM_END } 1512 ]; 1513 1514 PTRNTAB2[5] aptb2PSLLQ = /* PSLLQ */ [ 1515 { 0x0FF3, _r,_mm,_mmm64 }, 1516 { 0x0F73, _6,_mm,_imm8 }, 1517 { PSLLQ, _r,_xmm,_xmm_m128 }, 1518 { PSLLDQ & 0xFFFFFF, _6,_xmm,_imm8 }, 1519 { ASM_END } 1520 ]; 1521 1522 PTRNTAB3[3] aptb3VPSLLQ = /* VPSLLQ */ [ 1523 { VEX_NDS_128_WIG(PSLLQ), _r, _xmm, _xmm, _xmm_m128 }, 1524 { VEX_NDD_128_WIG((PSLLDQ & 0xFFFFFF)), _6, _xmm, _xmm, _imm8 }, 1525 { ASM_END } 1526 ]; 1527 1528 PTRNTAB2[5] aptb2PSRAW = /* PSRAW */ [ 1529 { 0x0FE1, _r,_mm,_mmm64 }, 1530 { 0x0F71, _4,_mm,_imm8 }, 1531 { PSRAW, _r,_xmm,_xmm_m128 }, 1532 { 0x660F71, _4,_xmm,_imm8 }, 1533 { ASM_END } 1534 ]; 1535 1536 PTRNTAB3[3] aptb3VPSRAW = /* VPSRAW */ [ 1537 { VEX_NDS_128_WIG(PSRAW), _r, _xmm, _xmm, _xmm_m128 }, 1538 { VEX_NDD_128_WIG(0x660F71), _4, _xmm, _xmm, _imm8 }, 1539 { ASM_END } 1540 ]; 1541 1542 PTRNTAB2[5] aptb2PSRAD = /* PSRAD */ [ 1543 { 0x0FE2, _r,_mm,_mmm64 }, 1544 { 0x0F72, _4,_mm,_imm8 }, 1545 { PSRAD, _r,_xmm,_xmm_m128 }, 1546 { 0x660F72, _4,_xmm,_imm8 }, 1547 { ASM_END } 1548 ]; 1549 1550 PTRNTAB3[3] aptb3VPSRAD = /* VPSRAD */ [ 1551 { VEX_NDS_128_WIG(PSRAD), _r, _xmm, _xmm, _xmm_m128 }, 1552 { VEX_NDD_128_WIG(0x660F72), _4, _xmm, _xmm, _imm8 }, 1553 { ASM_END } 1554 ]; 1555 1556 PTRNTAB2[5] aptb2PSRLW = /* PSRLW */ [ 1557 { 0x0FD1, _r,_mm,_mmm64 }, 1558 { 0x0F71, _2,_mm,_imm8 }, 1559 { PSRLW, _r,_xmm,_xmm_m128 }, 1560 { 0x660F71, _2,_xmm,_imm8 }, 1561 { ASM_END } 1562 ]; 1563 1564 PTRNTAB3[3] aptb3VPSRLW = /* VPSRLW */ [ 1565 { VEX_NDS_128_WIG(PSRLW), _r, _xmm, _xmm, _xmm_m128 }, 1566 { VEX_NDD_128_WIG(0x660F71), _2, _xmm, _xmm, _imm8 }, 1567 { ASM_END } 1568 ]; 1569 1570 PTRNTAB2[5] aptb2PSRLD = /* PSRLD */ [ 1571 { 0x0FD2, _r,_mm,_mmm64 }, 1572 { 0x0F72, _2,_mm,_imm8 }, 1573 { PSRLD, _r,_xmm,_xmm_m128 }, 1574 { 0x660F72, _2,_xmm,_imm8 }, 1575 { ASM_END } 1576 ]; 1577 1578 PTRNTAB3[3] aptb3VPSRLD = /* VPSRLD */ [ 1579 { VEX_NDS_128_WIG(PSRLD), _r, _xmm, _xmm, _xmm_m128 }, 1580 { VEX_NDD_128_WIG(0x660F72), _2, _xmm, _xmm, _imm8 }, 1581 { ASM_END } 1582 ]; 1583 1584 PTRNTAB2[5] aptb2PSRLQ = /* PSRLQ */ [ 1585 { 0x0FD3, _r,_mm,_mmm64 }, 1586 { 0x0F73, _2,_mm,_imm8 }, 1587 { PSRLQ, _r,_xmm,_xmm_m128 }, 1588 { (PSLLDQ & 0xFFFFFF), _2,_xmm,_imm8 }, 1589 { ASM_END } 1590 ]; 1591 1592 PTRNTAB3[3] aptb3VPSRLQ = /* VPSRLQ */ [ 1593 { VEX_NDS_128_WIG(PSRLQ), _r, _xmm, _xmm, _xmm_m128 }, 1594 { VEX_NDD_128_WIG((PSLLDQ & 0xFFFFFF)), _2, _xmm, _xmm, _imm8 }, 1595 { ASM_END } 1596 ]; 1597 1598 PTRNTAB2[3] aptb2PSUBB = /* PSUBB */ [ 1599 { 0x0FF8, _r,_mm,_mmm64 }, 1600 { PSUBB, _r,_xmm,_xmm_m128 }, 1601 { ASM_END } 1602 ]; 1603 1604 PTRNTAB3[2] aptb3VPSUBB = /* VPSUBB */ [ 1605 { VEX_NDS_128_WIG(PSUBB), _r, _xmm, _xmm, _xmm_m128 }, 1606 { ASM_END } 1607 ]; 1608 1609 PTRNTAB2[3] aptb2PSUBD = /* PSUBD */ [ 1610 { 0x0FFA, _r,_mm,_mmm64 }, 1611 { PSUBD, _r,_xmm,_xmm_m128 }, 1612 { ASM_END } 1613 ]; 1614 1615 PTRNTAB3[2] aptb3VPSUBD = /* VPSUBD */ [ 1616 { VEX_NDS_128_WIG(PSUBD), _r, _xmm, _xmm, _xmm_m128 }, 1617 { ASM_END } 1618 ]; 1619 1620 PTRNTAB2[3] aptb2PSUBSB = /* PSUBSB */ [ 1621 { 0x0FE8, _r,_mm,_mmm64 }, 1622 { PSUBSB, _r,_xmm,_xmm_m128 }, 1623 { ASM_END } 1624 ]; 1625 1626 PTRNTAB3[2] aptb3VPSUBSB = /* VPSUBSB */ [ 1627 { VEX_NDS_128_WIG(PSUBSB), _r, _xmm, _xmm, _xmm_m128 }, 1628 { ASM_END } 1629 ]; 1630 1631 PTRNTAB2[3] aptb2PSUBSW = /* PSUBSW */ [ 1632 { 0x0FE9, _r,_mm,_mmm64 }, 1633 { PSUBSW, _r,_xmm,_xmm_m128 }, 1634 { ASM_END } 1635 ]; 1636 1637 PTRNTAB3[2] aptb3VPSUBSW = /* VPSUBSW */ [ 1638 { VEX_NDS_128_WIG(PSUBSW), _r, _xmm, _xmm, _xmm_m128 }, 1639 { ASM_END } 1640 ]; 1641 1642 PTRNTAB2[3] aptb2PSUBUSB = /* PSUBUSB */ [ 1643 { 0x0FD8, _r,_mm,_mmm64 }, 1644 { PSUBUSB, _r,_xmm,_xmm_m128 }, 1645 { ASM_END } 1646 ]; 1647 1648 PTRNTAB3[2] aptb3VPSUBUSB = /* VPSUBUSB */ [ 1649 { VEX_NDS_128_WIG(PSUBUSB), _r, _xmm, _xmm, _xmm_m128 }, 1650 { ASM_END } 1651 ]; 1652 1653 PTRNTAB2[3] aptb2PSUBUSW = /* PSUBUSW */ [ 1654 { 0x0FD9, _r,_mm,_mmm64 }, 1655 { PSUBUSW, _r,_xmm,_xmm_m128 }, 1656 { ASM_END } 1657 ]; 1658 1659 PTRNTAB3[2] aptb3VPSUBUSW = /* VPSUBUSW */ [ 1660 { VEX_NDS_128_WIG(PSUBUSW), _r, _xmm, _xmm, _xmm_m128 }, 1661 { ASM_END } 1662 ]; 1663 1664 1665 PTRNTAB2[3] aptb2PSUBW = /* PSUBW */ [ 1666 { 0x0FF9, _r,_mm,_mmm64 }, 1667 { PSUBW, _r,_xmm,_xmm_m128 }, 1668 { ASM_END } 1669 ]; 1670 1671 PTRNTAB3[2] aptb3VPSUBW = /* VPSUBW */ [ 1672 { VEX_NDS_128_WIG(PSUBW), _r, _xmm, _xmm, _xmm_m128 }, 1673 { ASM_END } 1674 ]; 1675 1676 PTRNTAB2[3] aptb2PUNPCKHBW = /* PUNPCKHBW */ [ 1677 { 0x0F68, _r,_mm,_mmm64 }, 1678 { PUNPCKHBW, _r,_xmm,_xmm_m128 }, 1679 { ASM_END } 1680 ]; 1681 1682 PTRNTAB3[2] aptb3VPUNPCKHBW = /* VPUNPCKHBW */ [ 1683 { VEX_NDS_128_WIG(PUNPCKHBW), _r,_xmm,_xmm,_xmm_m128 }, 1684 { ASM_END } 1685 ]; 1686 1687 PTRNTAB2[3] aptb2PUNPCKHDQ = /* PUNPCKHDQ */ [ 1688 { 0x0F6A, _r,_mm,_mmm64 }, 1689 { PUNPCKHDQ, _r,_xmm,_xmm_m128 }, 1690 { ASM_END } 1691 ]; 1692 1693 PTRNTAB3[2] aptb3VPUNPCKHDQ = /* VPUNPCKHDQ */ [ 1694 { VEX_NDS_128_WIG(PUNPCKHDQ), _r,_xmm,_xmm,_xmm_m128 }, 1695 { ASM_END } 1696 ]; 1697 1698 PTRNTAB2[3] aptb2PUNPCKHWD = /* PUNPCKHWD */ [ 1699 { 0x0F69, _r,_mm,_mmm64 }, 1700 { PUNPCKHWD, _r,_xmm,_xmm_m128 }, 1701 { ASM_END } 1702 ]; 1703 1704 PTRNTAB3[2] aptb3VPUNPCKHWD = /* VPUNPCKHWD */ [ 1705 { VEX_NDS_128_WIG(PUNPCKHWD), _r,_xmm,_xmm,_xmm_m128 }, 1706 { ASM_END } 1707 ]; 1708 1709 PTRNTAB2[3] aptb2PUNPCKLBW = /* PUNPCKLBW */ [ 1710 { 0x0F60, _r,_mm,_mmm64 }, 1711 { PUNPCKLBW, _r,_xmm,_xmm_m128 }, 1712 { ASM_END } 1713 ]; 1714 1715 PTRNTAB3[2] aptb3VPUNPCKLBW = /* VPUNPCKLBW */ [ 1716 { VEX_NDS_128_WIG(PUNPCKLBW), _r,_xmm,_xmm,_xmm_m128 }, 1717 { ASM_END } 1718 ]; 1719 1720 PTRNTAB2[3] aptb2PUNPCKLDQ = /* PUNPCKLDQ */ [ 1721 { 0x0F62, _r,_mm,_mmm64 }, 1722 { PUNPCKLDQ, _r,_xmm,_xmm_m128 }, 1723 { ASM_END } 1724 ]; 1725 1726 PTRNTAB3[2] aptb3VPUNPCKLDQ = /* VPUNPCKLDQ */ [ 1727 { VEX_NDS_128_WIG(PUNPCKLDQ), _r,_xmm,_xmm,_xmm_m128 }, 1728 { ASM_END } 1729 ]; 1730 1731 PTRNTAB2[3] aptb2PUNPCKLWD = /* PUNPCKLWD */ [ 1732 { 0x0F61, _r,_mm,_mmm64 }, 1733 { PUNPCKLWD, _r,_xmm,_xmm_m128 }, 1734 { ASM_END } 1735 ]; 1736 1737 PTRNTAB3[2] aptb3VPUNPCKLWD = /* VPUNPCKLWD */ [ 1738 { VEX_NDS_128_WIG(PUNPCKLWD), _r,_xmm,_xmm,_xmm_m128 }, 1739 { ASM_END } 1740 ]; 1741 1742 PTRNTAB2[3] aptb2PXOR = /* PXOR */ [ 1743 { 0x0FEF, _r,_mm,_mmm64 }, 1744 { PXOR, _r,_xmm,_xmm_m128 }, 1745 { ASM_END } 1746 ]; 1747 1748 PTRNTAB3[2] aptb3VPXOR = /* VPXOR */ [ 1749 { VEX_NDS_128_WIG(PXOR), _r,_xmm,_xmm,_xmm_m128 }, 1750 { ASM_END } 1751 ]; 1752 1753 ////////////////////// New Opcodes ///////////////////////////// 1754 1755 PTRNTAB0[1] aptb0PAUSE = /* PAUSE */ [ 1756 { PAUSE, 0 } // same as REP NOP sequene 1757 ]; 1758 1759 PTRNTAB0[1] aptb0SYSCALL = /* SYSCALL */ [ 1760 { 0x0f05, _modcxr11 } 1761 ]; 1762 1763 PTRNTAB0[1] aptb0SYSRET = /* SYSRET */ [ 1764 { 0x0f07, 0 } 1765 ]; 1766 1767 PTRNTAB0[1] aptb0SYSENTER = /* SYSENTER */ [ 1768 { 0x0f34, 0 } 1769 ]; 1770 1771 PTRNTAB0[1] aptb0SYSEXIT = /* SYSEXIT */ [ 1772 { 0x0f35, 0 } 1773 ]; 1774 1775 PTRNTAB0[1] aptb0UD2 = /* UD2 */ [ 1776 { 0x0f0b, 0 } 1777 ]; 1778 1779 PTRNTAB0[1] aptb0LFENCE = /* LFENCE */ [ 1780 { 0x0FAEE8, 0 } 1781 ]; 1782 1783 PTRNTAB0[1] aptb0MFENCE = /* MFENCE */ [ 1784 { 0x0FAEF0, 0 } 1785 ]; 1786 1787 PTRNTAB0[1] aptb0SFENCE = /* SFENCE */ [ 1788 { 0x0FAEF8, 0 } 1789 ]; 1790 1791 PTRNTAB1[2] aptb1FXSAVE = /* FXSAVE */ [ 1792 { 0x0FAE, _0, _m512 }, 1793 { ASM_END } 1794 ]; 1795 1796 PTRNTAB1[2] aptb1FXRSTOR = /* FXRSTOR */ [ 1797 { 0x0FAE, _1, _m512 }, 1798 { ASM_END } 1799 ]; 1800 1801 PTRNTAB1[2] aptb1LDMXCSR = /* LDMXCSR */ [ 1802 { 0x0FAE, _2, _m32 }, 1803 { ASM_END } 1804 ]; 1805 1806 PTRNTAB1[2] aptb1VLDMXCSR = /* VLDMXCSR */ [ 1807 { VEX_128_WIG(0x0FAE), _2, _m32 }, 1808 { ASM_END } 1809 ]; 1810 1811 PTRNTAB1[2] aptb1STMXCSR = /* STMXCSR */ [ 1812 { 0x0FAE, _3, _m32 }, 1813 { ASM_END } 1814 ]; 1815 1816 PTRNTAB1[2] aptb1VSTMXCSR = /* VSTMXCSR */ [ 1817 { VEX_128_WIG(0x0FAE), _3, _m32 }, 1818 { ASM_END } 1819 ]; 1820 1821 PTRNTAB1[2] aptb1CLFLUSH = /* CLFLUSH */ [ 1822 { 0x0FAE, _7, _m8 }, 1823 { ASM_END } 1824 ]; 1825 1826 PTRNTAB2[2] aptb2ADDPS = /* ADDPS */ [ 1827 { ADDPS, _r,_xmm,_xmm_m128 }, 1828 { ASM_END } 1829 ]; 1830 1831 PTRNTAB3[3] aptb3VADDPS = /* VADDPS */ [ 1832 { VEX_NDS_128_WIG(ADDPS), _r, _xmm, _xmm, _xmm_m128, }, 1833 { VEX_NDS_256_WIG(ADDPS), _r, _ymm, _ymm, _ymm_m256, }, 1834 { ASM_END } 1835 ]; 1836 1837 PTRNTAB2[2] aptb2ADDPD = /* ADDPD */ [ 1838 { ADDPD, _r,_xmm,_xmm_m128 }, 1839 { ASM_END } 1840 ]; 1841 1842 PTRNTAB3[3] aptb3VADDPD = /* VADDPD */ [ 1843 { VEX_NDS_128_WIG(ADDPD), _r, _xmm, _xmm, _xmm_m128 }, 1844 { VEX_NDS_256_WIG(ADDPD), _r, _ymm, _ymm, _ymm_m256 }, 1845 { ASM_END } 1846 ]; 1847 1848 PTRNTAB2[2] aptb2ADDSD = /* ADDSD */ [ 1849 { ADDSD, _r,_xmm,_xmm_m64 }, 1850 { ASM_END } 1851 ]; 1852 1853 PTRNTAB3[2] aptb3VADDSD = /* VADDSD */ [ 1854 { VEX_NDS_128_WIG(ADDSD), _r, _xmm, _xmm, _xmm_m64, }, 1855 { ASM_END } 1856 ]; 1857 1858 PTRNTAB2[2] aptb2ADDSS = /* ADDSS */ [ 1859 { ADDSS, _r,_xmm,_xmm_m32 }, 1860 { ASM_END } 1861 ]; 1862 1863 PTRNTAB3[2] aptb3VADDSS = /* VADDSS */ [ 1864 { VEX_NDS_128_WIG(ADDSS), _r, _xmm, _xmm, _xmm_m32, }, 1865 { ASM_END } 1866 ]; 1867 1868 PTRNTAB2[2] aptb2ANDPD = /* ANDPD */ [ 1869 { ANDPD, _r,_xmm,_xmm_m128 }, 1870 { ASM_END } 1871 ]; 1872 1873 PTRNTAB3[3] aptb3VANDPD = /* VANDPD */ [ 1874 { VEX_NDS_128_WIG(ANDPD), _r,_xmm,_xmm,_xmm_m128 }, 1875 { VEX_NDS_256_WIG(ANDPD), _r,_ymm,_ymm,_ymm_m256 }, 1876 { ASM_END } 1877 ]; 1878 1879 PTRNTAB2[2] aptb2ANDPS = /* ANDPS */ [ 1880 { ANDPS, _r,_xmm,_xmm_m128 }, 1881 { ASM_END } 1882 ]; 1883 1884 PTRNTAB3[3] aptb3VANDPS = /* VANDPS */ [ 1885 { VEX_NDS_128_WIG(ANDPS), _r,_xmm,_xmm,_xmm_m128 }, 1886 { VEX_NDS_256_WIG(ANDPS), _r,_ymm,_ymm,_ymm_m256 }, 1887 { ASM_END } 1888 ]; 1889 1890 PTRNTAB2[2] aptb2ANDNPD = /* ANDNPD */ [ 1891 { ANDNPD, _r,_xmm,_xmm_m128 }, 1892 { ASM_END } 1893 ]; 1894 1895 PTRNTAB3[3] aptb3VANDNPD = /* VANDNPD */ [ 1896 { VEX_NDS_128_WIG(ANDNPD), _r,_xmm,_xmm,_xmm_m128 }, 1897 { VEX_NDS_256_WIG(ANDNPD), _r,_ymm,_ymm,_ymm_m256 }, 1898 { ASM_END } 1899 ]; 1900 1901 PTRNTAB2[2] aptb2ANDNPS = /* ANDNPS */ [ 1902 { ANDNPS, _r,_xmm,_xmm_m128 }, 1903 { ASM_END } 1904 ]; 1905 1906 PTRNTAB3[3] aptb3VANDNPS = /* VANDNPS */ [ 1907 { VEX_NDS_128_WIG(ANDNPS), _r,_xmm,_xmm,_xmm_m128 }, 1908 { VEX_NDS_256_WIG(ANDNPS), _r,_ymm,_ymm,_ymm_m256 }, 1909 { ASM_END } 1910 ]; 1911 1912 PTRNTAB3[2] aptb3CMPPS = /* CMPPS */ [ 1913 { CMPPS, _r,_xmm,_xmm_m128,_imm8 }, 1914 { ASM_END } 1915 ]; 1916 1917 PTRNTAB4[3] aptb4VCMPPS = /* VCMPPS */ [ 1918 { VEX_NDS_128_WIG(CMPPS), _r, _xmm, _xmm, _xmm_m128, _imm8 }, 1919 { VEX_NDS_256_WIG(CMPPS), _r, _ymm, _ymm, _ymm_m256, _imm8 }, 1920 { ASM_END } 1921 ]; 1922 1923 PTRNTAB3[2] aptb3CMPPD = /* CMPPD */ [ 1924 { CMPPD, _r,_xmm,_xmm_m128,_imm8 }, 1925 { ASM_END } 1926 ]; 1927 1928 PTRNTAB4[3] aptb4VCMPPD = /* VCMPPD */ [ 1929 { VEX_NDS_128_WIG(CMPPD), _r, _xmm, _xmm, _xmm_m128, _imm8 }, 1930 { VEX_NDS_256_WIG(CMPPD), _r, _ymm, _ymm, _ymm_m256, _imm8 }, 1931 { ASM_END } 1932 ]; 1933 1934 PTRNTAB3[3] aptb3CMPSD = /* CMPSD */ [ 1935 { 0xa7, _32_bit | _I386 | _modsidi }, 1936 { CMPSD, _r,_xmm,_xmm_m64,_imm8 }, 1937 { ASM_END } 1938 ]; 1939 1940 PTRNTAB4[2] aptb4VCMPSD = /* VCMPSD */ [ 1941 { VEX_NDS_128_WIG(CMPSD), _r, _xmm, _xmm, _xmm_m64, _imm8 }, 1942 { ASM_END } 1943 ]; 1944 1945 PTRNTAB3[2] aptb3CMPSS = /* CMPSS */ [ 1946 { CMPSS, _r,_xmm,_xmm_m32,_imm8 }, 1947 { ASM_END } 1948 ]; 1949 1950 PTRNTAB4[2] aptb4VCMPSS = /* VCMPSS */ [ 1951 { VEX_NDS_128_WIG(CMPSS), _r, _xmm, _xmm, _xmm_m32, _imm8 }, 1952 { ASM_END } 1953 ]; 1954 1955 PTRNTAB2[2] aptb2COMISD = /* COMISD */ [ 1956 { COMISD, _r,_xmm,_xmm_m64 }, 1957 { ASM_END } 1958 ]; 1959 1960 PTRNTAB2[2] aptb2VCOMISD = /* VCOMISD */ [ 1961 { VEX_128_WIG(COMISD), _r, _xmm, _xmm_m64 }, 1962 { ASM_END } 1963 ]; 1964 1965 PTRNTAB2[2] aptb2COMISS = /* COMISS */ [ 1966 { COMISS, _r,_xmm,_xmm_m32 }, 1967 { ASM_END } 1968 ]; 1969 1970 PTRNTAB2[2] aptb2VCOMISS = /* VCOMISS */ [ 1971 { VEX_128_WIG(COMISS), _r, _xmm, _xmm_m32 }, 1972 { ASM_END } 1973 ]; 1974 1975 PTRNTAB2[2] aptb2CVTDQ2PD = /* CVTDQ2PD */ [ 1976 { CVTDQ2PD, _r,_xmm,_xmm_m64 }, 1977 { ASM_END } 1978 ]; 1979 1980 PTRNTAB2[3] aptb2VCVTDQ2PD = /* VCVTDQ2PD */ [ 1981 { VEX_128_WIG(CVTDQ2PD), _r, _xmm, _xmm_m128 }, 1982 { VEX_256_WIG(CVTDQ2PD), _r, _ymm, _xmm_m128 }, 1983 { ASM_END } 1984 ]; 1985 1986 PTRNTAB2[2] aptb2CVTDQ2PS = /* CVTDQ2PS */ [ 1987 { CVTDQ2PS, _r,_xmm,_xmm_m128 }, 1988 { ASM_END } 1989 ]; 1990 1991 PTRNTAB2[3] aptb2VCVTDQ2PS = /* VCVTDQ2PS */ [ 1992 { VEX_128_WIG(CVTDQ2PS), _r, _xmm, _xmm_m128 }, 1993 { VEX_256_WIG(CVTDQ2PS), _r, _ymm, _ymm_m256 }, 1994 { ASM_END } 1995 ]; 1996 1997 PTRNTAB2[2] aptb2CVTPD2DQ = /* CVTPD2DQ */ [ 1998 { CVTPD2DQ, _r,_xmm,_xmm_m128 }, 1999 { ASM_END } 2000 ]; 2001 2002 PTRNTAB2[3] aptb2VCVTPD2DQ = /* VCVTPD2DQ */ [ 2003 { VEX_128_WIG(CVTPD2DQ), _r, _xmm, _xmm_m128 }, 2004 { VEX_256_WIG(CVTPD2DQ), _r, _xmm, _ymm_m256 }, 2005 { ASM_END } 2006 ]; 2007 2008 PTRNTAB2[2] aptb2CVTPD2PI = /* CVTPD2PI */ [ 2009 { CVTPD2PI, _r,_mm,_xmm_m128 }, 2010 { ASM_END } 2011 ]; 2012 2013 PTRNTAB2[2] aptb2CVTPD2PS = /* CVTPD2PS */ [ 2014 { CVTPD2PS, _r,_xmm,_xmm_m128 }, 2015 { ASM_END } 2016 ]; 2017 2018 PTRNTAB2[3] aptb2VCVTPD2PS = /* VCVTPD2PS */ [ 2019 { VEX_128_WIG(CVTPD2PS), _r, _xmm, _xmm_m128 }, 2020 { VEX_256_WIG(CVTPD2PS), _r, _xmm, _ymm_m256 }, 2021 { ASM_END } 2022 ]; 2023 2024 PTRNTAB2[2] aptb2CVTPI2PD = /* CVTPI2PD */ [ 2025 { CVTPI2PD, _r,_xmm,_mmm64 }, 2026 { ASM_END } 2027 ]; 2028 2029 PTRNTAB2[2] aptb2CVTPI2PS = /* CVTPI2PS */ [ 2030 { CVTPI2PS, _r,_xmm,_mmm64 }, 2031 { ASM_END } 2032 ]; 2033 2034 PTRNTAB2[2] aptb2CVTPS2DQ = /* CVTPS2DQ */ [ 2035 { CVTPS2DQ, _r,_xmm,_xmm_m128 }, 2036 { ASM_END } 2037 ]; 2038 2039 PTRNTAB2[3] aptb2VCVTPS2DQ = /* VCVTPS2DQ */ [ 2040 { VEX_128_WIG(CVTPS2DQ), _r, _xmm, _xmm_m128 }, 2041 { VEX_256_WIG(CVTPS2DQ), _r, _ymm, _ymm_m256 }, 2042 { ASM_END } 2043 ]; 2044 2045 PTRNTAB2[2] aptb2CVTPS2PD = /* CVTPS2PD */ [ 2046 { CVTPS2PD, _r,_xmm,_xmm_m64 }, 2047 { ASM_END } 2048 ]; 2049 2050 PTRNTAB2[3] aptb2VCVTPS2PD = /* VCVTPS2PD */ [ 2051 { VEX_128_WIG(CVTPS2PD), _r, _xmm, _xmm_m128 }, 2052 { VEX_256_WIG(CVTPS2PD), _r, _ymm, _xmm_m128 }, 2053 { ASM_END } 2054 ]; 2055 2056 PTRNTAB2[2] aptb2CVTPS2PI = /* CVTPS2PI */ [ 2057 { CVTPS2PI, _r,_mm,_xmm_m64 }, 2058 { ASM_END } 2059 ]; 2060 2061 PTRNTAB2[2] aptb2CVTSD2SI = /* CVTSD2SI */ [ 2062 { CVTSD2SI, _r,_r32,_xmm_m64 }, 2063 { ASM_END } 2064 ]; 2065 2066 PTRNTAB2[3] aptb2VCVTSD2SI = /* VCVTSD2SI */ [ 2067 { VEX_128_WIG(CVTSD2SI), _r, _r32, _xmm_m64 }, 2068 { VEX_128_W1(CVTSD2SI), _r, _r64, _xmm_m64 }, 2069 { ASM_END } 2070 ]; 2071 2072 PTRNTAB2[2] aptb2CVTSD2SS = /* CVTSD2SS */ [ 2073 { CVTSD2SS, _r,_xmm,_xmm_m64 }, 2074 { ASM_END } 2075 ]; 2076 2077 PTRNTAB3[2] aptb3VCVTSD2SS = /* VCVTSD2SS */ [ 2078 { VEX_NDS_128_WIG(CVTSD2SS), _r, _xmm, _xmm, _xmm_m64 }, 2079 { ASM_END } 2080 ]; 2081 2082 PTRNTAB2[2] aptb2CVTSI2SD = /* CVTSI2SD */ [ 2083 { CVTSI2SD, _r,_xmm,_rm32 }, 2084 { ASM_END } 2085 ]; 2086 2087 PTRNTAB3[3] aptb3VCVTSI2SD = /* VCVTSI2SD */ [ 2088 { VEX_NDS_128_WIG(CVTSI2SD), _r, _xmm, _xmm, _rm32 }, 2089 { VEX_NDS_128_W1(CVTSI2SD), _r, _xmm, _xmm, _rm64 }, // implicit REX_W 2090 { ASM_END } 2091 ]; 2092 2093 PTRNTAB2[2] aptb2CVTSI2SS = /* CVTSI2SS */ [ 2094 { CVTSI2SS, _r,_xmm,_rm32 }, 2095 { ASM_END } 2096 ]; 2097 2098 PTRNTAB3[3] aptb3VCVTSI2SS = /* VCVTSI2SS */ [ 2099 { VEX_NDS_128_WIG(CVTSI2SS), _r, _xmm, _xmm, _rm32 }, 2100 { VEX_NDS_128_W1(CVTSI2SS), _r, _xmm, _xmm, _rm64 }, 2101 { ASM_END } 2102 ]; 2103 2104 PTRNTAB2[2] aptb2CVTSS2SD = /* CVTSS2SD */ [ 2105 { CVTSS2SD, _r,_xmm,_xmm_m32 }, 2106 { ASM_END } 2107 ]; 2108 2109 PTRNTAB3[2] aptb3VCVTSS2SD = /* VCVTSS2SD */ [ 2110 { VEX_NDS_128_WIG(CVTSS2SD), _r, _xmm, _xmm, _xmm_m32 }, 2111 { ASM_END } 2112 ]; 2113 2114 PTRNTAB2[2] aptb2CVTSS2SI = /* CVTSS2SI */ [ 2115 { CVTSS2SI, _r,_r32,_xmm_m32 }, 2116 { ASM_END } 2117 ]; 2118 2119 PTRNTAB2[3] aptb2VCVTSS2SI = /* VCVTSS2SI */ [ 2120 { VEX_128_WIG(CVTSS2SI), _r, _r32, _xmm_m32 }, 2121 { VEX_128_W1(CVTSS2SI), _r, _r64, _xmm_m32 }, // implicit REX_W 2122 { ASM_END } 2123 ]; 2124 2125 PTRNTAB2[2] aptb2CVTTPD2PI = /* CVTTPD2PI */ [ 2126 { CVTTPD2PI, _r,_mm,_xmm_m128 }, 2127 { ASM_END } 2128 ]; 2129 2130 PTRNTAB2[2] aptb2CVTTPD2DQ = /* CVTTPD2DQ */ [ 2131 { CVTTPD2DQ, _r,_xmm,_xmm_m128 }, 2132 { ASM_END } 2133 ]; 2134 2135 PTRNTAB2[3] aptb2VCVTTPD2DQ = /* VCVTTPD2DQ */ [ 2136 { VEX_128_WIG(CVTTPD2DQ), _r, _xmm, _xmm_m128 }, 2137 { VEX_256_WIG(CVTTPD2DQ), _r, _xmm, _ymm_m256 }, 2138 { ASM_END } 2139 ]; 2140 2141 PTRNTAB2[2] aptb2CVTTPS2DQ = /* CVTTPS2DQ */ [ 2142 { CVTTPS2DQ, _r,_xmm,_xmm_m128 }, 2143 { ASM_END } 2144 ]; 2145 2146 PTRNTAB2[3] aptb2VCVTTPS2DQ = /* VCVTTPS2DQ */ [ 2147 { VEX_128_WIG(CVTTPS2DQ), _r, _xmm, _xmm_m128 }, 2148 { VEX_256_WIG(CVTTPS2DQ), _r, _ymm, _ymm_m256 }, 2149 { ASM_END } 2150 ]; 2151 2152 PTRNTAB2[2] aptb2CVTTPS2PI = /* CVTTPS2PI */ [ 2153 { CVTTPS2PI, _r,_mm,_xmm_m64 }, 2154 { ASM_END } 2155 ]; 2156 2157 PTRNTAB2[2] aptb2CVTTSD2SI = /* CVTTSD2SI */ [ 2158 { CVTTSD2SI, _r,_r32,_xmm_m64 }, 2159 { ASM_END } 2160 ]; 2161 2162 PTRNTAB2[3] aptb2VCVTTSD2SI = /* VCVTTSD2SI */ [ 2163 { VEX_128_WIG(CVTTSD2SI), _r, _r32, _xmm_m64 }, 2164 { VEX_128_W1(CVTTSD2SI), _r, _r64, _xmm_m64 }, // implicit REX_W 2165 { ASM_END } 2166 ]; 2167 2168 PTRNTAB2[2] aptb2CVTTSS2SI = /* CVTTSS2SI */ [ 2169 { CVTTSS2SI, _r,_r32,_xmm_m32 }, 2170 { ASM_END } 2171 ]; 2172 2173 PTRNTAB2[3] aptb2VCVTTSS2SI = /* VCVTTSS2SI */ [ 2174 { VEX_128_WIG(CVTTSS2SI), _r, _r32, _xmm_m64 }, 2175 { VEX_128_W1(CVTTSS2SI), _r, _r64, _xmm_m64 }, // implicit REX_W 2176 { ASM_END } 2177 ]; 2178 2179 PTRNTAB2[2] aptb2DIVPD = /* DIVPD */ [ 2180 { DIVPD, _r,_xmm,_xmm_m128 }, 2181 { ASM_END } 2182 ]; 2183 2184 PTRNTAB3[3] aptb3VDIVPD = /* VDIVPD */ [ 2185 { VEX_NDS_128_WIG(DIVPD), _r, _xmm, _xmm, _xmm_m128, }, 2186 { VEX_NDS_256_WIG(DIVPD), _r, _ymm, _ymm, _ymm_m256, }, 2187 { ASM_END } 2188 ]; 2189 2190 PTRNTAB2[2] aptb2DIVPS = /* DIVPS */ [ 2191 { DIVPS, _r,_xmm,_xmm_m128 }, 2192 { ASM_END } 2193 ]; 2194 2195 PTRNTAB3[3] aptb3VDIVPS = /* VDIVPS */ [ 2196 { VEX_NDS_128_WIG(DIVPS), _r, _xmm, _xmm, _xmm_m128, }, 2197 { VEX_NDS_256_WIG(DIVPS), _r, _ymm, _ymm, _ymm_m256, }, 2198 { ASM_END } 2199 ]; 2200 2201 PTRNTAB2[2] aptb2DIVSD = /* DIVSD */ [ 2202 { DIVSD, _r,_xmm,_xmm_m64 }, 2203 { ASM_END } 2204 ]; 2205 2206 PTRNTAB3[2] aptb3VDIVSD = /* VDIVSD */ [ 2207 { VEX_NDS_128_WIG(DIVSD), _r, _xmm, _xmm, _xmm_m64, }, 2208 { ASM_END } 2209 ]; 2210 2211 PTRNTAB2[2] aptb2DIVSS = /* DIVSS */ [ 2212 { DIVSS, _r,_xmm,_xmm_m32 }, 2213 { ASM_END } 2214 ]; 2215 2216 PTRNTAB3[2] aptb3VDIVSS = /* VDIVSS */ [ 2217 { VEX_NDS_128_WIG(DIVSS), _r, _xmm, _xmm, _xmm_m32, }, 2218 { ASM_END } 2219 ]; 2220 2221 PTRNTAB2[2] aptb2MASKMOVDQU = /* MASKMOVDQU */ [ 2222 { MASKMOVDQU, _r,_xmm,_xmm }, 2223 { ASM_END } 2224 ]; 2225 2226 PTRNTAB2[2] aptb2VMASKMOVDQU = /* VMASKMOVDQU */ [ 2227 { VEX_128_WIG(MASKMOVDQU), _r, _xmm, _xmm }, 2228 { ASM_END } 2229 ]; 2230 2231 PTRNTAB2[2] aptb2MASKMOVQ = /* MASKMOVQ */ [ 2232 { MASKMOVQ, _r,_mm,_mm }, 2233 { ASM_END } 2234 ]; 2235 2236 PTRNTAB2[2] aptb2MAXPD = /* MAXPD */ [ 2237 { MAXPD, _r,_xmm,_xmm_m128 }, 2238 { ASM_END } 2239 ]; 2240 2241 PTRNTAB3[3] aptb3VMAXPD = /* VMAXPD */ [ 2242 { VEX_NDS_128_WIG(MAXPD), _r, _xmm, _xmm, _xmm_m128 }, 2243 { VEX_NDS_256_WIG(MAXPD), _r, _ymm, _ymm, _ymm_m256 }, 2244 { ASM_END } 2245 ]; 2246 2247 PTRNTAB2[2] aptb2MAXPS = /* MAXPS */ [ 2248 { MAXPS, _r,_xmm,_xmm_m128 }, 2249 { ASM_END } 2250 ]; 2251 2252 PTRNTAB3[3] aptb3VMAXPS = /* VMAXPS */ [ 2253 { VEX_NDS_128_WIG(MAXPS), _r, _xmm, _xmm, _xmm_m128 }, 2254 { VEX_NDS_256_WIG(MAXPS), _r, _ymm, _ymm, _ymm_m256 }, 2255 { ASM_END } 2256 ]; 2257 2258 PTRNTAB2[2] aptb2MAXSD = /* MAXSD */ [ 2259 { MAXSD, _r,_xmm,_xmm_m64 }, 2260 { ASM_END } 2261 ]; 2262 2263 PTRNTAB3[2] aptb3VMAXSD = /* VMAXSD */ [ 2264 { VEX_NDS_128_WIG(MAXSD), _r, _xmm, _xmm, _xmm_m64 }, 2265 { ASM_END } 2266 ]; 2267 2268 PTRNTAB2[2] aptb2MAXSS = /* MAXSS */ [ 2269 { MAXSS, _r,_xmm,_xmm_m32 }, 2270 { ASM_END } 2271 ]; 2272 2273 PTRNTAB3[2] aptb3VMAXSS = /* VMAXSS */ [ 2274 { VEX_NDS_128_WIG(MAXSS), _r, _xmm, _xmm, _xmm_m32 }, 2275 { ASM_END } 2276 ]; 2277 2278 PTRNTAB2[2] aptb2MINPD = /* MINPD */ [ 2279 { MINPD, _r,_xmm,_xmm_m128 }, 2280 { ASM_END } 2281 ]; 2282 2283 PTRNTAB3[3] aptb3VMINPD = /* VMINPD */ [ 2284 { VEX_NDS_128_WIG(MINPD), _r, _xmm, _xmm, _xmm_m128 }, 2285 { VEX_NDS_256_WIG(MINPD), _r, _ymm, _ymm, _ymm_m256 }, 2286 { ASM_END } 2287 ]; 2288 2289 PTRNTAB2[2] aptb2MINPS = /* MINPS */ [ 2290 { MINPS, _r,_xmm,_xmm_m128 }, 2291 { ASM_END } 2292 ]; 2293 2294 PTRNTAB3[3] aptb3VMINPS = /* VMINPS */ [ 2295 { VEX_NDS_128_WIG(MINPS), _r, _xmm, _xmm, _xmm_m128 }, 2296 { VEX_NDS_256_WIG(MINPS), _r, _ymm, _ymm, _ymm_m256 }, 2297 { ASM_END } 2298 ]; 2299 2300 PTRNTAB2[2] aptb2MINSD = /* MINSD */ [ 2301 { MINSD, _r,_xmm,_xmm_m64 }, 2302 { ASM_END } 2303 ]; 2304 2305 PTRNTAB3[2] aptb3VMINSD = /* VMINSD */ [ 2306 { VEX_NDS_128_WIG(MINSD), _r, _xmm, _xmm, _xmm_m64 }, 2307 { ASM_END } 2308 ]; 2309 2310 PTRNTAB2[2] aptb2MINSS = /* MINSS */ [ 2311 { MINSS, _r,_xmm,_xmm_m32 }, 2312 { ASM_END } 2313 ]; 2314 2315 PTRNTAB3[2] aptb3VMINSS = /* VMINSS */ [ 2316 { VEX_NDS_128_WIG(MINSS), _r, _xmm, _xmm, _xmm_m32 }, 2317 { ASM_END } 2318 ]; 2319 2320 PTRNTAB2[3] aptb2MOVAPD = /* MOVAPD */ [ 2321 { LODAPD, _r,_xmm,_xmm_m128 }, 2322 { STOAPD, _r,_xmm_m128,_xmm }, 2323 { ASM_END } 2324 ]; 2325 2326 PTRNTAB2[5] aptb2VMOVAPD = /* VMOVAPD */ [ 2327 { VEX_128_WIG(LODAPD), _r, _xmm, _xmm_m128 }, 2328 { VEX_128_WIG(STOAPD), _r, _xmm_m128, _xmm }, 2329 { VEX_256_WIG(LODAPD), _r, _ymm, _ymm_m256 }, 2330 { VEX_256_WIG(STOAPD), _r, _ymm_m256, _ymm }, 2331 { ASM_END } 2332 ]; 2333 2334 PTRNTAB2[3] aptb2MOVAPS = /* MOVAPS */ [ 2335 { LODAPS, _r,_xmm,_xmm_m128 }, 2336 { STOAPS, _r,_xmm_m128,_xmm }, 2337 { ASM_END } 2338 ]; 2339 2340 PTRNTAB2[5] aptb2VMOVAPS = /* VMOVAPS */ [ 2341 { VEX_128_WIG(LODAPS), _r, _xmm, _xmm_m128, }, 2342 { VEX_128_WIG(STOAPS), _r, _xmm_m128, _xmm, }, 2343 { VEX_256_WIG(LODAPS), _r, _ymm, _ymm_m256, }, 2344 { VEX_256_WIG(STOAPS), _r, _ymm_m256, _ymm, }, 2345 { ASM_END }, 2346 ]; 2347 2348 PTRNTAB2[3] aptb2MOVDQA = /* MOVDQA */ [ 2349 { LODDQA, _r,_xmm,_xmm_m128 }, 2350 { STODQA, _r,_xmm_m128,_xmm }, 2351 { ASM_END } 2352 ]; 2353 2354 PTRNTAB2[5] aptb2VMOVDQA = /* VMOVDQA */ [ 2355 { VEX_128_WIG(LODDQA), _r, _xmm, _xmm_m128 }, 2356 { VEX_128_WIG(STODQA), _r, _xmm_m128, _xmm }, 2357 { VEX_256_WIG(LODDQA), _r, _ymm, _ymm_m256 }, 2358 { VEX_256_WIG(STODQA), _r, _ymm_m256, _ymm }, 2359 { ASM_END } 2360 ]; 2361 2362 PTRNTAB2[3] aptb2MOVDQU = /* MOVDQU */ [ 2363 { LODDQU, _r,_xmm,_xmm_m128 }, 2364 { STODQU, _r,_xmm_m128,_xmm }, 2365 { ASM_END } 2366 ]; 2367 2368 PTRNTAB2[5] aptb2VMOVDQU = /* VMOVDQU */ [ 2369 { VEX_128_WIG(LODDQU), _r, _xmm, _xmm_m128 }, 2370 { VEX_128_WIG(STODQU), _r, _xmm_m128, _xmm }, 2371 { VEX_256_WIG(LODDQU), _r, _ymm, _ymm_m256 }, 2372 { VEX_256_WIG(STODQU), _r, _ymm_m256, _ymm }, 2373 { ASM_END } 2374 ]; 2375 2376 PTRNTAB2[2] aptb2MOVDQ2Q = /* MOVDQ2Q */ [ 2377 { MOVDQ2Q, _r,_mm,_xmm }, 2378 { ASM_END } 2379 ]; 2380 2381 PTRNTAB2[2] aptb2MOVHLPS = /* MOVHLPS */ [ 2382 { MOVHLPS, _r,_xmm,_xmm }, 2383 { ASM_END } 2384 ]; 2385 2386 PTRNTAB3[2] aptb3VMOVHLPS = /* VMOVHLPS */ [ 2387 { VEX_NDS_128_WIG(MOVHLPS), _r, _xmm, _xmm, _xmm }, 2388 { ASM_END } 2389 ]; 2390 2391 PTRNTAB2[3] aptb2MOVHPD = /* MOVHPD */ [ 2392 { LODHPD, _r,_xmm,_xmm_m64 }, 2393 { STOHPD, _r,_xmm_m64,_xmm }, 2394 { ASM_END } 2395 ]; 2396 2397 PTRNTAB3[3] aptb3VMOVHPD = /* VMOVHPD */ [ 2398 { VEX_NDS_128_WIG(LODHPD), _r, _xmm, _xmm, _m64 }, 2399 { VEX_128_WIG(STOHPD), _r, _m64, _xmm, 0 }, 2400 { ASM_END } 2401 ]; 2402 2403 PTRNTAB2[3] aptb2MOVHPS = /* MOVHPS */ [ 2404 { LODHPS, _r,_xmm,_xmm_m64 }, 2405 { STOHPS, _r,_xmm_m64,_xmm }, 2406 { ASM_END } 2407 ]; 2408 2409 PTRNTAB3[3] aptb3VMOVHPS = /* VMOVHPS */ [ 2410 { VEX_NDS_128_WIG(LODHPS), _r, _xmm, _xmm, _m64 }, 2411 { VEX_128_WIG(STOHPS), _r, _m64, _xmm, 0 }, 2412 { ASM_END } 2413 ]; 2414 2415 PTRNTAB2[2] aptb2MOVLHPS = /* MOVLHPS */ [ 2416 { MOVLHPS, _r,_xmm,_xmm }, 2417 { ASM_END } 2418 ]; 2419 2420 PTRNTAB3[2] aptb3VMOVLHPS = /* VMOVLHPS */ [ 2421 { VEX_NDS_128_WIG(MOVLHPS), _r, _xmm, _xmm, _xmm }, 2422 { ASM_END } 2423 ]; 2424 2425 PTRNTAB2[3] aptb2MOVLPD = /* MOVLPD */ [ 2426 { LODLPD, _r,_xmm,_xmm_m64 }, 2427 { STOLPD, _r,_xmm_m64,_xmm }, 2428 { ASM_END } 2429 ]; 2430 2431 PTRNTAB3[3] aptb3VMOVLPD = /* VMOVLPD */ [ 2432 { VEX_NDS_128_WIG(LODLPD), _r, _xmm, _xmm, _m64 }, 2433 { VEX_128_WIG(STOLPD), _r, _m64, _xmm, 0 }, 2434 { ASM_END } 2435 ]; 2436 2437 PTRNTAB2[3] aptb2MOVLPS = /* MOVLPS */ [ 2438 { LODLPS, _r,_xmm,_xmm_m64 }, 2439 { STOLPS, _r,_xmm_m64,_xmm }, 2440 { ASM_END } 2441 ]; 2442 2443 PTRNTAB3[3] aptb3VMOVLPS = /* VMOVLPS */ [ 2444 { VEX_NDS_128_WIG(LODLPS), _r, _xmm, _xmm, _m64 }, 2445 { VEX_128_WIG(STOLPS), _r, _m64, _xmm, 0 }, 2446 { ASM_END } 2447 ]; 2448 2449 PTRNTAB2[2] aptb2MOVMSKPD = /* MOVMSKPD */ [ 2450 { MOVMSKPD, _r,_r32,_xmm }, 2451 { ASM_END } 2452 ]; 2453 2454 PTRNTAB2[3] aptb2VMOVMSKPD = /* VMOVMSKPD */ [ 2455 { VEX_128_WIG(MOVMSKPD), _r, _r32, _xmm }, 2456 { VEX_256_WIG(MOVMSKPD), _r, _r32, _ymm }, 2457 { ASM_END } 2458 ]; 2459 2460 PTRNTAB2[2] aptb2MOVMSKPS = /* MOVMSKPS */ [ 2461 { MOVMSKPS, _r,_r32,_xmm }, 2462 { ASM_END } 2463 ]; 2464 2465 PTRNTAB2[3] aptb2VMOVMSKPS = /* VMOVMSKPS */ [ 2466 { VEX_128_WIG(MOVMSKPS), _r, _r32, _xmm }, 2467 { VEX_256_WIG(MOVMSKPS), _r, _r32, _ymm }, 2468 { ASM_END } 2469 ]; 2470 2471 PTRNTAB2[2] aptb2MOVNTDQ = /* MOVNTDQ */ [ 2472 { MOVNTDQ, _r,_m128,_xmm }, 2473 { ASM_END } 2474 ]; 2475 2476 PTRNTAB2[3] aptb2VMOVNTDQ = /* VMOVNTDQ */ [ 2477 { VEX_128_WIG(MOVNTDQ), _r, _m128, _xmm }, 2478 { VEX_256_WIG(MOVNTDQ), _r, _m256, _ymm }, 2479 { ASM_END } 2480 ]; 2481 2482 PTRNTAB2[2] aptb2MOVNTI = /* MOVNTI */ [ 2483 { MOVNTI, _r,_m32,_r32 }, 2484 { ASM_END } 2485 ]; 2486 2487 PTRNTAB2[2] aptb2MOVNTPD = /* MOVNTPD */ [ 2488 { MOVNTPD, _r,_m128,_xmm }, 2489 { ASM_END } 2490 ]; 2491 2492 PTRNTAB2[3] aptb2VMOVNTPD = /* VMOVNTPD */ [ 2493 { VEX_128_WIG(MOVNTPD), _r, _m128, _xmm }, 2494 { VEX_256_WIG(MOVNTPD), _r, _m256, _ymm }, 2495 { ASM_END } 2496 ]; 2497 2498 PTRNTAB2[2] aptb2MOVNTPS = /* MOVNTPS */ [ 2499 { MOVNTPS, _r,_m128,_xmm }, 2500 { ASM_END } 2501 ]; 2502 2503 PTRNTAB2[3] aptb2VMOVNTPS = /* VMOVNTPS */ [ 2504 { VEX_128_WIG(MOVNTPS), _r, _m128, _xmm }, 2505 { VEX_256_WIG(MOVNTPS), _r, _m256, _ymm }, 2506 { ASM_END } 2507 ]; 2508 2509 PTRNTAB2[2] aptb2MOVNTQ = /* MOVNTQ */ [ 2510 { MOVNTQ, _r,_m64,_mm }, 2511 { ASM_END } 2512 ]; 2513 2514 PTRNTAB2[2] aptb2MOVQ2DQ = /* MOVQ2DQ */ [ 2515 { MOVQ2DQ, _r,_xmm,_mm }, 2516 { ASM_END } 2517 ]; 2518 2519 PTRNTAB2[4] aptb2MOVSD = /* MOVSD */ [ 2520 { 0xa5, _32_bit | _I386 | _modsidi }, 2521 { LODSD, _r, _xmm, _xmm_m64 }, 2522 { STOSD, _r, _xmm_m64, _xmm }, 2523 { ASM_END } 2524 ]; 2525 2526 PTRNTAB3[3] aptb3VMOVSD = /* VMOVSD */ [ 2527 { VEX_NDS_128_WIG(LODSD), _r, _xmm, _xmm, _xmm }, 2528 { VEX_128_WIG(STOSD), _r, _m64, _xmm, 0 }, 2529 { ASM_END } 2530 ]; 2531 2532 PTRNTAB2[3] aptb2MOVSS = /* MOVSS */ [ 2533 { LODSS, _r,_xmm,_xmm_m32 }, 2534 { STOSS, _r,_xmm_m32,_xmm }, 2535 { ASM_END } 2536 ]; 2537 2538 PTRNTAB3[3] aptb3VMOVSS = /* VMOVSS */ [ 2539 { VEX_NDS_128_WIG(LODSS), _r, _xmm, _xmm, _xmm }, 2540 { VEX_128_WIG(STOSS), _r, _m32, _xmm, 0 }, 2541 { ASM_END } 2542 ]; 2543 2544 PTRNTAB2[3] aptb2MOVUPD = /* MOVUPD */ [ 2545 { LODUPD, _r,_xmm,_xmm_m128 }, 2546 { STOUPD, _r,_xmm_m128,_xmm }, 2547 { ASM_END } 2548 ]; 2549 2550 PTRNTAB2[5] aptb2VMOVUPD = /* VMOVUPD */ [ 2551 { VEX_128_WIG(LODUPD), _r, _xmm, _xmm_m128 }, 2552 { VEX_128_WIG(STOUPD), _r, _xmm_m128, _xmm }, 2553 { VEX_256_WIG(LODUPD), _r, _ymm, _ymm_m256 }, 2554 { VEX_256_WIG(STOUPD), _r, _ymm_m256, _ymm }, 2555 { ASM_END } 2556 ]; 2557 2558 PTRNTAB2[3] aptb2MOVUPS = /* MOVUPS */ [ 2559 { LODUPS, _r,_xmm,_xmm_m128 }, 2560 { STOUPS, _r,_xmm_m128,_xmm }, 2561 { ASM_END } 2562 ]; 2563 2564 PTRNTAB2[5] aptb2VMOVUPS = /* VMOVUPS */ [ 2565 { VEX_128_WIG(LODUPS), _r, _xmm, _xmm_m128, }, 2566 { VEX_128_WIG(STOUPS), _r, _xmm_m128, _xmm, }, 2567 { VEX_256_WIG(LODUPS), _r, _ymm, _ymm_m256, }, 2568 { VEX_256_WIG(STOUPS), _r, _ymm_m256, _ymm, }, 2569 { ASM_END } 2570 ]; 2571 2572 PTRNTAB2[2] aptb2MULPD = /* MULPD */ [ 2573 { MULPD, _r,_xmm,_xmm_m128 }, 2574 { ASM_END } 2575 ]; 2576 2577 PTRNTAB3[3] aptb3VMULPD = /* VMULPD */ [ 2578 { VEX_NDS_128_WIG(MULPD), _r, _xmm, _xmm, _xmm_m128, }, 2579 { VEX_NDS_256_WIG(MULPD), _r, _ymm, _ymm, _ymm_m256, }, 2580 { ASM_END } 2581 ]; 2582 2583 PTRNTAB2[2] aptb2MULPS = /* MULPS */ [ 2584 { MULPS, _r,_xmm,_xmm_m128 }, 2585 { ASM_END } 2586 ]; 2587 2588 PTRNTAB3[3] aptb3VMULPS = /* VMULPS */ [ 2589 { VEX_NDS_128_WIG(MULPS), _r, _xmm, _xmm, _xmm_m128, }, 2590 { VEX_NDS_256_WIG(MULPS), _r, _ymm, _ymm, _ymm_m256, }, 2591 { ASM_END } 2592 ]; 2593 2594 PTRNTAB2[2] aptb2MULSD = /* MULSD */ [ 2595 { MULSD, _r,_xmm,_xmm_m64 }, 2596 { ASM_END } 2597 ]; 2598 2599 PTRNTAB3[2] aptb3VMULSD = /* VMULSD */ [ 2600 { VEX_NDS_128_WIG(MULSD), _r, _xmm, _xmm, _xmm_m64, }, 2601 { ASM_END } 2602 ]; 2603 2604 PTRNTAB2[2] aptb2MULSS = /* MULSS */ [ 2605 { MULSS, _r,_xmm,_xmm_m32 }, 2606 { ASM_END } 2607 ]; 2608 2609 PTRNTAB3[2] aptb3VMULSS = /* VMULSS */ [ 2610 { VEX_NDS_128_WIG(MULSS), _r, _xmm, _xmm, _xmm_m32, }, 2611 { ASM_END } 2612 ]; 2613 2614 PTRNTAB2[2] aptb2ORPD = /* ORPD */ [ 2615 { ORPD, _r,_xmm,_xmm_m128 }, 2616 { ASM_END } 2617 ]; 2618 2619 PTRNTAB3[3] aptb3VORPD = /* VORPD */ [ 2620 { VEX_NDS_128_WIG(ORPD), _r,_xmm,_xmm,_xmm_m128 }, 2621 { VEX_NDS_256_WIG(ORPD), _r,_ymm,_ymm,_ymm_m256 }, 2622 { ASM_END } 2623 ]; 2624 2625 PTRNTAB2[2] aptb2ORPS = /* ORPS */ [ 2626 { ORPS, _r,_xmm,_xmm_m128 }, 2627 { ASM_END } 2628 ]; 2629 2630 PTRNTAB3[3] aptb3VORPS = /* VORPS */ [ 2631 { VEX_NDS_128_WIG(ORPS), _r,_xmm,_xmm,_xmm_m128 }, 2632 { VEX_NDS_256_WIG(ORPS), _r,_ymm,_ymm,_ymm_m256 }, 2633 { ASM_END } 2634 ]; 2635 2636 PTRNTAB2[3] aptb2PADDQ = /* PADDQ */ [ 2637 { 0x0FD4, _r,_mm,_mmm64 }, 2638 { PADDQ, _r,_xmm,_xmm_m128 }, 2639 { ASM_END } 2640 ]; 2641 2642 PTRNTAB3[2] aptb3VPADDQ = /* VPADDQ */ [ 2643 { VEX_NDS_128_WIG(PADDQ), _r, _xmm, _xmm, _xmm_m128 }, 2644 { ASM_END } 2645 ]; 2646 2647 PTRNTAB2[3] aptb2PAVGB = /* PAVGB */ [ 2648 { 0x0FE0, _r,_mm,_mmm64 }, 2649 { PAVGB, _r,_xmm,_xmm_m128 }, 2650 { ASM_END } 2651 ]; 2652 2653 PTRNTAB3[2] aptb3VPAVGB = /* VPAVGB */ [ 2654 { VEX_NDS_128_WIG(PAVGB), _r, _xmm, _xmm, _xmm_m128 }, 2655 { ASM_END } 2656 ]; 2657 2658 PTRNTAB2[3] aptb2PAVGW = /* PAVGW */ [ 2659 { 0x0FE3, _r,_mm,_mmm64 }, 2660 { PAVGW, _r,_xmm,_xmm_m128 }, 2661 { ASM_END } 2662 ]; 2663 2664 PTRNTAB3[2] aptb3VPAVGW = /* VPAVGW */ [ 2665 { VEX_NDS_128_WIG(PAVGW), _r, _xmm, _xmm, _xmm_m128 }, 2666 { ASM_END } 2667 ]; 2668 2669 PTRNTAB3[6] aptb3PEXTRW = /* PEXTRW */ [ 2670 { 0x0FC5, _r,_r32,_mm,_imm8 }, 2671 { 0x0FC5, _r,_r64,_mm,_imm8 }, 2672 { 0x660FC5, _r,_r32,_xmm,_imm8 }, 2673 { 0x660FC5, _r,_r64,_xmm,_imm8 }, 2674 { 0x660F3A15, _r,_m16,_xmm,_imm8 }, // synonym for r32/r64 2675 { ASM_END } 2676 ]; 2677 2678 PTRNTAB3[4] aptb3VPEXTRW = /* VPEXTRW */ [ 2679 { VEX_128_WIG(0x660FC5), _r,_r32,_xmm,_imm8 }, 2680 { VEX_128_WIG(0x660FC5), _r,_r64,_xmm,_imm8 }, 2681 { VEX_128_WIG(0x660F3A15), _r,_m16,_xmm,_imm8 }, // synonym for r32/r64 2682 { ASM_END } 2683 ]; 2684 2685 PTRNTAB3[3] aptb3PINSRW = /* PINSRW */ [ 2686 { 0x0FC4, _r,_mm,_r32m16,_imm8 }, 2687 { PINSRW, _r,_xmm,_r32m16,_imm8 }, 2688 { ASM_END } 2689 ]; 2690 2691 PTRNTAB4[2] aptb4VPINSRW = /* VPINSRW */ [ 2692 { VEX_NDS_128_WIG(PINSRW), _r, _xmm, _xmm, _r32m16, _imm8 }, 2693 { ASM_END } 2694 ]; 2695 2696 PTRNTAB2[3] aptb2PMAXSW = /* PMAXSW */ [ 2697 { 0x0FEE, _r,_mm,_mmm64 }, 2698 { PMAXSW, _r,_xmm,_xmm_m128 }, 2699 { ASM_END } 2700 ]; 2701 2702 PTRNTAB3[2] aptb3VPMAXSW = /* VPMAXSW */ [ 2703 { VEX_NDS_128_WIG(PMAXSW), _r, _xmm, _xmm, _xmm_m128 }, 2704 { ASM_END } 2705 ]; 2706 2707 PTRNTAB2[3] aptb2PMAXUB = /* PMAXUB */ [ 2708 { 0x0FDE, _r,_mm,_mmm64 }, 2709 { PMAXUB, _r,_xmm,_xmm_m128 }, 2710 { ASM_END } 2711 ]; 2712 2713 PTRNTAB3[2] aptb3VPMAXUB = /* VPMAXUB */ [ 2714 { VEX_NDS_128_WIG(PMAXUB), _r, _xmm, _xmm, _xmm_m128 }, 2715 { ASM_END } 2716 ]; 2717 2718 PTRNTAB2[3] aptb2PMINSW = /* PMINSW */ [ 2719 { 0x0FEA, _r,_mm,_mmm64 }, 2720 { PMINSW, _r,_xmm,_xmm_m128 }, 2721 { ASM_END } 2722 ]; 2723 2724 PTRNTAB3[2] aptb3VPMINSW = /* VPMINSW */ [ 2725 { VEX_NDS_128_WIG(PMINSW), _r, _xmm, _xmm, _xmm_m128 }, 2726 { ASM_END } 2727 ]; 2728 2729 PTRNTAB2[3] aptb2PMINUB = /* PMINUB */ [ 2730 { 0x0FDA, _r,_mm,_mmm64 }, 2731 { PMINUB, _r,_xmm,_xmm_m128 }, 2732 { ASM_END } 2733 ]; 2734 2735 PTRNTAB3[2] aptb3VPMINUB = /* VPMINUB */ [ 2736 { VEX_NDS_128_WIG(PMINUB), _r, _xmm, _xmm, _xmm_m128 }, 2737 { ASM_END } 2738 ]; 2739 2740 PTRNTAB2[4] aptb2PMOVMSKB = /* PMOVMSKB */ [ 2741 { 0x0FD7, _r,_r32,_mm }, 2742 { PMOVMSKB, _r, _r32, _xmm }, 2743 { PMOVMSKB, _r|_64_bit, _r64, _xmm }, 2744 { ASM_END } 2745 ]; 2746 2747 PTRNTAB2[2] aptb2VPMOVMSKB = /* VPMOVMSKB */ [ 2748 { VEX_128_WIG(PMOVMSKB), _r, _r32, _xmm }, 2749 { ASM_END } 2750 ]; 2751 2752 PTRNTAB2[3] aptb2PMULHUW = /* PMULHUW */ [ 2753 { 0x0FE4, _r,_mm,_mmm64 }, 2754 { PMULHUW, _r,_xmm,_xmm_m128 }, 2755 { ASM_END } 2756 ]; 2757 2758 PTRNTAB3[2] aptb3VPMULHUW = /* VPMULHUW */ [ 2759 { VEX_NDS_128_WIG(PMULHUW), _r, _xmm, _xmm, _xmm_m128 }, 2760 { ASM_END } 2761 ]; 2762 2763 PTRNTAB2[3] aptb2PMULHW = /* PMULHW */ [ 2764 { 0x0FE5, _r,_mm,_mmm64 }, 2765 { PMULHW, _r,_xmm,_xmm_m128 }, 2766 { ASM_END } 2767 ]; 2768 2769 PTRNTAB3[2] aptb3VPMULHW = /* VPMULHW */ [ 2770 { VEX_NDS_128_WIG(PMULHW), _r, _xmm, _xmm, _xmm_m128 }, 2771 { ASM_END } 2772 ]; 2773 2774 PTRNTAB2[3] aptb2PMULLW = /* PMULLW */ [ 2775 { 0x0FD5, _r,_mm,_mmm64 }, 2776 { PMULLW, _r,_xmm,_xmm_m128 }, 2777 { ASM_END } 2778 ]; 2779 2780 PTRNTAB3[2] aptb3VPMULLW = /* VPMULLW */ [ 2781 { VEX_NDS_128_WIG(PMULLW), _r, _xmm, _xmm, _xmm_m128 }, 2782 { ASM_END } 2783 ]; 2784 2785 PTRNTAB2[3] aptb2PMULUDQ = /* PMULUDQ */ [ 2786 { 0x0FF4, _r,_mm,_mmm64 }, 2787 { PMULUDQ, _r,_xmm,_xmm_m128 }, 2788 { ASM_END } 2789 ]; 2790 2791 PTRNTAB3[2] aptb3VPMULUDQ = /* VPMULUDQ */ [ 2792 { VEX_NDS_128_WIG(PMULUDQ), _r, _xmm, _xmm, _xmm_m128 }, 2793 { ASM_END } 2794 ]; 2795 2796 PTRNTAB2[3] aptb2POR = /* POR */ [ 2797 { 0x0FEB, _r,_mm,_mmm64 }, 2798 { POR, _r,_xmm,_xmm_m128 }, 2799 { ASM_END } 2800 ]; 2801 2802 PTRNTAB3[2] aptb3VPOR = /* VPOR */ [ 2803 { VEX_NDS_128_WIG(POR), _r,_xmm,_xmm,_xmm_m128 }, 2804 { ASM_END } 2805 ]; 2806 2807 PTRNTAB1[2] aptb1PREFETCHNTA = /* PREFETCHNTA */ [ 2808 { PREFETCH, _0,_m8 }, 2809 { ASM_END } 2810 ]; 2811 2812 PTRNTAB1[2] aptb1PREFETCHT0 = /* PREFETCHT0 */ [ 2813 { PREFETCH, _1,_m8 }, 2814 { ASM_END } 2815 ]; 2816 2817 PTRNTAB1[2] aptb1PREFETCHT1 = /* PREFETCHT1 */ [ 2818 { PREFETCH, _2,_m8 }, 2819 { ASM_END } 2820 ]; 2821 2822 PTRNTAB1[2] aptb1PREFETCHT2 = /* PREFETCHT2 */ [ 2823 { PREFETCH, _3,_m8 }, 2824 { ASM_END } 2825 ]; 2826 2827 PTRNTAB1[2] aptb1PREFETCHW = /* PREFETCHW */ [ 2828 { 0x0F0D, _1,_m8 }, 2829 { ASM_END } 2830 ]; 2831 2832 PTRNTAB1[2] aptb1PREFETCHWT1 = /* PREFETCHWT1 */ [ 2833 { 0x0F0D, _2,_m8 }, 2834 { ASM_END } 2835 ]; 2836 2837 PTRNTAB2[3] aptb2PSADBW = /* PSADBW */ [ 2838 { 0x0FF6, _r,_mm,_mmm64 }, 2839 { PSADBW, _r,_xmm,_xmm_m128 }, 2840 { ASM_END } 2841 ]; 2842 2843 PTRNTAB3[2] aptb3VPSADBW = /* VPSADBW */ [ 2844 { VEX_NDS_128_WIG(PSADBW), _r, _xmm, _xmm, _xmm_m128 }, 2845 { ASM_END } 2846 ]; 2847 2848 2849 PTRNTAB3[2] aptb3PSHUFD = /* PSHUFD */ [ 2850 { PSHUFD, _r,_xmm,_xmm_m128,_imm8 }, 2851 { ASM_END } 2852 ]; 2853 2854 PTRNTAB3[2] aptb3VPSHUFD = /* VPSHUFD */ [ 2855 { VEX_128_WIG(PSHUFD), _r,_xmm,_xmm_m128,_imm8 }, 2856 { ASM_END } 2857 ]; 2858 2859 PTRNTAB3[2] aptb3PSHUFHW = /* PSHUFHW */ [ 2860 { PSHUFHW, _r,_xmm,_xmm_m128,_imm8 }, 2861 { ASM_END } 2862 ]; 2863 2864 PTRNTAB3[2] aptb3VPSHUFHW = /* VPSHUFHW */ [ 2865 { VEX_128_WIG(PSHUFHW), _r,_xmm,_xmm_m128,_imm8 }, 2866 { ASM_END } 2867 ]; 2868 2869 PTRNTAB3[2] aptb3PSHUFLW = /* PSHUFLW */ [ 2870 { PSHUFLW, _r,_xmm,_xmm_m128,_imm8 }, 2871 { ASM_END } 2872 ]; 2873 2874 PTRNTAB3[2] aptb3VPSHUFLW = /* VPSHUFLW */ [ 2875 { VEX_128_WIG(PSHUFLW), _r,_xmm,_xmm_m128,_imm8 }, 2876 { ASM_END } 2877 ]; 2878 2879 PTRNTAB3[2] aptb3PSHUFW = /* PSHUFW */ [ 2880 { PSHUFW, _r,_mm,_mmm64,_imm8 }, 2881 { ASM_END } 2882 ]; 2883 2884 PTRNTAB2[2] aptb2PSLLDQ = /* PSLLDQ */ [ 2885 { (PSLLDQ & 0xFFFFFF), _7,_xmm,_imm8 }, 2886 { ASM_END } 2887 ]; 2888 2889 PTRNTAB3[2] aptb3VPSLLDQ = /* VPSLLDQ */ [ 2890 { VEX_NDD_128_WIG((PSLLDQ & 0xFFFFFF)), _7, _xmm, _xmm, _imm8 }, 2891 { ASM_END } 2892 ]; 2893 2894 PTRNTAB2[2] aptb2PSRLDQ = /* PSRLDQ */ [ 2895 { PSRLDQ & 0xFFFFFF, _3,_xmm,_imm8 }, 2896 { ASM_END } 2897 ]; 2898 2899 PTRNTAB3[2] aptb3VPSRLDQ = /* VPSRLDQ */ [ 2900 { VEX_NDD_128_WIG((PSRLDQ & 0xFFFFFF)), _3, _xmm, _xmm, _imm8 }, 2901 { ASM_END } 2902 ]; 2903 2904 PTRNTAB2[3] aptb2PSUBQ = /* PSUBQ */ [ 2905 { 0x0FFB, _r,_mm,_mmm64 }, 2906 { PSUBQ, _r,_xmm,_xmm_m128 }, 2907 { ASM_END } 2908 ]; 2909 2910 PTRNTAB3[2] aptb3VPSUBQ = /* VPSUBQ */ [ 2911 { VEX_NDS_128_WIG(PSUBQ), _r, _xmm, _xmm, _xmm_m128 }, 2912 { ASM_END } 2913 ]; 2914 2915 PTRNTAB2[2] aptb2PUNPCKHQDQ = /* PUNPCKHQDQ */ [ 2916 { PUNPCKHQDQ, _r,_xmm,_xmm_m128 }, 2917 { ASM_END } 2918 ]; 2919 2920 PTRNTAB3[2] aptb3VPUNPCKHQDQ = /* VPUNPCKHQDQ */ [ 2921 { VEX_NDS_128_WIG(PUNPCKHQDQ), _r,_xmm,_xmm,_xmm_m128 }, 2922 { ASM_END } 2923 ]; 2924 2925 PTRNTAB2[2] aptb2PUNPCKLQDQ = /* PUNPCKLQDQ */ [ 2926 { PUNPCKLQDQ, _r,_xmm,_xmm_m128 }, 2927 { ASM_END } 2928 ]; 2929 2930 PTRNTAB3[2] aptb3VPUNPCKLQDQ = /* VPUNPCKLQDQ */ [ 2931 { VEX_NDS_128_WIG(PUNPCKLQDQ), _r,_xmm,_xmm,_xmm_m128 }, 2932 { ASM_END } 2933 ]; 2934 2935 PTRNTAB2[2] aptb2RCPPS = /* RCPPS */ [ 2936 { RCPPS, _r,_xmm,_xmm_m128 }, 2937 { ASM_END } 2938 ]; 2939 2940 PTRNTAB2[3] aptb2VRCPPS = /* VRCPPS */ [ 2941 { VEX_128_WIG(RCPPS), _r, _xmm, _xmm_m128 }, 2942 { VEX_256_WIG(RCPPS), _r, _ymm, _ymm_m256 }, 2943 { ASM_END } 2944 ]; 2945 2946 PTRNTAB2[2] aptb2RCPSS = /* RCPSS */ [ 2947 { RCPSS, _r,_xmm,_xmm_m32 }, 2948 { ASM_END } 2949 ]; 2950 2951 PTRNTAB3[2] aptb3VRCPSS = /* VRCPSS */ [ 2952 { VEX_NDS_128_WIG(RCPSS), _r, _xmm, _xmm, _xmm_m32 }, 2953 { ASM_END } 2954 ]; 2955 2956 PTRNTAB2[2] aptb2RSQRTPS = /* RSQRTPS */ [ 2957 { RSQRTPS, _r,_xmm,_xmm_m128 }, 2958 { ASM_END } 2959 ]; 2960 2961 PTRNTAB2[2] aptb2RSQRTSS = /* RSQRTSS */ [ 2962 { RSQRTSS, _r,_xmm,_xmm_m32 }, 2963 { ASM_END } 2964 ]; 2965 2966 PTRNTAB3[2] aptb3SHUFPD = /* SHUFPD */ [ 2967 { SHUFPD, _r,_xmm,_xmm_m128,_imm8 }, 2968 { ASM_END } 2969 ]; 2970 2971 PTRNTAB4[3] aptb4VSHUFPD = /* VSHUFPD */ [ 2972 { VEX_NDS_128_WIG(SHUFPD), _r,_xmm,_xmm,_xmm_m128,_imm8 }, 2973 { VEX_NDS_256_WIG(SHUFPD), _r,_ymm,_ymm,_ymm_m256,_imm8 }, 2974 { ASM_END } 2975 ]; 2976 2977 PTRNTAB3[2] aptb3SHUFPS = /* SHUFPS */ [ 2978 { SHUFPS, _r,_xmm,_xmm_m128,_imm8 }, 2979 { ASM_END } 2980 ]; 2981 2982 PTRNTAB4[3] aptb4VSHUFPS = /* VSHUFPS */ [ 2983 { VEX_NDS_128_WIG(SHUFPS), _r,_xmm,_xmm,_xmm_m128,_imm8 }, 2984 { VEX_NDS_256_WIG(SHUFPS), _r,_ymm,_ymm,_ymm_m256,_imm8 }, 2985 { ASM_END } 2986 ]; 2987 2988 PTRNTAB2[2] aptb2SQRTPD = /* SQRTPD */ [ 2989 { SQRTPD, _r,_xmm,_xmm_m128 }, 2990 { ASM_END } 2991 ]; 2992 2993 PTRNTAB2[3] aptb2VSQRTPD = /* VSQRTPD */ [ 2994 { VEX_128_WIG(SQRTPD), _r, _xmm, _xmm_m128 }, 2995 { VEX_256_WIG(SQRTPD), _r, _ymm, _ymm_m256 }, 2996 { ASM_END } 2997 ]; 2998 2999 PTRNTAB2[2] aptb2SQRTPS = /* SQRTPS */ [ 3000 { SQRTPS, _r,_xmm,_xmm_m128 }, 3001 { ASM_END } 3002 ]; 3003 3004 PTRNTAB2[3] aptb2VSQRTPS = /* VSQRTPS */ [ 3005 { VEX_128_WIG(SQRTPS), _r, _xmm, _xmm_m128 }, 3006 { VEX_256_WIG(SQRTPS), _r, _ymm, _ymm_m256 }, 3007 { ASM_END } 3008 ]; 3009 3010 PTRNTAB2[2] aptb2SQRTSD = /* SQRTSD */ [ 3011 { SQRTSD, _r,_xmm,_xmm_m64 }, 3012 { ASM_END } 3013 ]; 3014 3015 PTRNTAB3[2] aptb3VSQRTSD = /* VSQRTSD */ [ 3016 { VEX_NDS_128_WIG(SQRTSD), _r, _xmm, _xmm, _xmm_m64 }, 3017 { ASM_END } 3018 ]; 3019 3020 PTRNTAB2[2] aptb2SQRTSS = /* SQRTSS */ [ 3021 { SQRTSS, _r,_xmm,_xmm_m32 }, 3022 { ASM_END } 3023 ]; 3024 3025 PTRNTAB3[2] aptb3VSQRTSS = /* VSQRTSS */ [ 3026 { VEX_NDS_128_WIG(SQRTSS), _r, _xmm, _xmm, _xmm_m32 }, 3027 { ASM_END } 3028 ]; 3029 3030 PTRNTAB2[2] aptb2SUBPD = /* SUBPD */ [ 3031 { SUBPD, _r,_xmm,_xmm_m128 }, 3032 { ASM_END } 3033 ]; 3034 3035 PTRNTAB3[3] aptb3VSUBPD = /* VSUBPD */ [ 3036 { VEX_NDS_128_WIG(SUBPD), _r, _xmm, _xmm, _xmm_m128, }, 3037 { VEX_NDS_256_WIG(SUBPD), _r, _ymm, _ymm, _ymm_m256, }, 3038 { ASM_END } 3039 ]; 3040 3041 PTRNTAB2[2] aptb2SUBPS = /* SUBPS */ [ 3042 { SUBPS, _r,_xmm,_xmm_m128 }, 3043 { ASM_END } 3044 ]; 3045 3046 PTRNTAB3[3] aptb3VSUBPS = /* VSUBPS */ [ 3047 { VEX_NDS_128_WIG(SUBPS), _r, _xmm, _xmm, _xmm_m128, }, 3048 { VEX_NDS_256_WIG(SUBPS), _r, _ymm, _ymm, _ymm_m256, }, 3049 { ASM_END } 3050 ]; 3051 3052 PTRNTAB2[2] aptb2SUBSD = /* SUBSD */ [ 3053 { SUBSD, _r,_xmm,_xmm_m64 }, 3054 { ASM_END } 3055 ]; 3056 3057 PTRNTAB3[2] aptb3VSUBSD = /* VSUBSD */ [ 3058 { VEX_NDS_128_WIG(SUBSD), _r, _xmm, _xmm, _xmm_m64, }, 3059 { ASM_END } 3060 ]; 3061 3062 PTRNTAB2[2] aptb2SUBSS = /* SUBSS */ [ 3063 { SUBSS, _r,_xmm,_xmm_m32 }, 3064 { ASM_END } 3065 ]; 3066 3067 PTRNTAB3[2] aptb3VSUBSS = /* VSUBSS */ [ 3068 { VEX_NDS_128_WIG(SUBSS), _r, _xmm, _xmm, _xmm_m32, }, 3069 { ASM_END } 3070 ]; 3071 3072 PTRNTAB2[2] aptb2UCOMISD = /* UCOMISD */ [ 3073 { UCOMISD, _r,_xmm,_xmm_m64 }, 3074 { ASM_END } 3075 ]; 3076 3077 PTRNTAB2[2] aptb2VUCOMISD = /* VUCOMISD */ [ 3078 { VEX_128_WIG(UCOMISD), _r,_xmm,_xmm_m64 }, 3079 { ASM_END } 3080 ]; 3081 3082 PTRNTAB2[2] aptb2UCOMISS = /* UCOMISS */ [ 3083 { UCOMISS, _r,_xmm,_xmm_m32 }, 3084 { ASM_END } 3085 ]; 3086 3087 PTRNTAB2[2] aptb2VUCOMISS = /* VUCOMISS */ [ 3088 { VEX_128_WIG(UCOMISS), _r,_xmm,_xmm_m32 }, 3089 { ASM_END } 3090 ]; 3091 3092 PTRNTAB2[2] aptb2UNPCKHPD = /* UNPCKHPD */ [ 3093 { UNPCKHPD, _r,_xmm,_xmm_m128 }, 3094 { ASM_END } 3095 ]; 3096 3097 PTRNTAB3[3] aptb3VUNPCKHPD = /* VUNPCKHPD */ [ 3098 { VEX_NDS_128_WIG(UNPCKHPD), _r,_xmm,_xmm,_xmm_m128 }, 3099 { VEX_NDS_256_WIG(UNPCKHPD), _r,_ymm,_ymm,_ymm_m256 }, 3100 { ASM_END } 3101 ]; 3102 3103 PTRNTAB2[2] aptb2UNPCKHPS = /* UNPCKHPS */ [ 3104 { UNPCKHPS, _r,_xmm,_xmm_m128 }, 3105 { ASM_END } 3106 ]; 3107 3108 PTRNTAB3[3] aptb3VUNPCKHPS = /* VUNPCKHPS */ [ 3109 { VEX_NDS_128_WIG(UNPCKHPS), _r,_xmm,_xmm,_xmm_m128 }, 3110 { VEX_NDS_256_WIG(UNPCKHPS), _r,_ymm,_ymm,_ymm_m256 }, 3111 { ASM_END } 3112 ]; 3113 3114 PTRNTAB2[2] aptb2UNPCKLPD = /* UNPCKLPD */ [ 3115 { UNPCKLPD, _r,_xmm,_xmm_m128 }, 3116 { ASM_END } 3117 ]; 3118 3119 PTRNTAB3[3] aptb3VUNPCKLPD = /* VUNPCKLPD */ [ 3120 { VEX_NDS_128_WIG(UNPCKLPD), _r,_xmm,_xmm,_xmm_m128 }, 3121 { VEX_NDS_256_WIG(UNPCKLPD), _r,_ymm,_ymm,_ymm_m256 }, 3122 { ASM_END } 3123 ]; 3124 3125 PTRNTAB2[2] aptb2UNPCKLPS = /* UNPCKLPS */ [ 3126 { UNPCKLPS, _r,_xmm,_xmm_m128 }, 3127 { ASM_END } 3128 ]; 3129 3130 PTRNTAB3[3] aptb3VUNPCKLPS = /* VUNPCKLPS */ [ 3131 { VEX_NDS_128_WIG(UNPCKLPS), _r,_xmm,_xmm,_xmm_m128 }, 3132 { VEX_NDS_256_WIG(UNPCKLPS), _r,_ymm,_ymm,_ymm_m256 }, 3133 { ASM_END } 3134 ]; 3135 3136 PTRNTAB2[2] aptb2XORPD = /* XORPD */ [ 3137 { XORPD, _r,_xmm,_xmm_m128 }, 3138 { ASM_END } 3139 ]; 3140 3141 PTRNTAB3[3] aptb3VXORPD = /* VXORPD */ [ 3142 { VEX_NDS_128_WIG(XORPD), _r,_xmm,_xmm,_xmm_m128 }, 3143 { VEX_NDS_256_WIG(XORPD), _r,_ymm,_ymm,_ymm_m256 }, 3144 { ASM_END } 3145 ]; 3146 3147 PTRNTAB2[2] aptb2XORPS = /* XORPS */ [ 3148 { XORPS, _r,_xmm,_xmm_m128 }, 3149 { ASM_END } 3150 ]; 3151 3152 PTRNTAB3[3] aptb3VXORPS = /* VXORPS */ [ 3153 { VEX_NDS_128_WIG(XORPS), _r,_xmm,_xmm,_xmm_m128 }, 3154 { VEX_NDS_256_WIG(XORPS), _r,_ymm,_ymm,_ymm_m256 }, 3155 { ASM_END } 3156 ]; 3157 3158 /**** AMD only instructions ****/ 3159 3160 /* 3161 pavgusb 3162 pf2id 3163 pfacc 3164 pfadd 3165 pfcmpeq 3166 pfcmpge 3167 pfcmpgt 3168 pfmax 3169 pfmin 3170 pfmul 3171 pfnacc 3172 pfpnacc 3173 pfrcp 3174 pfrcpit1 3175 pfrcpit2 3176 pfrsqit1 3177 pfrsqrt 3178 pfsub 3179 pfsubr 3180 pi2fd 3181 pmulhrw 3182 pswapd 3183 */ 3184 3185 PTRNTAB2[2] aptb2PAVGUSB = /* PAVGUSB */ [ 3186 { 0x0F0FBF, _r,_mm,_mmm64 }, 3187 { ASM_END } 3188 ]; 3189 3190 PTRNTAB2[2] aptb2PF2ID = /* PF2ID */ [ 3191 { 0x0F0F1D, _r,_mm,_mmm64 }, 3192 { ASM_END } 3193 ]; 3194 3195 PTRNTAB2[2] aptb2PFACC = /* PFACC */ [ 3196 { 0x0F0FAE, _r,_mm,_mmm64 }, 3197 { ASM_END } 3198 ]; 3199 3200 PTRNTAB2[2] aptb2PFADD = /* PFADD */ [ 3201 { 0x0F0F9E, _r,_mm,_mmm64 }, 3202 { ASM_END } 3203 ]; 3204 3205 PTRNTAB2[2] aptb2PFCMPEQ = /* PFCMPEQ */ [ 3206 { 0x0F0FB0, _r,_mm,_mmm64 }, 3207 { ASM_END } 3208 ]; 3209 3210 PTRNTAB2[2] aptb2PFCMPGE = /* PFCMPGE */ [ 3211 { 0x0F0F90, _r,_mm,_mmm64 }, 3212 { ASM_END } 3213 ]; 3214 3215 PTRNTAB2[2] aptb2PFCMPGT = /* PFCMPGT */ [ 3216 { 0x0F0FA0, _r,_mm,_mmm64 }, 3217 { ASM_END } 3218 ]; 3219 3220 PTRNTAB2[2] aptb2PFMAX = /* PFMAX */ [ 3221 { 0x0F0FA4, _r,_mm,_mmm64 }, 3222 { ASM_END } 3223 ]; 3224 3225 PTRNTAB2[2] aptb2PFMIN = /* PFMIN */ [ 3226 { 0x0F0F94, _r,_mm,_mmm64 }, 3227 { ASM_END } 3228 ]; 3229 3230 PTRNTAB2[2] aptb2PFMUL = /* PFMUL */ [ 3231 { 0x0F0FB4, _r,_mm,_mmm64 }, 3232 { ASM_END } 3233 ]; 3234 3235 PTRNTAB2[2] aptb2PFNACC = /* PFNACC */ [ 3236 { 0x0F0F8A, _r,_mm,_mmm64 }, 3237 { ASM_END } 3238 ]; 3239 3240 PTRNTAB2[2] aptb2PFPNACC = /* PFPNACC */ [ 3241 { 0x0F0F8E, _r,_mm,_mmm64 }, 3242 { ASM_END } 3243 ]; 3244 3245 PTRNTAB2[2] aptb2PFRCP = /* PFRCP */ [ 3246 { 0x0F0F96, _r,_mm,_mmm64 }, 3247 { ASM_END } 3248 ]; 3249 3250 PTRNTAB2[2] aptb2PFRCPIT1 = /* PFRCPIT1 */ [ 3251 { 0x0F0FA6, _r,_mm,_mmm64 }, 3252 { ASM_END } 3253 ]; 3254 3255 PTRNTAB2[2] aptb2PFRCPIT2 = /* PFRCPIT2 */ [ 3256 { 0x0F0FB6, _r,_mm,_mmm64 }, 3257 { ASM_END } 3258 ]; 3259 3260 PTRNTAB2[2] aptb2PFRSQIT1 = /* PFRSQIT1 */ [ 3261 { 0x0F0FA7, _r,_mm,_mmm64 }, 3262 { ASM_END } 3263 ]; 3264 3265 PTRNTAB2[2] aptb2PFRSQRT = /* PFRSQRT */ [ 3266 { 0x0F0F97, _r,_mm,_mmm64 }, 3267 { ASM_END } 3268 ]; 3269 3270 PTRNTAB2[2] aptb2PFSUB = /* PFSUB */ [ 3271 { 0x0F0F9A, _r,_mm,_mmm64 }, 3272 { ASM_END } 3273 ]; 3274 3275 PTRNTAB2[2] aptb2PFSUBR = /* PFSUBR */ [ 3276 { 0x0F0FAA, _r,_mm,_mmm64 }, 3277 { ASM_END } 3278 ]; 3279 3280 PTRNTAB2[2] aptb2PI2FD = /* PI2FD */ [ 3281 { 0x0F0F0D, _r,_mm,_mmm64 }, 3282 { ASM_END } 3283 ]; 3284 3285 PTRNTAB2[2] aptb2PMULHRW = /* PMULHRW */ [ 3286 { 0x0F0FB7, _r,_mm,_mmm64 }, 3287 { ASM_END } 3288 ]; 3289 3290 PTRNTAB2[2] aptb2PSWAPD = /* PSWAPD */ [ 3291 { 0x0F0FBB, _r,_mm,_mmm64 }, 3292 { ASM_END } 3293 ]; 3294 3295 /* ======================= Pentium 4 (Prescott) ======================= */ 3296 3297 /* 3298 ADDSUBPD 3299 ADDSUBPS 3300 FISTTP 3301 HADDPD 3302 HADDPS 3303 HSUBPD 3304 HSUBPS 3305 LDDQU 3306 MONITOR 3307 MOVDDUP 3308 MOVSHDUP 3309 MOVSLDUP 3310 MWAIT 3311 */ 3312 3313 PTRNTAB1[4] aptb1FISTTP = /* FISTTP */ [ 3314 { 0xdf, _1, _m16 }, 3315 { 0xdb, _1, _m32 }, 3316 { 0xdd, _1, _fm64 }, 3317 { ASM_END } 3318 ]; 3319 3320 PTRNTAB0[1] aptb0MONITOR = /* MONITOR */ [ 3321 { MONITOR, 0 } 3322 ]; 3323 3324 PTRNTAB0[1] aptb0MWAIT = /* MWAIT */ [ 3325 { MWAIT, 0 } 3326 ]; 3327 3328 PTRNTAB2[2] aptb2ADDSUBPD = /* ADDSUBPD */ [ 3329 { ADDSUBPD, _r,_xmm,_xmm_m128 }, // xmm1,xmm2/m128 3330 { ASM_END } 3331 ]; 3332 3333 PTRNTAB3[3] aptb3VADDSUBPD = /* VADDSUBPD */ [ 3334 { VEX_NDS_128_WIG(ADDSUBPD), _r, _xmm, _xmm, _xmm_m128, }, 3335 { VEX_NDS_256_WIG(ADDSUBPD), _r, _ymm, _ymm, _ymm_m256, }, 3336 { ASM_END } 3337 ]; 3338 3339 PTRNTAB2[2] aptb2ADDSUBPS = /* ADDSUBPS */ [ 3340 { ADDSUBPS, _r,_xmm,_xmm_m128 }, // xmm1,xmm2/m128 3341 { ASM_END } 3342 ]; 3343 3344 PTRNTAB3[3] aptb3VADDSUBPS = /* VADDSUBPS */ [ 3345 { VEX_NDS_128_WIG(ADDSUBPS), _r, _xmm, _xmm, _xmm_m128, }, 3346 { VEX_NDS_256_WIG(ADDSUBPS), _r, _ymm, _ymm, _ymm_m256, }, 3347 { ASM_END } 3348 ]; 3349 3350 PTRNTAB2[2] aptb2HADDPD = /* HADDPD */ [ 3351 { HADDPD, _r,_xmm,_xmm_m128 }, // xmm1,xmm2/m128 3352 { ASM_END } 3353 ]; 3354 3355 PTRNTAB3[3] aptb3VHADDPD = /* VHADDPD */ [ 3356 { VEX_NDS_128_WIG(HADDPD), _r, _xmm, _xmm, _xmm_m128 }, 3357 { VEX_NDS_256_WIG(HADDPD), _r, _ymm, _ymm, _ymm_m256 }, 3358 { ASM_END } 3359 ]; 3360 3361 PTRNTAB2[2] aptb2HADDPS = /* HADDPS */ [ 3362 { HADDPS, _r,_xmm,_xmm_m128 }, // xmm1,xmm2/m128 3363 { ASM_END } 3364 ]; 3365 3366 PTRNTAB3[3] aptb3VHADDPS = /* VHADDPS */ [ 3367 { VEX_NDS_128_WIG(HADDPS), _r, _xmm, _xmm, _xmm_m128 }, 3368 { VEX_NDS_256_WIG(HADDPS), _r, _ymm, _ymm, _ymm_m256 }, 3369 { ASM_END } 3370 ]; 3371 3372 PTRNTAB2[2] aptb2HSUBPD = /* HSUBPD */ [ 3373 { HSUBPD, _r,_xmm,_xmm_m128 }, // xmm1,xmm2/m128 3374 { ASM_END } 3375 ]; 3376 3377 PTRNTAB2[2] aptb2HSUBPS = /* HSUBPS */ [ 3378 { HSUBPS, _r,_xmm,_xmm_m128 }, // xmm1,xmm2/m128 3379 { ASM_END } 3380 ]; 3381 3382 PTRNTAB2[2] aptb2LDDQU = /* LDDQU */ [ 3383 { LDDQU, _r,_xmm,_m128 }, // xmm1,mem 3384 { ASM_END } 3385 ]; 3386 3387 PTRNTAB2[3] aptb2VLDDQU = /* VLDDQU */ [ 3388 { VEX_128_WIG(LDDQU), _r, _xmm, _m128 }, 3389 { VEX_256_WIG(LDDQU), _r, _ymm, _m256 }, 3390 { ASM_END } 3391 ]; 3392 3393 PTRNTAB2[2] aptb2MOVDDUP = /* MOVDDUP */ [ 3394 { MOVDDUP, _r,_xmm,_xmm_m64 }, // xmm1,xmm2/m64 3395 { ASM_END } 3396 ]; 3397 3398 PTRNTAB2[3] aptb2VMOVDDUP = /* VMOVDDUP */ [ 3399 { VEX_128_WIG(MOVDDUP), _r,_xmm,_xmm_m64 }, 3400 { VEX_256_WIG(MOVDDUP), _r,_ymm,_ymm_m256 }, 3401 { ASM_END } 3402 ]; 3403 3404 PTRNTAB2[2] aptb2MOVSHDUP = /* MOVSHDUP */ [ 3405 { MOVSHDUP, _r,_xmm,_xmm_m128 }, // xmm1,xmm2/m128 3406 { ASM_END } 3407 ]; 3408 3409 PTRNTAB2[3] aptb2VMOVSHDUP = /* VMOVSHDUP */ [ 3410 { VEX_128_WIG(MOVSHDUP), _r,_xmm,_xmm_m128 }, 3411 { VEX_256_WIG(MOVSHDUP), _r,_ymm,_ymm_m256 }, 3412 { ASM_END } 3413 ]; 3414 3415 PTRNTAB2[2] aptb2MOVSLDUP = /* MOVSLDUP */ [ 3416 { MOVSLDUP, _r,_xmm,_xmm_m128 }, // xmm1,xmm2/m128 3417 { ASM_END } 3418 ]; 3419 3420 PTRNTAB2[3] aptb2VMOVSLDUP = /* VMOVSLDUP */ [ 3421 { VEX_128_WIG(MOVSLDUP), _r,_xmm,_xmm_m128 }, 3422 { VEX_256_WIG(MOVSLDUP), _r,_ymm,_ymm_m256 }, 3423 { ASM_END } 3424 ]; 3425 3426 /* ======================= SSSE3 ======================= */ 3427 3428 /* 3429 palignr 3430 phaddd 3431 phaddw 3432 phaddsw 3433 phsubd 3434 phsubw 3435 phsubsw 3436 pmaddubsw 3437 pmulhrsw 3438 pshufb 3439 pabsb 3440 pabsd 3441 pabsw 3442 psignb 3443 psignd 3444 psignw 3445 */ 3446 3447 PTRNTAB3[3] aptb3PALIGNR = /* PALIGNR */ [ 3448 { 0x0F3A0F, _r,_mm,_mmm64, _imm8 }, 3449 { PALIGNR, _r,_xmm,_xmm_m128, _imm8 }, 3450 { ASM_END } 3451 ]; 3452 3453 PTRNTAB4[2] aptb4VPALIGNR = /* VPALIGNR */ [ 3454 { VEX_NDS_128_WIG(PALIGNR), _r,_xmm,_xmm,_xmm_m128, _imm8 }, 3455 { ASM_END } 3456 ]; 3457 3458 PTRNTAB2[3] aptb2PHADDD = /* PHADDD */ [ 3459 { 0x0F3802, _r,_mm,_mmm64 }, 3460 { PHADDD, _r,_xmm,_xmm_m128 }, 3461 { ASM_END } 3462 ]; 3463 3464 PTRNTAB3[2] aptb3VPHADDD = /* VPHADDD */ [ 3465 { VEX_NDS_128_WIG(PHADDD), _r, _xmm, _xmm, _xmm_m128 }, 3466 { ASM_END } 3467 ]; 3468 3469 PTRNTAB2[3] aptb2PHADDW = /* PHADDW */ [ 3470 { 0x0F3801, _r,_mm,_mmm64 }, 3471 { PHADDW, _r,_xmm,_xmm_m128 }, 3472 { ASM_END } 3473 ]; 3474 3475 PTRNTAB3[2] aptb3VPHADDW = /* VPHADDW */ [ 3476 { VEX_NDS_128_WIG(PHADDW), _r, _xmm, _xmm, _xmm_m128 }, 3477 { ASM_END } 3478 ]; 3479 3480 PTRNTAB2[3] aptb2PHADDSW = /* PHADDSW */ [ 3481 { 0x0F3803, _r,_mm,_mmm64 }, 3482 { PHADDSW, _r,_xmm,_xmm_m128 }, 3483 { ASM_END } 3484 ]; 3485 3486 PTRNTAB3[2] aptb3VPHADDSW = /* VPHADDSW */ [ 3487 { VEX_NDS_128_WIG(PHADDSW), _r, _xmm, _xmm, _xmm_m128 }, 3488 { ASM_END } 3489 ]; 3490 3491 PTRNTAB2[3] aptb2PHSUBD = /* PHSUBD */ [ 3492 { 0x0F3806, _r,_mm,_mmm64 }, 3493 { PHSUBD, _r,_xmm,_xmm_m128 }, 3494 { ASM_END } 3495 ]; 3496 3497 PTRNTAB3[2] aptb3VPHSUBD = /* VPHSUBD */ [ 3498 { VEX_NDS_128_WIG(PHSUBD), _r, _xmm, _xmm, _xmm_m128 }, 3499 { ASM_END } 3500 ]; 3501 3502 PTRNTAB2[3] aptb2PHSUBW = /* PHSUBW */ [ 3503 { 0x0F3805, _r,_mm,_mmm64 }, 3504 { PHSUBW, _r,_xmm,_xmm_m128 }, 3505 { ASM_END } 3506 ]; 3507 3508 PTRNTAB3[2] aptb3VPHSUBW = /* VPHSUBW */ [ 3509 { VEX_NDS_128_WIG(PHSUBW), _r, _xmm, _xmm, _xmm_m128 }, 3510 { ASM_END } 3511 ]; 3512 3513 PTRNTAB2[3] aptb2PHSUBSW = /* PHSUBSW */ [ 3514 { 0x0F3807, _r,_mm,_mmm64 }, 3515 { PHSUBSW, _r,_xmm,_xmm_m128 }, 3516 { ASM_END } 3517 ]; 3518 3519 PTRNTAB3[2] aptb3VPHSUBSW = /* VPHSUBSW */ [ 3520 { VEX_NDS_128_WIG(PHSUBSW), _r, _xmm, _xmm, _xmm_m128 }, 3521 { ASM_END } 3522 ]; 3523 3524 PTRNTAB2[3] aptb2PMADDUBSW = /* PMADDUBSW */ [ 3525 { 0x0F3804, _r,_mm,_mmm64 }, 3526 { PMADDUBSW, _r,_xmm,_xmm_m128 }, 3527 { ASM_END } 3528 ]; 3529 3530 PTRNTAB3[2] aptb3VPMADDUBSW = /* VPMADDUBSW */ [ 3531 { VEX_NDS_128_WIG(PMADDUBSW), _r, _xmm, _xmm, _xmm_m128 }, 3532 { ASM_END } 3533 ]; 3534 3535 PTRNTAB2[3] aptb2PMULHRSW = /* PMULHRSW */ [ 3536 { 0x0F380B, _r,_mm,_mmm64 }, 3537 { PMULHRSW, _r,_xmm,_xmm_m128 }, 3538 { ASM_END } 3539 ]; 3540 3541 PTRNTAB3[2] aptb3VPMULHRSW = /* VPMULHRSW */ [ 3542 { VEX_NDS_128_WIG(PMULHRSW), _r, _xmm, _xmm, _xmm_m128 }, 3543 { ASM_END } 3544 ]; 3545 3546 PTRNTAB2[3] aptb2PSHUFB = /* PSHUFB */ [ 3547 { 0x0F3800, _r,_mm,_mmm64 }, 3548 { PSHUFB, _r,_xmm,_xmm_m128 }, 3549 { ASM_END } 3550 ]; 3551 3552 PTRNTAB3[2] aptb3VPSHUFB = /* VPSHUFB */ [ 3553 { VEX_NDS_128_WIG(PSHUFB), _r,_xmm,_xmm,_xmm_m128 }, 3554 { ASM_END } 3555 ]; 3556 3557 PTRNTAB2[3] aptb2PABSB = /* PABSB */ [ 3558 { 0x0F381C, _r,_mm,_mmm64 }, 3559 { PABSB, _r,_xmm,_xmm_m128 }, 3560 { ASM_END } 3561 ]; 3562 3563 PTRNTAB2[2] aptb2VPABSB = /* VPABSB */ [ 3564 { VEX_128_WIG(PABSB), _r, _xmm, _xmm_m128 }, 3565 { ASM_END } 3566 ]; 3567 3568 3569 PTRNTAB2[3] aptb2PABSD = /* PABSD */ [ 3570 { 0x0F381E, _r,_mm,_mmm64 }, 3571 { PABSD, _r,_xmm,_xmm_m128 }, 3572 { ASM_END } 3573 ]; 3574 3575 PTRNTAB2[2] aptb2VPABSD = /* VPABSD */ [ 3576 { VEX_128_WIG(PABSD), _r, _xmm, _xmm_m128 }, 3577 { ASM_END } 3578 ]; 3579 3580 PTRNTAB2[3] aptb2PABSW = /* PABSW */ [ 3581 { 0x0F381D, _r,_mm,_mmm64 }, 3582 { PABSW, _r,_xmm,_xmm_m128 }, 3583 { ASM_END } 3584 ]; 3585 3586 PTRNTAB2[2] aptb2VPABSW = /* VPABSW */ [ 3587 { VEX_128_WIG(PABSW), _r, _xmm, _xmm_m128 }, 3588 { ASM_END } 3589 ]; 3590 3591 PTRNTAB2[3] aptb2PSIGNB = /* PSIGNB */ [ 3592 { 0x0F3808, _r,_mm,_mmm64 }, 3593 { PSIGNB, _r,_xmm,_xmm_m128 }, 3594 { ASM_END } 3595 ]; 3596 3597 PTRNTAB3[2] aptb3VPSIGNB = /* VPSIGNB */ [ 3598 { VEX_NDS_128_WIG(PSIGNB), _r, _xmm, _xmm, _xmm_m128 }, 3599 { ASM_END } 3600 ]; 3601 3602 PTRNTAB2[3] aptb2PSIGND = /* PSIGND */ [ 3603 { 0x0F380A, _r,_mm,_mmm64 }, 3604 { PSIGND, _r,_xmm,_xmm_m128 }, 3605 { ASM_END } 3606 ]; 3607 3608 PTRNTAB3[2] aptb3VPSIGND = /* VPSIGND */ [ 3609 { VEX_NDS_128_WIG(PSIGND), _r, _xmm, _xmm, _xmm_m128 }, 3610 { ASM_END } 3611 ]; 3612 3613 PTRNTAB2[3] aptb2PSIGNW = /* PSIGNW */ [ 3614 { 0x0F3809, _r,_mm,_mmm64 }, 3615 { PSIGNW, _r,_xmm,_xmm_m128 }, 3616 { ASM_END } 3617 ]; 3618 3619 PTRNTAB3[2] aptb3VPSIGNW = /* VPSIGNW */ [ 3620 { VEX_NDS_128_WIG(PSIGNW), _r, _xmm, _xmm, _xmm_m128 }, 3621 { ASM_END } 3622 ]; 3623 3624 /* ======================= SSE4.1 ======================= */ 3625 3626 /* 3627 blendpd 3628 blendps 3629 blendvpd 3630 blendvps 3631 dppd 3632 dpps 3633 extractps 3634 insertps 3635 movntdqa 3636 mpsadbw 3637 packusdw 3638 pblendvb 3639 pblendw 3640 pcmpeqq 3641 pextrb 3642 pextrd 3643 pextrq 3644 pextrw 3645 phminposuw 3646 pinsrb 3647 pinsrd 3648 pinsrq 3649 pmaxsb 3650 pmaxsd 3651 pmaxud 3652 pmaxuw 3653 pminsb 3654 pminsd 3655 pminud 3656 pminuw 3657 pmovsxbd 3658 pmovsxbq 3659 pmovsxbw 3660 pmovsxwd 3661 pmovsxwq 3662 pmovsxdq 3663 pmovzxbd 3664 pmovzxbq 3665 pmovzxbw 3666 pmovzxwd 3667 pmovzxwq 3668 pmovzxdq 3669 pmuldq 3670 pmulld 3671 ptest 3672 roundpd 3673 roundps 3674 roundsd 3675 roundss 3676 */ 3677 3678 PTRNTAB3[2] aptb3BLENDPD = /* BLENDPD */ [ 3679 { BLENDPD, _r, _xmm, _xmm_m128, _imm8 }, 3680 { ASM_END } 3681 ]; 3682 3683 PTRNTAB4[3] aptb4VBLENDPD = /* VBLENDPD */ [ 3684 { VEX_NDS_128_WIG(BLENDPD), _r, _xmm, _xmm, _xmm_m128, _imm8 }, 3685 { VEX_NDS_256_WIG(BLENDPD), _r, _ymm, _ymm, _ymm_m256, _imm8 }, 3686 { ASM_END } 3687 ]; 3688 3689 PTRNTAB3[2] aptb3BLENDPS = /* BLENDPS */ [ 3690 { BLENDPS, _r, _xmm, _xmm_m128, _imm8 }, 3691 { ASM_END } 3692 ]; 3693 3694 PTRNTAB4[3] aptb4VBLENDPS = /* VBLENDPS */ [ 3695 { VEX_NDS_128_WIG(BLENDPS), _r, _xmm, _xmm, _xmm_m128, _imm8 }, 3696 { VEX_NDS_256_WIG(BLENDPS), _r, _ymm, _ymm, _ymm_m256, _imm8 }, 3697 { ASM_END } 3698 ]; 3699 3700 PTRNTAB3[2] aptb3BLENDVPD = /* BLENDVPD */ [ 3701 { BLENDVPD, _r, _xmm, _xmm_m128, _xmm0 }, 3702 { ASM_END } 3703 ]; 3704 3705 PTRNTAB4[3] aptb4VBLENDVPD = /* VBLENDVPD */ [ 3706 { VEX_NDS_128_WIG(0x660F3A4B), _r, _xmm, _xmm, _xmm_m128, _imm8 }, 3707 { VEX_NDS_256_WIG(0x660F3A4B), _r, _ymm, _ymm, _ymm_m256, _imm8 }, 3708 { ASM_END } 3709 ]; 3710 3711 PTRNTAB3[2] aptb3BLENDVPS = /* BLENDVPS */ [ 3712 { BLENDVPS, _r, _xmm, _xmm_m128, _xmm0 }, 3713 { ASM_END } 3714 ]; 3715 3716 PTRNTAB4[3] aptb4VBLENDVPS = /* VBLENDVPS */ [ 3717 { VEX_NDS_128_WIG(0x660F3A4A), _r, _xmm, _xmm, _xmm_m128, _imm8 }, 3718 { VEX_NDS_256_WIG(0x660F3A4A), _r, _ymm, _ymm, _ymm_m256, _imm8 }, 3719 { ASM_END } 3720 ]; 3721 3722 PTRNTAB3[2] aptb3DPPD = /* DPPD */ [ 3723 { DPPD, _r, _xmm, _xmm_m128, _imm8 }, 3724 { ASM_END } 3725 ]; 3726 3727 PTRNTAB4[2] aptb4VDPPD = /* VDPPD */ [ 3728 { VEX_NDS_128_WIG(DPPD), _r, _xmm, _xmm, _xmm_m128, _imm8 }, 3729 { ASM_END } 3730 ]; 3731 3732 PTRNTAB3[2] aptb3DPPS = /* DPPS */ [ 3733 { DPPS, _r, _xmm, _xmm_m128, _imm8 }, 3734 { ASM_END } 3735 ]; 3736 3737 PTRNTAB4[3] aptb4VDPPS = /* VDPPS */ [ 3738 { VEX_NDS_128_WIG(DPPS), _r, _xmm, _xmm, _xmm_m128, _imm8 }, 3739 { VEX_NDS_256_WIG(DPPS), _r, _ymm, _ymm, _ymm_m256, _imm8 }, 3740 { ASM_END } 3741 ]; 3742 3743 PTRNTAB3[2] aptb3EXTRACTPS = /* EXTRACTPS */ [ 3744 { EXTRACTPS, _r, _rm32, _xmm, _imm8 }, 3745 { ASM_END } 3746 ]; 3747 3748 PTRNTAB3[2] aptb3VEXTRACTPS = /* VEXTRACTPS */ [ 3749 { VEX_128_WIG(EXTRACTPS), _r, _rm32, _xmm, _imm8 }, 3750 { ASM_END } 3751 ]; 3752 3753 PTRNTAB3[2] aptb3INSERTPS = /* INSERTPS */ [ 3754 { INSERTPS, _r, _xmm, _xmm_m32, _imm8 }, 3755 { ASM_END } 3756 ]; 3757 3758 PTRNTAB4[2] aptb4VINSERTPS = /* VINSERTPS */ [ 3759 { VEX_NDS_128_WIG(INSERTPS), _r, _xmm, _xmm, _xmm_m32, _imm8 }, 3760 { ASM_END } 3761 ]; 3762 3763 PTRNTAB2[2] aptb2MOVNTDQA = /* MOVNTDQA */ [ 3764 { MOVNTDQA, _r, _xmm, _m128 }, 3765 { ASM_END } 3766 ]; 3767 3768 PTRNTAB2[2] aptb2VMOVNTDQA = /* VMOVNTDQA */ [ 3769 { VEX_128_WIG(MOVNTDQA), _r, _xmm, _m128 }, 3770 { ASM_END } 3771 ]; 3772 3773 PTRNTAB3[2] aptb3MPSADBW = /* MPSADBW */ [ 3774 { MPSADBW, _r, _xmm, _xmm_m128, _imm8 }, 3775 { ASM_END } 3776 ]; 3777 3778 PTRNTAB4[2] aptb4VMPSADBW = /* VMPSADBW */ [ 3779 { VEX_NDS_128_WIG(MPSADBW), _r, _xmm, _xmm, _xmm_m128, _imm8 }, 3780 { ASM_END } 3781 ]; 3782 3783 PTRNTAB2[2] aptb2PACKUSDW = /* PACKUSDW */ [ 3784 { PACKUSDW, _r, _xmm, _xmm_m128 }, 3785 { ASM_END } 3786 ]; 3787 3788 PTRNTAB3[2] aptb3VPACKUSDW = /* VPACKUSDW */ [ 3789 { VEX_NDS_128_WIG(PACKUSDW), _r, _xmm, _xmm, _xmm_m128 }, 3790 { ASM_END } 3791 ]; 3792 3793 PTRNTAB3[2] aptb3PBLENDVB = /* PBLENDVB */ [ 3794 { PBLENDVB, _r, _xmm, _xmm_m128, _xmm0 }, 3795 { ASM_END } 3796 ]; 3797 3798 PTRNTAB4[2] aptb4VPBLENDVB = /* VPBLENDVB */ [ 3799 { VEX_NDS_128_WIG(0x660F3A4C), _r, _xmm, _xmm, _xmm_m128, _imm8 }, 3800 { ASM_END } 3801 ]; 3802 3803 PTRNTAB3[2] aptb3PBLENDW = /* PBLENDW */ [ 3804 { PBLENDW, _r, _xmm, _xmm_m128, _imm8 }, 3805 { ASM_END } 3806 ]; 3807 3808 PTRNTAB4[2] aptb4VPBLENDW = /* VPBLENDW */ [ 3809 { VEX_NDS_128_WIG(PBLENDW), _r, _xmm, _xmm, _xmm_m128, _imm8 }, 3810 { ASM_END } 3811 ]; 3812 3813 PTRNTAB2[2] aptb2PCMPEQQ = /* PCMPEQQ */ [ 3814 { PCMPEQQ, _r, _xmm, _xmm_m128 }, 3815 { ASM_END } 3816 ]; 3817 3818 PTRNTAB3[2] aptb3VPCMPEQQ = /* VPCMPEQQ */ [ 3819 { VEX_NDS_128_WIG(PCMPEQQ), _r, _xmm, _xmm, _xmm_m128 }, 3820 { ASM_END } 3821 ]; 3822 3823 PTRNTAB3[2] aptb3PEXTRB = /* PEXTRB */ [ 3824 { PEXTRB, _r, _regm8, _xmm, _imm8 }, 3825 { ASM_END } 3826 ]; 3827 3828 PTRNTAB3[2] aptb3VPEXTRB = /* VPEXTRB */ [ 3829 { VEX_128_WIG(PEXTRB), _r, _regm8, _xmm, _imm8 }, 3830 { ASM_END } 3831 ]; 3832 3833 PTRNTAB3[2] aptb3PEXTRD = /* PEXTRD */ [ 3834 { PEXTRD, _r, _rm32, _xmm, _imm8 }, 3835 { ASM_END } 3836 ]; 3837 3838 PTRNTAB3[2] aptb3VPEXTRD = /* VPEXTRD */ [ 3839 { VEX_128_WIG(PEXTRD), _r, _rm32, _xmm, _imm8 }, 3840 { ASM_END } 3841 ]; 3842 3843 PTRNTAB3[2] aptb3PEXTRQ = /* PEXTRQ */ [ 3844 { PEXTRQ, _r|_64_bit, _rm64, _xmm, _imm8 }, 3845 { ASM_END } 3846 ]; 3847 3848 PTRNTAB3[2] aptb3VPEXTRQ = /* VPEXTRQ */ [ 3849 { VEX_128_W1(PEXTRD), _r, _rm64, _xmm, _imm8 }, 3850 { ASM_END } 3851 ]; 3852 3853 PTRNTAB2[2] aptb2PHMINPOSUW = /* PHMINPOSUW */ [ 3854 { PHMINPOSUW, _r, _xmm, _xmm_m128 }, 3855 { ASM_END } 3856 ]; 3857 3858 PTRNTAB2[2] aptb2VPHMINPOSUW = /* VPHMINPOSUW */ [ 3859 { VEX_128_WIG(PHMINPOSUW), _r, _xmm, _xmm_m128 }, 3860 { ASM_END } 3861 ]; 3862 3863 PTRNTAB3[3] aptb3PINSRB = /* PINSRB */ [ 3864 { PINSRB, _r, _xmm, _r32, _imm8 }, 3865 { PINSRB, _r, _xmm, _rm8, _imm8 }, 3866 { ASM_END } 3867 ]; 3868 3869 PTRNTAB4[2] aptb4VPINSRB = /* VPINSRB */ [ 3870 { VEX_NDS_128_WIG(PINSRB), _r, _xmm, _xmm, _r32m8, _imm8 }, 3871 { ASM_END } 3872 ]; 3873 3874 PTRNTAB3[2] aptb3PINSRD = /* PINSRD */ [ 3875 { PINSRD, _r, _xmm, _rm32, _imm8 }, 3876 { ASM_END } 3877 ]; 3878 3879 PTRNTAB4[2] aptb4VPINSRD = /* VPINSRD */ [ 3880 { VEX_NDS_128_WIG(PINSRD), _r, _xmm, _xmm, _rm32, _imm8 }, 3881 { ASM_END } 3882 ]; 3883 3884 PTRNTAB3[2] aptb3PINSRQ = /* PINSRQ */ [ 3885 { PINSRQ, _r|_64_bit, _xmm, _rm64, _imm8 }, 3886 { ASM_END } 3887 ]; 3888 3889 PTRNTAB4[2] aptb4VPINSRQ = /* VPINSRQ */ [ 3890 { VEX_NDS_128_W1(PINSRD), _r, _xmm, _xmm, _rm64, _imm8 }, 3891 { ASM_END } 3892 ]; 3893 3894 PTRNTAB2[2] aptb2PMAXSB = /* PMAXSB */ [ 3895 { PMAXSB, _r, _xmm, _xmm_m128 }, 3896 { ASM_END } 3897 ]; 3898 3899 PTRNTAB3[2] aptb3VPMAXSB = /* VPMAXSB */ [ 3900 { VEX_NDS_128_WIG(PMAXSB), _r, _xmm, _xmm, _xmm_m128 }, 3901 { ASM_END } 3902 ]; 3903 3904 PTRNTAB2[2] aptb2PMAXSD = /* PMAXSD */ [ 3905 { PMAXSD, _r, _xmm, _xmm_m128 }, 3906 { ASM_END } 3907 ]; 3908 3909 PTRNTAB3[2] aptb3VPMAXSD = /* VPMAXSD */ [ 3910 { VEX_NDS_128_WIG(PMAXSD), _r, _xmm, _xmm, _xmm_m128 }, 3911 { ASM_END } 3912 ]; 3913 3914 PTRNTAB2[2] aptb2PMAXUD = /* PMAXUD */ [ 3915 { PMAXUD, _r, _xmm, _xmm_m128 }, 3916 { ASM_END } 3917 ]; 3918 3919 PTRNTAB3[2] aptb3VPMAXUD = /* VPMAXUD */ [ 3920 { VEX_NDS_128_WIG(PMAXUD), _r, _xmm, _xmm, _xmm_m128 }, 3921 { ASM_END } 3922 ]; 3923 3924 PTRNTAB2[2] aptb2PMAXUW = /* PMAXUW */ [ 3925 { PMAXUW, _r, _xmm, _xmm_m128 }, 3926 { ASM_END } 3927 ]; 3928 3929 PTRNTAB3[2] aptb3VPMAXUW = /* VPMAXUW */ [ 3930 { VEX_NDS_128_WIG(PMAXUW), _r, _xmm, _xmm, _xmm_m128 }, 3931 { ASM_END } 3932 ]; 3933 3934 PTRNTAB2[2] aptb2PMINSB = /* PMINSB */ [ 3935 { PMINSB, _r, _xmm, _xmm_m128 }, 3936 { ASM_END } 3937 ]; 3938 3939 PTRNTAB3[2] aptb3VPMINSB = /* VPMINSB */ [ 3940 { VEX_NDS_128_WIG(PMINSB), _r, _xmm, _xmm, _xmm_m128 }, 3941 { ASM_END } 3942 ]; 3943 3944 PTRNTAB2[2] aptb2PMINSD = /* PMINSD */ [ 3945 { PMINSD, _r, _xmm, _xmm_m128 }, 3946 { ASM_END } 3947 ]; 3948 3949 PTRNTAB3[2] aptb3VPMINSD = /* VPMINSD */ [ 3950 { VEX_NDS_128_WIG(PMINSD), _r, _xmm, _xmm, _xmm_m128 }, 3951 { ASM_END } 3952 ]; 3953 3954 PTRNTAB2[2] aptb2PMINUD = /* PMINUD */ [ 3955 { PMINUD, _r, _xmm, _xmm_m128 }, 3956 { ASM_END } 3957 ]; 3958 3959 PTRNTAB3[2] aptb3VPMINUD = /* VPMINUD */ [ 3960 { VEX_NDS_128_WIG(PMINUD), _r, _xmm, _xmm, _xmm_m128 }, 3961 { ASM_END } 3962 ]; 3963 3964 PTRNTAB2[2] aptb2PMINUW = /* PMINUW */ [ 3965 { PMINUW, _r, _xmm, _xmm_m128 }, 3966 { ASM_END } 3967 ]; 3968 3969 PTRNTAB3[2] aptb3VPMINUW = /* VPMINUW */ [ 3970 { VEX_NDS_128_WIG(PMINUW), _r, _xmm, _xmm, _xmm_m128 }, 3971 { ASM_END } 3972 ]; 3973 3974 PTRNTAB2[2] aptb2PMOVSXBW = /* PMOVSXBW */ [ 3975 { PMOVSXBW, _r, _xmm, _xmm_m64 }, 3976 { ASM_END } 3977 ]; 3978 3979 PTRNTAB2[2] aptb2VPMOVSXBW = /* VPMOVSXBW */ [ 3980 { VEX_128_WIG(PMOVSXBW), _r, _xmm, _xmm_m64 }, 3981 { ASM_END } 3982 ]; 3983 3984 PTRNTAB2[2] aptb2PMOVSXBD = /* PMOVSXBD */ [ 3985 { PMOVSXBD, _r, _xmm, _xmm_m32 }, 3986 { ASM_END } 3987 ]; 3988 3989 PTRNTAB2[2] aptb2VPMOVSXBD = /* VPMOVSXBD */ [ 3990 { VEX_128_WIG(PMOVSXBD), _r, _xmm, _xmm_m32 }, 3991 { ASM_END } 3992 ]; 3993 3994 PTRNTAB2[2] aptb2PMOVSXBQ = /* PMOVSXBQ */ [ 3995 { PMOVSXBQ, _r, _xmm, _xmm_m16 }, 3996 { ASM_END } 3997 ]; 3998 3999 PTRNTAB2[2] aptb2VPMOVSXBQ = /* VPMOVSXBQ */ [ 4000 { VEX_128_WIG(PMOVSXBQ), _r, _xmm, _xmm_m16 }, 4001 { ASM_END } 4002 ]; 4003 4004 PTRNTAB2[2] aptb2PMOVSXWD = /* PMOVSXWD */ [ 4005 { PMOVSXWD, _r, _xmm, _xmm_m64 }, 4006 { ASM_END } 4007 ]; 4008 4009 PTRNTAB2[2] aptb2VPMOVSXWD = /* VPMOVSXWD */ [ 4010 { VEX_128_WIG(PMOVSXWD), _r, _xmm, _xmm_m64 }, 4011 { ASM_END } 4012 ]; 4013 4014 PTRNTAB2[2] aptb2PMOVSXWQ = /* PMOVSXWQ */ [ 4015 { PMOVSXWQ, _r, _xmm, _xmm_m32 }, 4016 { ASM_END } 4017 ]; 4018 4019 PTRNTAB2[2] aptb2VPMOVSXWQ = /* VPMOVSXWQ */ [ 4020 { VEX_128_WIG(PMOVSXWQ), _r, _xmm, _xmm_m32 }, 4021 { ASM_END } 4022 ]; 4023 4024 PTRNTAB2[2] aptb2PMOVSXDQ = /* PMOVSXDQ */ [ 4025 { PMOVSXDQ, _r, _xmm, _xmm_m64 }, 4026 { ASM_END } 4027 ]; 4028 4029 PTRNTAB2[2] aptb2VPMOVSXDQ = /* VPMOVSXDQ */ [ 4030 { VEX_128_WIG(PMOVSXDQ), _r, _xmm, _xmm_m64 }, 4031 { ASM_END } 4032 ]; 4033 4034 PTRNTAB2[2] aptb2PMOVZXBW = /* PMOVZXBW */ [ 4035 { PMOVZXBW, _r, _xmm, _xmm_m64 }, 4036 { ASM_END } 4037 ]; 4038 4039 PTRNTAB2[2] aptb2VPMOVZXBW = /* VPMOVZXBW */ [ 4040 { VEX_128_WIG(PMOVZXBW), _r, _xmm, _xmm_m64 }, 4041 { ASM_END } 4042 ]; 4043 4044 PTRNTAB2[2] aptb2PMOVZXBD = /* PMOVZXBD */ [ 4045 { PMOVZXBD, _r, _xmm, _xmm_m32 }, 4046 { ASM_END } 4047 ]; 4048 4049 PTRNTAB2[2] aptb2VPMOVZXBD = /* VPMOVZXBD */ [ 4050 { VEX_128_WIG(PMOVZXBD), _r, _xmm, _xmm_m32 }, 4051 { ASM_END } 4052 ]; 4053 4054 PTRNTAB2[2] aptb2PMOVZXBQ = /* PMOVZXBQ */ [ 4055 { PMOVZXBQ, _r, _xmm, _xmm_m16 }, 4056 { ASM_END } 4057 ]; 4058 4059 PTRNTAB2[2] aptb2VPMOVZXBQ = /* VPMOVZXBQ */ [ 4060 { VEX_128_WIG(PMOVZXBQ), _r, _xmm, _xmm_m16 }, 4061 { ASM_END } 4062 ]; 4063 4064 PTRNTAB2[2] aptb2PMOVZXWD = /* PMOVZXWD */ [ 4065 { PMOVZXWD, _r, _xmm, _xmm_m64 }, 4066 { ASM_END } 4067 ]; 4068 4069 PTRNTAB2[2] aptb2VPMOVZXWD = /* VPMOVZXWD */ [ 4070 { VEX_128_WIG(PMOVZXWD), _r, _xmm, _xmm_m64 }, 4071 { ASM_END } 4072 ]; 4073 4074 PTRNTAB2[2] aptb2PMOVZXWQ = /* PMOVZXWQ */ [ 4075 { PMOVZXWQ, _r, _xmm, _xmm_m32 }, 4076 { ASM_END } 4077 ]; 4078 4079 PTRNTAB2[2] aptb2VPMOVZXWQ = /* VPMOVZXWQ */ [ 4080 { VEX_128_WIG(PMOVZXWQ), _r, _xmm, _xmm_m32 }, 4081 { ASM_END } 4082 ]; 4083 4084 PTRNTAB2[2] aptb2PMOVZXDQ = /* PMOVZXDQ */ [ 4085 { PMOVZXDQ, _r, _xmm, _xmm_m64 }, 4086 { ASM_END } 4087 ]; 4088 4089 PTRNTAB2[2] aptb2VPMOVZXDQ = /* VPMOVZXDQ */ [ 4090 { VEX_128_WIG(PMOVZXDQ), _r, _xmm, _xmm_m64 }, 4091 { ASM_END } 4092 ]; 4093 4094 PTRNTAB2[2] aptb2PMULDQ = /* PMULDQ */ [ 4095 { PMULDQ, _r, _xmm, _xmm_m128 }, 4096 { ASM_END } 4097 ]; 4098 4099 PTRNTAB3[2] aptb3VPMULDQ = /* VPMULDQ */ [ 4100 { VEX_NDS_128_WIG(PMULDQ), _r, _xmm, _xmm, _xmm_m128 }, 4101 { ASM_END } 4102 ]; 4103 4104 PTRNTAB2[2] aptb2PMULLD = /* PMULLD */ [ 4105 { PMULLD, _r, _xmm, _xmm_m128 }, 4106 { ASM_END } 4107 ]; 4108 4109 PTRNTAB3[2] aptb3VPMULLD = /* VPMULLD */ [ 4110 { VEX_NDS_128_WIG(PMULLD), _r, _xmm, _xmm, _xmm_m128 }, 4111 { ASM_END } 4112 ]; 4113 4114 PTRNTAB2[2] aptb2PTEST = /* PTEST */ [ 4115 { PTEST, _r, _xmm, _xmm_m128 }, 4116 { ASM_END } 4117 ]; 4118 4119 PTRNTAB2[3] aptb2VPTEST = /* VPTEST */ [ 4120 { VEX_128_WIG(PTEST), _r, _xmm, _xmm_m128 }, 4121 { VEX_256_WIG(PTEST), _r, _ymm, _ymm_m256 }, 4122 { ASM_END } 4123 ]; 4124 4125 PTRNTAB3[2] aptb3ROUNDPD = /* ROUNDPD */ [ 4126 { ROUNDPD, _r, _xmm, _xmm_m128, _imm8 }, 4127 { ASM_END } 4128 ]; 4129 4130 PTRNTAB3[3] aptb3VROUNDPD = /* VROUNDPD */ [ 4131 { VEX_128_WIG(ROUNDPD), _r, _xmm, _xmm_m128, _imm8 }, 4132 { VEX_256_WIG(ROUNDPD), _r, _ymm, _ymm_m256, _imm8 }, 4133 { ASM_END } 4134 ]; 4135 4136 PTRNTAB3[2] aptb3ROUNDPS = /* ROUNDPS */ [ 4137 { ROUNDPS, _r, _xmm, _xmm_m128, _imm8 }, 4138 { ASM_END } 4139 ]; 4140 4141 PTRNTAB3[3] aptb3VROUNDPS = /* VROUNDPS */ [ 4142 { VEX_128_WIG(ROUNDPS), _r, _xmm, _xmm_m128, _imm8 }, 4143 { VEX_256_WIG(ROUNDPS), _r, _ymm, _ymm_m256, _imm8 }, 4144 { ASM_END } 4145 ]; 4146 4147 PTRNTAB3[2] aptb3ROUNDSD = /* ROUNDSD */ [ 4148 { ROUNDSD, _r, _xmm, _xmm_m64, _imm8 }, 4149 { ASM_END } 4150 ]; 4151 4152 PTRNTAB4[2] aptb4VROUNDSD = /* VROUNDSD */ [ 4153 { VEX_NDS_128_WIG(ROUNDSD), _r, _xmm, _xmm, _xmm_m64, _imm8 }, 4154 { ASM_END } 4155 ]; 4156 4157 PTRNTAB3[2] aptb3ROUNDSS = /* ROUNDSS */ [ 4158 { ROUNDSS, _r, _xmm, _xmm_m32, _imm8 }, 4159 { ASM_END } 4160 ]; 4161 4162 PTRNTAB4[2] aptb4VROUNDSS = /* VROUNDSS */ [ 4163 { VEX_NDS_128_WIG(ROUNDSS), _r, _xmm, _xmm, _xmm_m32, _imm8 }, 4164 { ASM_END } 4165 ]; 4166 4167 /* ======================= SSE4.2 ======================= */ 4168 4169 /* 4170 crc32 4171 pcmpestri 4172 pcmpestrm 4173 pcmpistri 4174 pcmpistrm 4175 pcmpgtq 4176 popcnt 4177 */ 4178 4179 PTRNTAB2[6] aptb2CRC32 = /* CRC32 */ [ 4180 { 0xF20F38F0, _r , _r32, _rm8 }, 4181 { 0xF20F38F0, _r|_64_bit, _r64, _rm8 }, 4182 { 0xF20F38F1, _r|_16_bit, _r32, _rm16 }, 4183 { 0xF20F38F1, _r|_32_bit, _r32, _rm32 }, 4184 { 0xF20F38F1, _r|_64_bit, _r64, _rm64 }, 4185 { ASM_END } 4186 ]; 4187 4188 PTRNTAB3[2] aptb3PCMPESTRI = /* PCMPESTRI */ [ 4189 { PCMPESTRI, _r|_modcx , _xmm, _xmm_m128, _imm8 }, 4190 { ASM_END } 4191 ]; 4192 4193 PTRNTAB3[2] aptb3VPCMPESTRI = /* VPCMPESTRI */ [ 4194 { VEX_128_WIG(PCMPESTRI), _r|_modcx, _xmm, _xmm_m128, _imm8 }, 4195 { ASM_END } 4196 ]; 4197 4198 PTRNTAB3[2] aptb3PCMPESTRM = /* PCMPESTRM */ [ 4199 { PCMPESTRM, _r|_modxmm0, _xmm, _xmm_m128, _imm8 }, 4200 { ASM_END } 4201 ]; 4202 4203 PTRNTAB3[2] aptb3VPCMPESTRM = /* VPCMPESTRM */ [ 4204 { VEX_128_WIG(PCMPESTRM), _r|_modxmm0, _xmm, _xmm_m128, _imm8 }, 4205 { ASM_END } 4206 ]; 4207 4208 PTRNTAB3[2] aptb3PCMPISTRI = /* PCMPISTRI */ [ 4209 { PCMPISTRI, _r|_modcx , _xmm, _xmm_m128, _imm8 }, 4210 { ASM_END } 4211 ]; 4212 4213 PTRNTAB3[2] aptb3VPCMPISTRI = /* VPCMPISTRI */ [ 4214 { VEX_128_WIG(PCMPISTRI), _r|_modcx, _xmm, _xmm_m128, _imm8 }, 4215 { ASM_END } 4216 ]; 4217 4218 PTRNTAB3[2] aptb3PCMPISTRM = /* PCMPISTRM */ [ 4219 { PCMPISTRM, _r|_modxmm0, _xmm, _xmm_m128, _imm8 }, 4220 { ASM_END } 4221 ]; 4222 4223 PTRNTAB3[2] aptb3VPCMPISTRM = /* VPCMPISTRM */ [ 4224 { VEX_128_WIG(PCMPISTRM), _r, _xmm, _xmm_m128, _imm8 }, 4225 { ASM_END } 4226 ]; 4227 4228 PTRNTAB2[2] aptb2PCMPGTQ = /* PCMPGTQ */ [ 4229 { PCMPGTQ, _r, _xmm, _xmm_m128 }, 4230 { ASM_END } 4231 ]; 4232 4233 PTRNTAB3[2] aptb3VPCMPGTQ = /* VPCMPGTQ */ [ 4234 { VEX_NDS_128_WIG(PCMPGTQ), _r, _xmm, _xmm, _xmm_m128 }, 4235 { ASM_END } 4236 ]; 4237 4238 PTRNTAB2[4] aptb2POPCNT = /* POPCNT */ [ 4239 { POPCNT, _r|_16_bit, _r16, _rm16 }, 4240 { POPCNT, _r|_32_bit, _r32, _rm32 }, 4241 { POPCNT, _r|_64_bit, _r64, _rm64 }, 4242 { ASM_END } 4243 ]; 4244 4245 /* ======================= VMS ======================= */ 4246 4247 /* 4248 invept 4249 invvpid 4250 vmcall 4251 vmclear 4252 vmlaunch 4253 vmresume 4254 vmptrld 4255 vmptrst 4256 vmread 4257 vmwrite 4258 vmxoff 4259 vmxon 4260 */ 4261 4262 /* ======================= SMX ======================= */ 4263 4264 /* 4265 getsec 4266 */ 4267 4268 /* ======================= CLMUL ======================= */ 4269 4270 PTRNTAB3[2] aptb3PCLMULQDQ = /* PCLMULQDQ */ [ 4271 { 0x660F3A44, _r, _xmm, _xmm_m128, _imm8 }, 4272 { ASM_END } 4273 ]; 4274 4275 PTRNTAB4[2] aptb4VPCLMULQDQ = /* VPCLMULQDQ */ [ 4276 { VEX_NDS_128_WIG(0x660F3A44), _r, _xmm, _xmm, _xmm_m128, _imm8 }, 4277 { ASM_END } 4278 ]; 4279 4280 /* ======================= AVX ======================= */ 4281 4282 PTRNTAB2[2] aptb2VBROADCASTF128 = /* VBROADCASTF128 */ [ 4283 { VEX_256_WIG(0x660F381A), _r, _ymm, _m128 }, 4284 { ASM_END } 4285 ]; 4286 4287 PTRNTAB2[2] aptb2VBROADCASTSD = /* VBROADCASTSD */ [ 4288 { VEX_256_WIG(0x660F3819), _r, _ymm, _m64 }, 4289 { ASM_END } 4290 ]; 4291 4292 PTRNTAB2[3] aptb2VBROADCASTSS = /* VBROADCASTSS */ [ 4293 { VEX_128_WIG(0x660F3818), _r, _xmm, _m32 }, 4294 { VEX_256_WIG(0x660F3818), _r, _ymm, _m32 }, 4295 { ASM_END } 4296 ]; 4297 4298 PTRNTAB3[2] aptb3VEXTRACTF128 = /* VEXTRACTF128 */ [ 4299 { VEX_256_WIG(0x660F3A19), _r, _xmm_m128, _ymm, _imm8 }, 4300 { ASM_END } 4301 ]; 4302 4303 PTRNTAB4[2] aptb4VINSERTF128 = /* VINSERTF128 */ [ 4304 { VEX_NDS_256_WIG(0x660F3A18), _r, _ymm, _ymm, _xmm_m128, _imm8 }, 4305 { ASM_END } 4306 ]; 4307 4308 PTRNTAB3[5] aptb3VMASKMOVPS = /* VMASKMOVPS */ [ 4309 { VEX_NDS_128_WIG(0x660F382C), _r, _xmm, _xmm, _m128 }, 4310 { VEX_NDS_256_WIG(0x660F382C), _r, _ymm, _ymm, _m256 }, 4311 { VEX_NDS_128_WIG(0x660F382E), _r, _m128, _xmm, _xmm }, 4312 { VEX_NDS_256_WIG(0x660F382E), _r, _m256, _ymm, _ymm }, 4313 { ASM_END } 4314 ]; 4315 4316 PTRNTAB3[5] aptb3VMASKMOVPD = /* VMASKMOVPD */ [ 4317 { VEX_NDS_128_WIG(0x660F382D), _r, _xmm, _xmm, _m128 }, 4318 { VEX_NDS_256_WIG(0x660F382D), _r, _ymm, _ymm, _m256 }, 4319 { VEX_NDS_128_WIG(0x660F382F), _r, _m128, _xmm, _xmm }, 4320 { VEX_NDS_256_WIG(0x660F382F), _r, _m256, _ymm, _ymm }, 4321 { ASM_END } 4322 ]; 4323 4324 PTRNTAB0[2] aptb0VZEROALL = /* VZEROALL */ [ 4325 { VEX_256_WIG(0x0F77), _modall }, // FIXME: need _modxmm 4326 { ASM_END }, 4327 ]; 4328 4329 PTRNTAB0[2] aptb0VZEROUPPER = /* VZEROUPPER */ [ 4330 { VEX_128_WIG(0x0F77), _modall }, // FIXME: need _modxmm 4331 { ASM_END }, 4332 ]; 4333 4334 PTRNTAB0[2] aptb0XGETBV = /* XGETBV */ [ 4335 { XGETBV, _modaxdx }, 4336 { ASM_END }, 4337 ]; 4338 4339 PTRNTAB1[2] aptb1XRSTOR = /* XRSTOR */ [ 4340 { 0x0FAE, _5, _m512 }, 4341 { ASM_END } 4342 ]; 4343 4344 PTRNTAB1[2] aptb1XRSTOR64 = /* XRSTOR64 */ [ 4345 { 0x0FAE, _5|_64_bit, _m512 }, // TODO: REX_W override is implicit 4346 { ASM_END } 4347 ]; 4348 4349 PTRNTAB1[2] aptb1XSAVE = /* XSAVE */ [ 4350 { 0x0FAE, _4, _m512 }, 4351 { ASM_END } 4352 ]; 4353 4354 PTRNTAB1[2] aptb1XSAVE64 = /* XSAVE64 */ [ 4355 { 0x0FAE, _4|_64_bit, _m512 }, // TODO: REX_W override is implicit 4356 { ASM_END } 4357 ]; 4358 4359 PTRNTAB1[2] aptb1XSAVEC = /* XSAVEC */ [ 4360 { 0x0FC7, _4, _m512 }, 4361 { ASM_END } 4362 ]; 4363 4364 PTRNTAB1[2] aptb1XSAVEC64 = /* XSAVEC64 */ [ 4365 { 0x0FC7, _4|_64_bit, _m512 }, // TODO: REX_W override is implicit 4366 { ASM_END } 4367 ]; 4368 4369 PTRNTAB1[2] aptb1XSAVEOPT = /* XSAVEOPT */ [ 4370 { 0x0FAE, _6, _m512 }, 4371 { ASM_END } 4372 ]; 4373 4374 PTRNTAB1[2] aptb1XSAVEOPT64 = /* XSAVEOPT64 */ [ 4375 { 0x0FAE, _6|_64_bit, _m512 }, // TODO: REX_W override is implicit 4376 { ASM_END } 4377 ]; 4378 4379 PTRNTAB0[2] aptb0XSETBV = /* XSETBV */ [ 4380 { XSETBV, 0 }, 4381 { ASM_END }, 4382 ]; 4383 4384 PTRNTAB3[5] aptb3VPERMILPD = /* VPERMILPD */ [ 4385 { VEX_NDS_128_WIG(0x660F380D), _r, _xmm, _xmm, _xmm_m128 }, 4386 { VEX_NDS_256_WIG(0x660F380D), _r, _ymm, _ymm, _ymm_m256 }, 4387 { VEX_128_WIG(0x660F3A05), _r, _xmm, _xmm_m128, _imm8 }, 4388 { VEX_256_WIG(0x660F3A05), _r, _ymm, _ymm_m256, _imm8 }, 4389 { ASM_END }, 4390 ]; 4391 4392 PTRNTAB3[5] aptb3VPERMILPS = /* VPERMILPS */ [ 4393 { VEX_NDS_128_WIG(0x660F380C), _r, _xmm, _xmm, _xmm_m128 }, 4394 { VEX_NDS_256_WIG(0x660F380C), _r, _ymm, _ymm, _ymm_m256 }, 4395 { VEX_128_WIG(0x660F3A04), _r, _xmm, _xmm_m128, _imm8 }, 4396 { VEX_256_WIG(0x660F3A04), _r, _ymm, _ymm_m256, _imm8 }, 4397 { ASM_END }, 4398 ]; 4399 4400 PTRNTAB4[2] aptb3VPERM2F128 = /* VPERM2F128 */ [ 4401 { VEX_NDS_256_WIG(0x660F3A06), _r, _ymm, _ymm, _ymm_m256, _imm8 }, 4402 { ASM_END }, 4403 ]; 4404 4405 /* ======================= AES ======================= */ 4406 4407 PTRNTAB2[2] aptb2AESENC = /* AESENC */ [ 4408 { AESENC, _r, _xmm, _xmm_m128 }, 4409 { ASM_END }, 4410 ]; 4411 4412 PTRNTAB3[2] aptb3VAESENC = /* VAESENC */ [ 4413 { VEX_NDS_128_WIG(AESENC), _r, _xmm, _xmm, _xmm_m128 }, 4414 { ASM_END }, 4415 ]; 4416 4417 PTRNTAB2[2] aptb2AESENCLAST = /* AESENCLAST */ [ 4418 { AESENCLAST, _r, _xmm, _xmm_m128 }, 4419 { ASM_END }, 4420 ]; 4421 4422 PTRNTAB3[2] aptb3VAESENCLAST = /* VAESENCLAST */ [ 4423 { VEX_NDS_128_WIG(AESENCLAST), _r, _xmm, _xmm, _xmm_m128 }, 4424 { ASM_END }, 4425 ]; 4426 4427 PTRNTAB2[2] aptb2AESDEC = /* AESDEC */ [ 4428 { AESDEC, _r, _xmm, _xmm_m128 }, 4429 { ASM_END }, 4430 ]; 4431 4432 PTRNTAB3[2] aptb3VAESDEC = /* VAESDEC */ [ 4433 { VEX_NDS_128_WIG(AESDEC), _r, _xmm, _xmm, _xmm_m128 }, 4434 { ASM_END }, 4435 ]; 4436 4437 PTRNTAB2[2] aptb2AESDECLAST = /* AESDECLAST */ [ 4438 { AESDECLAST, _r, _xmm, _xmm_m128 }, 4439 { ASM_END }, 4440 ]; 4441 4442 PTRNTAB3[2] aptb3VAESDECLAST = /* VAESDECLAST */ [ 4443 { VEX_NDS_128_WIG(AESDECLAST), _r, _xmm, _xmm, _xmm_m128 }, 4444 { ASM_END }, 4445 ]; 4446 4447 PTRNTAB2[2] aptb2AESIMC = /* AESIMC */ [ 4448 { AESIMC, _r, _xmm, _xmm_m128 }, 4449 { ASM_END }, 4450 ]; 4451 4452 PTRNTAB2[2] aptb2VAESIMC = /* VAESIMC */ [ 4453 { VEX_128_WIG(AESIMC), _r, _xmm, _xmm_m128 }, 4454 { ASM_END }, 4455 ]; 4456 4457 PTRNTAB3[2] aptb3AESKEYGENASSIST = /* AESKEYGENASSIST */ [ 4458 { AESKEYGENASSIST, _r, _xmm, _xmm_m128, _imm8 }, 4459 { ASM_END }, 4460 ]; 4461 4462 PTRNTAB3[2] aptb3VAESKEYGENASSIST = /* VAESKEYGENASSIST */ [ 4463 { VEX_128_WIG(AESKEYGENASSIST), _r, _xmm, _xmm_m128, _imm8 }, 4464 { ASM_END }, 4465 ]; 4466 4467 /* ======================= FSGSBASE ======================= */ 4468 4469 PTRNTAB1[3] aptb1RDFSBASE = /* RDFSBASE */ [ 4470 { 0xF30FAE, _0, _r32 }, 4471 { 0xF30FAE, _0|_64_bit, _r64 }, 4472 { ASM_END }, 4473 ]; 4474 4475 PTRNTAB1[3] aptb1RDGSBASE = /* RDGSBASE */ [ 4476 { 0xF30FAE, _1, _r32 }, 4477 { 0xF30FAE, _1|_64_bit, _r64 }, 4478 { ASM_END }, 4479 ]; 4480 4481 PTRNTAB1[3] aptb1WRFSBASE = /* WRFSBASE */ [ 4482 { 0xF30FAE, _2, _r32 }, 4483 { 0xF30FAE, _2|_64_bit, _r64 }, 4484 { ASM_END }, 4485 ]; 4486 4487 PTRNTAB1[3] aptb1WRGSBASE = /* WRGSBASE */ [ 4488 { 0xF30FAE, _3, _r32 }, 4489 { 0xF30FAE, _3|_64_bit, _r64 }, 4490 { ASM_END }, 4491 ]; 4492 4493 /* ======================= RDRAND ======================= */ 4494 4495 PTRNTAB1[4] aptb1RDRAND = /* RDRAND */ [ 4496 { 0x0FC7, _6|_16_bit, _r16 }, 4497 { 0x0FC7, _6|_32_bit, _r32 }, 4498 { 0x0FC7, _6|_64_bit, _r64 }, 4499 { ASM_END }, 4500 ]; 4501 4502 /* ======================= RDSEED ======================= */ 4503 4504 PTRNTAB1[4] aptb1RDSEED = /* RDSEED */ [ 4505 { 0x0FC7, _7|_16_bit, _r16 }, 4506 { 0x0FC7, _7|_32_bit, _r32 }, 4507 { 0x0FC7, _7|_64_bit, _r64 }, 4508 { ASM_END }, 4509 ]; 4510 4511 /* ======================= FP16C ======================= */ 4512 4513 PTRNTAB2[3] aptb2VCVTPH2PS = /* VCVTPH2PS */ [ 4514 { VEX_128_WIG(0x660F3813), _r, _xmm, _xmm_m64 }, 4515 { VEX_256_WIG(0x660F3813), _r, _ymm, _xmm_m128 }, 4516 { ASM_END }, 4517 ]; 4518 4519 PTRNTAB3[3] aptb3VCVTPS2PH = /* VCVTPS2PH */ [ 4520 { VEX_128_WIG(0x660F3A1D), _r, _xmm_m64, _xmm, _imm8 }, 4521 { VEX_256_WIG(0x660F3A1D), _r, _xmm_m128, _ymm, _imm8 }, 4522 { ASM_END }, 4523 ]; 4524 4525 /* ======================= FMA ======================= */ 4526 4527 PTRNTAB3[3] aptb3VFMADD132PD = /* VFMADD132PD */ [ 4528 { VEX_DDS_128_W1(0x660F3898), _r, _xmm, _xmm, _xmm_m128 }, 4529 { VEX_DDS_256_W1(0x660F3898), _r, _ymm, _ymm, _ymm_m256 }, 4530 { ASM_END }, 4531 ]; 4532 4533 PTRNTAB3[3] aptb3VFMADD213PD = /* VFMADD213PD */ [ 4534 { VEX_DDS_128_W1(0x660F38A8), _r, _xmm, _xmm, _xmm_m128 }, 4535 { VEX_DDS_256_W1(0x660F38A8), _r, _ymm, _ymm, _ymm_m256 }, 4536 { ASM_END }, 4537 ]; 4538 4539 PTRNTAB3[3] aptb3VFMADD231PD = /* VFMADD231PD */ [ 4540 { VEX_DDS_128_W1(0x660F38B8), _r, _xmm, _xmm, _xmm_m128 }, 4541 { VEX_DDS_256_W1(0x660F38B8), _r, _ymm, _ymm, _ymm_m256 }, 4542 { ASM_END }, 4543 ]; 4544 4545 PTRNTAB3[3] aptb3VFMADD132PS = /* VFMADD132PS */ [ 4546 { VEX_DDS_128_WIG(0x660F3898), _r, _xmm, _xmm, _xmm_m128 }, 4547 { VEX_DDS_256_WIG(0x660F3898), _r, _ymm, _ymm, _ymm_m256 }, 4548 { ASM_END }, 4549 ]; 4550 4551 PTRNTAB3[3] aptb3VFMADD213PS = /* VFMADD213PS */ [ 4552 { VEX_DDS_128_WIG(0x660F38A8), _r, _xmm, _xmm, _xmm_m128 }, 4553 { VEX_DDS_256_WIG(0x660F38A8), _r, _ymm, _ymm, _ymm_m256 }, 4554 { ASM_END }, 4555 ]; 4556 4557 PTRNTAB3[3] aptb3VFMADD231PS = /* VFMADD231PS */ [ 4558 { VEX_DDS_128_WIG(0x660F38B8), _r, _xmm, _xmm, _xmm_m128 }, 4559 { VEX_DDS_256_WIG(0x660F38B8), _r, _ymm, _ymm, _ymm_m256 }, 4560 { ASM_END }, 4561 ]; 4562 4563 PTRNTAB3[2] aptb3VFMADD132SD = /* VFMADD132SD */ [ 4564 { VEX_DDS_128_W1(0x660F3899), _r, _xmm, _xmm, _xmm_m128 }, 4565 { ASM_END }, 4566 ]; 4567 4568 PTRNTAB3[2] aptb3VFMADD213SD = /* VFMADD213SD */ [ 4569 { VEX_DDS_128_W1(0x660F38A9), _r, _xmm, _xmm, _xmm_m128 }, 4570 { ASM_END }, 4571 ]; 4572 4573 PTRNTAB3[2] aptb3VFMADD231SD = /* VFMADD231SD */ [ 4574 { VEX_DDS_128_W1(0x660F38B9), _r, _xmm, _xmm, _xmm_m128 }, 4575 { ASM_END }, 4576 ]; 4577 4578 PTRNTAB3[2] aptb3VFMADD132SS = /* VFMADD132SS */ [ 4579 { VEX_DDS_128_WIG(0x660F3899), _r, _xmm, _xmm, _xmm_m128 }, 4580 { ASM_END }, 4581 ]; 4582 4583 PTRNTAB3[2] aptb3VFMADD213SS = /* VFMADD213SS */ [ 4584 { VEX_DDS_128_WIG(0x660F38A9), _r, _xmm, _xmm, _xmm_m128 }, 4585 { ASM_END }, 4586 ]; 4587 4588 PTRNTAB3[2] aptb3VFMADD231SS = /* VFMADD231SS */ [ 4589 { VEX_DDS_128_WIG(0x660F38B9), _r, _xmm, _xmm, _xmm_m128 }, 4590 { ASM_END }, 4591 ]; 4592 4593 PTRNTAB3[3] aptb3VFMADDSUB132PD = /* VFMADDSUB132PD */ [ 4594 { VEX_DDS_128_W1(0x660F3896), _r, _xmm, _xmm, _xmm_m128 }, 4595 { VEX_DDS_256_W1(0x660F3896), _r, _ymm, _ymm, _ymm_m256 }, 4596 { ASM_END }, 4597 ]; 4598 4599 PTRNTAB3[3] aptb3VFMADDSUB213PD = /* VFMADDSUB213PD */ [ 4600 { VEX_DDS_128_W1(0x660F38A6), _r, _xmm, _xmm, _xmm_m128 }, 4601 { VEX_DDS_256_W1(0x660F38A6), _r, _ymm, _ymm, _ymm_m256 }, 4602 { ASM_END }, 4603 ]; 4604 4605 PTRNTAB3[3] aptb3VFMADDSUB231PD = /* VFMADDSUB231PD */ [ 4606 { VEX_DDS_128_W1(0x660F38B6), _r, _xmm, _xmm, _xmm_m128 }, 4607 { VEX_DDS_256_W1(0x660F38B6), _r, _ymm, _ymm, _ymm_m256 }, 4608 { ASM_END }, 4609 ]; 4610 4611 PTRNTAB3[3] aptb3VFMADDSUB132PS = /* VFMADDSUB132PS */ [ 4612 { VEX_DDS_128_WIG(0x660F3896), _r, _xmm, _xmm, _xmm_m128 }, 4613 { VEX_DDS_256_WIG(0x660F3896), _r, _ymm, _ymm, _ymm_m256 }, 4614 { ASM_END }, 4615 ]; 4616 4617 PTRNTAB3[3] aptb3VFMADDSUB213PS = /* VFMADDSUB213PS */ [ 4618 { VEX_DDS_128_WIG(0x660F38A6), _r, _xmm, _xmm, _xmm_m128 }, 4619 { VEX_DDS_256_WIG(0x660F38A6), _r, _ymm, _ymm, _ymm_m256 }, 4620 { ASM_END }, 4621 ]; 4622 4623 PTRNTAB3[3] aptb3VFMADDSUB231PS = /* VFMADDSUB231PS */ [ 4624 { VEX_DDS_128_WIG(0x660F38B6), _r, _xmm, _xmm, _xmm_m128 }, 4625 { VEX_DDS_256_WIG(0x660F38B6), _r, _ymm, _ymm, _ymm_m256 }, 4626 { ASM_END }, 4627 ]; 4628 4629 PTRNTAB3[3] aptb3VFMSUBADD132PD = /* VFMSUBADD132PD */ [ 4630 { VEX_DDS_128_W1(0x660F3897), _r, _xmm, _xmm, _xmm_m128 }, 4631 { VEX_DDS_256_W1(0x660F3897), _r, _ymm, _ymm, _ymm_m256 }, 4632 { ASM_END }, 4633 ]; 4634 4635 PTRNTAB3[3] aptb3VFMSUBADD213PD = /* VFMSUBADD213PD */ [ 4636 { VEX_DDS_128_W1(0x660F38A7), _r, _xmm, _xmm, _xmm_m128 }, 4637 { VEX_DDS_256_W1(0x660F38A7), _r, _ymm, _ymm, _ymm_m256 }, 4638 { ASM_END }, 4639 ]; 4640 4641 PTRNTAB3[3] aptb3VFMSUBADD231PD = /* VFMSUBADD231PD */ [ 4642 { VEX_DDS_128_W1(0x660F38B7), _r, _xmm, _xmm, _xmm_m128 }, 4643 { VEX_DDS_256_W1(0x660F38B7), _r, _ymm, _ymm, _ymm_m256 }, 4644 { ASM_END }, 4645 ]; 4646 4647 PTRNTAB3[3] aptb3VFMSUBADD132PS = /* VFMSUBADD132PS */ [ 4648 { VEX_DDS_128_WIG(0x660F3897), _r, _xmm, _xmm, _xmm_m128 }, 4649 { VEX_DDS_256_WIG(0x660F3897), _r, _ymm, _ymm, _ymm_m256 }, 4650 { ASM_END }, 4651 ]; 4652 4653 PTRNTAB3[3] aptb3VFMSUBADD213PS = /* VFMSUBADD213PS */ [ 4654 { VEX_DDS_128_WIG(0x660F38A7), _r, _xmm, _xmm, _xmm_m128 }, 4655 { VEX_DDS_256_WIG(0x660F38A7), _r, _ymm, _ymm, _ymm_m256 }, 4656 { ASM_END }, 4657 ]; 4658 4659 PTRNTAB3[3] aptb3VFMSUBADD231PS = /* VFMSUBADD231PS */ [ 4660 { VEX_DDS_128_WIG(0x660F38B7), _r, _xmm, _xmm, _xmm_m128 }, 4661 { VEX_DDS_256_WIG(0x660F38B7), _r, _ymm, _ymm, _ymm_m256 }, 4662 { ASM_END }, 4663 ]; 4664 4665 PTRNTAB3[3] aptb3VFMSUB132PD = /* VFMSUB132PD */ [ 4666 { VEX_DDS_128_W1(0x660F389A), _r, _xmm, _xmm, _xmm_m128 }, 4667 { VEX_DDS_256_W1(0x660F389A), _r, _ymm, _ymm, _ymm_m256 }, 4668 { ASM_END }, 4669 ]; 4670 4671 PTRNTAB3[3] aptb3VFMSUB213PD = /* VFMSUB213PD */ [ 4672 { VEX_DDS_128_W1(0x660F38AA), _r, _xmm, _xmm, _xmm_m128 }, 4673 { VEX_DDS_256_W1(0x660F38AA), _r, _ymm, _ymm, _ymm_m256 }, 4674 { ASM_END }, 4675 ]; 4676 4677 PTRNTAB3[3] aptb3VFMSUB231PD = /* VFMSUB231PD */ [ 4678 { VEX_DDS_128_W1(0x660F38BA), _r, _xmm, _xmm, _xmm_m128 }, 4679 { VEX_DDS_256_W1(0x660F38BA), _r, _ymm, _ymm, _ymm_m256 }, 4680 { ASM_END }, 4681 ]; 4682 4683 PTRNTAB3[3] aptb3VFMSUB132PS = /* VFMSUB132PS */ [ 4684 { VEX_DDS_128_WIG(0x660F389A), _r, _xmm, _xmm, _xmm_m128 }, 4685 { VEX_DDS_256_WIG(0x660F389A), _r, _ymm, _ymm, _ymm_m256 }, 4686 { ASM_END }, 4687 ]; 4688 4689 PTRNTAB3[3] aptb3VFMSUB213PS = /* VFMSUB213PS */ [ 4690 { VEX_DDS_128_WIG(0x660F38AA), _r, _xmm, _xmm, _xmm_m128 }, 4691 { VEX_DDS_256_WIG(0x660F38AA), _r, _ymm, _ymm, _ymm_m256 }, 4692 { ASM_END }, 4693 ]; 4694 4695 PTRNTAB3[3] aptb3VFMSUB231PS = /* VFMSUB231PS */ [ 4696 { VEX_DDS_128_WIG(0x660F38BA), _r, _xmm, _xmm, _xmm_m128 }, 4697 { VEX_DDS_256_WIG(0x660F38BA), _r, _ymm, _ymm, _ymm_m256 }, 4698 { ASM_END }, 4699 ]; 4700 4701 PTRNTAB3[2] aptb3VFMSUB132SD = /* VFMSUB132SD */ [ 4702 { VEX_DDS_128_W1(0x660F389B), _r, _xmm, _xmm, _xmm_m128 }, 4703 { ASM_END }, 4704 ]; 4705 4706 PTRNTAB3[2] aptb3VFMSUB213SD = /* VFMSUB213SD */ [ 4707 { VEX_DDS_128_W1(0x660F38AB), _r, _xmm, _xmm, _xmm_m128 }, 4708 { ASM_END }, 4709 ]; 4710 4711 PTRNTAB3[2] aptb3VFMSUB231SD = /* VFMSUB231SD */ [ 4712 { VEX_DDS_128_W1(0x660F38BB), _r, _xmm, _xmm, _xmm_m128 }, 4713 { ASM_END }, 4714 ]; 4715 4716 PTRNTAB3[2] aptb3VFMSUB132SS = /* VFMSUB132SS */ [ 4717 { VEX_DDS_128_WIG(0x660F389B), _r, _xmm, _xmm, _xmm_m128 }, 4718 { ASM_END }, 4719 ]; 4720 4721 PTRNTAB3[2] aptb3VFMSUB213SS = /* VFMSUB213SS */ [ 4722 { VEX_DDS_128_WIG(0x660F38AB), _r, _xmm, _xmm, _xmm_m128 }, 4723 { ASM_END }, 4724 ]; 4725 4726 PTRNTAB3[2] aptb3VFMSUB231SS = /* VFMSUB231SS */ [ 4727 { VEX_DDS_128_WIG(0x660F38BB), _r, _xmm, _xmm, _xmm_m128 }, 4728 { ASM_END }, 4729 ]; 4730 4731 /* ======================= SHA ======================= */ 4732 4733 PTRNTAB3[2] aptb3SHA1RNDS4 = /* SHA1RNDS4 */ [ 4734 { 0x0F3ACC, _ib, _xmm, _xmm_m128, _imm8 }, 4735 { ASM_END }, 4736 ]; 4737 4738 PTRNTAB2[2] aptb2SHA1NEXTE = /* SHA1NEXTE */ [ 4739 { 0x0F38C8, _r, _xmm, _xmm_m128 }, 4740 { ASM_END } 4741 ]; 4742 4743 PTRNTAB2[2] aptb2SHA1MSG1 = /* SHA1MSG1 */ [ 4744 { 0x0F38C9, _r, _xmm, _xmm_m128 }, 4745 { ASM_END } 4746 ]; 4747 4748 PTRNTAB2[2] aptb2SHA1MSG2 = /* SHA1MSG2 */ [ 4749 { 0x0F38CA, _r, _xmm, _xmm_m128 }, 4750 { ASM_END } 4751 ]; 4752 4753 PTRNTAB2[2] aptb2SHA256RNDS2 = /* SHA256RNDS2 */ [ 4754 { 0x0F38CB, _r, _xmm, _xmm_m128 }, 4755 { ASM_END } 4756 ]; 4757 4758 PTRNTAB2[2] aptb2SHA256MSG1 = /* SHA256MSG1 */ [ 4759 { 0x0F38CC, _r, _xmm, _xmm_m128 }, 4760 { ASM_END } 4761 ]; 4762 4763 PTRNTAB2[2] aptb2SHA256MSG2 = /* SHA256MSG2 */ [ 4764 { 0x0F38CD, _r, _xmm, _xmm_m128 }, 4765 { ASM_END } 4766 ]; 4767 4768 } 4769 4770 ////////////////////////////////////////////////////////////////////// 4771 4772 4773 // 4774 // usNumops should be 0, 1, 2, or 3 other things are added into it 4775 // for flag indications 4776 // 10, 11, 12, and 13 indicate that it is a special prefix 4777 4778 // 20, 21, 22, and 23 indicate that this statement is a control transfer 4779 // and that a new block should be created when this statement is 4780 // finished. (All Jxx and LOOPxx instructions.) 4781 4782 // 30, 31, 32, 33 are reserved for instructions where the value of an 4783 // immediate operand controls the code generation. 4784 // 40, 41, 42, 43 are reserved for instructions where all of the operands 4785 // are not required 4786 // 50, 51, 52, 53 are reserved for the rotate and shift instructions that 4787 // have extremely strange encodings for the second operand which is sometimes 4788 // used to select an opcode and then discarded. The second operand is 0 4789 // if it is immediate 1, _cl for the CL register and _imm8 for the immediate 4790 // 8 operand. If the operand is an immediate 1 or the cl register, it should 4791 // be discarded and the opcode should be encoded as a 1 operand instruction. 4792 // 4793 // 60, 61, 62, 63 are reserved for floating point coprocessor operations 4794 // 4795 // ITdata is for the DB (_EMIT), DD, DW, DQ, DT pseudo-ops 4796 4797 // BT is a 486 instruction. 4798 // The encoding is 0f C0+reg and it is always a 32 4799 // bit operation 4800 4801 immutable OP[] optab = 4802 [ 4803 // opcode string, number of operators, reference to PTRNTAB 4804 { "__emit", ITdata | OPdb, { null } }, 4805 { "_emit", ITdata | OPdb, { null } }, 4806 { "aaa", 0, { aptb0AAA.ptr } }, 4807 { "aad", 0, { aptb0AAD.ptr } }, 4808 { "aam", 0, { aptb0AAM.ptr } }, 4809 { "aas", 0, { aptb0AAS.ptr } }, 4810 { "adc", 2, { aptb2ADC.ptr } }, 4811 { "add", 2, { aptb2ADD.ptr } }, 4812 { "addpd", 2, { aptb2ADDPD.ptr } }, 4813 { "addps", 2, { aptb2ADDPS.ptr } }, 4814 { "addsd", 2, { aptb2ADDSD.ptr } }, 4815 { "addss", 2, { aptb2ADDSS.ptr } }, 4816 { "addsubpd", 2, { aptb2ADDSUBPD.ptr } }, 4817 { "addsubps", 2, { aptb2ADDSUBPS.ptr } }, 4818 { "aesdec", 2, { aptb2AESDEC.ptr } }, 4819 { "aesdeclast", 2, { aptb2AESDECLAST.ptr } }, 4820 { "aesenc", 2, { aptb2AESENC.ptr } }, 4821 { "aesenclast", 2, { aptb2AESENCLAST.ptr } }, 4822 { "aesimc", 2, { aptb2AESIMC.ptr } }, 4823 { "aeskeygenassist", 3, { aptb3AESKEYGENASSIST.ptr } }, 4824 { "and", 2, { aptb2AND.ptr } }, 4825 { "andnpd", 2, { aptb2ANDNPD.ptr } }, 4826 { "andnps", 2, { aptb2ANDNPS.ptr } }, 4827 { "andpd", 2, { aptb2ANDPD.ptr } }, 4828 { "andps", 2, { aptb2ANDPS.ptr } }, 4829 { "arpl", 2, { aptb2ARPL.ptr } }, 4830 { "blendpd", 3, { aptb3BLENDPD.ptr } }, 4831 { "blendps", 3, { aptb3BLENDPS.ptr } }, 4832 { "blendvpd", 3, { aptb3BLENDVPD.ptr } }, 4833 { "blendvps", 3, { aptb3BLENDVPS.ptr } }, 4834 { "bound", 2, { aptb2BOUND.ptr } }, 4835 { "bsf", 2, { aptb2BSF.ptr } }, 4836 { "bsr", 2, { aptb2BSR.ptr } }, 4837 { "bswap", 1, { aptb1BSWAP.ptr } }, 4838 { "bt", 2, { aptb2BT.ptr } }, 4839 { "btc", 2, { aptb2BTC.ptr } }, 4840 { "btr", 2, { aptb2BTR.ptr } }, 4841 { "bts", 2, { aptb2BTS.ptr } }, 4842 { "call", ITjump | 1, { aptb1CALL.ptr } }, 4843 { "cbw", 0, { aptb0CBW.ptr } }, 4844 { "cdq", 0, { aptb0CDQ.ptr } }, 4845 { "cdqe", 0, { aptb0CDQE.ptr } }, 4846 { "clc", 0, { aptb0CLC.ptr } }, 4847 { "cld", 0, { aptb0CLD.ptr } }, 4848 { "clflush", 1, { aptb1CLFLUSH.ptr } }, 4849 { "cli", 0, { aptb0CLI.ptr } }, 4850 { "clts", 0, { aptb0CLTS.ptr } }, 4851 { "cmc", 0, { aptb0CMC.ptr } }, 4852 { "cmova", 2, { aptb2CMOVNBE.ptr } }, 4853 { "cmovae", 2, { aptb2CMOVNB.ptr } }, 4854 { "cmovb", 2, { aptb2CMOVB.ptr } }, 4855 { "cmovbe", 2, { aptb2CMOVBE.ptr } }, 4856 { "cmovc", 2, { aptb2CMOVB.ptr } }, 4857 { "cmove", 2, { aptb2CMOVZ.ptr } }, 4858 { "cmovg", 2, { aptb2CMOVNLE.ptr } }, 4859 { "cmovge", 2, { aptb2CMOVNL.ptr } }, 4860 { "cmovl", 2, { aptb2CMOVL.ptr } }, 4861 { "cmovle", 2, { aptb2CMOVLE.ptr } }, 4862 { "cmovna", 2, { aptb2CMOVBE.ptr } }, 4863 { "cmovnae", 2, { aptb2CMOVB.ptr } }, 4864 { "cmovnb", 2, { aptb2CMOVNB.ptr } }, 4865 { "cmovnbe", 2, { aptb2CMOVNBE.ptr } }, 4866 { "cmovnc", 2, { aptb2CMOVNB.ptr } }, 4867 { "cmovne", 2, { aptb2CMOVNZ.ptr } }, 4868 { "cmovng", 2, { aptb2CMOVLE.ptr } }, 4869 { "cmovnge", 2, { aptb2CMOVL.ptr } }, 4870 { "cmovnl", 2, { aptb2CMOVNL.ptr } }, 4871 { "cmovnle", 2, { aptb2CMOVNLE.ptr } }, 4872 { "cmovno", 2, { aptb2CMOVNO.ptr } }, 4873 { "cmovnp", 2, { aptb2CMOVNP.ptr } }, 4874 { "cmovns", 2, { aptb2CMOVNS.ptr } }, 4875 { "cmovnz", 2, { aptb2CMOVNZ.ptr } }, 4876 { "cmovo", 2, { aptb2CMOVO.ptr } }, 4877 { "cmovp", 2, { aptb2CMOVP.ptr } }, 4878 { "cmovpe", 2, { aptb2CMOVP.ptr } }, 4879 { "cmovpo", 2, { aptb2CMOVNP.ptr } }, 4880 { "cmovs", 2, { aptb2CMOVS.ptr } }, 4881 { "cmovz", 2, { aptb2CMOVZ.ptr } }, 4882 { "cmp", 2, { aptb2CMP.ptr } }, 4883 { "cmppd", 3, { aptb3CMPPD.ptr } }, 4884 { "cmpps", 3, { aptb3CMPPS.ptr } }, 4885 { "cmps", 2, { aptb2CMPS.ptr } }, 4886 { "cmpsb", 0, { aptb0CMPSB.ptr } }, 4887 /*{ "cmpsd", 0, { aptb0CMPSD.ptr } },*/ 4888 { "cmpsd", ITopt|3, { aptb3CMPSD.ptr } }, 4889 { "cmpsq", 0, { aptb0CMPSQ.ptr } }, 4890 { "cmpss", 3, { aptb3CMPSS.ptr } }, 4891 { "cmpsw", 0, { aptb0CMPSW.ptr } }, 4892 { "cmpxchg", 2, { aptb2CMPXCHG.ptr } }, 4893 { "cmpxchg16b", 1, { aptb1CMPXCHG16B.ptr } }, 4894 { "cmpxchg8b", 1, { aptb1CMPXCHG8B.ptr } }, 4895 { "comisd", 2, { aptb2COMISD.ptr } }, 4896 { "comiss", 2, { aptb2COMISS.ptr } }, 4897 { "cpuid", 0, { aptb0CPUID.ptr } }, 4898 { "cqo", 0, { aptb0CQO.ptr } }, 4899 { "crc32", 2, { aptb2CRC32.ptr } }, 4900 { "cvtdq2pd", 2, { aptb2CVTDQ2PD.ptr } }, 4901 { "cvtdq2ps", 2, { aptb2CVTDQ2PS.ptr } }, 4902 { "cvtpd2dq", 2, { aptb2CVTPD2DQ.ptr } }, 4903 { "cvtpd2pi", 2, { aptb2CVTPD2PI.ptr } }, 4904 { "cvtpd2ps", 2, { aptb2CVTPD2PS.ptr } }, 4905 { "cvtpi2pd", 2, { aptb2CVTPI2PD.ptr } }, 4906 { "cvtpi2ps", 2, { aptb2CVTPI2PS.ptr } }, 4907 { "cvtps2dq", 2, { aptb2CVTPS2DQ.ptr } }, 4908 { "cvtps2pd", 2, { aptb2CVTPS2PD.ptr } }, 4909 { "cvtps2pi", 2, { aptb2CVTPS2PI.ptr } }, 4910 { "cvtsd2si", 2, { aptb2CVTSD2SI.ptr } }, 4911 { "cvtsd2ss", 2, { aptb2CVTSD2SS.ptr } }, 4912 { "cvtsi2sd", 2, { aptb2CVTSI2SD.ptr } }, 4913 { "cvtsi2ss", 2, { aptb2CVTSI2SS.ptr } }, 4914 { "cvtss2sd", 2, { aptb2CVTSS2SD.ptr } }, 4915 { "cvtss2si", 2, { aptb2CVTSS2SI.ptr } }, 4916 { "cvttpd2dq", 2, { aptb2CVTTPD2DQ.ptr } }, 4917 { "cvttpd2pi", 2, { aptb2CVTTPD2PI.ptr } }, 4918 { "cvttps2dq", 2, { aptb2CVTTPS2DQ.ptr } }, 4919 { "cvttps2pi", 2, { aptb2CVTTPS2PI.ptr } }, 4920 { "cvttsd2si", 2, { aptb2CVTTSD2SI.ptr } }, 4921 { "cvttss2si", 2, { aptb2CVTTSS2SI.ptr } }, 4922 { "cwd", 0, { aptb0CWD.ptr } }, 4923 { "cwde", 0, { aptb0CWDE.ptr } }, 4924 { "da", ITaddr | 4, { null } }, 4925 { "daa", 0, { aptb0DAA.ptr } }, 4926 { "das", 0, { aptb0DAS.ptr } }, 4927 { "db", ITdata | OPdb, { null } }, 4928 { "dd", ITdata | OPdd, { null } }, 4929 { "de", ITdata | OPde, { null } }, 4930 { "dec", 1, { aptb1DEC.ptr } }, 4931 { "df", ITdata | OPdf, { null } }, 4932 { "di", ITdata | OPdi, { null } }, 4933 { "div", ITopt | 2, { aptb2DIV.ptr } }, 4934 { "divpd", 2, { aptb2DIVPD.ptr } }, 4935 { "divps", 2, { aptb2DIVPS.ptr } }, 4936 { "divsd", 2, { aptb2DIVSD.ptr } }, 4937 { "divss", 2, { aptb2DIVSS.ptr } }, 4938 { "dl", ITdata | OPdl, { null } }, 4939 { "dppd", 3, { aptb3DPPD.ptr } }, 4940 { "dpps", 3, { aptb3DPPS.ptr } }, 4941 { "dq", ITdata | OPdq, { null } }, 4942 { "ds", ITdata | OPds, { null } }, 4943 { "dt", ITdata | OPdt, { null } }, 4944 { "dw", ITdata | OPdw, { null } }, 4945 { "emms", 0, { aptb0EMMS.ptr } }, 4946 { "enter", 2, { aptb2ENTER.ptr } }, 4947 { "extractps", 3, { aptb3EXTRACTPS.ptr } }, 4948 { "f2xm1", ITfloat | 0, { aptb0F2XM1.ptr } }, 4949 { "fabs", ITfloat | 0, { aptb0FABS.ptr } }, 4950 { "fadd", ITfloat | 2, { aptb2FADD.ptr } }, 4951 { "faddp", ITfloat | 2, { aptb2FADDP.ptr } }, 4952 { "fbld", ITfloat | 1, { aptb1FBLD.ptr } }, 4953 { "fbstp", ITfloat | 1, { aptb1FBSTP.ptr } }, 4954 { "fchs", ITfloat | 0, { aptb0FCHS.ptr } }, 4955 { "fclex", ITfloat | 0, { aptb0FCLEX.ptr } }, 4956 { "fcmovb", ITfloat | 2, { aptb2FCMOVB.ptr } }, 4957 { "fcmovbe", ITfloat | 2, { aptb2FCMOVBE.ptr } }, 4958 { "fcmove", ITfloat | 2, { aptb2FCMOVE.ptr } }, 4959 { "fcmovnb", ITfloat | 2, { aptb2FCMOVNB.ptr } }, 4960 { "fcmovnbe", ITfloat | 2, { aptb2FCMOVNBE.ptr } }, 4961 { "fcmovne", ITfloat | 2, { aptb2FCMOVNE.ptr } }, 4962 { "fcmovnu", ITfloat | 2, { aptb2FCMOVNU.ptr } }, 4963 { "fcmovu", ITfloat | 2, { aptb2FCMOVU.ptr } }, 4964 { "fcom", ITfloat | 1, { aptb1FCOM.ptr } }, 4965 { "fcomi", ITfloat | 2, { aptb2FCOMI.ptr } }, 4966 { "fcomip", ITfloat | 2, { aptb2FCOMIP.ptr } }, 4967 { "fcomp", ITfloat | 1, { aptb1FCOMP.ptr } }, 4968 { "fcompp", ITfloat | 0, { aptb0FCOMPP.ptr } }, 4969 { "fcos", ITfloat | 0, { aptb0FCOS.ptr } }, 4970 { "fdecstp", ITfloat | 0, { aptb0FDECSTP.ptr } }, 4971 { "fdisi", ITfloat | 0, { aptb0FDISI.ptr } }, 4972 { "fdiv", ITfloat | 2, { aptb2FDIV.ptr } }, 4973 { "fdivp", ITfloat | 2, { aptb2FDIVP.ptr } }, 4974 { "fdivr", ITfloat | 2, { aptb2FDIVR.ptr } }, 4975 { "fdivrp", ITfloat | 2, { aptb2FDIVRP.ptr } }, 4976 { "feni", ITfloat | 0, { aptb0FENI.ptr } }, 4977 { "ffree", ITfloat | 1, { aptb1FFREE.ptr } }, 4978 { "fiadd", ITfloat | 2, { aptb2FIADD.ptr } }, 4979 { "ficom", ITfloat | 1, { aptb1FICOM.ptr } }, 4980 { "ficomp", ITfloat | 1, { aptb1FICOMP.ptr } }, 4981 { "fidiv", ITfloat | 2, { aptb2FIDIV.ptr } }, 4982 { "fidivr", ITfloat | 2, { aptb2FIDIVR.ptr } }, 4983 { "fild", ITfloat | 1, { aptb1FILD.ptr } }, 4984 { "fimul", ITfloat | 2, { aptb2FIMUL.ptr } }, 4985 { "fincstp", ITfloat | 0, { aptb0FINCSTP.ptr } }, 4986 { "finit", ITfloat | 0, { aptb0FINIT.ptr } }, 4987 { "fist", ITfloat | 1, { aptb1FIST.ptr } }, 4988 { "fistp", ITfloat | 1, { aptb1FISTP.ptr } }, 4989 { "fisttp", ITfloat | 1, { aptb1FISTTP.ptr } }, 4990 { "fisub", ITfloat | 2, { aptb2FISUB.ptr } }, 4991 { "fisubr", ITfloat | 2, { aptb2FISUBR.ptr } }, 4992 { "fld", ITfloat | 1, { aptb1FLD.ptr } }, 4993 { "fld1", ITfloat | 0, { aptb0FLD1.ptr } }, 4994 { "fldcw", ITfloat | 1, { aptb1FLDCW.ptr } }, 4995 { "fldenv", ITfloat | 1, { aptb1FLDENV.ptr } }, 4996 { "fldl2e", ITfloat | 0, { aptb0FLDL2E.ptr } }, 4997 { "fldl2t", ITfloat | 0, { aptb0FLDL2T.ptr } }, 4998 { "fldlg2", ITfloat | 0, { aptb0FLDLG2.ptr } }, 4999 { "fldln2", ITfloat | 0, { aptb0FLDLN2.ptr } }, 5000 { "fldpi", ITfloat | 0, { aptb0FLDPI.ptr } }, 5001 { "fldz", ITfloat | 0, { aptb0FLDZ.ptr } }, 5002 { "fmul", ITfloat | 2, { aptb2FMUL.ptr } }, 5003 { "fmulp", ITfloat | 2, { aptb2FMULP.ptr } }, 5004 { "fnclex", ITfloat | 0, { aptb0FNCLEX.ptr } }, 5005 { "fndisi", ITfloat | 0, { aptb0FNDISI.ptr } }, 5006 { "fneni", ITfloat | 0, { aptb0FNENI.ptr } }, 5007 { "fninit", ITfloat | 0, { aptb0FNINIT.ptr } }, 5008 { "fnop", ITfloat | 0, { aptb0FNOP.ptr } }, 5009 { "fnsave", ITfloat | 1, { aptb1FNSAVE.ptr } }, 5010 { "fnstcw", ITfloat | 1, { aptb1FNSTCW.ptr } }, 5011 { "fnstenv", ITfloat | 1, { aptb1FNSTENV.ptr } }, 5012 { "fnstsw", 1, { aptb1FNSTSW.ptr } }, 5013 { "fpatan", ITfloat | 0, { aptb0FPATAN.ptr } }, 5014 { "fprem", ITfloat | 0, { aptb0FPREM.ptr } }, 5015 { "fprem1", ITfloat | 0, { aptb0FPREM1.ptr } }, 5016 { "fptan", ITfloat | 0, { aptb0FPTAN.ptr } }, 5017 { "frndint", ITfloat | 0, { aptb0FRNDINT.ptr } }, 5018 { "frstor", ITfloat | 1, { aptb1FRSTOR.ptr } }, 5019 { "fsave", ITfloat | 1, { aptb1FSAVE.ptr } }, 5020 { "fscale", ITfloat | 0, { aptb0FSCALE.ptr } }, 5021 { "fsetpm", ITfloat | 0, { aptb0FSETPM.ptr } }, 5022 { "fsin", ITfloat | 0, { aptb0FSIN.ptr } }, 5023 { "fsincos", ITfloat | 0, { aptb0FSINCOS.ptr } }, 5024 { "fsqrt", ITfloat | 0, { aptb0FSQRT.ptr } }, 5025 { "fst", ITfloat | 1, { aptb1FST.ptr } }, 5026 { "fstcw", ITfloat | 1, { aptb1FSTCW.ptr } }, 5027 { "fstenv", ITfloat | 1, { aptb1FSTENV.ptr } }, 5028 { "fstp", ITfloat | 1, { aptb1FSTP.ptr } }, 5029 { "fstsw", 1, { aptb1FSTSW.ptr } }, 5030 { "fsub", ITfloat | 2, { aptb2FSUB.ptr } }, 5031 { "fsubp", ITfloat | 2, { aptb2FSUBP.ptr } }, 5032 { "fsubr", ITfloat | 2, { aptb2FSUBR.ptr } }, 5033 { "fsubrp", ITfloat | 2, { aptb2FSUBRP.ptr } }, 5034 { "ftst", ITfloat | 0, { aptb0FTST.ptr } }, 5035 { "fucom", ITfloat | 1, { aptb1FUCOM.ptr } }, 5036 { "fucomi", ITfloat | 2, { aptb2FUCOMI.ptr } }, 5037 { "fucomip", ITfloat | 2, { aptb2FUCOMIP.ptr } }, 5038 { "fucomp", ITfloat | 1, { aptb1FUCOMP.ptr } }, 5039 { "fucompp", ITfloat | 0, { aptb0FUCOMPP.ptr } }, 5040 { "fwait", ITfloat | 0, { aptb0FWAIT.ptr } }, 5041 { "fxam", ITfloat | 0, { aptb0FXAM.ptr } }, 5042 { "fxch", ITfloat | 1, { aptb1FXCH.ptr } }, 5043 { "fxrstor", ITfloat | 1, { aptb1FXRSTOR.ptr } }, 5044 { "fxsave", ITfloat | 1, { aptb1FXSAVE.ptr } }, 5045 { "fxtract", ITfloat | 0, { aptb0FXTRACT.ptr } }, 5046 { "fyl2x", ITfloat | 0, { aptb0FYL2X.ptr } }, 5047 { "fyl2xp1", ITfloat | 0, { aptb0FYL2XP1.ptr } }, 5048 { "haddpd", 2, { aptb2HADDPD.ptr } }, 5049 { "haddps", 2, { aptb2HADDPS.ptr } }, 5050 { "hlt", 0, { aptb0HLT.ptr } }, 5051 { "hsubpd", 2, { aptb2HSUBPD.ptr } }, 5052 { "hsubps", 2, { aptb2HSUBPS.ptr } }, 5053 { "idiv", ITopt | 2, { aptb2IDIV.ptr } }, 5054 { "imul", ITopt | 3, { aptb3IMUL.ptr } }, 5055 { "in", 2, { aptb2IN.ptr } }, 5056 { "inc", 1, { aptb1INC.ptr } }, 5057 { "ins", 2, { aptb2INS.ptr } }, 5058 { "insb", 0, { aptb0INSB.ptr } }, 5059 { "insd", 0, { aptb0INSD.ptr } }, 5060 { "insertps", 3, { aptb3INSERTPS.ptr } }, 5061 { "insw", 0, { aptb0INSW.ptr } }, 5062 { "int", ITimmed | 1, { aptb1INT.ptr } }, 5063 { "into", 0, { aptb0INTO.ptr } }, 5064 { "invd", 0, { aptb0INVD.ptr } }, 5065 { "invlpg", 1, { aptb1INVLPG.ptr } }, 5066 { "iret", 0, { aptb0IRET.ptr } }, 5067 { "iretd", 0, { aptb0IRETD.ptr } }, 5068 { "iretq", 0, { aptb0IRETQ.ptr } }, 5069 { "ja", ITjump | 1, { aptb1JNBE.ptr } }, 5070 { "jae", ITjump | 1, { aptb1JNB.ptr } }, 5071 { "jb", ITjump | 1, { aptb1JB.ptr } }, 5072 { "jbe", ITjump | 1, { aptb1JBE.ptr } }, 5073 { "jc", ITjump | 1, { aptb1JB.ptr } }, 5074 { "jcxz", ITjump | 1, { aptb1JCXZ.ptr } }, 5075 { "je", ITjump | 1, { aptb1JZ.ptr } }, 5076 { "jecxz", ITjump | 1, { aptb1JECXZ.ptr } }, 5077 { "jg", ITjump | 1, { aptb1JNLE.ptr } }, 5078 { "jge", ITjump | 1, { aptb1JNL.ptr } }, 5079 { "jl", ITjump | 1, { aptb1JL.ptr } }, 5080 { "jle", ITjump | 1, { aptb1JLE.ptr } }, 5081 { "jmp", ITjump | 1, { aptb1JMP.ptr } }, 5082 { "jna", ITjump | 1, { aptb1JBE.ptr } }, 5083 { "jnae", ITjump | 1, { aptb1JB.ptr } }, 5084 { "jnb", ITjump | 1, { aptb1JNB.ptr } }, 5085 { "jnbe", ITjump | 1, { aptb1JNBE.ptr } }, 5086 { "jnc", ITjump | 1, { aptb1JNB.ptr } }, 5087 { "jne", ITjump | 1, { aptb1JNZ.ptr } }, 5088 { "jng", ITjump | 1, { aptb1JLE.ptr } }, 5089 { "jnge", ITjump | 1, { aptb1JL.ptr } }, 5090 { "jnl", ITjump | 1, { aptb1JNL.ptr } }, 5091 { "jnle", ITjump | 1, { aptb1JNLE.ptr } }, 5092 { "jno", ITjump | 1, { aptb1JNO.ptr } }, 5093 { "jnp", ITjump | 1, { aptb1JNP.ptr } }, 5094 { "jns", ITjump | 1, { aptb1JNS.ptr } }, 5095 { "jnz", ITjump | 1, { aptb1JNZ.ptr } }, 5096 { "jo", ITjump | 1, { aptb1JO.ptr } }, 5097 { "jp", ITjump | 1, { aptb1JP.ptr } }, 5098 { "jpe", ITjump | 1, { aptb1JP.ptr } }, 5099 { "jpo", ITjump | 1, { aptb1JNP.ptr } }, 5100 { "js", ITjump | 1, { aptb1JS.ptr } }, 5101 { "jz", ITjump | 1, { aptb1JZ.ptr } }, 5102 { "lahf", 0, { aptb0LAHF.ptr } }, 5103 { "lar", 2, { aptb2LAR.ptr } }, 5104 { "lddqu", 2, { aptb2LDDQU.ptr } }, 5105 { "ldmxcsr", 1, { aptb1LDMXCSR.ptr } }, 5106 { "lds", 2, { aptb2LDS.ptr } }, 5107 { "lea", 2, { aptb2LEA.ptr } }, 5108 { "leave", 0, { aptb0LEAVE.ptr } }, 5109 { "les", 2, { aptb2LES.ptr } }, 5110 { "lfence", 0, { aptb0LFENCE.ptr } }, 5111 { "lfs", 2, { aptb2LFS.ptr } }, 5112 { "lgdt", 1, { aptb1LGDT.ptr } }, 5113 { "lgs", 2, { aptb2LGS.ptr } }, 5114 { "lidt", 1, { aptb1LIDT.ptr } }, 5115 { "lldt", 1, { aptb1LLDT.ptr } }, 5116 { "lmsw", 1, { aptb1LMSW.ptr } }, 5117 { "lock", ITprefix | 0, { aptb0LOCK.ptr } }, 5118 { "lods", 1, { aptb1LODS.ptr } }, 5119 { "lodsb", 0, { aptb0LODSB.ptr } }, 5120 { "lodsd", 0, { aptb0LODSD.ptr } }, 5121 { "lodsq", 0, { aptb0LODSQ.ptr } }, 5122 { "lodsw", 0, { aptb0LODSW.ptr } }, 5123 { "loop", ITjump | 1, { aptb1LOOP.ptr } }, 5124 { "loope", ITjump | 1, { aptb1LOOPE.ptr } }, 5125 { "loopne", ITjump | 1, { aptb1LOOPNE.ptr } }, 5126 { "loopnz", ITjump | 1, { aptb1LOOPNE.ptr } }, 5127 { "loopz", ITjump | 1, { aptb1LOOPE.ptr } }, 5128 { "lsl", 2, { aptb2LSL.ptr } }, 5129 { "lss", 2, { aptb2LSS.ptr } }, 5130 { "ltr", 1, { aptb1LTR.ptr } }, 5131 { "lzcnt", 2, { aptb2LZCNT.ptr } }, 5132 { "maskmovdqu", 2, { aptb2MASKMOVDQU.ptr } }, 5133 { "maskmovq", 2, { aptb2MASKMOVQ.ptr } }, 5134 { "maxpd", 2, { aptb2MAXPD.ptr } }, 5135 { "maxps", 2, { aptb2MAXPS.ptr } }, 5136 { "maxsd", 2, { aptb2MAXSD.ptr } }, 5137 { "maxss", 2, { aptb2MAXSS.ptr } }, 5138 { "mfence", 0, { aptb0MFENCE.ptr } }, 5139 { "minpd", 2, { aptb2MINPD.ptr } }, 5140 { "minps", 2, { aptb2MINPS.ptr } }, 5141 { "minsd", 2, { aptb2MINSD.ptr } }, 5142 { "minss", 2, { aptb2MINSS.ptr } }, 5143 { "monitor", 0, { aptb0MONITOR.ptr } }, 5144 { "mov", 2, { aptb2MOV.ptr } }, 5145 { "movapd", 2, { aptb2MOVAPD.ptr } }, 5146 { "movaps", 2, { aptb2MOVAPS.ptr } }, 5147 { "movd", 2, { aptb2MOVD.ptr } }, 5148 { "movddup", 2, { aptb2MOVDDUP.ptr } }, 5149 { "movdq2q", 2, { aptb2MOVDQ2Q.ptr } }, 5150 { "movdqa", 2, { aptb2MOVDQA.ptr } }, 5151 { "movdqu", 2, { aptb2MOVDQU.ptr } }, 5152 { "movhlps", 2, { aptb2MOVHLPS.ptr } }, 5153 { "movhpd", 2, { aptb2MOVHPD.ptr } }, 5154 { "movhps", 2, { aptb2MOVHPS.ptr } }, 5155 { "movlhps", 2, { aptb2MOVLHPS.ptr } }, 5156 { "movlpd", 2, { aptb2MOVLPD.ptr } }, 5157 { "movlps", 2, { aptb2MOVLPS.ptr } }, 5158 { "movmskpd", 2, { aptb2MOVMSKPD.ptr } }, 5159 { "movmskps", 2, { aptb2MOVMSKPS.ptr } }, 5160 { "movntdq", 2, { aptb2MOVNTDQ.ptr } }, 5161 { "movntdqa", 2, { aptb2MOVNTDQA.ptr } }, 5162 { "movnti", 2, { aptb2MOVNTI.ptr } }, 5163 { "movntpd", 2, { aptb2MOVNTPD.ptr } }, 5164 { "movntps", 2, { aptb2MOVNTPS.ptr } }, 5165 { "movntq", 2, { aptb2MOVNTQ.ptr } }, 5166 { "movq", 2, { aptb2MOVQ.ptr } }, 5167 { "movq2dq", 2, { aptb2MOVQ2DQ.ptr } }, 5168 { "movs", 2, { aptb2MOVS.ptr } }, 5169 { "movsb", 0, { aptb0MOVSB.ptr } }, 5170 { "movsd", ITopt | 2, { aptb2MOVSD.ptr } }, 5171 { "movshdup", 2, { aptb2MOVSHDUP.ptr } }, 5172 { "movsldup", 2, { aptb2MOVSLDUP.ptr } }, 5173 { "movsq", 0, { aptb0MOVSQ.ptr } }, 5174 { "movss", 2, { aptb2MOVSS.ptr } }, 5175 { "movsw", 0, { aptb0MOVSW.ptr } }, 5176 { "movsx", 2, { aptb2MOVSX.ptr } }, 5177 { "movsxd", 2, { aptb2MOVSXD.ptr } }, 5178 { "movupd", 2, { aptb2MOVUPD.ptr } }, 5179 { "movups", 2, { aptb2MOVUPS.ptr } }, 5180 { "movzx", 2, { aptb2MOVZX.ptr } }, 5181 { "mpsadbw", 3, { aptb3MPSADBW.ptr } }, 5182 { "mul", ITopt | 2, { aptb2MUL.ptr } }, 5183 { "mulpd", 2, { aptb2MULPD.ptr } }, 5184 { "mulps", 2, { aptb2MULPS.ptr } }, 5185 { "mulsd", 2, { aptb2MULSD.ptr } }, 5186 { "mulss", 2, { aptb2MULSS.ptr } }, 5187 { "mwait", 0, { aptb0MWAIT.ptr } }, 5188 { "neg", 1, { aptb1NEG.ptr } }, 5189 { "nop", 0, { aptb0NOP.ptr } }, 5190 { "not", 1, { aptb1NOT.ptr } }, 5191 { "or", 2, { aptb2OR.ptr } }, 5192 { "orpd", 2, { aptb2ORPD.ptr } }, 5193 { "orps", 2, { aptb2ORPS.ptr } }, 5194 { "out", 2, { aptb2OUT.ptr } }, 5195 { "outs", 2, { aptb2OUTS.ptr } }, 5196 { "outsb", 0, { aptb0OUTSB.ptr } }, 5197 { "outsd", 0, { aptb0OUTSD.ptr } }, 5198 { "outsw", 0, { aptb0OUTSW.ptr } }, 5199 { "pabsb", 2, { aptb2PABSB.ptr } }, 5200 { "pabsd", 2, { aptb2PABSD.ptr } }, 5201 { "pabsw", 2, { aptb2PABSW.ptr } }, 5202 { "packssdw", 2, { aptb2PACKSSDW.ptr } }, 5203 { "packsswb", 2, { aptb2PACKSSWB.ptr } }, 5204 { "packusdw", 2, { aptb2PACKUSDW.ptr } }, 5205 { "packuswb", 2, { aptb2PACKUSWB.ptr } }, 5206 { "paddb", 2, { aptb2PADDB.ptr } }, 5207 { "paddd", 2, { aptb2PADDD.ptr } }, 5208 { "paddq", 2, { aptb2PADDQ.ptr } }, 5209 { "paddsb", 2, { aptb2PADDSB.ptr } }, 5210 { "paddsw", 2, { aptb2PADDSW.ptr } }, 5211 { "paddusb", 2, { aptb2PADDUSB.ptr } }, 5212 { "paddusw", 2, { aptb2PADDUSW.ptr } }, 5213 { "paddw", 2, { aptb2PADDW.ptr } }, 5214 { "palignr", 3, { aptb3PALIGNR.ptr } }, 5215 { "pand", 2, { aptb2PAND.ptr } }, 5216 { "pandn", 2, { aptb2PANDN.ptr } }, 5217 { "pause", 0, { aptb0PAUSE.ptr } }, 5218 { "pavgb", 2, { aptb2PAVGB.ptr } }, 5219 { "pavgusb", 2, { aptb2PAVGUSB.ptr } }, 5220 { "pavgw", 2, { aptb2PAVGW.ptr } }, 5221 { "pblendvb", 3, { aptb3PBLENDVB.ptr } }, 5222 { "pblendw", 3, { aptb3PBLENDW.ptr } }, 5223 { "pclmulqdq", 3, { aptb3PCLMULQDQ.ptr } }, 5224 { "pcmpeqb", 2, { aptb2PCMPEQB.ptr } }, 5225 { "pcmpeqd", 2, { aptb2PCMPEQD.ptr } }, 5226 { "pcmpeqq", 2, { aptb2PCMPEQQ.ptr } }, 5227 { "pcmpeqw", 2, { aptb2PCMPEQW.ptr } }, 5228 { "pcmpestri", 3, { aptb3PCMPESTRI.ptr } }, 5229 { "pcmpestrm", 3, { aptb3PCMPESTRM.ptr } }, 5230 { "pcmpgtb", 2, { aptb2PCMPGTB.ptr } }, 5231 { "pcmpgtd", 2, { aptb2PCMPGTD.ptr } }, 5232 { "pcmpgtq", 2, { aptb2PCMPGTQ.ptr } }, 5233 { "pcmpgtw", 2, { aptb2PCMPGTW.ptr } }, 5234 { "pcmpistri", 3, { aptb3PCMPISTRI.ptr } }, 5235 { "pcmpistrm", 3, { aptb3PCMPISTRM.ptr } }, 5236 { "pextrb", 3, { aptb3PEXTRB.ptr } }, 5237 { "pextrd", 3, { aptb3PEXTRD.ptr } }, 5238 { "pextrq", 3, { aptb3PEXTRQ.ptr } }, 5239 { "pextrw", 3, { aptb3PEXTRW.ptr } }, 5240 { "pf2id", 2, { aptb2PF2ID.ptr } }, 5241 { "pfacc", 2, { aptb2PFACC.ptr } }, 5242 { "pfadd", 2, { aptb2PFADD.ptr } }, 5243 { "pfcmpeq", 2, { aptb2PFCMPEQ.ptr } }, 5244 { "pfcmpge", 2, { aptb2PFCMPGE.ptr } }, 5245 { "pfcmpgt", 2, { aptb2PFCMPGT.ptr } }, 5246 { "pfmax", 2, { aptb2PFMAX.ptr } }, 5247 { "pfmin", 2, { aptb2PFMIN.ptr } }, 5248 { "pfmul", 2, { aptb2PFMUL.ptr } }, 5249 { "pfnacc", 2, { aptb2PFNACC.ptr } }, 5250 { "pfpnacc", 2, { aptb2PFPNACC.ptr } }, 5251 { "pfrcp", 2, { aptb2PFRCP.ptr } }, 5252 { "pfrcpit1", 2, { aptb2PFRCPIT1.ptr } }, 5253 { "pfrcpit2", 2, { aptb2PFRCPIT2.ptr } }, 5254 { "pfrsqit1", 2, { aptb2PFRSQIT1.ptr } }, 5255 { "pfrsqrt", 2, { aptb2PFRSQRT.ptr } }, 5256 { "pfsub", 2, { aptb2PFSUB.ptr } }, 5257 { "pfsubr", 2, { aptb2PFSUBR.ptr } }, 5258 { "phaddd", 2, { aptb2PHADDD.ptr } }, 5259 { "phaddsw", 2, { aptb2PHADDSW.ptr } }, 5260 { "phaddw", 2, { aptb2PHADDW.ptr } }, 5261 { "phminposuw", 2, { aptb2PHMINPOSUW.ptr } }, 5262 { "phsubd", 2, { aptb2PHSUBD.ptr } }, 5263 { "phsubsw", 2, { aptb2PHSUBSW.ptr } }, 5264 { "phsubw", 2, { aptb2PHSUBW.ptr } }, 5265 { "pi2fd", 2, { aptb2PI2FD.ptr } }, 5266 { "pinsrb", 3, { aptb3PINSRB.ptr } }, 5267 { "pinsrd", 3, { aptb3PINSRD.ptr } }, 5268 { "pinsrq", 3, { aptb3PINSRQ.ptr } }, 5269 { "pinsrw", 3, { aptb3PINSRW.ptr } }, 5270 { "pmaddubsw", 2, { aptb2PMADDUBSW.ptr } }, 5271 { "pmaddwd", 2, { aptb2PMADDWD.ptr } }, 5272 { "pmaxsb", 2, { aptb2PMAXSB.ptr } }, 5273 { "pmaxsd", 2, { aptb2PMAXSD.ptr } }, 5274 { "pmaxsw", 2, { aptb2PMAXSW.ptr } }, 5275 { "pmaxub", 2, { aptb2PMAXUB.ptr } }, 5276 { "pmaxud", 2, { aptb2PMAXUD.ptr } }, 5277 { "pmaxuw", 2, { aptb2PMAXUW.ptr } }, 5278 { "pminsb", 2, { aptb2PMINSB.ptr } }, 5279 { "pminsd", 2, { aptb2PMINSD.ptr } }, 5280 { "pminsw", 2, { aptb2PMINSW.ptr } }, 5281 { "pminub", 2, { aptb2PMINUB.ptr } }, 5282 { "pminud", 2, { aptb2PMINUD.ptr } }, 5283 { "pminuw", 2, { aptb2PMINUW.ptr } }, 5284 { "pmovmskb", 2, { aptb2PMOVMSKB.ptr } }, 5285 { "pmovsxbd", 2, { aptb2PMOVSXBD.ptr } }, 5286 { "pmovsxbq", 2, { aptb2PMOVSXBQ.ptr } }, 5287 { "pmovsxbw", 2, { aptb2PMOVSXBW.ptr } }, 5288 { "pmovsxdq", 2, { aptb2PMOVSXDQ.ptr } }, 5289 { "pmovsxwd", 2, { aptb2PMOVSXWD.ptr } }, 5290 { "pmovsxwq", 2, { aptb2PMOVSXWQ.ptr } }, 5291 { "pmovzxbd", 2, { aptb2PMOVZXBD.ptr } }, 5292 { "pmovzxbq", 2, { aptb2PMOVZXBQ.ptr } }, 5293 { "pmovzxbw", 2, { aptb2PMOVZXBW.ptr } }, 5294 { "pmovzxdq", 2, { aptb2PMOVZXDQ.ptr } }, 5295 { "pmovzxwd", 2, { aptb2PMOVZXWD.ptr } }, 5296 { "pmovzxwq", 2, { aptb2PMOVZXWQ.ptr } }, 5297 { "pmuldq", 2, { aptb2PMULDQ.ptr } }, 5298 { "pmulhrsw", 2, { aptb2PMULHRSW.ptr } }, 5299 { "pmulhrw", 2, { aptb2PMULHRW.ptr } }, 5300 { "pmulhuw", 2, { aptb2PMULHUW.ptr } }, 5301 { "pmulhw", 2, { aptb2PMULHW.ptr } }, 5302 { "pmulld", 2, { aptb2PMULLD.ptr } }, 5303 { "pmullw", 2, { aptb2PMULLW.ptr } }, 5304 { "pmuludq", 2, { aptb2PMULUDQ.ptr } }, 5305 { "pop", 1, { aptb1POP.ptr } }, 5306 { "popa", 0, { aptb0POPA.ptr } }, 5307 { "popad", 0, { aptb0POPAD.ptr } }, 5308 { "popcnt", 2, { aptb2POPCNT.ptr } }, 5309 { "popf", 0, { aptb0POPF.ptr } }, 5310 { "popfd", 0, { aptb0POPFD.ptr } }, 5311 { "popfq", 0, { aptb0POPFQ.ptr } }, 5312 { "por", 2, { aptb2POR.ptr } }, 5313 { "prefetchnta", 1, { aptb1PREFETCHNTA.ptr } }, 5314 { "prefetcht0", 1, { aptb1PREFETCHT0.ptr } }, 5315 { "prefetcht1", 1, { aptb1PREFETCHT1.ptr } }, 5316 { "prefetcht2", 1, { aptb1PREFETCHT2.ptr } }, 5317 { "prefetchw", 1, { aptb1PREFETCHW.ptr } }, 5318 { "prefetchwt1", 1, { aptb1PREFETCHWT1.ptr } }, 5319 { "psadbw", 2, { aptb2PSADBW.ptr } }, 5320 { "pshufb", 2, { aptb2PSHUFB.ptr } }, 5321 { "pshufd", 3, { aptb3PSHUFD.ptr } }, 5322 { "pshufhw", 3, { aptb3PSHUFHW.ptr } }, 5323 { "pshuflw", 3, { aptb3PSHUFLW.ptr } }, 5324 { "pshufw", 3, { aptb3PSHUFW.ptr } }, 5325 { "psignb", 2, { aptb2PSIGNB.ptr } }, 5326 { "psignd", 2, { aptb2PSIGND.ptr } }, 5327 { "psignw", 2, { aptb2PSIGNW.ptr } }, 5328 { "pslld", 2, { aptb2PSLLD.ptr } }, 5329 { "pslldq", 2, { aptb2PSLLDQ.ptr } }, 5330 { "psllq", 2, { aptb2PSLLQ.ptr } }, 5331 { "psllw", 2, { aptb2PSLLW.ptr } }, 5332 { "psrad", 2, { aptb2PSRAD.ptr } }, 5333 { "psraw", 2, { aptb2PSRAW.ptr } }, 5334 { "psrld", 2, { aptb2PSRLD.ptr } }, 5335 { "psrldq", 2, { aptb2PSRLDQ.ptr } }, 5336 { "psrlq", 2, { aptb2PSRLQ.ptr } }, 5337 { "psrlw", 2, { aptb2PSRLW.ptr } }, 5338 { "psubb", 2, { aptb2PSUBB.ptr } }, 5339 { "psubd", 2, { aptb2PSUBD.ptr } }, 5340 { "psubq", 2, { aptb2PSUBQ.ptr } }, 5341 { "psubsb", 2, { aptb2PSUBSB.ptr } }, 5342 { "psubsw", 2, { aptb2PSUBSW.ptr } }, 5343 { "psubusb", 2, { aptb2PSUBUSB.ptr } }, 5344 { "psubusw", 2, { aptb2PSUBUSW.ptr } }, 5345 { "psubw", 2, { aptb2PSUBW.ptr } }, 5346 { "pswapd", 2, { aptb2PSWAPD.ptr } }, 5347 { "ptest", 2, { aptb2PTEST.ptr } }, 5348 { "punpckhbw", 2, { aptb2PUNPCKHBW.ptr } }, 5349 { "punpckhdq", 2, { aptb2PUNPCKHDQ.ptr } }, 5350 { "punpckhqdq", 2, { aptb2PUNPCKHQDQ.ptr } }, 5351 { "punpckhwd", 2, { aptb2PUNPCKHWD.ptr } }, 5352 { "punpcklbw", 2, { aptb2PUNPCKLBW.ptr } }, 5353 { "punpckldq", 2, { aptb2PUNPCKLDQ.ptr } }, 5354 { "punpcklqdq", 2, { aptb2PUNPCKLQDQ.ptr } }, 5355 { "punpcklwd", 2, { aptb2PUNPCKLWD.ptr } }, 5356 { "push", 1, { aptb1PUSH.ptr } }, 5357 { "pusha", 0, { aptb0PUSHA.ptr } }, 5358 { "pushad", 0, { aptb0PUSHAD.ptr } }, 5359 { "pushf", 0, { aptb0PUSHF.ptr } }, 5360 { "pushfd", 0, { aptb0PUSHFD.ptr } }, 5361 { "pushfq", 0, { aptb0PUSHFQ.ptr } }, 5362 { "pxor", 2, { aptb2PXOR.ptr } }, 5363 { "rcl", ITshift | 2, { aptb2RCL.ptr } }, 5364 { "rcpps", 2, { aptb2RCPPS.ptr } }, 5365 { "rcpss", 2, { aptb2RCPSS.ptr } }, 5366 { "rcr", ITshift | 2, { aptb2RCR.ptr } }, 5367 { "rdfsbase", 1, { aptb1RDFSBASE.ptr } }, 5368 { "rdgsbase", 1, { aptb1RDGSBASE.ptr } }, 5369 { "rdmsr", 0, { aptb0RDMSR.ptr } }, 5370 { "rdpmc", 0, { aptb0RDPMC.ptr } }, 5371 { "rdrand", 1, { aptb1RDRAND.ptr } }, 5372 { "rdseed", 1, { aptb1RDSEED.ptr } }, 5373 { "rdtsc", 0, { aptb0RDTSC.ptr } }, 5374 { "rdtscp", 0, { aptb0RDTSCP.ptr } }, 5375 { "rep", ITprefix | 0, { aptb0REP.ptr } }, 5376 { "repe", ITprefix | 0, { aptb0REP.ptr } }, 5377 { "repne", ITprefix | 0, { aptb0REPNE.ptr } }, 5378 { "repnz", ITprefix | 0, { aptb0REPNE.ptr } }, 5379 { "repz", ITprefix | 0, { aptb0REP.ptr } }, 5380 { "ret", ITopt | 1, { aptb1RET.ptr } }, 5381 { "retf", ITopt | 1, { aptb1RETF.ptr } }, 5382 { "rol", ITshift | 2, { aptb2ROL.ptr } }, 5383 { "ror", ITshift | 2, { aptb2ROR.ptr } }, 5384 { "roundpd", 3, { aptb3ROUNDPD.ptr } }, 5385 { "roundps", 3, { aptb3ROUNDPS.ptr } }, 5386 { "roundsd", 3, { aptb3ROUNDSD.ptr } }, 5387 { "roundss", 3, { aptb3ROUNDSS.ptr } }, 5388 { "rsm", 0, { aptb0RSM.ptr } }, 5389 { "rsqrtps", 2, { aptb2RSQRTPS.ptr } }, 5390 { "rsqrtss", 2, { aptb2RSQRTSS.ptr } }, 5391 { "sahf", 0, { aptb0SAHF.ptr } }, 5392 { "sal", ITshift | 2, { aptb2SHL.ptr } }, 5393 { "sar", ITshift | 2, { aptb2SAR.ptr } }, 5394 { "sbb", 2, { aptb2SBB.ptr } }, 5395 { "scas", 1, { aptb1SCAS.ptr } }, 5396 { "scasb", 0, { aptb0SCASB.ptr } }, 5397 { "scasd", 0, { aptb0SCASD.ptr } }, 5398 { "scasq", 0, { aptb0SCASQ.ptr } }, 5399 { "scasw", 0, { aptb0SCASW.ptr } }, 5400 { "seta", 1, { aptb1SETNBE.ptr } }, 5401 { "setae", 1, { aptb1SETNB.ptr } }, 5402 { "setb", 1, { aptb1SETB.ptr } }, 5403 { "setbe", 1, { aptb1SETBE.ptr } }, 5404 { "setc", 1, { aptb1SETB.ptr } }, 5405 { "sete", 1, { aptb1SETZ.ptr } }, 5406 { "setg", 1, { aptb1SETNLE.ptr } }, 5407 { "setge", 1, { aptb1SETNL.ptr } }, 5408 { "setl", 1, { aptb1SETL.ptr } }, 5409 { "setle", 1, { aptb1SETLE.ptr } }, 5410 { "setna", 1, { aptb1SETBE.ptr } }, 5411 { "setnae", 1, { aptb1SETB.ptr } }, 5412 { "setnb", 1, { aptb1SETNB.ptr } }, 5413 { "setnbe", 1, { aptb1SETNBE.ptr } }, 5414 { "setnc", 1, { aptb1SETNB.ptr } }, 5415 { "setne", 1, { aptb1SETNZ.ptr } }, 5416 { "setng", 1, { aptb1SETLE.ptr } }, 5417 { "setnge", 1, { aptb1SETL.ptr } }, 5418 { "setnl", 1, { aptb1SETNL.ptr } }, 5419 { "setnle", 1, { aptb1SETNLE.ptr } }, 5420 { "setno", 1, { aptb1SETNO.ptr } }, 5421 { "setnp", 1, { aptb1SETNP.ptr } }, 5422 { "setns", 1, { aptb1SETNS.ptr } }, 5423 { "setnz", 1, { aptb1SETNZ.ptr } }, 5424 { "seto", 1, { aptb1SETO.ptr } }, 5425 { "setp", 1, { aptb1SETP.ptr } }, 5426 { "setpe", 1, { aptb1SETP.ptr } }, 5427 { "setpo", 1, { aptb1SETNP.ptr } }, 5428 { "sets", 1, { aptb1SETS.ptr } }, 5429 { "setz", 1, { aptb1SETZ.ptr } }, 5430 { "sfence", 0, { aptb0SFENCE.ptr } }, 5431 { "sgdt", 1, { aptb1SGDT.ptr } }, 5432 { "sha1msg1", 2, { aptb2SHA1MSG1.ptr } }, 5433 { "sha1msg2", 2, { aptb2SHA1MSG2.ptr } }, 5434 { "sha1nexte", 2, { aptb2SHA1NEXTE.ptr } }, 5435 { "sha1rnds4", 3, { aptb3SHA1RNDS4.ptr } }, 5436 { "sha256msg1", 2, { aptb2SHA256MSG1.ptr } }, 5437 { "sha256msg2", 2, { aptb2SHA256MSG2.ptr } }, 5438 { "sha256rnds2", 2, { aptb2SHA256RNDS2.ptr } }, 5439 { "shl", ITshift | 2, { aptb2SHL.ptr } }, 5440 { "shld", 3, { aptb3SHLD.ptr } }, 5441 { "shr", ITshift | 2, { aptb2SHR.ptr } }, 5442 { "shrd", 3, { aptb3SHRD.ptr } }, 5443 { "shufpd", 3, { aptb3SHUFPD.ptr } }, 5444 { "shufps", 3, { aptb3SHUFPS.ptr } }, 5445 { "sidt", 1, { aptb1SIDT.ptr } }, 5446 { "sldt", 1, { aptb1SLDT.ptr } }, 5447 { "smsw", 1, { aptb1SMSW.ptr } }, 5448 { "sqrtpd", 2, { aptb2SQRTPD.ptr } }, 5449 { "sqrtps", 2, { aptb2SQRTPS.ptr } }, 5450 { "sqrtsd", 2, { aptb2SQRTSD.ptr } }, 5451 { "sqrtss", 2, { aptb2SQRTSS.ptr } }, 5452 { "stc", 0, { aptb0STC.ptr } }, 5453 { "std", 0, { aptb0STD.ptr } }, 5454 { "sti", 0, { aptb0STI.ptr } }, 5455 { "stmxcsr", 1, { aptb1STMXCSR.ptr } }, 5456 { "stos", 1, { aptb1STOS.ptr } }, 5457 { "stosb", 0, { aptb0STOSB.ptr } }, 5458 { "stosd", 0, { aptb0STOSD.ptr } }, 5459 { "stosq", 0, { aptb0STOSQ.ptr } }, 5460 { "stosw", 0, { aptb0STOSW.ptr } }, 5461 { "str", 1, { aptb1STR.ptr } }, 5462 { "sub", 2, { aptb2SUB.ptr } }, 5463 { "subpd", 2, { aptb2SUBPD.ptr } }, 5464 { "subps", 2, { aptb2SUBPS.ptr } }, 5465 { "subsd", 2, { aptb2SUBSD.ptr } }, 5466 { "subss", 2, { aptb2SUBSS.ptr } }, 5467 { "syscall", 0, { aptb0SYSCALL.ptr } }, 5468 { "sysenter", 0, { aptb0SYSENTER.ptr } }, 5469 { "sysexit", 0, { aptb0SYSEXIT.ptr } }, 5470 { "sysret", 0, { aptb0SYSRET.ptr } }, 5471 { "test", 2, { aptb2TEST.ptr } }, 5472 { "tzcnt", 2, { aptb2TZCNT.ptr } }, 5473 { "ucomisd", 2, { aptb2UCOMISD.ptr } }, 5474 { "ucomiss", 2, { aptb2UCOMISS.ptr } }, 5475 { "ud2", 0, { aptb0UD2.ptr } }, 5476 { "unpckhpd", 2, { aptb2UNPCKHPD.ptr } }, 5477 { "unpckhps", 2, { aptb2UNPCKHPS.ptr } }, 5478 { "unpcklpd", 2, { aptb2UNPCKLPD.ptr } }, 5479 { "unpcklps", 2, { aptb2UNPCKLPS.ptr } }, 5480 { "vaddpd", 3, { aptb3VADDPD.ptr } }, 5481 { "vaddps", 3, { aptb3VADDPS.ptr } }, 5482 { "vaddsd", 3, { aptb3VADDSD.ptr } }, 5483 { "vaddss", 3, { aptb3VADDSS.ptr } }, 5484 { "vaddsubpd", 3, { aptb3VADDSUBPD.ptr } }, 5485 { "vaddsubps", 3, { aptb3VADDSUBPS.ptr } }, 5486 { "vaesdec", 3, { aptb3VAESDEC.ptr } }, 5487 { "vaesdeclast", 3, { aptb3VAESDECLAST.ptr } }, 5488 { "vaesenc", 3, { aptb3VAESENC.ptr } }, 5489 { "vaesenclast", 3, { aptb3VAESENCLAST.ptr } }, 5490 { "vaesimc", 2, { aptb2VAESIMC.ptr } }, 5491 { "vaeskeygenassist", 3, { aptb3VAESKEYGENASSIST.ptr } }, 5492 { "vandnpd", 3, { aptb3VANDNPD.ptr } }, 5493 { "vandnps", 3, { aptb3VANDNPS.ptr } }, 5494 { "vandpd", 3, { aptb3VANDPD.ptr } }, 5495 { "vandps", 3, { aptb3VANDPS.ptr } }, 5496 { "vblendpd", 4, { aptb4VBLENDPD.ptr } }, 5497 { "vblendps", 4, { aptb4VBLENDPS.ptr } }, 5498 { "vblendvpd", 4, { aptb4VBLENDVPD.ptr } }, 5499 { "vblendvps", 4, { aptb4VBLENDVPS.ptr } }, 5500 { "vbroadcastf128", 2, { aptb2VBROADCASTF128.ptr } }, 5501 { "vbroadcastsd", 2, { aptb2VBROADCASTSD.ptr } }, 5502 { "vbroadcastss", 2, { aptb2VBROADCASTSS.ptr } }, 5503 { "vcmppd", 4, { aptb4VCMPPD.ptr } }, 5504 { "vcmpps", 4, { aptb4VCMPPS.ptr } }, 5505 { "vcmpsd", 4, { aptb4VCMPSD.ptr } }, 5506 { "vcmpss", 4, { aptb4VCMPSS.ptr } }, 5507 { "vcomisd", 2, { aptb2VCOMISD.ptr } }, 5508 { "vcomiss", 2, { aptb2VCOMISS.ptr } }, 5509 { "vcvtdq2pd", 2, { aptb2VCVTDQ2PD.ptr } }, 5510 { "vcvtdq2ps", 2, { aptb2VCVTDQ2PS.ptr } }, 5511 { "vcvtpd2dq", 2, { aptb2VCVTPD2DQ.ptr } }, 5512 { "vcvtpd2ps", 2, { aptb2VCVTPD2PS.ptr } }, 5513 { "vcvtph2ps", 2, { aptb2VCVTPH2PS.ptr } }, 5514 { "vcvtps2dq", 2, { aptb2VCVTPS2DQ.ptr } }, 5515 { "vcvtps2pd", 2, { aptb2VCVTPS2PD.ptr } }, 5516 { "vcvtps2ph", 3, { aptb3VCVTPS2PH.ptr } }, 5517 { "vcvtsd2si", 2, { aptb2VCVTSD2SI.ptr } }, 5518 { "vcvtsd2ss", 3, { aptb3VCVTSD2SS.ptr } }, 5519 { "vcvtsi2sd", 3, { aptb3VCVTSI2SD.ptr } }, 5520 { "vcvtsi2ss", 3, { aptb3VCVTSI2SS.ptr } }, 5521 { "vcvtss2sd", 3, { aptb3VCVTSS2SD.ptr } }, 5522 { "vcvtss2si", 2, { aptb2VCVTSS2SI.ptr } }, 5523 { "vcvttpd2dq", 2, { aptb2VCVTTPD2DQ.ptr } }, 5524 { "vcvttps2dq", 2, { aptb2VCVTTPS2DQ.ptr } }, 5525 { "vcvttsd2si", 2, { aptb2VCVTTSD2SI.ptr } }, 5526 { "vcvttss2si", 2, { aptb2VCVTTSS2SI.ptr } }, 5527 { "vdivpd", 3, { aptb3VDIVPD.ptr } }, 5528 { "vdivps", 3, { aptb3VDIVPS.ptr } }, 5529 { "vdivsd", 3, { aptb3VDIVSD.ptr } }, 5530 { "vdivss", 3, { aptb3VDIVSS.ptr } }, 5531 { "vdppd", 4, { aptb4VDPPD.ptr } }, 5532 { "vdpps", 4, { aptb4VDPPS.ptr } }, 5533 { "verr", 1, { aptb1VERR.ptr } }, 5534 { "verw", 1, { aptb1VERW.ptr } }, 5535 { "vextractf128", 3, { aptb3VEXTRACTF128.ptr } }, 5536 { "vextractps", 3, { aptb3VEXTRACTPS.ptr } }, 5537 { "vfmadd132pd", 3, { aptb3VFMADD132PD.ptr } }, 5538 { "vfmadd132ps", 3, { aptb3VFMADD132PS.ptr } }, 5539 { "vfmadd132sd", 3, { aptb3VFMADD132SD.ptr } }, 5540 { "vfmadd132ss", 3, { aptb3VFMADD132SS.ptr } }, 5541 { "vfmadd213pd", 3, { aptb3VFMADD213PD.ptr } }, 5542 { "vfmadd213ps", 3, { aptb3VFMADD213PS.ptr } }, 5543 { "vfmadd213sd", 3, { aptb3VFMADD213SD.ptr } }, 5544 { "vfmadd213ss", 3, { aptb3VFMADD213SS.ptr } }, 5545 { "vfmadd231pd", 3, { aptb3VFMADD231PD.ptr } }, 5546 { "vfmadd231ps", 3, { aptb3VFMADD231PS.ptr } }, 5547 { "vfmadd231sd", 3, { aptb3VFMADD231SD.ptr } }, 5548 { "vfmadd231ss", 3, { aptb3VFMADD231SS.ptr } }, 5549 { "vfmaddsub132pd", 3, { aptb3VFMADDSUB132PD.ptr } }, 5550 { "vfmaddsub132ps", 3, { aptb3VFMADDSUB132PS.ptr } }, 5551 { "vfmaddsub213pd", 3, { aptb3VFMADDSUB213PD.ptr } }, 5552 { "vfmaddsub213ps", 3, { aptb3VFMADDSUB213PS.ptr } }, 5553 { "vfmaddsub231pd", 3, { aptb3VFMADDSUB231PD.ptr } }, 5554 { "vfmaddsub231ps", 3, { aptb3VFMADDSUB231PS.ptr } }, 5555 { "vfmsub132pd", 3, { aptb3VFMSUB132PD.ptr } }, 5556 { "vfmsub132ps", 3, { aptb3VFMSUB132PS.ptr } }, 5557 { "vfmsub132sd", 3, { aptb3VFMSUB132SD.ptr } }, 5558 { "vfmsub132ss", 3, { aptb3VFMSUB132SS.ptr } }, 5559 { "vfmsub213pd", 3, { aptb3VFMSUB213PD.ptr } }, 5560 { "vfmsub213ps", 3, { aptb3VFMSUB213PS.ptr } }, 5561 { "vfmsub213sd", 3, { aptb3VFMSUB213SD.ptr } }, 5562 { "vfmsub213ss", 3, { aptb3VFMSUB213SS.ptr } }, 5563 { "vfmsub231pd", 3, { aptb3VFMSUB231PD.ptr } }, 5564 { "vfmsub231ps", 3, { aptb3VFMSUB231PS.ptr } }, 5565 { "vfmsub231sd", 3, { aptb3VFMSUB231SD.ptr } }, 5566 { "vfmsub231ss", 3, { aptb3VFMSUB231SS.ptr } }, 5567 { "vfmsubadd132pd", 3, { aptb3VFMSUBADD132PD.ptr } }, 5568 { "vfmsubadd132ps", 3, { aptb3VFMSUBADD132PS.ptr } }, 5569 { "vfmsubadd213pd", 3, { aptb3VFMSUBADD213PD.ptr } }, 5570 { "vfmsubadd213ps", 3, { aptb3VFMSUBADD213PS.ptr } }, 5571 { "vfmsubadd231pd", 3, { aptb3VFMSUBADD231PD.ptr } }, 5572 { "vfmsubadd231ps", 3, { aptb3VFMSUBADD231PS.ptr } }, 5573 { "vhaddpd", 3, { aptb3VHADDPD.ptr } }, 5574 { "vhaddps", 3, { aptb3VHADDPS.ptr } }, 5575 { "vinsertf128", 4, { aptb4VINSERTF128.ptr } }, 5576 { "vinsertps", 4, { aptb4VINSERTPS.ptr } }, 5577 { "vlddqu", 2, { aptb2VLDDQU.ptr } }, 5578 { "vldmxcsr", 1, { aptb1VLDMXCSR.ptr } }, 5579 { "vmaskmovdqu", 2, { aptb2VMASKMOVDQU.ptr } }, 5580 { "vmaskmovpd", 3, { aptb3VMASKMOVPD.ptr } }, 5581 { "vmaskmovps", 3, { aptb3VMASKMOVPS.ptr } }, 5582 { "vmaxpd", 3, { aptb3VMAXPD.ptr } }, 5583 { "vmaxps", 3, { aptb3VMAXPS.ptr } }, 5584 { "vmaxsd", 3, { aptb3VMAXSD.ptr } }, 5585 { "vmaxss", 3, { aptb3VMAXSS.ptr } }, 5586 { "vminpd", 3, { aptb3VMINPD.ptr } }, 5587 { "vminps", 3, { aptb3VMINPS.ptr } }, 5588 { "vminsd", 3, { aptb3VMINSD.ptr } }, 5589 { "vminss", 3, { aptb3VMINSS.ptr } }, 5590 { "vmovapd", 2, { aptb2VMOVAPD.ptr } }, 5591 { "vmovaps", 2, { aptb2VMOVAPS.ptr } }, 5592 { "vmovd", 2, { aptb2VMOVD.ptr } }, 5593 { "vmovddup", 2, { aptb2VMOVDDUP.ptr } }, 5594 { "vmovdqa", 2, { aptb2VMOVDQA.ptr } }, 5595 { "vmovdqu", 2, { aptb2VMOVDQU.ptr } }, 5596 { "vmovhlps", 3, { aptb3VMOVHLPS.ptr } }, 5597 { "vmovhpd", ITopt | 3, { aptb3VMOVHPD.ptr } }, 5598 { "vmovhps", ITopt | 3, { aptb3VMOVHPS.ptr } }, 5599 { "vmovlhps", 3, { aptb3VMOVLHPS.ptr } }, 5600 { "vmovlpd", ITopt | 3, { aptb3VMOVLPD.ptr } }, 5601 { "vmovlps", ITopt | 3, { aptb3VMOVLPS.ptr } }, 5602 { "vmovmskpd", 2, { aptb2VMOVMSKPD.ptr } }, 5603 { "vmovmskps", 2, { aptb2VMOVMSKPS.ptr } }, 5604 { "vmovntdq", 2, { aptb2VMOVNTDQ.ptr } }, 5605 { "vmovntdqa", 2, { aptb2VMOVNTDQA.ptr } }, 5606 { "vmovntpd", 2, { aptb2VMOVNTPD.ptr } }, 5607 { "vmovntps", 2, { aptb2VMOVNTPS.ptr } }, 5608 { "vmovq", 2, { aptb2VMOVQ.ptr } }, 5609 { "vmovsd", ITopt | 3, { aptb3VMOVSD.ptr } }, 5610 { "vmovshdup", 2, { aptb2VMOVSHDUP.ptr } }, 5611 { "vmovsldup", 2, { aptb2VMOVSLDUP.ptr } }, 5612 { "vmovss", ITopt | 3, { aptb3VMOVSS.ptr } }, 5613 { "vmovupd", 2, { aptb2VMOVUPD.ptr } }, 5614 { "vmovups", 2, { aptb2VMOVUPS.ptr } }, 5615 { "vmpsadbw", 4, { aptb4VMPSADBW.ptr } }, 5616 { "vmulpd", 3, { aptb3VMULPD.ptr } }, 5617 { "vmulps", 3, { aptb3VMULPS.ptr } }, 5618 { "vmulsd", 3, { aptb3VMULSD.ptr } }, 5619 { "vmulss", 3, { aptb3VMULSS.ptr } }, 5620 { "vorpd", 3, { aptb3VORPD.ptr } }, 5621 { "vorps", 3, { aptb3VORPS.ptr } }, 5622 { "vpabsb", 2, { aptb2VPABSB.ptr } }, 5623 { "vpabsd", 2, { aptb2VPABSD.ptr } }, 5624 { "vpabsw", 2, { aptb2VPABSW.ptr } }, 5625 { "vpackssdw", 3, { aptb3VPACKSSDW.ptr } }, 5626 { "vpacksswb", 3, { aptb3VPACKSSWB.ptr } }, 5627 { "vpackusdw", 3, { aptb3VPACKUSDW.ptr } }, 5628 { "vpackuswb", 3, { aptb3VPACKUSWB.ptr } }, 5629 { "vpaddb", 3, { aptb3VPADDB.ptr } }, 5630 { "vpaddd", 3, { aptb3VPADDD.ptr } }, 5631 { "vpaddq", 3, { aptb3VPADDQ.ptr } }, 5632 { "vpaddsb", 3, { aptb3VPADDSB.ptr } }, 5633 { "vpaddsw", 3, { aptb3VPADDSW.ptr } }, 5634 { "vpaddusb", 3, { aptb3VPADDUSB.ptr } }, 5635 { "vpaddusw", 3, { aptb3VPADDUSW.ptr } }, 5636 { "vpaddw", 3, { aptb3VPADDW.ptr } }, 5637 { "vpalignr", 4, { aptb4VPALIGNR.ptr } }, 5638 { "vpand", 3, { aptb3VPAND.ptr } }, 5639 { "vpandn", 3, { aptb3VPANDN.ptr } }, 5640 { "vpavgb", 3, { aptb3VPAVGB.ptr } }, 5641 { "vpavgw", 3, { aptb3VPAVGW.ptr } }, 5642 { "vpblendvb", 4, { aptb4VPBLENDVB.ptr } }, 5643 { "vpblendw", 4, { aptb4VPBLENDW.ptr } }, 5644 { "vpclmulqdq", 4, { aptb4VPCLMULQDQ.ptr } }, 5645 { "vpcmpeqb", 3, { aptb3VPCMPEQB.ptr } }, 5646 { "vpcmpeqd", 3, { aptb3VPCMPEQD.ptr } }, 5647 { "vpcmpeqq", 3, { aptb3VPCMPEQQ.ptr } }, 5648 { "vpcmpeqw", 3, { aptb3VPCMPEQW.ptr } }, 5649 { "vpcmpestri", 3, { aptb3VPCMPESTRI.ptr } }, 5650 { "vpcmpestrm", 3, { aptb3VPCMPESTRM.ptr } }, 5651 { "vpcmpgtb", 3, { aptb3VPCMPGTB.ptr } }, 5652 { "vpcmpgtd", 3, { aptb3VPCMPGTD.ptr } }, 5653 { "vpcmpgtq", 3, { aptb3VPCMPGTQ.ptr } }, 5654 { "vpcmpgtw", 3, { aptb3VPCMPGTW.ptr } }, 5655 { "vpcmpistri", 3, { aptb3VPCMPISTRI.ptr } }, 5656 { "vpcmpistrm", 3, { aptb3VPCMPISTRM.ptr } }, 5657 { "vperm2f128", 4, { aptb3VPERM2F128.ptr } }, 5658 { "vpermilpd", 3, { aptb3VPERMILPD.ptr } }, 5659 { "vpermilps", 3, { aptb3VPERMILPS.ptr } }, 5660 { "vpextrb", 3, { aptb3VPEXTRB.ptr } }, 5661 { "vpextrd", 3, { aptb3VPEXTRD.ptr } }, 5662 { "vpextrq", 3, { aptb3VPEXTRQ.ptr } }, 5663 { "vpextrw", 3, { aptb3VPEXTRW.ptr } }, 5664 { "vphaddd", 3, { aptb3VPHADDD.ptr } }, 5665 { "vphaddsw", 3, { aptb3VPHADDSW.ptr } }, 5666 { "vphaddw", 3, { aptb3VPHADDW.ptr } }, 5667 { "vphminposuw", 2, { aptb2VPHMINPOSUW.ptr } }, 5668 { "vphsubd", 3, { aptb3VPHSUBD.ptr } }, 5669 { "vphsubsw", 3, { aptb3VPHSUBSW.ptr } }, 5670 { "vphsubw", 3, { aptb3VPHSUBW.ptr } }, 5671 { "vpinsrb", 4, { aptb4VPINSRB.ptr } }, 5672 { "vpinsrd", 4, { aptb4VPINSRD.ptr } }, 5673 { "vpinsrq", 4, { aptb4VPINSRQ.ptr } }, 5674 { "vpinsrw", 4, { aptb4VPINSRW.ptr } }, 5675 { "vpmaddubsw", 3, { aptb3VPMADDUBSW.ptr } }, 5676 { "vpmaddwd", 3, { aptb3VPMADDWD.ptr } }, 5677 { "vpmaxsb", 3, { aptb3VPMAXSB.ptr } }, 5678 { "vpmaxsd", 3, { aptb3VPMAXSD.ptr } }, 5679 { "vpmaxsw", 3, { aptb3VPMAXSW.ptr } }, 5680 { "vpmaxub", 3, { aptb3VPMAXUB.ptr } }, 5681 { "vpmaxud", 3, { aptb3VPMAXUD.ptr } }, 5682 { "vpmaxuw", 3, { aptb3VPMAXUW.ptr } }, 5683 { "vpminsb", 3, { aptb3VPMINSB.ptr } }, 5684 { "vpminsd", 3, { aptb3VPMINSD.ptr } }, 5685 { "vpminsw", 3, { aptb3VPMINSW.ptr } }, 5686 { "vpminub", 3, { aptb3VPMINUB.ptr } }, 5687 { "vpminud", 3, { aptb3VPMINUD.ptr } }, 5688 { "vpminuw", 3, { aptb3VPMINUW.ptr } }, 5689 { "vpmovmskb", 2, { aptb2VPMOVMSKB.ptr } }, 5690 { "vpmovsxbd", 2, { aptb2VPMOVSXBD.ptr } }, 5691 { "vpmovsxbq", 2, { aptb2VPMOVSXBQ.ptr } }, 5692 { "vpmovsxbw", 2, { aptb2VPMOVSXBW.ptr } }, 5693 { "vpmovsxdq", 2, { aptb2VPMOVSXDQ.ptr } }, 5694 { "vpmovsxwd", 2, { aptb2VPMOVSXWD.ptr } }, 5695 { "vpmovsxwq", 2, { aptb2VPMOVSXWQ.ptr } }, 5696 { "vpmovzxbd", 2, { aptb2VPMOVZXBD.ptr } }, 5697 { "vpmovzxbq", 2, { aptb2VPMOVZXBQ.ptr } }, 5698 { "vpmovzxbw", 2, { aptb2VPMOVZXBW.ptr } }, 5699 { "vpmovzxdq", 2, { aptb2VPMOVZXDQ.ptr } }, 5700 { "vpmovzxwd", 2, { aptb2VPMOVZXWD.ptr } }, 5701 { "vpmovzxwq", 2, { aptb2VPMOVZXWQ.ptr } }, 5702 { "vpmuldq", 3, { aptb3VPMULDQ.ptr } }, 5703 { "vpmulhrsw", 3, { aptb3VPMULHRSW.ptr } }, 5704 { "vpmulhuw", 3, { aptb3VPMULHUW.ptr } }, 5705 { "vpmulhw", 3, { aptb3VPMULHW.ptr } }, 5706 { "vpmulld", 3, { aptb3VPMULLD.ptr } }, 5707 { "vpmullw", 3, { aptb3VPMULLW.ptr } }, 5708 { "vpmuludq", 3, { aptb3VPMULUDQ.ptr } }, 5709 { "vpor", 3, { aptb3VPOR.ptr } }, 5710 { "vpsadbw", 3, { aptb3VPSADBW.ptr } }, 5711 { "vpshufb", 3, { aptb3VPSHUFB.ptr } }, 5712 { "vpshufd", 3, { aptb3VPSHUFD.ptr } }, 5713 { "vpshufhw", 3, { aptb3VPSHUFHW.ptr } }, 5714 { "vpshuflw", 3, { aptb3VPSHUFLW.ptr } }, 5715 { "vpsignb", 3, { aptb3VPSIGNB.ptr } }, 5716 { "vpsignd", 3, { aptb3VPSIGND.ptr } }, 5717 { "vpsignw", 3, { aptb3VPSIGNW.ptr } }, 5718 { "vpslld", 3, { aptb3VPSLLD.ptr } }, 5719 { "vpslldq", 3, { aptb3VPSLLDQ.ptr } }, 5720 { "vpsllq", 3, { aptb3VPSLLQ.ptr } }, 5721 { "vpsllw", 3, { aptb3VPSLLW.ptr } }, 5722 { "vpsrad", 3, { aptb3VPSRAD.ptr } }, 5723 { "vpsraw", 3, { aptb3VPSRAW.ptr } }, 5724 { "vpsrld", 3, { aptb3VPSRLD.ptr } }, 5725 { "vpsrldq", 3, { aptb3VPSRLDQ.ptr } }, 5726 { "vpsrlq", 3, { aptb3VPSRLQ.ptr } }, 5727 { "vpsrlw", 3, { aptb3VPSRLW.ptr } }, 5728 { "vpsubb", 3, { aptb3VPSUBB.ptr } }, 5729 { "vpsubd", 3, { aptb3VPSUBD.ptr } }, 5730 { "vpsubq", 3, { aptb3VPSUBQ.ptr } }, 5731 { "vpsubsb", 3, { aptb3VPSUBSB.ptr } }, 5732 { "vpsubsw", 3, { aptb3VPSUBSW.ptr } }, 5733 { "vpsubusb", 3, { aptb3VPSUBUSB.ptr } }, 5734 { "vpsubusw", 3, { aptb3VPSUBUSW.ptr } }, 5735 { "vpsubw", 3, { aptb3VPSUBW.ptr } }, 5736 { "vptest", 2, { aptb2VPTEST.ptr } }, 5737 { "vpunpckhbw", 3, { aptb3VPUNPCKHBW.ptr } }, 5738 { "vpunpckhdq", 3, { aptb3VPUNPCKHDQ.ptr } }, 5739 { "vpunpckhqdq", 3, { aptb3VPUNPCKHQDQ.ptr } }, 5740 { "vpunpckhwd", 3, { aptb3VPUNPCKHWD.ptr } }, 5741 { "vpunpcklbw", 3, { aptb3VPUNPCKLBW.ptr } }, 5742 { "vpunpckldq", 3, { aptb3VPUNPCKLDQ.ptr } }, 5743 { "vpunpcklqdq", 3, { aptb3VPUNPCKLQDQ.ptr } }, 5744 { "vpunpcklwd", 3, { aptb3VPUNPCKLWD.ptr } }, 5745 { "vpxor", 3, { aptb3VPXOR.ptr } }, 5746 { "vrcpps", 2, { aptb2VRCPPS.ptr } }, 5747 { "vrcpss", 3, { aptb3VRCPSS.ptr } }, 5748 { "vroundpd", 3, { aptb3VROUNDPD.ptr } }, 5749 { "vroundps", 3, { aptb3VROUNDPS.ptr } }, 5750 { "vroundsd", 4, { aptb4VROUNDSD.ptr } }, 5751 { "vroundss", 4, { aptb4VROUNDSS.ptr } }, 5752 { "vshufpd", 4, { aptb4VSHUFPD.ptr } }, 5753 { "vshufps", 4, { aptb4VSHUFPS.ptr } }, 5754 { "vsqrtpd", 2, { aptb2VSQRTPD.ptr } }, 5755 { "vsqrtps", 2, { aptb2VSQRTPS.ptr } }, 5756 { "vsqrtsd", 3, { aptb3VSQRTSD.ptr } }, 5757 { "vsqrtss", 3, { aptb3VSQRTSS.ptr } }, 5758 { "vstmxcsr", 1, { aptb1VSTMXCSR.ptr } }, 5759 { "vsubpd", 3, { aptb3VSUBPD.ptr } }, 5760 { "vsubps", 3, { aptb3VSUBPS.ptr } }, 5761 { "vsubsd", 3, { aptb3VSUBSD.ptr } }, 5762 { "vsubss", 3, { aptb3VSUBSS.ptr } }, 5763 { "vucomisd", 2, { aptb2VUCOMISD.ptr } }, 5764 { "vucomiss", 2, { aptb2VUCOMISS.ptr } }, 5765 { "vunpckhpd", 3, { aptb3VUNPCKHPD.ptr } }, 5766 { "vunpckhps", 3, { aptb3VUNPCKHPS.ptr } }, 5767 { "vunpcklpd", 3, { aptb3VUNPCKLPD.ptr } }, 5768 { "vunpcklps", 3, { aptb3VUNPCKLPS.ptr } }, 5769 { "vxorpd", 3, { aptb3VXORPD.ptr } }, 5770 { "vxorps", 3, { aptb3VXORPS.ptr } }, 5771 { "vzeroall", 0, { aptb0VZEROALL.ptr } }, 5772 { "vzeroupper", 0, { aptb0VZEROUPPER.ptr } }, 5773 { "wait", 0, { aptb0WAIT.ptr } }, 5774 { "wbinvd", 0, { aptb0WBINVD.ptr } }, 5775 { "wrfsbase", 1, { aptb1WRFSBASE.ptr } }, 5776 { "wrgsbase", 1, { aptb1WRGSBASE.ptr } }, 5777 { "wrmsr", 0, { aptb0WRMSR.ptr } }, 5778 { "xadd", 2, { aptb2XADD.ptr } }, 5779 { "xchg", 2, { aptb2XCHG.ptr } }, 5780 { "xgetbv", 0, { aptb0XGETBV.ptr } }, 5781 { "xlat", ITopt | 1, { aptb1XLAT.ptr } }, 5782 { "xlatb", 0, { aptb0XLATB.ptr } }, 5783 { "xor", 2, { aptb2XOR.ptr } }, 5784 { "xorpd", 2, { aptb2XORPD.ptr } }, 5785 { "xorps", 2, { aptb2XORPS.ptr } }, 5786 { "xrstor", ITfloat | 1, { aptb1XRSTOR.ptr } }, 5787 { "xrstor64", ITfloat | 1, { aptb1XRSTOR64.ptr } }, 5788 { "xsave", ITfloat | 1, { aptb1XSAVE.ptr } }, 5789 { "xsave64", ITfloat | 1, { aptb1XSAVE64.ptr } }, 5790 { "xsavec", ITfloat | 1, { aptb1XSAVEC.ptr } }, 5791 { "xsavec64", ITfloat | 1, { aptb1XSAVEC64.ptr } }, 5792 { "xsaveopt", ITfloat | 1, { aptb1XSAVEOPT.ptr } }, 5793 { "xsaveopt64", ITfloat | 1, { aptb1XSAVEOPT64.ptr } }, 5794 { "xsetbv", 0, { aptb0XSETBV.ptr } }, 5795 ]; 5796 5797 /******************************* 5798 */ 5799 5800 extern (C++) const(char)* asm_opstr(OP *pop) 5801 { 5802 return pop.str; 5803 } 5804 5805 /******************************* 5806 */ 5807 5808 extern (C++) OP *asm_op_lookup(const(char)* s) 5809 { 5810 int i; 5811 char[20] szBuf = void; 5812 5813 //printf("asm_op_lookup('%s')\n",s); 5814 if (strlen(s) >= szBuf.length) 5815 return null; 5816 strcpy(szBuf.ptr,s); 5817 5818 version (SCPP) 5819 strlwr(szBuf.ptr); 5820 5821 i = binary(szBuf.ptr,optab); 5822 return (i == -1) ? null : cast(OP*)&optab[i]; 5823 } 5824 5825 /******************************* 5826 */ 5827 5828 extern (C++) void init_optab() 5829 { int i; 5830 5831 debug 5832 for (i = 0; i < optab.length - 1; i++) 5833 { 5834 if (strcmp(optab[i].str,optab[i + 1].str) >= 0) 5835 { 5836 printf("optab[%d] = '%s', [%d] = '%s'\n",i,optab[i].str,i + 1,optab[i + 1].str); 5837 assert(0); 5838 } 5839 } 5840 } 5841 5842 private int binary(const(char)* p, const OP[] table) 5843 { 5844 int low = 0; 5845 char cp = *p; 5846 int high = cast(int)(table.length) - 1; 5847 p++; 5848 5849 while (low <= high) 5850 { 5851 const mid = (low + high) >> 1; 5852 int cond = table[mid].str[0] - cp; 5853 if (cond == 0) 5854 cond = strcmp(table[mid].str + 1,p); 5855 if (cond > 0) 5856 high = mid - 1; 5857 else if (cond < 0) 5858 low = mid + 1; 5859 else 5860 return cast(int)mid; /* match index */ 5861 } 5862 return -1; 5863 } 5864 5865 5866 }