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