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