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