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 }