1 /*
2  *	HT Editor
3  *	x86opc.cc
4  *
5  *	Copyright (C) 1999-2002 Stefan Weyergraf
6  *	Copyright (C) 2005-2011 Sebastian Biallas (sb@biallas.net)
7  *
8  *	This program is free software; you can redistribute it and/or modify
9  *	it under the terms of the GNU General Public License version 2 as
10  *	published by the Free Software Foundation.
11  *
12  *	This program is distributed in the hope that it will be useful,
13  *	but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  *	GNU General Public License for more details.
16  *
17  *	You should have received a copy of the GNU General Public License
18  *	along with this program; if not, write to the Free Software
19  *	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20  */
21 
22 #include "x86opc.h"
23 
24 
25 x86opc_insn_op x86_op_type[] = {
26 
27 #define _0	0
28 {TYPE_0, 0, 0, SIZE_0},
29 #define _064	_0+1
30 {TYPE_0, 0, INFO_DEFAULT_64, SIZE_0},
31 
32 #define Ap	_064+1
33 {TYPE_A, 0, 0, SIZE_P},
34 #define Cd	Ap+1
35 {TYPE_C, 0, INFO_DEFAULT_64, SIZE_D},
36 #define Dd	Cd+1
37 {TYPE_D, 0, 0, SIZE_D},
38 #define Eb	Dd+1
39 {TYPE_E, 0, 0, SIZE_B},
40 #define Ew	Eb+1
41 {TYPE_E, 0, 0, SIZE_W},
42 #define Ed	Ew+1
43 {TYPE_E, 0, 0, SIZE_D},
44 #define Eq	Ed+1
45 {TYPE_E, 0, 0, SIZE_Q},
46 #define Er	Eq+1
47 {TYPE_E, 0, 0, SIZE_R},
48 #define Ev	Er+1
49 {TYPE_E, 0, 0, SIZE_V},
50 #define Ev64	Ev+1
51 {TYPE_E, 0, INFO_DEFAULT_64, SIZE_V},
52 #define Gb	Ev64+1
53 {TYPE_G, 0, 0, SIZE_B},
54 #define Gw	Gb+1
55 {TYPE_G, 0, 0, SIZE_W},
56 #define Gv	Gw+1
57 {TYPE_G, 0, 0, SIZE_V},
58 #define Gv64	Gv+1
59 {TYPE_G, 0, INFO_DEFAULT_64, SIZE_V},
60 #define Gd	Gv64+1
61 {TYPE_G, 0, 0, SIZE_D},
62 #define Gr	Gd+1
63 {TYPE_G, 0, 0, SIZE_R},
64 #define Gq	Gr+1
65 {TYPE_G, 0, 0, SIZE_Q},
66 #define Ib	Gq+1
67 {TYPE_I, 0, 0, SIZE_B},
68 #define Iw	Ib+1
69 {TYPE_I, 0, 0, SIZE_W},
70 #define Id	Iw+1
71 {TYPE_I, 0, 0, SIZE_D},
72 #define Iv	Id+1
73 {TYPE_I, 0, 0, SIZE_VV},
74 #define Iv64	Iv+1
75 {TYPE_I, 0, INFO_DEFAULT_64, SIZE_VV},
76 #define Ivq	Iv64+1
77 {TYPE_I, 0, 0, SIZE_V},
78 #define Ibv	Ivq+1
79 {TYPE_I, 0, 0, SIZE_BV},
80 #define sIbv	Ibv+1
81 {TYPE_Is,0, 0, SIZE_BV},
82 #define sIbv64	sIbv+1
83 {TYPE_Is,0, INFO_DEFAULT_64, SIZE_BV},
84 #define I4	sIbv64+1
85 {TYPE_I4, 0, 0, SIZE_B},
86 #define Jb	I4+1
87 {TYPE_J, 0, 0, SIZE_B},
88 #define Jv	Jb+1
89 {TYPE_J, 0, 0, SIZE_VV},
90 #define M	Jv+1
91 {TYPE_M, 0, 0, SIZE_0},
92 #define Mw	M+1
93 {TYPE_M, 0, 0, SIZE_W},
94 #define Md	Mw+1
95 {TYPE_M, 0, 0, SIZE_D},
96 #define Mp	Md+1
97 {TYPE_M, 0, 0, SIZE_P},
98 #define Mq	Mp+1
99 {TYPE_M, 0, 0, SIZE_Q},
100 #define Mv	Mq+1
101 {TYPE_M, 0, 0, SIZE_V},
102 #define Mr	Mv+1
103 {TYPE_M, 0, 0, SIZE_R},
104 #define Mo	Mr+1
105 {TYPE_M, 0, 0, SIZE_O},
106 #define Ms	Mo+1
107 {TYPE_M, 0, 0, SIZE_S},
108 #define Ml	Ms+1
109 {TYPE_M, 0, 0, SIZE_L},
110 #define Mt	Ml+1
111 {TYPE_M, 0, 0, SIZE_T},
112 #define Ma	Mt+1
113 {TYPE_M, 0, 0, SIZE_A},
114 #define Mu	Ma+1
115 {TYPE_M, 0, 0, SIZE_U},
116 #define My	Mu+1
117 {TYPE_M, 0, 0, SIZE_Y},
118 #define MRbr	My+1
119 {TYPE_MR, SIZE_R, 0, SIZE_B},
120 #define MRwr	MRbr+1
121 {TYPE_MR, SIZE_R, 0, SIZE_W},
122 #define MRwv	MRwr+1
123 {TYPE_MR, SIZE_V, 0, SIZE_W},
124 #define MRdr	MRwv+1
125 {TYPE_MR, SIZE_R, 0, SIZE_D},
126 #define MRbd	MRdr+1
127 {TYPE_MR, SIZE_D, 0, SIZE_B},
128 #define Ob	MRbd+1
129 {TYPE_O, 0, 0, SIZE_B},
130 #define Ov	Ob+1
131 {TYPE_O, 0, 0, SIZE_V},
132 #define Pd	Ov+1
133 {TYPE_P, 0, 0, SIZE_D},
134 #define Pq	Pd+1
135 {TYPE_P, 0, 0, SIZE_Q},
136 #define Pu	Pq+1
137 {TYPE_P, 0, 0, SIZE_U},
138 #define PRq	Pu+1
139 {TYPE_PR, 0, 0, SIZE_Q},
140 #define PRu	PRq+1
141 {TYPE_PR, 0, 0, SIZE_U},
142 #define Qd	PRu+1
143 {TYPE_Q, 0, 0, SIZE_D},
144 #define Qq	Qd+1
145 {TYPE_Q, 0, 0, SIZE_Q},
146 #define Qu	Qq+1
147 {TYPE_Q, 0, 0, SIZE_U},
148 #define Qz	Qu+1
149 {TYPE_Q, 0, 0, SIZE_Z},
150 #define Rw	Qz+1
151 {TYPE_R, 0, 0, SIZE_W},
152 #define Rd	Rw+1
153 {TYPE_R, 0, 0, SIZE_D},
154 #define Rq	Rd+1
155 {TYPE_R, 0, 0, SIZE_Q},
156 #define Rr	Rq+1
157 {TYPE_R, 0, 0, SIZE_R},
158 #define Rr64	Rr+1
159 {TYPE_R, 0, INFO_DEFAULT_64, SIZE_R},
160 #define Rv	Rr64+1
161 {TYPE_R, 0, 0, SIZE_V},
162 #define RVw	Rv+1
163 {TYPE_RV, 0, 0, SIZE_W},
164 #define RVd	RVw+1
165 {TYPE_RV, 0, 0, SIZE_D},
166 #define RVq	RVd+1
167 {TYPE_RV, 0, 0, SIZE_Q},
168 #define Sw	RVq+1
169 {TYPE_S, 0, 0, SIZE_W},
170 
171 #define Vd	Sw+1
172 {TYPE_V, 0, 0, SIZE_D},
173 #define Vq	Vd+1
174 {TYPE_V, 0, 0, SIZE_Q},
175 #define Vo	Vq+1
176 {TYPE_V, 0, 0, SIZE_O},
177 #define Vu	Vo+1
178 {TYPE_V, 0, 0, SIZE_U},
179 #define Vz	Vu+1
180 {TYPE_V, 0, 0, SIZE_Z},
181 #define VRq	Vz+1
182 {TYPE_VR, 0, 0, SIZE_Q},
183 #define VRo	VRq+1
184 {TYPE_VR, 0, 0, SIZE_O},
185 #define VVo	VRo+1
186 {TYPE_VV, 0, 0, SIZE_O},
187 #define VIo	VVo+1
188 {TYPE_VI, 0, 0, SIZE_O},
189 
190 #define Wb	VIo+1
191 {TYPE_W, 0, 0, SIZE_W},
192 #define Ww	Wb+1
193 {TYPE_W, 0, 0, SIZE_W},
194 #define Wd	Ww+1
195 {TYPE_W, 0, 0, SIZE_D},
196 #define Wq	Wd+1
197 {TYPE_W, 0, 0, SIZE_Q},
198 #define Wo	Wq+1
199 {TYPE_W, 0, 0, SIZE_O},
200 #define Wu	Wo+1
201 {TYPE_W, 0, 0, SIZE_U},
202 #define Wz	Wu+1
203 {TYPE_W, 0, 0, SIZE_Z},
204 
205 #define Yy	Wz+1
206 {TYPE_Y, 0, 0, SIZE_Y},
207 #define YVy	Yy+1
208 {TYPE_YV, 0, 0, SIZE_Y},
209 #define YIy	YVy+1
210 {TYPE_YI, 0, 0, SIZE_Y},
211 #define YRy	YIy+1
212 {TYPE_YR, 0, 0, SIZE_Y},
213 #define Xy	YRy+1
214 {TYPE_X, 0, 0, SIZE_Y},
215 #define Xd	Xy+1
216 {TYPE_X, 0, 0, SIZE_D},
217 #define Xq	Xd+1
218 {TYPE_X, 0, 0, SIZE_Q},
219 #define Xo	Xq+1
220 {TYPE_X, 0, 0, SIZE_O},
221 
222 #define VD	Xo+1
223 {TYPE_VD, 0, 0, SIZE_O},
224 #define VS0d	VD+1
225 {TYPE_VS, 0, 0, SIZE_D},
226 #define VS0q	VS0d+1
227 {TYPE_VS, 0, 0, SIZE_Q},
228 #define VS0o	VS0q+1
229 {TYPE_VS, 0, 0, SIZE_Q},
230 #define VS00d	VS0o+1
231 {TYPE_VS, 0, 1, SIZE_Q},
232 #define VS00q	VS00d+1
233 {TYPE_VS, 0, 1, SIZE_Q},
234 #define VS00o	VS00q+1
235 {TYPE_VS, 0, 1, SIZE_O},
236 #define VS1d	VS00o+1
237 {TYPE_VS, 1, 0, SIZE_D},
238 #define VS1q	VS1d+1
239 {TYPE_VS, 1, 0, SIZE_Q},
240 #define VS1o	VS1q+1
241 {TYPE_VS, 1, 0, SIZE_O},
242 
243 #define Ft	VS1o+1
244 {TYPE_F, 0, 0, SIZE_T},
245 
246 #define __st	Ft+1
247 {TYPE_Fx, 0, 0, SIZE_T},
248 
249 #define __1	__st+1
250 {TYPE_Ix, 1, 0, SIZE_B},
251 #define __3	__1+1
252 {TYPE_Ix, 3, 0, SIZE_B},
253 
254 #define X__al	__3+1
255 {TYPE_RXx, 0, 0, SIZE_B},
256 #define X__cl	X__al+1
257 {TYPE_RXx, 1, 0, SIZE_B},
258 
259 #define __al	X__cl+1
260 {TYPE_Rx, 0, 0, SIZE_B},
261 #define __cl	__al+1
262 {TYPE_Rx, 1, 0, SIZE_B},
263 #define __dl	__cl+1
264 {TYPE_Rx, 2, 0, SIZE_B},
265 #define __bl	__dl+1
266 {TYPE_Rx, 3, 0, SIZE_B},
267 #define __ah	__bl+1
268 {TYPE_Rx, 4, 0, SIZE_B},
269 #define __ch	__ah+1
270 {TYPE_Rx, 5, 0, SIZE_B},
271 #define __dh	__ch+1
272 {TYPE_Rx, 6, 0, SIZE_B},
273 #define __bh	__dh+1
274 {TYPE_Rx, 7, 0, SIZE_B},
275 
276 #define X__ax	__bh+1
277 {TYPE_RXx, 0, 0, SIZE_V},
278 
279 #define __ax	X__ax+1
280 {TYPE_Rx, 0, 0, SIZE_V},
281 #define __cx	__ax+1
282 {TYPE_Rx, 1, 0, SIZE_V},
283 #define __dx	__cx+1
284 {TYPE_Rx, 2, 0, SIZE_V},
285 #define __bx	__dx+1
286 {TYPE_Rx, 3, 0, SIZE_V},
287 #define __sp	__bx+1
288 {TYPE_Rx, 4, 0, SIZE_V},
289 #define __bp	__sp+1
290 {TYPE_Rx, 5, 0, SIZE_V},
291 #define __si	__bp+1
292 {TYPE_Rx, 6, 0, SIZE_V},
293 #define __di	__si+1
294 {TYPE_Rx, 7, 0, SIZE_V},
295 
296 #define __ax64	__di+1
297 {TYPE_Rx, 0, INFO_DEFAULT_64, SIZE_V},
298 #define __cx64	__ax64+1
299 {TYPE_Rx, 1, INFO_DEFAULT_64, SIZE_V},
300 #define __dx64	__cx64+1
301 {TYPE_Rx, 2, INFO_DEFAULT_64, SIZE_V},
302 #define __bx64	__dx64+1
303 {TYPE_Rx, 3, INFO_DEFAULT_64, SIZE_V},
304 #define __sp64	__bx64+1
305 {TYPE_Rx, 4, INFO_DEFAULT_64, SIZE_V},
306 #define __bp64	__sp64+1
307 {TYPE_Rx, 5, INFO_DEFAULT_64, SIZE_V},
308 #define __si64	__bp64+1
309 {TYPE_Rx, 6, INFO_DEFAULT_64, SIZE_V},
310 #define __di64	__si64+1
311 {TYPE_Rx, 7, INFO_DEFAULT_64, SIZE_V},
312 
313 #define X__axw	__di64+1
314 {TYPE_RXx, 0, 0, SIZE_W},
315 #define X__dxw	X__axw+1
316 {TYPE_RXx, 2, 0, SIZE_W},
317 
318 #define __axdq	X__dxw+1
319 {TYPE_Rx, 0, 0, SIZE_R},
320 #define __cxdq	__axdq+1
321 {TYPE_Rx, 1, 0, SIZE_R},
322 #define __dxdq	__cxdq+1
323 {TYPE_Rx, 2, 0, SIZE_R},
324 #define __bxdq	__dxdq+1
325 {TYPE_Rx, 3, 0, SIZE_R},
326 #define __spdq	__bxdq+1
327 {TYPE_Rx, 4, 0, SIZE_R},
328 #define __bpdq	__spdq+1
329 {TYPE_Rx, 5, 0, SIZE_R},
330 #define __sidq	__bpdq+1
331 {TYPE_Rx, 6, 0, SIZE_R},
332 #define __didq	__sidq+1
333 {TYPE_Rx, 7, 0, SIZE_R},
334 
335 #define __es	__didq+1
336 {TYPE_Sx, 0, 0, SIZE_W},
337 #define __cs	__es+1
338 {TYPE_Sx, 1, 0, SIZE_W},
339 #define __ss	__cs+1
340 {TYPE_Sx, 2, 0, SIZE_W},
341 #define __ds	__ss+1
342 {TYPE_Sx, 3, 0, SIZE_W},
343 #define __fs	__ds+1
344 {TYPE_Sx, 4, 0, SIZE_W},
345 #define __gs	__fs+1
346 {TYPE_Sx, 5, 0, SIZE_W},
347 
348 #define __st0	__gs+1
349 {TYPE_F, 0, 0, SIZE_T},
350 #define __st1	__st0+1
351 {TYPE_F, 1, 0, SIZE_T},
352 #define __st2	__st1+1
353 {TYPE_F, 2, 0, SIZE_T},
354 #define __st3	__st2+1
355 {TYPE_F, 3, 0, SIZE_T},
356 #define __st4	__st3+1
357 {TYPE_F, 4, 0, SIZE_T},
358 #define __st5	__st4+1
359 {TYPE_F, 5, 0, SIZE_T},
360 #define __st6	__st5+1
361 {TYPE_F, 6, 0, SIZE_T},
362 #define __st7	__st6+1
363 {TYPE_F, 7, 0, SIZE_T},
364 
365 #define XMM0	__st7+1
366 {TYPE_Vx, 0, 0, SIZE_O},
367 };
368 
369 const char *x86_regs[4][8] = {
370 {"al",  "cl",  "dl",  "bl",  "ah",  "ch",  "dh",  "bh"},
371 {"ax",  "cx",  "dx",  "bx",  "sp",  "bp",  "si",  "di"},
372 {"eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi"},
373 {"rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi"},
374 };
375 
376 const char *x86_64regs[4][16] = {
377 {"al",  "cl",  "dl",   "bl",   "spl",  "bpl",  "sil",  "dil",
378  "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"},
379 {"ax",  "cx",  "dx",   "bx",   "sp",   "bp",   "si",   "di",
380  "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"},
381 {"eax", "ecx", "edx",  "ebx",  "esp",  "ebp",  "esi",  "edi",
382  "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"},
383 {"rax", "rcx", "rdx",  "rbx",  "rsp",  "rbp",  "rsi",  "rdi",
384  "r8",  "r9",  "r10",  "r11",  "r12",  "r13",  "r14",  "r15"},
385 };
386 
387 const char *x86_ipregs[4] = {
388  "", "ip", "eip", "rip",
389 };
390 
391 const char *x86_segs[8] = {
392 "es", "cs", "ss", "ds", "fs", "gs", 0, 0
393 };
394 
395 #define GROUP_OPC_0F38		0
396 #define GROUP_OPC_660F38	1
397 #define GROUP_OPC_F20F38	2
398 #define GROUP_OPC_0F3A		3
399 #define GROUP_OPC_660F3A	4
400 #define GROUP_OPC_0F7A		5
401 #define GROUP_OPC_0F7B		6
402 #define GROUP_OPC_0F24		7
403 #define GROUP_OPC_0F25		8
404 
405 #define GROUP_80		0
406 #define GROUP_81		1
407 #define GROUP_83		2
408 #define GROUP_8F		3
409 #define GROUP_C0		4
410 #define GROUP_C1		5
411 #define GROUP_C6		6
412 #define GROUP_C7                7
413 #define GROUP_D0		8
414 #define GROUP_D1		9
415 #define GROUP_D2		10
416 #define GROUP_D3		11
417 #define GROUP_F6		12
418 #define GROUP_F7		13
419 #define GROUP_FE		14
420 #define GROUP_FF		15
421 #define GROUP_EXT_00		16
422 #define GROUP_EXT_01		17
423 #define GROUP_EXT_18		18
424 #define GROUP_EXT_71		19
425 #define GROUP_EXT_72		20
426 #define GROUP_EXT_73		21
427 #define GROUP_EXT_AE		22
428 #define GROUP_EXT_F3_AE		23
429 #define GROUP_EXT_BA		24
430 #define GROUP_EXT_C7		25
431 #define GROUP_EXT_66_C7		26
432 #define GROUP_EXT_F3_C7		27
433 
434 #define GROUP_SPECIAL_0F01_0	0
435 #define GROUP_SPECIAL_0F01_1	1
436 #define GROUP_SPECIAL_0F01_2	2
437 #define GROUP_SPECIAL_0F01_3	3
438 #define GROUP_SPECIAL_0F01_7	4
439 #define GROUP_SPECIAL_0FAE_0	5
440 #define GROUP_SPECIAL_0FAE_1	6
441 #define GROUP_SPECIAL_0FAE_2	7
442 #define GROUP_SPECIAL_0FAE_3	8
443 #define GROUP_SPECIAL_0FAE_4	9
444 #define GROUP_SPECIAL_0FAE_5	10
445 #define GROUP_SPECIAL_0FAE_6	11
446 #define GROUP_SPECIAL_0FAE_7	12
447 #define GROUP_SPECIAL_0FC7_6	13
448 #define GROUP_SPECIAL_0FC7_7	14
449 
450 #define GROUP_0FAE		0
451 #define GROUP_660F71		1
452 #define GROUP_660F72		2
453 #define GROUP_660F73		3
454 #define GROUP_0F25_12		4
455 #define GROUP_0F25_12_L		5
456 #define GROUP_0F25_12_W		6
457 #define GROUP_0FA_12		7
458 #define GROUP_0FA_12_L		8
459 #define GROUP_0FA_12_W		9
460 #define GROUP_0F38_F3		10
461 #define GROUP_0F38_F3_W		11
462 
463 /*
464 
465 	Opcode name modifiers
466 	~ ambigous size (need explicit "size ptr")
467 
468 	first char after ~:
469 	|    alternative mnemonics with same semantic (|je|jz)
470 	?    different name depending on opsize    (?16bit|32bit|64bit)
471 	*    different name depending on addrsize  (*16bit|32bit|64bit)
472 	&    same as '?' for disassembler and '|' for assembler
473  */
474 
475 x86opc_insn x86_les = {"les", {Gv, Mp}};
476 x86opc_insn x86_lds = {"lds", {Gv, Mp}};
477 x86opc_insn x86_pop_group = {0, {SPECIAL_TYPE_GROUP, GROUP_8F}};
478 
479 x86opc_insn x86_32_insns[256] = {
480 /* 00 */
481 {"add", {Eb, Gb}},
482 {"add", {Ev, Gv}},
483 {"add", {Gb, Eb}},
484 {"add", {Gv, Ev}},
485 {"add", {X__al, Ib}},
486 {"add", {X__ax, Iv}},
487 {"push", {__es}},
488 {"pop", {__es}},
489 /* 08 */
490 {"or", {Eb, Gb}},
491 {"or", {Ev, Gv}},
492 {"or", {Gb, Eb}},
493 {"or", {Gv, Ev}},
494 {"or", {X__al, Ib}},
495 {"or", {X__ax, Iv}},
496 {"push", {__cs}},
497 {0, {SPECIAL_TYPE_PREFIX}},
498 /* 10 */
499 {"adc", {Eb, Gb}},
500 {"adc", {Ev, Gv}},
501 {"adc", {Gb, Eb}},
502 {"adc", {Gv, Ev}},
503 {"adc", {X__al, Ib}},
504 {"adc", {X__ax, Iv}},
505 {"push", {__ss}},
506 {"pop", {__ss}},
507 /* 18 */
508 {"sbb", {Eb, Gb}},
509 {"sbb", {Ev, Gv}},
510 {"sbb", {Gb, Eb}},
511 {"sbb", {Gv, Ev}},
512 {"sbb", {X__al, Ib}},
513 {"sbb", {X__ax, Iv}},
514 {"push", {__ds}},
515 {"pop", {__ds}},
516 /* 20 */
517 {"and", {Eb, Gb}},
518 {"and", {Ev, Gv}},
519 {"and", {Gb, Eb}},
520 {"and", {Gv, Ev}},
521 {"and", {X__al, Ib}},
522 {"and", {X__ax, Iv}},
523 {0, {SPECIAL_TYPE_PREFIX}},		/* es-prefix */
524 {"daa"},
525 /* 28 */
526 {"sub", {Eb, Gb}},
527 {"sub", {Ev, Gv}},
528 {"sub", {Gb, Eb}},
529 {"sub", {Gv, Ev}},
530 {"sub", {X__al, Ib}},
531 {"sub", {X__ax, Iv}},
532 {0, {SPECIAL_TYPE_PREFIX}},		/* cs-prefix */
533 {"das"},
534 /* 30 */
535 {"xor", {Eb, Gb}},
536 {"xor", {Ev, Gv}},
537 {"xor", {Gb, Eb}},
538 {"xor", {Gv, Ev}},
539 {"xor", {X__al, Ib}},
540 {"xor", {X__ax, Iv}},
541 {0, {SPECIAL_TYPE_PREFIX}},		/* ss-prefix */
542 {"aaa"},
543 /* 38 */
544 {"cmp", {Eb, Gb}},
545 {"cmp", {Ev, Gv}},
546 {"cmp", {Gb, Eb}},
547 {"cmp", {Gv, Ev}},
548 {"cmp", {X__al, Ib}},
549 {"cmp", {X__ax, Iv}},
550 {0, {SPECIAL_TYPE_PREFIX}},		/* ds-prefix */
551 {"aas"},
552 /* 40 */
553 {"inc", {__ax}},
554 {"inc", {__cx}},
555 {"inc", {__dx}},
556 {"inc", {__bx}},
557 {"inc", {__sp}},
558 {"inc", {__bp}},
559 {"inc", {__si}},
560 {"inc", {__di}},
561 /* 48 */
562 {"dec", {__ax}},
563 {"dec", {__cx}},
564 {"dec", {__dx}},
565 {"dec", {__bx}},
566 {"dec", {__sp}},
567 {"dec", {__bp}},
568 {"dec", {__si}},
569 {"dec", {__di}},
570 /* 50 */
571 {"push", {__ax64}},
572 {"push", {__cx64}},
573 {"push", {__dx64}},
574 {"push", {__bx64}},
575 {"push", {__sp64}},
576 {"push", {__bp64}},
577 {"push", {__si64}},
578 {"push", {__di64}},
579 /* 58 */
580 {"pop", {__ax64}},
581 {"pop", {__cx64}},
582 {"pop", {__dx64}},
583 {"pop", {__bx64}},
584 {"pop", {__sp64}},
585 {"pop", {__bp64}},
586 {"pop", {__si64}},
587 {"pop", {__di64}},
588 /* 60 */
589 {"?pusha|pushad| x"},
590 {"?popa|popad| x"},
591 {"bound", {Gv, Mq}},
592 {"arpl", {Ew, Gw}},			//{"movsxd", {Gv, Ed}},
593 {0, {SPECIAL_TYPE_PREFIX}},		/* fs-prefix */
594 {0, {SPECIAL_TYPE_PREFIX}},		/* gs-prefix */
595 {0, {SPECIAL_TYPE_PREFIX}},		/* op-size prefix */
596 {0, {SPECIAL_TYPE_PREFIX}},		/* addr-size prefix */
597 /* 68 */
598 {"push", {Iv64}},
599 {"imul", {Gv, Ev, Iv}},
600 {"push", {sIbv64}},
601 {"imul", {Gv, Ev, sIbv}},
602 {"insb"},
603 {"?insw|insd|insd"},
604 {"outsb"},
605 {"?outsw|outsd|outsd"},
606 /* 70 */
607 {"jo", {Jb}},
608 {"jno", {Jb}},
609 {"|jc|jb|jnae", {Jb}},
610 {"|jnc|jnb|jae", {Jb}},
611 {"|jz|je", {Jb}},
612 {"|jnz|jne", {Jb}},
613 {"|jna|jbe", {Jb}},
614 {"|ja|jnbe", {Jb}},
615 /* 78 */
616 {"js", {Jb}},
617 {"jns", {Jb}},
618 {"|jp|jpe", {Jb}},
619 {"|jnp|jpo", {Jb}},
620 {"|jl|jnge", {Jb}},
621 {"|jnl|jge", {Jb}},
622 {"|jng|jle", {Jb}},
623 {"|jg|jnle", {Jb}},
624 /* 80 */
625 {0, {SPECIAL_TYPE_GROUP, GROUP_80}},
626 {0, {SPECIAL_TYPE_GROUP, GROUP_81}},
627 {0},
628 {0, {SPECIAL_TYPE_GROUP, GROUP_83}},
629 {"test", {Eb, Gb}},
630 {"test", {Ev, Gv}},
631 {"xchg", {Eb, Gb}},
632 {"xchg", {Ev, Gv}},
633 /* 88 */
634 {"mov", {Eb, Gb}},
635 {"mov", {Ev, Gv}},
636 {"mov", {Gb, Eb}},
637 {"mov", {Gv, Ev}},
638 {"mov", {MRwv, Sw}},
639 {"lea", {Gv, M}},
640 {"mov", {Sw, MRwv}},
641 {0, {SPECIAL_TYPE_PREFIX}}, // XOP prefix {0, {SPECIAL_TYPE_GROUP, GROUP_8F}},
642 /* 90 */
643 {"nop"},		/* same as xchg (e)ax, (e)ax */
644 {"xchg", {X__ax, __cx}},
645 {"xchg", {X__ax, __dx}},
646 {"xchg", {X__ax, __bx}},
647 {"xchg", {X__ax, __sp}},
648 {"xchg", {X__ax, __bp}},
649 {"xchg", {X__ax, __si}},
650 {"xchg", {X__ax, __di}},
651 /* 98 */
652 {"?cbw|cwde|cdqe"},
653 {"?cwd|cdq|cqo"},
654 {"~call", {Ap}},
655 {"fwait"},
656 {"?pushf|pushfd|pushfq", {_064}},
657 {"?popf|popfd|popfq", {_064}},
658 {"sahf"},
659 {"lahf"},
660 /* A0 */
661 {"mov", {X__al, Ob}},
662 {"mov", {X__ax, Ov}},
663 {"mov", {Ob, X__al}},
664 {"mov", {Ov, X__ax}},
665 {"movsb"},
666 {"?movsw|movsd|movsq"},
667 {"cmpsb"},
668 {"?cmpsw|cmpsd|cmpsq"},
669 /* A8 */
670 {"test", {X__al, Ib}},
671 {"test", {X__ax, Iv}},
672 {"stosb"},
673 {"?stosw|stosd|stosq"},
674 {"lodsb"},
675 {"?lodsw|lodsd|lodsq"},
676 {"scasb"},
677 {"?scasw|scasd|scasq"},
678 /* B0 */
679 {"mov", {__al, Ib}},
680 {"mov", {__cl, Ib}},
681 {"mov", {__dl, Ib}},
682 {"mov", {__bl, Ib}},
683 {"mov", {__ah, Ib}},
684 {"mov", {__ch, Ib}},
685 {"mov", {__dh, Ib}},
686 {"mov", {__bh, Ib}},
687 /* B8 */
688 {"mov", {__ax, Ivq}},
689 {"mov", {__cx, Ivq}},
690 {"mov", {__dx, Ivq}},
691 {"mov", {__bx, Ivq}},
692 {"mov", {__sp, Ivq}},
693 {"mov", {__bp, Ivq}},
694 {"mov", {__si, Ivq}},
695 {"mov", {__di, Ivq}},
696 /* C0 */
697 {0, {SPECIAL_TYPE_GROUP, GROUP_C0}},
698 {0, {SPECIAL_TYPE_GROUP, GROUP_C1}},
699 {"ret", {Iw}},
700 {"ret"},
701 {0, {SPECIAL_TYPE_PREFIX}}, // VEX prefix {"les", {Gv, Mp}}
702 {0, {SPECIAL_TYPE_PREFIX}}, // VEX prefix {"lds", {Gv, Mp}}
703 {0, {SPECIAL_TYPE_GROUP, GROUP_C6}},
704 {0, {SPECIAL_TYPE_GROUP, GROUP_C7}},
705 /* C8 */
706 {"enter", {Iw, Ib}},
707 {"leave"},
708 {"retf", {Iw}},
709 {"retf"},
710 {"int", {__3}},
711 {"int", {Ib}},
712 {"into"},
713 {"?iret|iretd|iretq"},
714 /* D0 */
715 {0, {SPECIAL_TYPE_GROUP, GROUP_D0}},
716 {0, {SPECIAL_TYPE_GROUP, GROUP_D1}},
717 {0, {SPECIAL_TYPE_GROUP, GROUP_D2}},
718 {0, {SPECIAL_TYPE_GROUP, GROUP_D3}},
719 {"aam", {Ib}},
720 {"aad", {Ib}},
721 {"setalc"},
722 {"xlat"},
723 /* D8 */
724 {0, {SPECIAL_TYPE_FGROUP, 0}},
725 {0, {SPECIAL_TYPE_FGROUP, 1}},
726 {0, {SPECIAL_TYPE_FGROUP, 2}},
727 {0, {SPECIAL_TYPE_FGROUP, 3}},
728 {0, {SPECIAL_TYPE_FGROUP, 4}},
729 {0, {SPECIAL_TYPE_FGROUP, 5}},
730 {0, {SPECIAL_TYPE_FGROUP, 6}},
731 {0, {SPECIAL_TYPE_FGROUP, 7}},
732 /* E0 */
733 {"|loopnz|loopne", {Jb}},
734 {"|loopz|loope", {Jb}},
735 {"loop", {Jb}},
736 {"*jcxz|jecxz|jrcxz", {Jb}},
737 {"in", {X__al, Ib}},
738 {"in", {X__ax, Ib}},
739 {"out", {Ib, X__al}},
740 {"out", {Ib, X__ax}},
741 /* E8 */
742 {"call", {Jv}},
743 {"jmp", {Jv}},
744 {"~jmp", {Ap}},
745 {"jmp", {Jb}},
746 {"in", {X__al, X__dxw}},
747 {"in", {X__ax, X__dxw}},
748 {"out", {X__dxw, X__al}},
749 {"out", {X__dxw, X__ax}},
750 /* F0 */
751 {0, {SPECIAL_TYPE_PREFIX}},		/* lock-prefix */
752 {"smi"},
753 {0, {SPECIAL_TYPE_PREFIX}},		/* repnz-prefix */
754 {0, {SPECIAL_TYPE_PREFIX}},		/* rep-prefix */
755 {"hlt"},
756 {"cmc"},
757 {0, {SPECIAL_TYPE_GROUP, GROUP_F6}},
758 {0, {SPECIAL_TYPE_GROUP, GROUP_F7}},
759 /* F8 */
760 {"clc"},
761 {"stc"},
762 {"cli"},
763 {"sti"},
764 {"cld"},
765 {"std"},
766 {0, {SPECIAL_TYPE_GROUP, GROUP_FE}},
767 {0, {SPECIAL_TYPE_GROUP, GROUP_FF}},
768 };
769 
770 x86_64_insn_patch x86_64_insn_patches[] = {
771 {0x06, {0}}, // push es
772 {0x07, {0}}, // pop es
773 {0x0e, {0}}, // push cs
774 {0x16, {0}}, // push ss
775 {0x17, {0}}, // pop ss
776 {0x1e, {0}}, // push ds
777 {0x1f, {0}}, // pop ds
778 {0x27, {0}}, // daa
779 {0x2f, {0}}, // das
780 {0x37, {0}}, // aaa
781 {0x3f, {0}}, // aas
782 {0x40, {0}}, // REX prefixes
783 {0x41, {0}},
784 {0x42, {0}},
785 {0x43, {0}},
786 {0x44, {0}},
787 {0x45, {0}},
788 {0x46, {0}},
789 {0x47, {0}},
790 {0x48, {0}},
791 {0x49, {0}},
792 {0x4a, {0}},
793 {0x4b, {0}},
794 {0x4c, {0}},
795 {0x4d, {0}},
796 {0x4e, {0}},
797 {0x4f, {0}}, // ..
798 {0x60, {0}}, // pusha
799 {0x61, {0}}, // popa
800 {0x62, {0, {SPECIAL_TYPE_PREFIX}}},  // EVEX
801 {0x63, {"movsxd", {Gv, Ed}}},
802 {0x9a, {0}}, // call Ap
803 {0xce, {0}}, // into
804 {0xd4, {0}}, // aam
805 {0xd5, {0}}, // aad
806 {0xd6, {0}}, // setalc
807 {0xea, {0}}, // jmp Ap
808 {-1, {0}},
809 };
810 
811 x86opc_insn x86_insns_ext[256] = {
812 /* 00 */
813 {0, {SPECIAL_TYPE_GROUP, GROUP_EXT_00}},
814 {0, {SPECIAL_TYPE_GROUP, GROUP_EXT_01}},
815 {"lar", {Gv, Ew}},
816 {"lsl", {Gv, Ew}},
817 {0},
818 {"syscall"},
819 {"clts"},
820 {"sysret"},
821 /* 08 */
822 {"invd"},
823 {"wbinvd"},
824 {0},
825 {"ud1"},
826 {0},
827 {"prefetch", {Eb}},
828 {"femms"},
829 {0, {SPECIAL_TYPE_PREFIX}},
830 /* 10 */
831 {"movups", {Vo, Wo}},
832 {"movups", {Wo, Vo}},
833 {"movlps", {Vq, Wq}},
834 {"movlps", {Mq, Vq}},
835 {"unpcklps", {Vo, Wq}},
836 {"unpckhps", {Vo, Wq}},
837 {"movhps", {Vq, Wq}},
838 {"movhps", {Mq, Vq}},
839 /* 18 */
840 {0, {SPECIAL_TYPE_GROUP, GROUP_EXT_18}},
841 {"~nop", {Ev}},
842 {"~nop", {Ev}},
843 {"~nop", {Ev}},
844 {"~nop", {Ev}},
845 {"~nop", {Ev}},
846 {"~nop", {Ev}},
847 {"~nop", {Ev}},
848 /* 20 */
849 {"mov", {Rr64, Cd}},
850 {"mov", {Rr, Dd}},
851 {"mov", {Cd, Rr}},
852 {"mov", {Dd, Rr}},
853 {0, {SPECIAL_TYPE_OPC_GROUP, GROUP_OPC_0F24}},
854 {0, {SPECIAL_TYPE_OPC_GROUP, GROUP_OPC_0F25}},
855 {0},
856 {0},
857 /* 28 */
858 {"movaps", {Vo, Wo}},
859 {"movaps", {Wo, Vo}},
860 {"cvtpi2ps", {Vu, Qq}},
861 {"movntps", {Mo, Vo}},
862 {"cvttps2pi", {Pq, Wq}},
863 {"cvtps2pi", {Pq, Wq}},
864 {"ucomiss", {Vz, Wz}},
865 {"comiss", {Vz, Wz}},
866 /* 30 */
867 {"wrmsr"},
868 {"rdtsc"},
869 {"rdmsr"},
870 {"rdpmc"},
871 {"sysenter"},
872 {"sysexit"},
873 {0},
874 {"getsec"},
875 /* 38 */
876 {0, {SPECIAL_TYPE_OPC_GROUP, GROUP_OPC_0F38}},
877 {0},
878 {0, {SPECIAL_TYPE_OPC_GROUP, GROUP_OPC_0F3A}},
879 {0},
880 {0},
881 {0},
882 {0},
883 {0},
884 /* 40 */
885 {"cmovo", {Gv, Ev}},
886 {"cmovno", {Gv, Ev}},
887 {"|cmovc|cmovb", {Gv, Ev}},
888 {"|cmovnc|cmovnb", {Gv, Ev}},
889 {"|cmovz|cmove", {Gv, Ev}},
890 {"|cmovnz|cmovne", {Gv, Ev}},
891 {"|cmova|cmovnbe", {Gv, Ev}},
892 {"|cmovna|cmovbe", {Gv, Ev}},
893 /* 48 */
894 {"cmovs", {Gv, Ev}},
895 {"cmovns", {Gv, Ev}},
896 {"|cmovp|cmovpe", {Gv, Ev}},
897 {"|cmovnp|cmovpo", {Gv, Ev}},
898 {"|cmovl|cmovnge", {Gv, Ev}},
899 {"|cmovnl|cmovge", {Gv, Ev}},
900 {"|cmovng|cmovle", {Gv, Ev}},
901 {"|cmovg|cmovnle", {Gv, Ev}},
902 /* 50 */
903 {"movmskps", {Gd, VRo}},
904 {"sqrtps", {Vo, Wo}},
905 {"rsqrtps", {Vo, Wo}},
906 {"rcpps", {Vo, Wo}},
907 {"andps", {Vo, Wo}},
908 {"andnps", {Vo, Wo}},
909 {"orps", {Vo, Wo}},
910 {"xorps", {Vo, Wo}},
911 /* 58 */
912 {"addps", {Vo, Wo}},
913 {"mulps", {Vo, Wo}},
914 {"cvtps2pd", {Vo, Wq}},
915 {"cvtdq2ps", {Vo, Wo}},
916 {"subps", {Vo, Wo}},
917 {"minps", {Vo, Wo}},
918 {"divps", {Vo, Wo}},
919 {"maxps", {Vo, Wo}},
920 /* 60 */
921 {"punpcklbw", {Pu, Qz}},
922 {"punpcklwd", {Pu, Qz}},
923 {"punpckldq", {Pu, Qz}},
924 {"packsswb", {Pu, Qu}},
925 {"pcmpgtb", {Pu, Qu}},
926 {"pcmpgtw", {Pu, Qu}},
927 {"pcmpgtd", {Pu, Qu}},
928 {"packuswb", {Pu, Qu}},
929 /* 68 */
930 {"punpckhbw", {Pu, Qu}},
931 {"punpckhwd", {Pu, Qu}},
932 {"punpckhdq", {Pu, Qu}},
933 {"packssdw", {Pu, Qu}},
934 {0},
935 {0},
936 {"~movd", {Pu, Er}},
937 {"movq", {Pu, Qu}},
938 /* 70 */
939 {"pshufw", {Pu, Qu, Ib}},
940 {0, {SPECIAL_TYPE_GROUP, GROUP_EXT_71}},
941 {0, {SPECIAL_TYPE_GROUP, GROUP_EXT_72}},
942 {0, {SPECIAL_TYPE_GROUP, GROUP_EXT_73}},
943 {"pcmpeqb", {Pu, Qu}},
944 {"pcmpeqw", {Pu, Qu}},
945 {"pcmpewd", {Pu, Qu}},
946 {"emms"},
947 /* 78 */
948 {"vmread", {Ev64, Gv64}},
949 {"vmwrite", {Gv64, Ev64}},
950 {0, {SPECIAL_TYPE_OPC_GROUP, GROUP_OPC_0F7A}},
951 {0, {SPECIAL_TYPE_OPC_GROUP, GROUP_OPC_0F7B}},
952 {0},
953 {0},
954 {"~movd", {Er, Pq}},
955 {"movq", {Qq, Pq}},
956 /* 80 */
957 {"jo", {Jv}},
958 {"jno", {Jv}},
959 {"|jc|jb|jnae", {Jv}},
960 {"|jnc|jnb|jae", {Jv}},
961 {"|jz|je", {Jv}},
962 {"|jnz|jne", {Jv}},
963 {"|jna|jbe", {Jv}},
964 {"|ja|jnbe", {Jv}},
965 /* 88 */
966 {"js", {Jv}},
967 {"jns", {Jv}},
968 {"|jp|jpe", {Jv}},
969 {"|jnp|jpo", {Jv}},
970 {"|jl|jnge", {Jv}},
971 {"|jnl|jge", {Jv}},
972 {"|jng|jle", {Jv}},
973 {"|jg|jnle", {Jv}},
974 /* 90 */
975 {"seto", {Eb}},
976 {"setno", {Eb}},
977 {"|setc|setb|setnae", {Eb}},
978 {"|setnc|setnb|setae", {Eb}},
979 {"|setz|sete", {Eb}},
980 {"|setnz|setne", {Eb}},
981 {"|setna|setbe", {Eb}},
982 {"|seta|setnbe", {Eb}},
983 /* 98 */
984 {"sets", {Eb}},
985 {"setns", {Eb}},
986 {"|setp|setpe", {Eb}},
987 {"|setnp|setpo", {Eb}},
988 {"|setl|setnge", {Eb}},
989 {"|setnl|setge", {Eb}},
990 {"|setng|setle", {Eb}},
991 {"|setg|setnle", {Eb}},
992 /* A0 */
993 {"push", {__fs}},
994 {"pop", {__fs}},
995 {"cpuid"},
996 {"bt", {Ev, Gv}},
997 {"shld", {Ev, Gv, Ib}},
998 {"shld", {Ev, Gv, X__cl}},
999 {0},
1000 {0},
1001 /* A8 */
1002 {"push", {__gs}},
1003 {"pop", {__gs}},
1004 {"rsm"},
1005 {"bts", {Ev, Gv}},
1006 {"shrd", {Ev, Gv, Ib}},
1007 {"shrd", {Ev, Gv, X__cl}},
1008 {0, {SPECIAL_TYPE_GROUP, GROUP_EXT_AE}},
1009 {"imul", {Gv, Ev}},
1010 /* B0 */
1011 {"cmpxchg", {Eb, Gb}},
1012 {"cmpxchg", {Ev, Gv}},
1013 {"lss", {Gv, Mp}},
1014 {"btr", {Ev, Gv}},
1015 {"lfs", {Gv, Mp}},
1016 {"lgs", {Gv, Mp}},
1017 {"~movzx", {Gv, Eb}},
1018 {"~movzx", {Gv, Ew}},
1019 /* B8 */
1020 {"jmpe", {Jv}},
1021 {"ud2"},
1022 {0, {SPECIAL_TYPE_GROUP, GROUP_EXT_BA}},
1023 {"btc", {Ev, Gv}},
1024 {"bsf", {Gv, Ev}},
1025 {"bsr", {Gv, Ev}},
1026 {"~movsx", {Gv, Eb}},
1027 {"~movsx", {Gv, Ew}},
1028 /* C0 */
1029 {"xadd", {Eb, Gb}},
1030 {"xadd", {Ev, Gv}},
1031 {"cmpCCps", {Vo, Wo, Ib}},
1032 {"movnti", {Mr, Gr}},
1033 {"pinsrw", {Pq, MRwr, Ib}},
1034 {"pextrw", {Gr, PRq, Ib}},
1035 {"shufps", {Vo, Wo, Ib}},
1036 {0, {SPECIAL_TYPE_GROUP, GROUP_EXT_C7}},
1037 /* C8 */
1038 {"bswap", {__axdq}},
1039 {"bswap", {__cxdq}},
1040 {"bswap", {__dxdq}},
1041 {"bswap", {__bxdq}},
1042 {"bswap", {__spdq}},
1043 {"bswap", {__bpdq}},
1044 {"bswap", {__sidq}},
1045 {"bswap", {__didq}},
1046 /* D0 */
1047 {0},
1048 {"psrlw", {Pu, Qu}},
1049 {"psrld", {Pu, Qu}},
1050 {"psrlq", {Pu, Qu}},
1051 {"paddq", {Pu, Qu}},
1052 {"pmullw", {Pu, Qu}},
1053 {0},
1054 {"pmovmskb", {Gd, PRu}},
1055 /* D8 */
1056 {"psubusb", {Pu, Qu}},
1057 {"psubusw", {Pu, Qu}},
1058 {"pminub", {Pu, Qu}},
1059 {"pand", {Pu, Qu}},
1060 {"paddusb", {Pu, Qu}},
1061 {"paddusw", {Pu, Qu}},
1062 {"pmaxub", {Pu, Qu}},
1063 {"pandn", {Pu, Qu}},
1064 /* E0 */
1065 {"pavgb", {Pu, Qu}},
1066 {"psraw", {Pu, Qu}},
1067 {"psrad", {Pu, Qu}},
1068 {"pavgw", {Pu, Qu}},
1069 {"pmulhuw", {Pu, Qu}},
1070 {"pmulhw", {Pu, Qu}},
1071 {0},
1072 {"movntq", {Mq, Pq}},
1073 /* E8 */
1074 {"psubsb", {Pu, Qu}},
1075 {"psubsw", {Pu, Qu}},
1076 {"pminsw", {Pu, Qu}},
1077 {"por", {Pu, Qu}},
1078 {"paddsb", {Pu, Qu}},
1079 {"paddsw", {Pu, Qu}},
1080 {"pmaxsw", {Pu, Qu}},
1081 {"pxor", {Pu, Qu}},
1082 /* F0 */
1083 {0},
1084 {"psllw", {Pu, Qu}},
1085 {"pslld", {Pu, Qu}},
1086 {"psllq", {Pu, Qu}},
1087 {"pmuludq", {Pu, Qu}},
1088 {"pmaddwd", {Pu, Qu}},
1089 {"psadbw", {Pu, Qu}},
1090 {"maskmovq", {Pq, PRq}},
1091 /* F8 */
1092 {"psubb", {Pu, Qu}},
1093 {"psubw", {Pu, Qu}},
1094 {"psubd", {Pu, Qu}},
1095 {"psubq", {Pu, Qu}},
1096 {"paddb", {Pu, Qu}},
1097 {"paddw", {Pu, Qu}},
1098 {"paddd", {Pu, Qu}},
1099 {0},
1100 };
1101 
1102 x86opc_insn x86_insns_ext_66[256] = {
1103 /* 00 */
1104 {0, {SPECIAL_TYPE_GROUP, GROUP_EXT_00}},
1105 {0, {SPECIAL_TYPE_GROUP, GROUP_EXT_01}},
1106 {"lar", {Gv, Ew}},
1107 {"lsl", {Gv, Ew}},
1108 {0},
1109 {"syscall"},
1110 {"clts"},
1111 {"sysret"},
1112 /* 08 */
1113 {"invd"},
1114 {"wbinvd"},
1115 {0},
1116 {"ud1"},
1117 {0},
1118 {"prefetch", {Eb}},
1119 {"femms"},
1120 {0, {SPECIAL_TYPE_PREFIX}},
1121 /* 10 */
1122 {"movupd", {Vo, Wo}},
1123 {"movupd", {Wo, Vo}},
1124 {"movlpd", {Vq, Wq}},
1125 {"movlpd", {Mq, Vq}},
1126 {"unpcklpd", {Vo, Wq}},
1127 {"unpckhpd", {Vo, Wq}},
1128 {"movhpd", {Vq, Wq}},
1129 {"movhpd", {Mq, Vq}},
1130 /* 18 */
1131 {0, {SPECIAL_TYPE_GROUP, GROUP_EXT_18}},
1132 {"~nop", {Ev}},
1133 {"~nop", {Ev}},
1134 {"~nop", {Ev}},
1135 {"~nop", {Ev}},
1136 {"~nop", {Ev}},
1137 {"~nop", {Ev}},
1138 {"~nop", {Ev}},
1139 /* 20 */
1140 {"mov", {Rr64, Cd}},	// default 64
1141 {"mov", {Rr, Dd}},	// default 32
1142 {"mov", {Cd, Rr}},	// default 64
1143 {"mov", {Dd, Rr}},	// default 32
1144 {0},
1145 {0},
1146 {0},
1147 {0},
1148 /* 28 */
1149 {"movapd", {Vo, Wo}},
1150 {"movapd", {Wo, Vo}},
1151 {"cvtpi2pd", {Vo, Qq}},
1152 {"movntpd", {Mo, Vo}},
1153 {"cvttpd2pi", {Pq, Wo}},
1154 {"cvtpd2pi", {Pq, Wo}},
1155 {"ucomisd", {Vz, Wz}},
1156 {"comisd", {Vz, Wz}},
1157 /* 30 */
1158 {"wrmsr"},
1159 {"rdtsc"},
1160 {"rdmsr"},
1161 {"rdpmc"},
1162 {"sysenter"},
1163 {"sysexit"},
1164 {0},
1165 {"getsec"},
1166 /* 38 */
1167 {0, {SPECIAL_TYPE_OPC_GROUP, GROUP_OPC_660F38}},
1168 {0},
1169 {0, {SPECIAL_TYPE_OPC_GROUP, GROUP_OPC_660F3A}},
1170 {0},
1171 {0},
1172 {0},
1173 {0},
1174 {0},
1175 /* 40 */
1176 {"cmovo", {Gv, Ev}},
1177 {"cmovno", {Gv, Ev}},
1178 {"|cmovc|cmovb", {Gv, Ev}},
1179 {"|cmovnc|cmovnb", {Gv, Ev}},
1180 {"|cmovz|cmove", {Gv, Ev}},
1181 {"|cmovnz|cmovne", {Gv, Ev}},
1182 {"|cmova|cmovnbe", {Gv, Ev}},
1183 {"|cmovna|cmovbe", {Gv, Ev}},
1184 /* 48 */
1185 {"cmovs", {Gv, Ev}},
1186 {"cmovns", {Gv, Ev}},
1187 {"|cmovp|cmovpe", {Gv, Ev}},
1188 {"|cmovnp|cmovpo", {Gv, Ev}},
1189 {"|cmovl|cmovnge", {Gv, Ev}},
1190 {"|cmovnl|cmovge", {Gv, Ev}},
1191 {"|cmovng|cmovle", {Gv, Ev}},
1192 {"|cmovg|cmovnle", {Gv, Ev}},
1193 /* 50 */
1194 {"movmskpd", {Gd, VRo}},
1195 {"sqrtpd", {Vo, Wo}},
1196 {0},  // {"rsqrtpd", {Vo, Wo}},
1197 {0},  // {"rcppd", {Vo, Wo}},
1198 {"andpd", {Vo, Wo}},
1199 {"andnpd", {Vo, Wo}},
1200 {"orpd", {Vo, Wo}},
1201 {"xorpd", {Vo, Wo}},
1202 /* 58 */
1203 {"addpd", {Vo, Wo}},
1204 {"mulpd", {Vo, Wo}},
1205 {"cvtpd2ps", {Vo, Wo}},
1206 {"cvtps2dq", {Vo, Wo}},
1207 {"subpd", {Vo, Wo}},
1208 {"minpd", {Vo, Wo}},
1209 {"divpd", {Vo, Wo}},
1210 {"maxpd", {Vo, Wo}},
1211 /* 60 */
1212 {"punpcklbw", {Pu, Qz}},
1213 {"punpcklwd", {Pu, Qz}},
1214 {"punpckldq", {Pu, Qz}},
1215 {"packsswb", {Pu, Qu}},
1216 {"pcmpgtb", {Pu, Qu}},
1217 {"pcmpgtw", {Pu, Qu}},
1218 {"pcmpgtd", {Pu, Qu}},
1219 {"packuswb", {Pu, Qu}},
1220 /* 68 */
1221 {"punpckhbw", {Pu, Qu}},
1222 {"punpckhwd", {Pu, Qu}},
1223 {"punpckhdq", {Pu, Qu}},
1224 {"packssdw", {Pu, Qu}},
1225 {"punpcklqdq", {Vo, Wo}},
1226 {"punpckhqdq", {Vo, Wo}},
1227 {"~movd", {Vo, Er}},
1228 {"movdqa", {Pu, Qu}},
1229 /* 70 */
1230 {"pshufd", {Pu, Qu, Ib}},
1231 {0, {SPECIAL_TYPE_GROUP, GROUP_EXT_71}},
1232 {0, {SPECIAL_TYPE_GROUP, GROUP_EXT_72}},
1233 {0, {SPECIAL_TYPE_GROUP, GROUP_EXT_73}},
1234 {"pcmpeqb", {Pu, Qu}},
1235 {"pcmpeqw", {Pu, Qu}},
1236 {"pcmpewd", {Pu, Qu}},
1237 {0},
1238 /* 78 */
1239 {"extrq", {VRo, Ib, Ib}},
1240 {"extrq", {Vo, VRo}},
1241 {0},
1242 {0},
1243 {"haddpd", {Vo, Wo}},
1244 {"hsubpd", {Vo, Wo}},
1245 {"~movd", {Er, Vo}},
1246 {"movdqa", {Wo, Vo}},
1247 /* 80 */
1248 {"jo", {Jv}},
1249 {"jno", {Jv}},
1250 {"|jc|jb|jnae", {Jv}},
1251 {"|jnc|jnb|jae", {Jv}},
1252 {"|jz|je", {Jv}},
1253 {"|jnz|jne", {Jv}},
1254 {"|jna|jbe", {Jv}},
1255 {"|ja|jnbe", {Jv}},
1256 /* 88 */
1257 {"js", {Jv}},
1258 {"jns", {Jv}},
1259 {"|jp|jpe", {Jv}},
1260 {"|jnp|jpo", {Jv}},
1261 {"|jl|jnge", {Jv}},
1262 {"|jnl|jge", {Jv}},
1263 {"|jng|jle", {Jv}},
1264 {"|jg|jnle", {Jv}},
1265 /* 90 */
1266 {"seto", {Eb}},
1267 {"setno", {Eb}},
1268 {"|setc|setb|setnae", {Eb}},
1269 {"|setnc|setnb|setae", {Eb}},
1270 {"|setz|sete", {Eb}},
1271 {"|setnz|setne", {Eb}},
1272 {"|setna|setbe", {Eb}},
1273 {"|seta|setnbe", {Eb}},
1274 /* 98 */
1275 {"sets", {Eb}},
1276 {"setns", {Eb}},
1277 {"|setp|setpe", {Eb}},
1278 {"|setnp|setpo", {Eb}},
1279 {"|setl|setnge", {Eb}},
1280 {"|setnl|setge", {Eb}},
1281 {"|setng|setle", {Eb}},
1282 {"|setg|setnle", {Eb}},
1283 /* A0 */
1284 {"push", {__fs}},
1285 {"pop", {__fs}},
1286 {"cpuid"},
1287 {"bt", {Ev, Gv}},
1288 {"shld", {Ev, Gv, Ib}},
1289 {"shld", {Ev, Gv, X__cl}},
1290 {0},
1291 {0},
1292 /* A8 */
1293 {"push", {__gs}},
1294 {"pop", {__gs}},
1295 {"rsm"},
1296 {"bts", {Ev, Gv}},
1297 {"shrd", {Ev, Gv, Ib}},
1298 {"shrd", {Ev, Gv, X__cl}},
1299 {0, {SPECIAL_TYPE_GROUP, GROUP_EXT_AE}},
1300 {"imul", {Gv, Ev}},
1301 /* B0 */
1302 {"cmpxchg", {Eb, Gb}},
1303 {"cmpxchg", {Ev, Gv}},
1304 {"lss", {Gv, Mp}},
1305 {"btr", {Ev, Gv}},
1306 {"lfs", {Gv, Mp}},
1307 {"lgs", {Gv, Mp}},
1308 {"~movzx", {Gv, Eb}},
1309 {"~movzx", {Gv, Ew}},
1310 /* B8 */
1311 {"jmpe", {Jv}},
1312 {"ud2"},
1313 {0, {SPECIAL_TYPE_GROUP, GROUP_EXT_BA}},
1314 {"btc", {Ev, Gv}},
1315 {"bsf", {Gv, Ev}},
1316 {"bsr", {Gv, Ev}},
1317 {"~movsx", {Gv, Eb}},
1318 {"~movsx", {Gv, Ew}},
1319 /* C0 */
1320 {"xadd", {Eb, Gb}},
1321 {"xadd", {Ev, Gv}},
1322 {"cmpCCpd", {Vo, Wo, Ib}},
1323 {0},
1324 {"pinsrw", {Vo, MRwr, Ib}},
1325 {"pextrw", {Gr, VRo, Ib}},
1326 {"shufpd", {Vo, Wo, Ib}},
1327 {0, {SPECIAL_TYPE_GROUP, GROUP_EXT_66_C7}},
1328 /* C8 */
1329 {"bswap", {__axdq}},
1330 {"bswap", {__cxdq}},
1331 {"bswap", {__dxdq}},
1332 {"bswap", {__bxdq}},
1333 {"bswap", {__spdq}},
1334 {"bswap", {__bpdq}},
1335 {"bswap", {__sidq}},
1336 {"bswap", {__didq}},
1337 /* D0 */
1338 {"addsubpd", {Vo, Wo}},
1339 {"psrlw", {Pu, Qu}},
1340 {"psrld", {Pu, Qu}},
1341 {"psrlq", {Pu, Qu}},
1342 {"paddq", {Pu, Qu}},
1343 {"pmullw", {Pu, Qu}},
1344 {"movq", {Wq, Vq}},
1345 {"pmovmskb", {Gr, PRu}},
1346 /* D8 */
1347 {"psubusb", {Pu, Qu}},
1348 {"psubusw", {Pu, Qu}},
1349 {"pminub", {Pu, Qu}},
1350 {"pand", {Pu, Qu}},
1351 {"paddusb", {Pu, Qu}},
1352 {"paddusw", {Pu, Qu}},
1353 {"pmaxub", {Pu, Qu}},
1354 {"pandn", {Pu, Qu}},
1355 /* E0 */
1356 {"pavgb", {Pu, Qu}},
1357 {"psraw", {Pu, Qu}},
1358 {"psrad", {Pu, Qu}},
1359 {"pavgw", {Pu, Qu}},
1360 {"pmulhuw", {Pu, Qu}},
1361 {"pmulhw", {Pu, Qu}},
1362 {"cvttpd2dq", {Vo, Wo}},
1363 {"movntdq", {Mo, Vo}},
1364 /* E8 */
1365 {"psubsb", {Pu, Qu}},
1366 {"psubsw", {Pu, Qu}},
1367 {"pminsw", {Pu, Qu}},
1368 {"por", {Pu, Qu}},
1369 {"paddsb", {Pu, Qu}},
1370 {"paddsw", {Pu, Qu}},
1371 {"pmaxsw", {Pu, Qu}},
1372 {"pxor", {Pu, Qu}},
1373 /* F0 */
1374 {0},
1375 {"psllw", {Pu, Qu}},
1376 {"pslld", {Pu, Qu}},
1377 {"psllq", {Pu, Qu}},
1378 {"pmuludq", {Pu, Qu}},
1379 {"pmaddwd", {Pu, Qu}},
1380 {"psadbw", {Pu, Qu}},
1381 {"maskmovdqu", {Vo, VRo}},
1382 /* F8 */
1383 {"psubb", {Pu, Qu}},
1384 {"psubw", {Pu, Qu}},
1385 {"psubd", {Pu, Qu}},
1386 {"psubq", {Pu, Qu}},
1387 {"paddb", {Pu, Qu}},
1388 {"paddw", {Pu, Qu}},
1389 {"paddd", {Pu, Qu}},
1390 {0},
1391 };
1392 
1393 x86opc_insn x86_insns_ext_f2[256] = {
1394 /* 00 */
1395 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1396 /* 08 */
1397 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1398 /* 10 */
1399 {"movsd", {Vq, Wq}},
1400 {"movsd", {Wq, Vq}},
1401 {"movddup", {Vo, Wq}},
1402 {0},
1403 {0},
1404 {0},
1405 {0},
1406 {0},
1407 /* 18 */
1408 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1409 /* 20 */
1410 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1411 /* 28 */
1412 {0},
1413 {0},
1414 {"~cvtsi2sd", {Vq, Er}},
1415 {"movntsd", {Mq, Vq}},
1416 {"cvttsd2si", {Gr, Wq}},
1417 {"cvtsd2si", {Gr, Wq}},
1418 {0},
1419 {0},
1420 /* 30 */
1421 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1422 /* 38 */
1423 {0, {SPECIAL_TYPE_OPC_GROUP, GROUP_OPC_F20F38}},
1424 {0},
1425 {0},
1426 {0},
1427 {0},
1428 {0},
1429 {0},
1430 {0},
1431 /* 40 */
1432 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1433 /* 48 */
1434 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1435 /* 50 */
1436 {0},
1437 {"sqrtsd", {Vq, Wq}},
1438 {0},
1439 {0},
1440 {0},
1441 {0},
1442 {0},
1443 {0},
1444 /* 58 */
1445 {"addsd", {Vq, Wq}},
1446 {"mulsd", {Vq, Wq}},
1447 {"cvtsd2ss", {Vd, Wq}},
1448 {0},
1449 {"subsd", {Vq, Wq}},
1450 {"minsd", {Vq, Wq}},
1451 {"divsd", {Vq, Wq}},
1452 {"maxsd", {Vq, Wq}},
1453 /* 60 */
1454 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1455 /* 68 */
1456 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1457 /* 70 */
1458 {"pshuflw", {Vo, Wo, Ib}},
1459 {0},
1460 {0},
1461 {0},
1462 {0},
1463 {0},
1464 {0},
1465 {0},
1466 /* 78 */
1467 {"insertq", {Vo, VRo, Iw}},
1468 {"insertq", {Vo, VRo}},
1469 {0},
1470 {0},
1471 {"haddps", {Vo, Wo}},
1472 {"hsubps", {Vo, Wo}},
1473 {0},
1474 {0},
1475 /* 80 */
1476 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1477 /* 88 */
1478 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1479 /* 90 */
1480 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1481 /* 98 */
1482 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1483 /* a0 */
1484 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1485 /* a8 */
1486 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1487 /* b0 */
1488 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1489 /* b8 */
1490 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1491 /* c0 */
1492 {0},
1493 {0},
1494 {"cmpCCsd", {Vq, Wq, Ib}},
1495 {0},
1496 {0},
1497 {0},
1498 {0},
1499 {0},
1500 /* c8 */
1501 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1502 /* d0 */
1503 {"addsubps", {Vo, Wo}},
1504 {0},
1505 {0},
1506 {0},
1507 {0},
1508 {0},
1509 {"movdq2q", {Pq, VRq}},
1510 {0},
1511 /* d8 */
1512 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1513 /* e0 */
1514 {0},
1515 {0},
1516 {0},
1517 {0},
1518 {0},
1519 {0},
1520 {"cvtpd2dq", {Vo, Wo}},
1521 {0},
1522 /* e8 */
1523 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1524 /* f0 */
1525 {"lddqu", {Vo, Mo}},
1526 {0},
1527 {0},
1528 {0},
1529 {0},
1530 {0},
1531 {0},
1532 {0},
1533 /* f8 */
1534 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1535 };
1536 
1537 x86opc_insn x86_insns_ext_f3[256] = {
1538 /* 00 */
1539 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1540 /* 08 */
1541 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1542 /* 10 */
1543 {"movss", {Vd, Wd}},
1544 {"movss", {Wd, Vd}},
1545 {"movsldup", {Vo, Wo}},
1546 {0},
1547 {0},
1548 {0},
1549 {"movshdup", {Vo, Wo}},
1550 {0},
1551 /* 18 */
1552 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1553 /* 20 */
1554 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1555 /* 28 */
1556 {0},
1557 {0},
1558 {"~cvtsi2ss", {Vd, Er}},
1559 {"movntss", {Md, Vd}},
1560 {"cvttss2si", {Gr, Wd}},
1561 {"cvtss2si", {Gr, Wd}},
1562 {0},
1563 {0},
1564 /* 30 */
1565 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1566 /* 38 */
1567 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1568 /* 40 */
1569 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1570 /* 48 */
1571 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1572 /* 50 */
1573 {0},
1574 {"sqrtss", {Vd, Wd}},
1575 {"rsqrtss", {Vd, Wd}},
1576 {"rcpss", {Vd, Wd}},
1577 {0},
1578 {0},
1579 {0},
1580 {0},
1581 /* 58 */
1582 {"addss", {Vd, Wd}},
1583 {"mulss", {Vd, Wd}},
1584 {"cvtss2sd", {Vq, Wd}},
1585 {"cvttps2dq", {Vo, Wo}},
1586 {"subss", {Vd, Wd}},
1587 {"minss", {Vd, Wd}},
1588 {"divss", {Vd, Wd}},
1589 {"maxss", {Vd, Wd}},
1590 /* 60 */
1591 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1592 /* 68 */
1593 {0},
1594 {0},
1595 {0},
1596 {0},
1597 {0},
1598 {0},
1599 {0},
1600 {"movdqu", {Vo, Wo}},
1601 /* 70 */
1602 {"pshufhw", {Vo, Wo, Ib}},
1603 {0},
1604 {0},
1605 {0},
1606 {0},
1607 {0},
1608 {0},
1609 {0},
1610 /* 78 */
1611 {0},
1612 {0},
1613 {0},
1614 {0},
1615 {0},
1616 {0},
1617 {"movq", {Vo, Wq}},
1618 {"movdqu", {Wo, Vo}},
1619 /* 80 */
1620 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1621 /* 88 */
1622 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1623 /* 90 */
1624 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1625 /* 98 */
1626 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1627 /* a0 */
1628 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1629 /* a8 */
1630 {0},
1631 {0},
1632 {0},
1633 {0},
1634 {0},
1635 {0},
1636 {0, {SPECIAL_TYPE_GROUP, GROUP_EXT_F3_AE}},
1637 {0},
1638 /* b0 */
1639 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1640 /* b8 */
1641 {"popcnt", {Gv, Ev}},
1642 {0},
1643 {0},
1644 {0},
1645 {"tzcnt", {Gv, Ev}},
1646 {"lzcnt", {Gv, Ev}},
1647 {0},
1648 {0},
1649 /* c0 */
1650 {0},
1651 {0},
1652 {"cmpCCss", {Vd, Wd, Ib}},
1653 {0},
1654 {0},
1655 {0},
1656 {0},
1657 {0, {SPECIAL_TYPE_GROUP, GROUP_EXT_F3_C7}},
1658 /* c8 */
1659 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1660 /* d0 */
1661 {0},
1662 {0},
1663 {0},
1664 {0},
1665 {0},
1666 {0},
1667 {"movq2dq", {Vo, PRq}},
1668 {0},
1669 /* d8 */
1670 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1671 /* e0 */
1672 {0},
1673 {0},
1674 {0},
1675 {0},
1676 {0},
1677 {0},
1678 {"cvtdq2pd", {Vo, Wq}},
1679 {0},
1680 /* e8 */
1681 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1682 /* f0 */
1683 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1684 /* f8 */
1685 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1686 };
1687 
1688 x86opc_insn x86_opc_group_insns[X86_OPC_GROUPS][256] = {
1689 /* 0 - GROUP_OPC_0F38 */
1690 {
1691 /* 00 */
1692 {"pshufb", {Pu, Qu}},
1693 {"phaddw", {Pu, Qu}},
1694 {"phaddd", {Pu, Qu}},
1695 {"phaddsw", {Pu, Qu}},
1696 {"pmaddubsw", {Pu, Qu}},
1697 {"phsubw", {Pu, Qu}},
1698 {"phsubd", {Pu, Qu}},
1699 {"phsubsw", {Pu, Qu}},
1700 /* 08 */
1701 {"psignb", {Pu, Qu}},
1702 {"psignw", {Pu, Qu}},
1703 {"psignd", {Pu, Qu}},
1704 {"pmulhrsw", {Pu, Qu}},
1705 {0},
1706 {0},
1707 {0},
1708 {0},
1709 /* 10 */
1710 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1711 /* 18 */
1712 {0},
1713 {0},
1714 {0},
1715 {0},
1716 {"pabsb", {Pu, Qu}},
1717 {"pabsw", {Pu, Qu}},
1718 {"pabsd", {Pu, Qu}},
1719 {0},
1720 /* 20 */
1721 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1722 /* 28 */
1723 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1724 /* 30 */
1725 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1726 /* 38 */
1727 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1728 /* 40 */
1729 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1730 /* 48 */
1731 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1732 /* 50 */
1733 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1734 /* 58 */
1735 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1736 /* 60 */
1737 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1738 /* 68 */
1739 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1740 /* 70 */
1741 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1742 /* 78 */
1743 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1744 /* 80 */
1745 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1746 /* 88 */
1747 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1748 /* 90 */
1749 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1750 /* 98 */
1751 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1752 /* a0 */
1753 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1754 /* a8 */
1755 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1756 /* b0 */
1757 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1758 /* b8 */
1759 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1760 /* c0 */
1761 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1762 /* c8 */
1763 {"sha1nexte", {Vo, Wo}},
1764 {"sha1msg1", {Vo, Wo}},
1765 {"sha1msg2", {Vo, Wo}},
1766 {"sha256rnds2", {Vo, Wo}},
1767 {"sha256msg1", {Vo, Wo}},
1768 {"sha256msg2", {Vo, Wo}},
1769 {0},
1770 {0},
1771 /* d0 */
1772 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1773 /* d8 */
1774 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1775 /* e0 */
1776 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1777 /* e8 */
1778 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1779 /* f0 */
1780 {"movbe", {Gv, Mv}},
1781 {"movbe", {Mv, Gv}},
1782 {0},
1783 {0},
1784 {0},
1785 {0},
1786 {"adox", {Gr, Er}},
1787 {0},
1788 /* f8 */
1789 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1790 },
1791 /* 1 - GROUP_OPC_660F38 */
1792 {
1793 /* 00 */
1794 {"pshufb", {Pu, Qu}},
1795 {"phaddw", {Pu, Qu}},
1796 {"phaddd", {Pu, Qu}},
1797 {"phaddsw", {Pu, Qu}},
1798 {"pmaddubsw", {Pu, Qu}},
1799 {"phsubw", {Pu, Qu}},
1800 {"phsubd", {Pu, Qu}},
1801 {"phsubsw", {Pu, Qu}},
1802 /* 08 */
1803 {"psignb", {Pu, Qu}},
1804 {"psignw", {Pu, Qu}},
1805 {"psignd", {Pu, Qu}},
1806 {"pmulhrsw", {Pu, Qu}},
1807 {0},
1808 {0},
1809 {0},
1810 {0},
1811 /* 10 */
1812 {"pblendvb", {Vo, Wo, XMM0}},
1813 {0},
1814 {0},
1815 {0},
1816 {"blendvps", {Vo, Wo, XMM0}},
1817 {"blendvpd", {Vo, Wo, XMM0}},
1818 {0},
1819 {"ptest", {Vo, Wo}},
1820 /* 18 */
1821 {0},
1822 {0},
1823 {0},
1824 {0},
1825 {"pabsb", {Pu, Qu}},
1826 {"pabsw", {Pu, Qu}},
1827 {"pabsd", {Pu, Qu}},
1828 {0},
1829 /* 20 */
1830 {"pmovsxbw", {Vo, Wq}},
1831 {"pmovsxbd", {Vo, Wd}},
1832 {"pmovsxbq", {Vo, Ww}},
1833 {"pmovsxwd", {Vo, Wq}},
1834 {"pmovsxwq", {Vo, Wd}},
1835 {"pmovsxdq", {Vo, Wq}},
1836 {0},
1837 {0},
1838 /* 28 */
1839 {"pmuldq", {Vo, Wo}},
1840 {"pcmpeqq", {Vo, Wo}},
1841 {"movntdqa", {Vo, Mo}},
1842 {"packusdw", {Vo, Wo}},
1843 {0},
1844 {0},
1845 {0},
1846 {0},
1847 /* 30 */
1848 {"pmovzxbw", {Vo, Wq}},
1849 {"pmovzxbd", {Vo, Wd}},
1850 {"pmovzxbq", {Vo, Ww}},
1851 {"pmovzxwd", {Vo, Wq}},
1852 {"pmovzxwq", {Vo, Wd}},
1853 {"pmovzxdq", {Vo, Wq}},
1854 {0},
1855 {"pcmpgtq", {Vo, Wo}},
1856 /* 38 */
1857 {"pminsb", {Vo, Wo}},
1858 {"pminsd", {Vo, Wo}},
1859 {"pminuw", {Vo, Wo}},
1860 {"pminud", {Vo, Wo}},
1861 {"pmaxsb", {Vo, Wo}},
1862 {"pmaxsd", {Vo, Wo}},
1863 {"pmaxuw", {Vo, Wo}},
1864 {"pmaxud", {Vo, Wo}},
1865 /* 40 */
1866 {"pmulld", {Vo, Wo}},
1867 {"phminposuw", {Vo, Wo}},
1868 {0},
1869 {0},
1870 {0},
1871 {0},
1872 {0},
1873 {0},
1874 /* 48 */
1875 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1876 /* 50 */
1877 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1878 /* 58 */
1879 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1880 /* 60 */
1881 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1882 /* 68 */
1883 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1884 /* 70 */
1885 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1886 /* 78 */
1887 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1888 /* 80 */
1889 {"invept", {Gr, Mo}},
1890 {"invvpid", {Gr, Mo}},
1891 {"invpcid", {Gr, Mo}},
1892 {0}, {0}, {0}, {0}, {0},
1893 /* 88 */
1894 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1895 /* 90 */
1896 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1897 /* 98 */
1898 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1899 /* a0 */
1900 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1901 /* a8 */
1902 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1903 /* b0 */
1904 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1905 /* b8 */
1906 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1907 /* c0 */
1908 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1909 /* c8 */
1910 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1911 /* d0 */
1912 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1913 /* d8 */
1914 {0},
1915 {0},
1916 {0},
1917 {"aesimc", {Vo, Wo}},
1918 {"aesenc", {Vo, Wo}},
1919 {"aesenclast", {Vo, Wo}},
1920 {"aesdec", {Vo, Wo}},
1921 {"aesdeclast", {Vo, Wo}},
1922 /* e0 */
1923 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1924 /* e8 */
1925 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1926 /* f0 */
1927 {"movbe", {Gv, Mv}},
1928 {"movbe", {Mv, Gv}},
1929 {0},
1930 {0},
1931 {0},
1932 {0},
1933 {"adcx", {Gr, Er}},
1934 {0},
1935 /* f8 */
1936 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1937 },
1938 
1939 /* 2 - GROUP_OPC_F20F38 */
1940 {
1941 /* 00 */
1942 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1943 /* 08 */
1944 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1945 /* 10 */
1946 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1947 /* 18 */
1948 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1949 /* 20 */
1950 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1951 /* 28 */
1952 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1953 /* 30 */
1954 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1955 /* 38 */
1956 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1957 /* 40 */
1958 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1959 /* 48 */
1960 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1961 /* 50 */
1962 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1963 /* 58 */
1964 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1965 /* 60 */
1966 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1967 /* 68 */
1968 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1969 /* 70 */
1970 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1971 /* 78 */
1972 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1973 /* 80 */
1974 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1975 /* 88 */
1976 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1977 /* 90 */
1978 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1979 /* 98 */
1980 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1981 /* a0 */
1982 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1983 /* a8 */
1984 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1985 /* b0 */
1986 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1987 /* b8 */
1988 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1989 /* c0 */
1990 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1991 /* c8 */
1992 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1993 /* d0 */
1994 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1995 /* d8 */
1996 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1997 /* e0 */
1998 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
1999 /* e8 */
2000 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2001 /* f0 */
2002 {"~crc32", {Gr, Eb}},
2003 {"~crc32", {Gr, Ev}},
2004 {0},
2005 {0},
2006 {0},
2007 {0},
2008 {0},
2009 {0},
2010 /* f8 */
2011 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2012 },
2013 /* 3 - GROUP_OPC_0F3A */
2014 {
2015 /* 00 */
2016 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2017 /* 08 */
2018 {0},
2019 {0},
2020 {0},
2021 {0},
2022 {0},
2023 {0},
2024 {0},
2025 {"palignr", {Pu, Qu, Ib}},
2026 /* 10 */
2027 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2028 /* 18 */
2029 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2030 /* 20 */
2031 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2032 /* 28 */
2033 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2034 /* 30 */
2035 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2036 /* 38 */
2037 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2038 /* 40 */
2039 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2040 /* 48 */
2041 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2042 /* 50 */
2043 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2044 /* 58 */
2045 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2046 /* 60 */
2047 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2048 /* 68 */
2049 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2050 /* 70 */
2051 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2052 /* 78 */
2053 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2054 /* 80 */
2055 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2056 /* 88 */
2057 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2058 /* 90 */
2059 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2060 /* 98 */
2061 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2062 /* a0 */
2063 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2064 /* a8 */
2065 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2066 /* b0 */
2067 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2068 /* b8 */
2069 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2070 /* c0 */
2071 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2072 /* c8 */
2073 {0},
2074 {0},
2075 {0},
2076 {0},
2077 {"sha1rnds4", {Vo, Wo, Ib}},
2078 {0},
2079 {0},
2080 {0},
2081 /* d0 */
2082 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2083 /* d8 */
2084 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2085 /* e0 */
2086 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2087 /* e8 */
2088 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2089 /* f0 */
2090 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2091 /* f8 */
2092 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2093 },
2094 /* 4 - GROUP_OPC_660F3A */
2095 {
2096 /* 00 */
2097 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2098 /* 08 */
2099 {"roundps", {Vo, Wo, Ib}},
2100 {"roundpd", {Vo, Wo, Ib}},
2101 {"roundss", {Vo, Wo, Ib}},
2102 {"roundsd", {Vo, Wo, Ib}},
2103 {"blendps", {Vo, Wo, Ib}},
2104 {"blendpd", {Vo, Wo, Ib}},
2105 {"pblendw", {Vo, Wo, Ib}},
2106 {"palignr", {Vo, Wo, Ib}},
2107 /* 10 */
2108 {0},
2109 {0},
2110 {0},
2111 {0},
2112 {"pextrb", {MRbr, Vo, Ib}},
2113 {"pextrw", {MRwr, Vo, Ib}},
2114 {"&pextrd|pextrd|pextrq", {Er, Vo, Ib}},
2115 {"extractps", {MRdr, Vo, Ib}},
2116 /* 18 */
2117 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2118 /* 20 */
2119 {"pinsrb", {Vo, MRbd, Ib}},
2120 {"insertps", {Vo, Wd, Ib}},
2121 {"&pinsrd|pinsrd|pinsrq", {Vo, Er, Ib}},
2122 {0},
2123 {0},
2124 {0},
2125 {0},
2126 {0},
2127 /* 28 */
2128 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2129 /* 30 */
2130 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2131 /* 38 */
2132 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2133 /* 40 */
2134 {"dpps", {Vo, Wo, Ib}},
2135 {"dppd", {Vo, Wo, Ib}},
2136 {"mpsadbw", {Vo, Wo, Ib}},
2137 {0},
2138 {"pclmulqdq", {Vo, Wo, Ib}},
2139 {0},
2140 {0},
2141 {0},
2142 /* 48 */
2143 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2144 /* 50 */
2145 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2146 /* 58 */
2147 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2148 /* 60 */
2149 {"pcmpestrm", {Vo, Wo, Ib}},
2150 {"pcmpestri", {Vo, Wo, Ib}},
2151 {"pcmpistrm", {Vo, Wo, Ib}},
2152 {"pcmpistri", {Vo, Wo, Ib}},
2153 {0},
2154 {0},
2155 {0},
2156 {0},
2157 /* 68 */
2158 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2159 /* 70 */
2160 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2161 /* 78 */
2162 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2163 /* 80 */
2164 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2165 /* 88 */
2166 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2167 /* 90 */
2168 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2169 /* 98 */
2170 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2171 /* a0 */
2172 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2173 /* a8 */
2174 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2175 /* b0 */
2176 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2177 /* b8 */
2178 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2179 /* c0 */
2180 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2181 /* c8 */
2182 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2183 /* d0 */
2184 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2185 /* d8 */
2186 {0},
2187 {0},
2188 {0},
2189 {0},
2190 {0},
2191 {0},
2192 {0},
2193 {"aeskeygenassist", {Vo, Wo, Ib}},
2194 /* e0 */
2195 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2196 /* e8 */
2197 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2198 /* f0 */
2199 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2200 /* f8 */
2201 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2202 },
2203 /* 5 - GROUP_OPC_0F7A */
2204 {
2205 /* 00 */
2206 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2207 /* 08 */
2208 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2209 /* 10 */
2210 {"frczps", {Vo, Wo}},
2211 {"frczpd", {Vo, Wo}},
2212 {"frczss", {Vo, Wd}},
2213 {"frczsd", {Vo, Wq}},
2214 {0},
2215 {0},
2216 {0},
2217 {0},
2218 /* 18 */
2219 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2220 /* 20 */
2221 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2222 /* 28 */
2223 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2224 /* 30 */
2225 {"cvtph2ps", {Vo, Wq}},
2226 {"cvtps2ph", {Wq, Vo}},
2227 {0},
2228 {0},
2229 {0},
2230 {0},
2231 {0},
2232 {0},
2233 /* 38 */
2234 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2235 /* 40 */
2236 {0},
2237 {"phaddbw", {Vo, Wo}},
2238 {"phaddbd", {Vo, Wo}},
2239 {"phaddbq", {Vo, Wo}},
2240 {0},
2241 {0},
2242 {"phaddwd", {Vo, Wo}},
2243 {"phaddwq", {Vo, Wo}},
2244 /* 48 */
2245 {0},
2246 {0},
2247 {0},
2248 {"phadddq", {Vo, Wo}},
2249 {0},
2250 {0},
2251 {0},
2252 {0},
2253 /* 50 */
2254 {0},
2255 {"phaddubw", {Vo, Wo}},
2256 {"phaddubd", {Vo, Wo}},
2257 {"phaddubq", {Vo, Wo}},
2258 {0},
2259 {0},
2260 {"phadduwd", {Vo, Wo}},
2261 {"phadduwq", {Vo, Wo}},
2262 /* 58 */
2263 {0},
2264 {0},
2265 {0},
2266 {"phaddudq", {Vo, Wo}},
2267 {0},
2268 {0},
2269 {0},
2270 {0},
2271 /* 60 */
2272 {0},
2273 {"phsubbw", {Vo, Wo}},
2274 {"phsubwd", {Vo, Wo}},
2275 {"phsubdq", {Vo, Wo}},
2276 {0},
2277 {0},
2278 {0},
2279 {0},
2280 /* 68 */
2281 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2282 /* 70 */
2283 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2284 /* 78 */
2285 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2286 /* 80 */
2287 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2288 /* 88 */
2289 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2290 /* 90 */
2291 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2292 /* 98 */
2293 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2294 /* a0 */
2295 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2296 /* a8 */
2297 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2298 /* b0 */
2299 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2300 /* b8 */
2301 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2302 /* c0 */
2303 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2304 /* c8 */
2305 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2306 /* d0 */
2307 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2308 /* d8 */
2309 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2310 /* e0 */
2311 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2312 /* e8 */
2313 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2314 /* f0 */
2315 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2316 /* f8 */
2317 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2318 },
2319 /* 6 - GROUP_OPC_0F7B */
2320 {
2321 /* 00 */
2322 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2323 /* 08 */
2324 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2325 /* 10 */
2326 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2327 /* 18 */
2328 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2329 /* 20 */
2330 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2331 /* 28 */
2332 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2333 /* 30 */
2334 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2335 /* 38 */
2336 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2337 /* 40 */
2338 {"protb", {Vo, Wo, Ib}},
2339 {"protw", {Vo, Wo, Ib}},
2340 {"protd", {Vo, Wo, Ib}},
2341 {"protq", {Vo, Wo, Ib}},
2342 {0},
2343 {0},
2344 {0},
2345 {0},
2346 /* 48 */
2347 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2348 /* 50 */
2349 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2350 /* 58 */
2351 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2352 /* 60 */
2353 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2354 /* 68 */
2355 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2356 /* 70 */
2357 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2358 /* 78 */
2359 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2360 /* 80 */
2361 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2362 /* 88 */
2363 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2364 /* 90 */
2365 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2366 /* 98 */
2367 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2368 /* a0 */
2369 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2370 /* a8 */
2371 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2372 /* b0 */
2373 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2374 /* b8 */
2375 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2376 /* c0 */
2377 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2378 /* c8 */
2379 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2380 /* d0 */
2381 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2382 /* d8 */
2383 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2384 /* e0 */
2385 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2386 /* e8 */
2387 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2388 /* f0 */
2389 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2390 /* f8 */
2391 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2392 },
2393 /* 6 - GROUP_OPC_0F24 */
2394 {
2395 /* 00 */
2396 {"fmaddps", {VD, VD, VS0o, VS1o}},
2397 {"fmaddpd", {VD, VD, VS0o, VS1o}},
2398 {"fmaddss", {VD, VD, VS0d, VS1d}},
2399 {"fmaddsd", {VD, VD, VS0q, VS1q}},
2400 {"fmaddps", {VD, VS0o, VS1o, VD}},
2401 {"fmaddpd", {VD, VS0o, VS1o, VD}},
2402 {"fmaddss", {VD, VS0d, VS1d, VD}},
2403 {"fmaddsd", {VD, VS0q, VS1q, VD}},
2404 /* 08 */
2405 {"fmsubps", {VD, VD, VS0o, VS1o}},
2406 {"fmsubpd", {VD, VD, VS0o, VS1o}},
2407 {"fmsubss", {VD, VD, VS0d, VS1d}},
2408 {"fmsubsd", {VD, VD, VS0q, VS1q}},
2409 {"fmsubps", {VD, VS0o, VS1o, VD}},
2410 {"fmsubpd", {VD, VS0o, VS1o, VD}},
2411 {"fmsubss", {VD, VS0d, VS1d, VD}},
2412 {"fmsubsd", {VD, VS0q, VS1q, VD}},
2413 /* 10 */
2414 {"fnmaddps", {VD, VD, VS0o, VS1o}},
2415 {"fnmaddpd", {VD, VD, VS0o, VS1o}},
2416 {"fnmaddss", {VD, VD, VS0d, VS1d}},
2417 {"fnmaddsd", {VD, VD, VS0q, VS1q}},
2418 {"fnmaddps", {VD, VS0o, VS1o, VD}},
2419 {"fnmaddpd", {VD, VS0o, VS1o, VD}},
2420 {"fnmaddss", {VD, VS0d, VS1d, VD}},
2421 {"fnmaddsd", {VD, VS0q, VS1q, VD}},
2422 /* 18 */
2423 {"fnmsubps", {VD, VD, VS0o, VS1o}},
2424 {"fnmsubpd", {VD, VD, VS0o, VS1o}},
2425 {"fnmsubss", {VD, VD, VS0d, VS1d}},
2426 {"fnmsubsd", {VD, VD, VS0q, VS1q}},
2427 {"fnmsubps", {VD, VS0o, VS1o, VD}},
2428 {"fnmsubpd", {VD, VS0o, VS1o, VD}},
2429 {"fnmsubss", {VD, VS0d, VS1d, VD}},
2430 {"fnmsubsd", {VD, VS0q, VS1q, VD}},
2431 /* 20 */
2432 {"permps", {VD, VD, VS0o, VS1o}},
2433 {"permpd", {VD, VD, VS0o, VS1o}},
2434 {"pcmov", {VD, VD, VS0o, VS1o}},
2435 {"pperm", {VD, VD, VS0o, VS1o}},
2436 {"permps", {VD, VS0o, VS1o, VD}},
2437 {"permpd", {VD, VS0o, VS1o, VD}},
2438 {"pcmov", {VD, VS0o, VS1o, VD}},
2439 {"pperm", {VD, VS0o, VS1o, VD}},
2440 /* 28 */
2441 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2442 /* 30 */
2443 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2444 /* 38 */
2445 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2446 /* 40 */
2447 {"protb", {VD, VS0o, VS1o}},
2448 {"protw", {VD, VS0o, VS1o}},
2449 {"protd", {VD, VS0o, VS1o}},
2450 {"protq", {VD, VS0o, VS1o}},
2451 {"pshlb", {VD, VS0o, VS1o}},
2452 {"pshlw", {VD, VS0o, VS1o}},
2453 {"pshld", {VD, VS0o, VS1o}},
2454 {"pshlq", {VD, VS0o, VS1o}},
2455 /* 48 */
2456 {"pshab", {VD, VS0o, VS1o}},
2457 {"pshaw", {VD, VS0o, VS1o}},
2458 {"pshad", {VD, VS0o, VS1o}},
2459 {"pshaq", {VD, VS0o, VS1o}},
2460 {0},
2461 {0},
2462 {0},
2463 {0},
2464 /* 50 */
2465 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2466 /* 58 */
2467 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2468 /* 60 */
2469 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2470 /* 68 */
2471 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2472 /* 70 */
2473 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2474 /* 78 */
2475 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2476 /* 80 */
2477 {0},
2478 {0},
2479 {0},
2480 {0},
2481 {0},
2482 {"pmacssww", {VD, VS00o, VS1o, VD}},
2483 {"pmacsswd", {VD, VS00o, VS1o, VD}},
2484 {"pmacssdql", {VD, VS00o, VS1o, VD}},
2485 /* 88 */
2486 {0},
2487 {0},
2488 {0},
2489 {0},
2490 {0},
2491 {0},
2492 {"pmacssdd", {VD, VS00o, VS1o, VD}},
2493 {"pmacssdqh", {VD, VS00o, VS1o, VD}},
2494 /* 90 */
2495 {0},
2496 {0},
2497 {0},
2498 {0},
2499 {0},
2500 {"pmacsww", {VD, VS00o, VS1o, VD}},
2501 {"pmacswd", {VD, VS00o, VS1o, VD}},
2502 {"pmacsdql", {VD, VS00o, VS1o, VD}},
2503 /* 98 */
2504 {0},
2505 {0},
2506 {0},
2507 {0},
2508 {0},
2509 {0},
2510 {"pmacsdd", {VD, VS00o, VS1o, VD}},
2511 {"pmacsdqh", {VD, VS00o, VS1o, VD}},
2512 /* a0 */
2513 {0},
2514 {0},
2515 {0},
2516 {0},
2517 {0},
2518 {0},
2519 {"pmadcsswd", {VD, VS00o, VS1o, VD}},
2520 {0},
2521 /* a8 */
2522 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2523 /* b0 */
2524 {0},
2525 {0},
2526 {0},
2527 {0},
2528 {0},
2529 {0},
2530 {"pmadcswd", {VD, VS00o, VS1o, VD}},
2531 {0},
2532 /* b8 */
2533 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2534 /* c0 */
2535 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2536 /* c8 */
2537 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2538 /* d0 */
2539 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2540 /* d8 */
2541 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2542 /* e0 */
2543 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2544 /* e8 */
2545 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2546 /* f0 */
2547 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2548 /* f8 */
2549 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2550 },
2551 /* 7 - GROUP_OPC_0F25 */
2552 {
2553 /* 00 */
2554 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2555 /* 08 */
2556 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2557 /* 10 */
2558 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2559 /* 18 */
2560 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2561 /* 20 */
2562 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2563 /* 28 */
2564 {0},
2565 {0},
2566 {0},
2567 {0},
2568 {"comps", {VD, VS00o, VS1o, Ib}},
2569 {"compd", {VD, VS00o, VS1o, Ib}},
2570 {"comss", {VD, VS00d, VS1d, Ib}},
2571 {"comsd", {VD, VS00q, VS1q, Ib}},
2572 /* 30 */
2573 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2574 /* 38 */
2575 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2576 /* 40 */
2577 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2578 /* 48 */
2579 {0},
2580 {0},
2581 {0},
2582 {0},
2583 {"pcomb", {VD, VS00o, VS1o, Ib}},
2584 {"pcomw", {VD, VS00o, VS1o, Ib}},
2585 {"pcomd", {VD, VS00o, VS1o, Ib}},
2586 {"pcomq", {VD, VS00o, VS1o, Ib}},
2587 /* 50 */
2588 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2589 /* 58 */
2590 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2591 /* 60 */
2592 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2593 /* 68 */
2594 {0},
2595 {0},
2596 {0},
2597 {0},
2598 {"pcomub", {VD, VS00o, VS1o, Ib}},
2599 {"pcomuw", {VD, VS00o, VS1o, Ib}},
2600 {"pcomud", {VD, VS00o, VS1o, Ib}},
2601 {"pcomuq", {VD, VS00o, VS1o, Ib}},
2602 /* 70 */
2603 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2604 /* 78 */
2605 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2606 /* 80 */
2607 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2608 /* 88 */
2609 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2610 /* 90 */
2611 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2612 /* 98 */
2613 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2614 /* a0 */
2615 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2616 /* a8 */
2617 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2618 /* b0 */
2619 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2620 /* b8 */
2621 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2622 /* c0 */
2623 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2624 /* c8 */
2625 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2626 /* d0 */
2627 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2628 /* d8 */
2629 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2630 /* e0 */
2631 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2632 /* e8 */
2633 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2634 /* f0 */
2635 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2636 /* f8 */
2637 {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0},
2638 },
2639 };
2640 
2641 x86opc_insn x86_group_insns[][8] = {
2642 /* 0 - GROUP_80 */
2643 {
2644 {"~add", {Eb, Ib}},
2645 {"~or", {Eb, Ib}},
2646 {"~adc", {Eb, Ib}},
2647 {"~sbb", {Eb, Ib}},
2648 {"~and", {Eb, Ib}},
2649 {"~sub", {Eb, Ib}},
2650 {"~xor", {Eb, Ib}},
2651 {"~cmp", {Eb, Ib}},
2652 },
2653 /* 1 - GROUP_81 */
2654 {
2655 {"~add", {Ev, Iv}},
2656 {"~or", {Ev, Iv}},
2657 {"~adc", {Ev, Iv}},
2658 {"~sbb", {Ev, Iv}},
2659 {"~and", {Ev, Iv}},
2660 {"~sub", {Ev, Iv}},
2661 {"~xor", {Ev, Iv}},
2662 {"~cmp", {Ev, Iv}},
2663 },
2664 /* 2 - GROUP_83 */
2665 {
2666 {"~add", {Ev, sIbv}},
2667 {"~or", {Ev, sIbv}},
2668 {"~adc", {Ev, sIbv}},
2669 {"~sbb", {Ev, sIbv}},
2670 {"~and", {Ev, sIbv}},
2671 {"~sub", {Ev, sIbv}},
2672 {"~xor", {Ev, sIbv}},
2673 {"~cmp", {Ev, sIbv}},
2674 },
2675 /* 3 - GROUP_8F */
2676 {
2677 {"~pop", {Ev64}},
2678 {0},
2679 {0},
2680 {0},
2681 {0},
2682 {0},
2683 {0},
2684 {0},
2685 },
2686 /* 4 - GROUP_C0 */
2687 {
2688 {"~rol", {Eb, Ib}},
2689 {"~ror", {Eb, Ib}},
2690 {"~rcl", {Eb, Ib}},
2691 {"~rcr", {Eb, Ib}},
2692 {"~shl", {Eb, Ib}},
2693 {"~shr", {Eb, Ib}},
2694 {"~sal", {Eb, Ib}},
2695 {"~sar", {Eb, Ib}},
2696 },
2697 /* 5 - GROUP_C1 */
2698 {
2699 {"~rol", {Ev, Ib}},
2700 {"~ror", {Ev, Ib}},
2701 {"~rcl", {Ev, Ib}},
2702 {"~rcr", {Ev, Ib}},
2703 {"~shl", {Ev, Ib}},
2704 {"~shr", {Ev, Ib}},
2705 {"~sal", {Ev, Ib}},
2706 {"~sar", {Ev, Ib}},
2707 },
2708 /* 6 - GROUP_C6 */
2709 {
2710 {"~mov", {Eb, Ib}},
2711 {0},
2712 {0},
2713 {0},
2714 {0},
2715 {0},
2716 {0},
2717 {"xabort", {Ib}},
2718 },
2719 /* 7 - GROUP_C7 */
2720 {
2721 {"~mov", {Ev, Iv}},
2722 {0},
2723 {0},
2724 {0},
2725 {0},
2726 {0},
2727 {0},
2728 {"xbegin", {Jv}},
2729 },
2730 /* 8 - GROUP_D0 */
2731 {
2732 {"~rol", {Eb, __1}},
2733 {"~ror", {Eb, __1}},
2734 {"~rcl", {Eb, __1}},
2735 {"~rcr", {Eb, __1}},
2736 {"~shl", {Eb, __1}},
2737 {"~shr", {Eb, __1}},
2738 {"~sal", {Eb, __1}},
2739 {"~sar", {Eb, __1}},
2740 },
2741 /* 9 - GROUP_D1 */
2742 {
2743 {"~rol", {Ev, __1}},
2744 {"~ror", {Ev, __1}},
2745 {"~rcl", {Ev, __1}},
2746 {"~rcr", {Ev, __1}},
2747 {"~shl", {Ev, __1}},
2748 {"~shr", {Ev, __1}},
2749 {"~sal", {Ev, __1}},
2750 {"~sar", {Ev, __1}},
2751 },
2752 /* 10 - GROUP_D2 */
2753 {
2754 {"~rol", {Eb, X__cl}},
2755 {"~ror", {Eb, X__cl}},
2756 {"~rcl", {Eb, X__cl}},
2757 {"~rcr", {Eb, X__cl}},
2758 {"~shl", {Eb, X__cl}},
2759 {"~shr", {Eb, X__cl}},
2760 {"~sal", {Eb, X__cl}},
2761 {"~sar", {Eb, X__cl}},
2762 },
2763 /* 11 - GROUP_D3 */
2764 {
2765 {"~rol", {Ev, X__cl}},
2766 {"~ror", {Ev, X__cl}},
2767 {"~rcl", {Ev, X__cl}},
2768 {"~rcr", {Ev, X__cl}},
2769 {"~shl", {Ev, X__cl}},
2770 {"~shr", {Ev, X__cl}},
2771 {"~sal", {Ev, X__cl}},
2772 {"~sar", {Ev, X__cl}},
2773 },
2774 /* 12 - GROUP_F6 */
2775 {
2776 {"~test", {Eb, Ib}},
2777 {"~test", {Eb, Ib}},
2778 {"~not", {Eb}},
2779 {"~neg", {Eb}},
2780 {"mul", {X__al, Eb}},
2781 {"imul", {X__al, Eb}},
2782 {"div", {X__al, Eb}},
2783 {"idiv", {X__al, Eb}},
2784 },
2785 /* 13 - GROUP_F7 */
2786 {
2787 {"~test", {Ev, Iv}},
2788 {"~test", {Ev, Iv}},
2789 {"~not", {Ev}},
2790 {"~neg", {Ev}},
2791 {"mul", {X__ax, Ev}},
2792 {"imul", {X__ax, Ev}},
2793 {"div", {X__ax, Ev}},
2794 {"idiv", {X__ax, Ev}},
2795 },
2796 /* 14 - GROUP_FE */
2797 {
2798 {"~inc", {Eb}},
2799 {"~dec", {Eb}},
2800 {0},
2801 {0},
2802 {0},
2803 {0},
2804 {0},
2805 {0},
2806 },
2807 /* 15 - GROUP_FF */
2808 {
2809 {"~inc", {Ev}},
2810 {"~dec", {Ev}},
2811 {"~call", {Ev64}},
2812 {"~call", {Mp}},
2813 {"~jmp", {Ev64}},
2814 {"~jmp", {Mp}},
2815 {"~push", {Ev64}},
2816 {0},
2817 },
2818 /* 16 - GROUP_EXT_00 */
2819 {
2820 {"sldt", {MRwv}},
2821 {"str", {MRwv}},
2822 {"lldt", {MRwv}},
2823 {"ltr", {MRwv}},
2824 {"verr", {MRwv}},
2825 {"verw", {MRwv}},
2826 {0},
2827 {0},
2828 },
2829 /* 17 - GROUP_EXT_01 */
2830 {
2831 {0, {SPECIAL_TYPE_SGROUP, GROUP_SPECIAL_0F01_0}},
2832 {0, {SPECIAL_TYPE_SGROUP, GROUP_SPECIAL_0F01_1}},
2833 {0, {SPECIAL_TYPE_SGROUP, GROUP_SPECIAL_0F01_2}},
2834 {0, {SPECIAL_TYPE_SGROUP, GROUP_SPECIAL_0F01_3}},
2835 {"smsw", {MRwv}},
2836 {0},
2837 {"lmsw", {MRwv}},
2838 {0, {SPECIAL_TYPE_SGROUP, GROUP_SPECIAL_0F01_7}},
2839 },
2840 /* 18 - GROUP_EXT_18 */
2841 {
2842 {"prefetchnta", {M}},
2843 {"prefetch0", {M}},
2844 {"prefetch1", {M}},
2845 {"prefetch2", {M}},
2846 {"~nop", {Ev}},
2847 {"~nop", {Ev}},
2848 {"~nop", {Ev}},
2849 {"~nop", {Ev}},
2850 },
2851 /* 16 - GROUP_EXT_71 */
2852 {
2853 {0},
2854 {0},
2855 {"psrlw", {PRu, Ib}},
2856 {0},
2857 {"psraw", {PRu, Ib}},
2858 {0},
2859 {"psllw", {PRu, Ib}},
2860 {0},
2861 },
2862 /* 17 - GROUP_EXT_72 */
2863 {
2864 {0},
2865 {0},
2866 {"psrld", {PRu, Ib}},
2867 {0},
2868 {"psrad", {PRu, Ib}},
2869 {0},
2870 {"pslld", {PRu, Ib}},
2871 {0},
2872 },
2873 /* 18 - GROUP_EXT_73 */
2874 {
2875 {0},
2876 {0},
2877 {"psrlq", {PRu, Ib}},
2878 {"psrldq", {PRu, Ib}},
2879 {0},
2880 {0},
2881 {"psllq", {PRu, Ib}},
2882 {"pslldq", {PRu, Ib}},
2883 },
2884 /* 22 - GROUP_EXT_AE */
2885 {
2886 {0, {SPECIAL_TYPE_SGROUP, GROUP_SPECIAL_0FAE_0}},
2887 {0, {SPECIAL_TYPE_SGROUP, GROUP_SPECIAL_0FAE_1}},
2888 {0, {SPECIAL_TYPE_SGROUP, GROUP_SPECIAL_0FAE_2}},
2889 {0, {SPECIAL_TYPE_SGROUP, GROUP_SPECIAL_0FAE_3}},
2890 {0, {SPECIAL_TYPE_SGROUP, GROUP_SPECIAL_0FAE_4}},
2891 {0, {SPECIAL_TYPE_SGROUP, GROUP_SPECIAL_0FAE_5}},
2892 {0, {SPECIAL_TYPE_SGROUP, GROUP_SPECIAL_0FAE_6}},
2893 {0, {SPECIAL_TYPE_SGROUP, GROUP_SPECIAL_0FAE_7}},
2894 },
2895 /* 22 - GROUP_EXT_F3_AE */
2896 {
2897 {"rdfsbase", {Rr}},
2898 {"rdgsbase", {Rr}},
2899 {"wrfsbase", {Rr}},
2900 {"wrgsbase", {Rr}},
2901 {0},
2902 {0},
2903 {0},
2904 {0},
2905 },
2906 /* 23 - GROUP_EXT_BA */
2907 {
2908 {0},
2909 {0},
2910 {0},
2911 {0},
2912 {"~bt", {Ev, Ib}},
2913 {"~bts", {Ev, Ib}},
2914 {"~btr", {Ev, Ib}},
2915 {"~btc", {Ev, Ib}},
2916 },
2917 /* 24 - GROUP_EXT_C7 */
2918 {
2919 {0},
2920 {"? |cmpxchg8b|cmpxchg16b", {M}},
2921 {0},
2922 {0},
2923 {0},
2924 {0},
2925 {0, {SPECIAL_TYPE_SGROUP, GROUP_SPECIAL_0FC7_6}},
2926 {0, {SPECIAL_TYPE_SGROUP, GROUP_SPECIAL_0FC7_7}},
2927 },
2928 /* 25 - GROUP_EXT_66_C7 */
2929 {
2930 {0},
2931 {0},
2932 {0},
2933 {0},
2934 {0},
2935 {0},
2936 {"vmclear", {Mq}},
2937 {0},
2938 },
2939 /* 26 - GROUP_EXT_F3_C7 */
2940 {
2941 {0},
2942 {0},
2943 {0},
2944 {0},
2945 {0},
2946 {0},
2947 {"vmxon", {Mq}},
2948 {0},
2949 },
2950 };
2951 
2952 x86opc_insn x86_special_group_insns[X86_SPECIAL_GROUPS][9] = {
2953 /* 0 - GROUP_SPECIAL_0F01_0 */
2954 {
2955 {0},
2956 {"vmcall"},
2957 {"vmlaunch"},
2958 {"vmresume"},
2959 {"vmxoff"},
2960 {0},
2961 {0},
2962 {0},
2963 // with mod!=11:
2964 {"sgdt", {M}},
2965 },
2966 /* 1 - GROUP_SPECIAL_0F01_1 */
2967 {
2968 {"monitor"},
2969 {"mwait"},
2970 {"clac"},
2971 {"stac"},
2972 {0},
2973 {0},
2974 {0},
2975 {0},
2976 // with mod!=11:
2977 {"sidt", {M}},
2978 },
2979 /* 2 - GROUP_SPECIAL_0F01_2 */
2980 {
2981 {"xgetbv"},
2982 {"xsetbv"},
2983 {0},
2984 {0},
2985 {"vmfunc"},
2986 {"xend"},
2987 {"xtest"},
2988 {0},
2989 // with mod!=11:
2990 {"lgdt", {M}},
2991 },
2992 /* 3 - GROUP_SPECIAL_0F01_3 */
2993 {
2994 {"vmrun"},
2995 {"vmmcall"},
2996 {"vmload"},
2997 {"vmsave"},
2998 {"stgi"},
2999 {"clgi"},
3000 {"skinit"},
3001 {"invlpga"},
3002 // with mod!=11:
3003 {"lidt", {M}},
3004 },
3005 /* 4 - GROUP_SPECIAL_0F01_7 */
3006 {
3007 {"swapgs"},
3008 {"rdtscp"},
3009 {0},
3010 {0},
3011 {0},
3012 {0},
3013 {0},
3014 {0},
3015 // with mod!=11:
3016 {"invlpg", {M}},
3017 },
3018 /* 5 - GROUP_SPECIAL_0FAE_0 */
3019 {
3020 {0},
3021 {0},
3022 {0},
3023 {0},
3024 {0},
3025 {0},
3026 {0},
3027 {0},
3028 // with mod!=11:
3029 {"?fxsave|fxsave|fxsave64", {M}},
3030 },
3031 /* 6 - GROUP_SPECIAL_0FAE_1 */
3032 {
3033 {0},
3034 {0},
3035 {0},
3036 {0},
3037 {0},
3038 {0},
3039 {0},
3040 {0},
3041 // with mod!=11:
3042 {"?fxstor|fxstor|fxstor64", {M}},
3043 },
3044 /* 7 - GROUP_SPECIAL_0FAE_2 */
3045 {
3046 {0},
3047 {0},
3048 {0},
3049 {0},
3050 {0},
3051 {0},
3052 {0},
3053 {0},
3054 // with mod!=11:
3055 {"ldmxcsr", {Md}},
3056 },
3057 /* 8 - GROUP_SPECIAL_0FAE_3 */
3058 {
3059 {0},
3060 {0},
3061 {0},
3062 {0},
3063 {0},
3064 {0},
3065 {0},
3066 {0},
3067 // with mod!=11:
3068 {"stmxcsr", {Md}},
3069 },
3070 /* 9 - GROUP_SPECIAL_0FAE_4 */
3071 {
3072 {0},
3073 {0},
3074 {0},
3075 {0},
3076 {0},
3077 {0},
3078 {0},
3079 {0},
3080 // with mod!=11:
3081 {"?xsave|xsave|xsave64", {M}},
3082 },
3083 /* 10 - GROUP_SPECIAL_0FAE_5 */
3084 {
3085 {"lfence"},
3086 {0},
3087 {0},
3088 {0},
3089 {0},
3090 {0},
3091 {0},
3092 {0},
3093 // with mod!=11:
3094 {"?xrstor|xrstor|xrstor64", {M}},
3095 },
3096 /* 11 - GROUP_SPECIAL_0FAE_6 */
3097 {
3098 {"mfence"},
3099 {0},
3100 {0},
3101 {0},
3102 {0},
3103 {0},
3104 {0},
3105 {"?xsaveopt|xsaveopt|xsaveopt64", {M}},
3106 // with mod!=11:
3107 {0},
3108 },
3109 /* 12 - GROUP_SPECIAL_0FAE_7 */
3110 {
3111 {"sfence"},
3112 {0},
3113 {0},
3114 {0},
3115 {0},
3116 {0},
3117 {0},
3118 {0},
3119 // with mod!=11:
3120 {"clflush", {M}},
3121 },
3122 /* 12 - GROUP_SPECIAL_0FC7_6 */
3123 {
3124 {"rdrand", {Rv}},
3125 {"rdrand", {Rv}},
3126 {"rdrand", {Rv}},
3127 {"rdrand", {Rv}},
3128 {"rdrand", {Rv}},
3129 {"rdrand", {Rv}},
3130 {"rdrand", {Rv}},
3131 {"rdrand", {Rv}},
3132 // with mod!=11:
3133 {"vmptrld", {Mq}},
3134 },
3135 /* 13 - GROUP_SPECIAL_0FC7_7 */
3136 {
3137 {"rdseed", {Rv}},
3138 {"rdseed", {Rv}},
3139 {"rdseed", {Rv}},
3140 {"rdseed", {Rv}},
3141 {"rdseed", {Rv}},
3142 {"rdseed", {Rv}},
3143 {"rdseed", {Rv}},
3144 {"rdseed", {Rv}},
3145 // with mod!=11:
3146 {"vmptrst", {Mq}},
3147 },
3148 };
3149 
3150 /*
3151  *	The ModR/M byte is < 0xC0
3152  */
3153 
3154 x86opc_insn x86_modfloat_group_insns[8][8] = {
3155 /* prefix D8 */
3156 {
3157 {"~fadd", {Ms}},
3158 {"~fmul", {Ms}},
3159 {"~fcom", {Ms}},
3160 {"~fcomp", {Ms}},
3161 {"~fsub", {Ms}},
3162 {"~fsubr", {Ms}},
3163 {"~fdiv", {Ms}},
3164 {"~fdivr", {Ms}},
3165 },
3166 /* prefix D9 */
3167 {
3168 {"~fld", {Ms}},
3169 {0},
3170 {"~fst", {Ms}},
3171 {"~fstp", {Ms}},
3172 {"fldenv", {M}},
3173 {"fldcw", {Mw}},
3174 {"fstenv", {M}},
3175 {"fstcw", {Mw}},
3176 },
3177 /* prefix DA */
3178 {
3179 {"~fiadd", {Md}},
3180 {"~fimul", {Md}},
3181 {"~ficom", {Md}},
3182 {"~ficomp", {Md}},
3183 {"~fisub", {Md}},
3184 {"~fisubr", {Md}},
3185 {"~fidiv", {Md}},
3186 {"~fidivr", {Md}},
3187 },
3188 /* prefix DB */
3189 {
3190 {"~fild", {Md}},
3191 {"~fisttp", {Md}},
3192 {"~fist", {Md}},
3193 {"~fistp", {Md}},
3194 {0},
3195 {"~fld", {Mt}},
3196 {0},
3197 {"~fstp", {Mt}},
3198 },
3199 /* prefix DC */
3200 {
3201 {"~fadd", {Ml}},
3202 {"~fmul", {Ml}},
3203 {"~fcom", {Ml}},
3204 {"~fcomp", {Ml}},
3205 {"~fsub", {Ml}},
3206 {"~fsubr", {Ml}},
3207 {"~fdiv", {Ml}},
3208 {"~fdivr", {Ml}},
3209 },
3210 /* prefix DD */
3211 {
3212 {"~fld", {Ml}},
3213 {"~fisttp", {Mq}},
3214 {"~fst", {Ml}},
3215 {"~fstp", {Ml}},
3216 {"~frstor", {M}},
3217 {0},
3218 {"fsave", {M}},
3219 {"fstsw", {Mw}},
3220 },
3221 /* prefix DE */
3222 {
3223 {"~fiadd", {Mw}},
3224 {"~fimul", {Mw}},
3225 {"~ficom", {Mw}},
3226 {"~ficomp", {Mw}},
3227 {"~fisub", {Mw}},
3228 {"~fisubr", {Mw}},
3229 {"~fidiv", {Mw}},
3230 {"~fidivr", {Mw}},
3231 },
3232 /* prefix DF */
3233 {
3234 {"~fild", {Mw}},
3235 {"~fisttp", {Mw}},
3236 {"~fist", {Mw}},
3237 {"~fistp", {Mw}},
3238 {"~fbld", {Ma}},
3239 {"~fild", {Mq}},
3240 {"~fbstp", {Ma}},
3241 {"~fistp", {Mq}},
3242 }
3243 
3244 };
3245 
3246 x86opc_insn fgroup_12[8] = {
3247 {"fnop"},
3248 {0},
3249 {0},
3250 {0},
3251 {0},
3252 {0},
3253 {0},
3254 {0},
3255 };
3256 
3257 x86opc_insn fgroup_14[8] = {
3258 {"fchs"},
3259 {"fabs"},
3260 {0},
3261 {0},
3262 {"ftst"},
3263 {"fxam"},
3264 {0},
3265 {0},
3266 };
3267 
3268 x86opc_insn fgroup_15[8] = {
3269 {"fld1"},
3270 {"fldl2t"},
3271 {"fldl2e"},
3272 {"fldpi"},
3273 {"fldlg2"},
3274 {"fldln2"},
3275 {"fldz"},
3276 {0},
3277 };
3278 
3279 x86opc_insn fgroup_16[8] = {
3280 {"f2xm1"},
3281 {"fyl2x"},
3282 {"fptan"},
3283 {"fpatan"},
3284 {"fxtract"},
3285 {"fprem1"},
3286 {"fdecstp"},
3287 {"fincstp"},
3288 };
3289 
3290 x86opc_insn fgroup_17[8] = {
3291 {"fprem"},
3292 {"fyl2xp1"},
3293 {"fsqrt"},
3294 {"fsincos"},
3295 {"frndint"},
3296 {"fscale"},
3297 {"fsin"},
3298 {"fcos"},
3299 };
3300 
3301 x86opc_insn fgroup_25[8] = {
3302 {0},
3303 {"fucompp"},
3304 {0},
3305 {0},
3306 {0},
3307 {0},
3308 {0},
3309 {0},
3310 };
3311 
3312 x86opc_insn fgroup_34[8] = {
3313 {0},
3314 {0},
3315 {"fclex"},
3316 {"finit"},
3317 {0},
3318 {0},
3319 {0},
3320 {0},
3321 };
3322 
3323 x86opc_insn fgroup_63[8] = {
3324 {0},
3325 {"fcompp"},
3326 {0},
3327 {0},
3328 {0},
3329 {0},
3330 {0},
3331 {0},
3332 };
3333 
3334 x86opc_insn fgroup_74[8] = {
3335 {"fstsw", {X__axw}},
3336 {0},
3337 {0},
3338 {0},
3339 {0},
3340 {0},
3341 {0},
3342 {0},
3343 };
3344 
3345 /*
3346  *	The ModR/M byte is >= 0xC0
3347  */
3348 
3349 x86opc_finsn x86_float_group_insns[8][8] = {
3350 /* prefix D8 */
3351 {
3352 {0, {"fadd", {__st, Ft}}},
3353 {0, {"fmul", {__st, Ft}}},
3354 {0, {"fcom", {__st, Ft}}},
3355 {0, {"fcomp", {__st, Ft}}},
3356 {0, {"fsub", {__st, Ft}}},
3357 {0, {"fsubr", {__st, Ft}}},
3358 {0, {"fdiv", {__st, Ft}}},
3359 {0, {"fdivr", {__st, Ft}}},
3360 },
3361 /* prefix D9 */
3362 {
3363 {0, {"fld", {__st, Ft}}},
3364 {0, {"fxch", {__st, Ft}}},
3365 {(x86opc_insn *)&fgroup_12},
3366 {0},
3367 {(x86opc_insn *)&fgroup_14},
3368 {(x86opc_insn *)&fgroup_15},
3369 {(x86opc_insn *)&fgroup_16},
3370 {(x86opc_insn *)&fgroup_17},
3371 },
3372 /* prefix DA */
3373 {
3374 {0, {"fcmovb", {__st, Ft}}},
3375 {0, {"fcmove", {__st, Ft}}},
3376 {0, {"fcmovbe", {__st, Ft}}},
3377 {0, {"fcmovu", {__st, Ft}}},
3378 {0},
3379 {(x86opc_insn *)&fgroup_25},
3380 {0},
3381 {0},
3382 },
3383 /* prefix DB */
3384 {
3385 {0, {"fcmovnb", {__st, Ft}}},
3386 {0, {"fcmovne", {__st, Ft}}},
3387 {0, {"fcmovnbe", {__st, Ft}}},
3388 {0, {"fcmovnu", {__st, Ft}}},
3389 {(x86opc_insn*)&fgroup_34},
3390 {0, {"fucomi", {__st, Ft}}},
3391 {0, {"fcomi", {__st, Ft}}},
3392 {0},
3393 },
3394 /* prefix DC */
3395 {
3396 {0, {"fadd", {Ft, __st}}},
3397 {0, {"fmul", {Ft, __st}}},
3398 {0},
3399 {0},
3400 {0, {"fsubr", {Ft, __st}}},
3401 {0, {"fsub", {Ft, __st}}},
3402 {0, {"fdivr", {Ft, __st}}},
3403 {0, {"fdiv", {Ft, __st}}},
3404 },
3405 /* prefix DD */
3406 {
3407 {0, {"ffree", {Ft}}},
3408 {0},
3409 {0, {"fst", {Ft}}},
3410 {0, {"fstp", {Ft}}},
3411 {0, {"fucom", {Ft, __st}}},
3412 {0, {"fucomp", {Ft}}},
3413 {0},
3414 {0},
3415 },
3416 /* prefix DE */
3417 {
3418 {0, {"faddp", {Ft, __st}}},
3419 {0, {"fmulp", {Ft, __st}}},
3420 {0},
3421 {(x86opc_insn*)&fgroup_63},
3422 {0, {"fsubrp", {Ft, __st}}},
3423 {0, {"fsubp", {Ft, __st}}},
3424 {0, {"fdivrp", {Ft, __st}}},
3425 {0, {"fdivp", {Ft, __st}}},
3426 },
3427 /* prefix DF */
3428 {
3429 {0, {"ffreep", {Ft}}},
3430 {0},
3431 {0},
3432 {0},
3433 {(x86opc_insn*)&fgroup_74},
3434 {0, {"fucomip", {__st, Ft}}},
3435 {0, {"fcomip", {__st, Ft}}},
3436 {0},
3437 },
3438 
3439 };
3440 
3441 
3442 /*
3443  * The vex format insns
3444  */
3445 
3446 #define E0(e) static x86opc_vex_insn v##e[] = {
3447 #define E(e) {0}}; static x86opc_vex_insn v##e[] = {
3448 #define Elast {0}};
3449 E0(00)
3450 {"vpshufb", _128|_66|_0f38, {Vo, VVo, Wo}},
3451 {"vpshufb", _256|_66|_0f38, {Yy, YVy, Xy}},
3452 {"vpermq", _256|_66|_0f3a|W1, {Yy, Xy, Ib}},
3453 E(01)
3454 {"pvhaddw", _128|_66|_0f38, {Vo, VVo, Wo}},
3455 {"vphaddw", _256|_66|_0f38, {Yy, YVy, Xy}},
3456 {"vpermpd", _256|_66|_0f3a|W1, {Yy, Xy, Ib}},
3457 E(02)
3458 {"vphaddd", _128|_66|_0f38, {Vo, VVo, Wo}},
3459 {"vphaddd", _256|_66|_0f38, {Yy, YVy, Xy}},
3460 {"vpblendd", _128|_66|_0f3a|W0, {Vo, VVo, Wo, Ib}},
3461 {"vpblendd", _256|_66|_0f3a|W0, {Yy, YVy, Xy, Ib}},
3462 E(03)
3463 {"vphaddsw", _128|_66|_0f38, {Vo, VVo, Wo}},
3464 {"vphaddsw", _256|_66|_0f38, {Yy, YVy, Xy}},
3465 E(04)
3466 {"vpermilps", _128|_66|_0f3a, {Vo, Wo, Ib}},
3467 {"vpermilps", _256|_66|_0f3a, {Yy, Xy, Ib}},
3468 {"vpmaddubsw", _128|_66|_0f38, {Vo, VVo, Wo}},
3469 {"vpmaddubsw", _256|_66|_0f38, {Yy, YVy, Xy}},
3470 E(05)
3471 {"vphsubw", _128|_66|_0f38, {Vo, VVo, Wo}},
3472 {"vphsubw", _256|_66|_0f38, {Yy, YVy, Xy}},
3473 {"vpermilpd", _128|_66|_0f3a, {Vo, Wo, Ib}},
3474 {"vpermilpd", _256|_66|_0f3a, {Yy, Xy, Ib}},
3475 E(06)
3476 {"vphsubd", _128|_66|_0f38, {Vo, VVo, Wo}},
3477 {"vphsubd", _256|_66|_0f38, {Yy, YVy, Xy}},
3478 {"vperm2f128", _256|_66|_0f3a, {Yy, YVy, Xy, Ib}},
3479 E(07)
3480 {"vphsubsw", _128|_66|_0f38, {Vo, VVo, Wo}},
3481 {"vphsubsw", _256|_66|_0f38, {Yy, YVy, Xy}},
3482 E(08)
3483 {"vpsignb", _128|_66|_0f38, {Vo, VVo, Wo}},
3484 {"vpsignb", _256|_66|_0f38, {Yy, YVy, Xy}},
3485 {"vroundps", _128|_66|_0f3a, {Vo, Wo, Ib}},
3486 {"vroundps", _256|_66|_0f3a, {Yy, Xy, Ib}},
3487 E(09)
3488 {"vpsignw", _128|_66|_0f38, {Vo, VVo, Wo}},
3489 {"vpsignw", _256|_66|_0f38, {Yy, YVy, Xy}},
3490 {"vroundpd", _128|_66|_0f3a, {Vo, Wo, Ib}},
3491 {"vroundpd", _256|_66|_0f3a, {Yy, Xy, Ib}},
3492 E(0a)
3493 {"vpsignd", _128|_66|_0f38, {Vo, VVo, Wo}},
3494 {"vpsignd", _256|_66|_0f38, {Yy, YVy, Xy}},
3495 {"vroundss", _128|_66|_0f3a, {Vo, Wo, Ib}},
3496 E(0b)
3497 {"vpmulhrsw", _128|_66|_0f38, {Vo, VVo, Wo}},
3498 {"vpmulhrsw", _256|_66|_0f38, {Yy, YVy, Xy}},
3499 {"vroundsd", _128|_66|_0f3a, {Vo, Wo, Ib}},
3500 E(0c)
3501 {"vblendps", _128|_66|_0f3a, {Vo, VVo, Wo, Ib}},
3502 {"vblendps", _256|_66|_0f3a, {Yy, YVy, Xy, Ib}},
3503 {"vpermilps", _128|_66|_0f38, {Vo, VVo, Wo}},
3504 {"vpermilps", _256|_66|_0f38, {Yy, YVy, Xy}},
3505 E(0d)
3506 {"vpermilpd", _128|_66|_0f38, {Vo, VVo, Wo}},
3507 {"vpermilpd", _256|_66|_0f38, {Yy, YVy, Xy}},
3508 {"vblendpd", _128|_66|_0f3a, {Vo, VVo, Wo, Ib}},
3509 {"vblendpd", _256|_66|_0f3a, {Yy, YVy, Xy, Ib}},
3510 E(0e)
3511 {"vpblendw", _128|_66|_0f3a, {Vo, VVo, Wo, Ib}},
3512 {"vpblendw", _256|_66|_0f3a, {Yy, YVy, Xy, Ib}},
3513 {"vptestps", _128|_66|_0f38, {Vo, Wo}},
3514 {"vptestps", _256|_66|_0f38, {Yy, Xy}},
3515 E(0f)
3516 {"vpalignr", _128|_66|_0f3a, {Vo, VVo, Wo, Ib}},
3517 {"vpalignr", _256|_66|_0f3a, {Yy, YVy, Xy, Ib}},
3518 {"vptestpd", _128|_66|_0f38, {Vo, Wo}},
3519 {"vptestpd", _256|_66|_0f38, {Yy, Xy}},
3520 E(10)
3521 //{"vmovss", _128|_f3|_0f, {Vo, VVo, VRo}},
3522 {"vmovss", _128|_f3|_0f, {Vo, VVo, Wd}},
3523 //{"vmovsd", _128|_f2|_0f, {Vo, VVo, VRo}},
3524 {"vmovsd", _128|_f2|_0f, {Vo, VVo, Wq}},
3525 {"vmovups", _128|_0f, {Vo, Wo}},
3526 {"vmovups", _256|_0f, {Yy, Xy}},
3527 {"vmovupd", _128|_66|_0f, {Vo, Wo}},
3528 {"vmovupd", _256|_66|_0f, {Yy, Xy}},
3529 E(11)
3530 //{"vmovss", _128|_f3|_0f, {VRo, VVo, Vo}},
3531 {"vmovss", _128|_f3|_0f, {Wd, VVo, Vo}},
3532 //{"vmovsd", _128|_f2|_0f, {VRo, VVo, Vo}},
3533 {"vmovsd", _128|_f2|_0f, {Wq, VVo, Vo}},
3534 {"vmovups", _128|_0f, {Wo, Vo}},
3535 {"vmovups", _256|_0f, {Xy, Yy}},
3536 {"vmovupd", _128|_66|_0f, {Wo, Vo}},
3537 {"vmovupd", _256|_66|_0f, {Xy, Yy}},
3538 E(12)
3539 {0, _128|_0f25|W0, {SPECIAL_TYPE_GROUP, GROUP_0F25_12}},
3540 {0, _128|_0f25|W1, {SPECIAL_TYPE_GROUP, GROUP_0F25_12_W}},
3541 {0, _256|_0f25|W0, {SPECIAL_TYPE_GROUP, GROUP_0F25_12_L}},
3542 {0, _128|_0fA|W0, {SPECIAL_TYPE_GROUP, GROUP_0FA_12}},
3543 {0, _128|_0fA|W1, {SPECIAL_TYPE_GROUP, GROUP_0FA_12_W}},
3544 {0, _256|_0fA|W0, {SPECIAL_TYPE_GROUP, GROUP_0FA_12_L}},
3545 {"vmovddup", _128|_f2|_0f, {Vo, Wq}},
3546 {"vmovddup", _256|_f2|_0f, {Yy, Xy}},
3547 {"vmovhlps", _128|_0f, {Vo, VVo, VRo}},
3548 {"vmovlps", _128|_0f, {Vo, VVo, Mq}},
3549 {"vmovlpd", _128|_66|_0f, {Vo, VVo, Mq}},
3550 {"vmovsldup", _128|_f3|_0f, {Vo, Wo}},
3551 {"vmovsldup", _256|_f3|_0f, {Yy, Xy}},
3552 E(13)
3553 {"vmovlps", _128|_0f, {Mq, Vo}},
3554 {"vmovlpd", _128|_66|_0f, {Mq, Vo}},
3555 {"vcvtph2ps", _128|_0f, {Vo, Wq}},
3556 {"vcvtph2ps", _256|_66|_0f38, {Yy, Wo}},
3557 E(14)
3558 {"vpextrb", _128|_66|_0f3a, {MRbr, Vo, Ib}},
3559 {"vunpcklps", _128|_0f, {Vo, VVo, Wo}},
3560 {"vunpcklps", _256|_0f, {Yy, YVy, Xy}},
3561 {"vunpcklpd", _128|_66|_0f, {Vo, VVo, Wo}},
3562 {"vunpcklpd", _256|_66|_0f, {Yy, YVy, Xy}},
3563 E(15)
3564 {"vpextrw", _128|_66|_0f3a, {MRwr, Vo, Ib}},
3565 {"vunpckhps", _128|_0f, {Vo, VVo, Wo}},
3566 {"vunpckhps", _256|_0f, {Yy, YVy, Xy}},
3567 {"vunpckhpd", _128|_66|_0f, {Vo, VVo, Wo}},
3568 {"vunpckhpd", _256|_66|_0f, {Yy, YVy, Xy}},
3569 E(16)
3570 {"vpextrd", _128|_66|_0f3a|W0, {Ed, Vo, Ib}},
3571 {"vpextrq", _128|_66|_0f3a|W1, {Eq, Vo, Ib}},
3572 {"vmovhps", _128|_0f, {Vo, VVo, Mq}},
3573 {"vmovhpd", _128|_66|_0f, {Vo, VVo, Mq}},
3574 {"vmovlhps", _128|_0f, {Vo, VVo, VRo}},
3575 {"vmovshdup", _128|_f3|_0f, {Vo, Wo}},
3576 {"vmovshdup", _256|_f3|_0f, {Yy, Xy}},
3577 {"vpermps", _256|_66|_0f38|W0, {Yy, YVy, Xy}},
3578 E(17)
3579 {"vmovhps", _128|_0f, {Mq, Vo}},
3580 {"vmovhpd", _128|_66|_0f, {Mq, Vo}},
3581 {"vextractps", _128|_66|_0f3a, {Ed, Vo, Ib}},
3582 {"vextractps", _128|_66|_0f3a|W1, {Eq, Vo, Ib}},
3583 {"vptest", _128|_66|_0f38, {Vo, Wo}},
3584 {"vptest", _256|_66|_0f38, {Yy, Xy}},
3585 E(18)
3586 {"vbroadcastss", _128|_66|_0f38, {Vo, Wd}},
3587 {"vbroadcastss", _256|_66|_0f38, {Yy, Wd}},
3588 {"vinsertf128", _256|_66|_0f3a, {Yy, YVy, Xy, Ib}},
3589 E(19)
3590 {"vbroadcastsd", _128|_66|_0f38, {Vo, Wq}},
3591 {"vbroadcastsd", _256|_66|_0f38, {Yy, Wq}},
3592 {"vextractf128", _256|_66|_0f3a, {Xy, Yy, Ib}},
3593 E(1a)
3594 {"vbroadcastf128", _256|_66|_0f38, {Yy, Mo}},
3595 E(1c)
3596 {"vpabsb", _128|_66|_0f38, {Vo, Wo}},
3597 {"vpabsb", _256|_66|_0f38, {Yy, Xy}},
3598 E(1d)
3599 {"vpabsw", _128|_66|_0f38, {Vo, Wo}},
3600 {"vpabsw", _256|_66|_0f38, {Yy, Xy}},
3601 {"vcvtps2ph", _128|_66|_0f3a, {Wq, Vo, Ib}},
3602 {"vcvtps2ph", _256|_66|_0f3a, {Wo, Yy, Ib}},
3603 E(1e)
3604 {"vpabsd", _128|_66|_0f38, {Vo, Wo}},
3605 {"vpabsd", _256|_66|_0f38, {Yy, Xy}},
3606 E(20)
3607 {"vpinsrb", _128|_66|_0f3a, {Vo, VVo, MRbd, Ib}},
3608 {"vpmovsxbw", _128|_66|_0f38, {Vo, Wq}},
3609 {"vpmovsxbw", _256|_66|_0f38, {Yy, Wo}},
3610 E(21)
3611 {"vinsertps", _128|_66|_0f3a, {Vo, VVo, Wd, Ib}},
3612 {"vpmovsxbd", _128|_66|_0f38, {Vo, Wd}},
3613 {"vpmovsxbd", _256|_66|_0f38, {Yy, Wq}},
3614 E(22)
3615 {"vpinsrd", _128|_66|_0f3a|W0, {Vo, VVo, Ed, Ib}},
3616 {"vpinsrq", _128|_66|_0f3a|W1, {Vo, VVo, Eq, Ib}},
3617 {"vpmovsxbq", _128|_66|_0f38, {Vo, Ww}},
3618 {"vpmovsxbq", _256|_66|_0f38, {Yy, Wd}},
3619 E(23)
3620 {"vpmovsxwd", _128|_66|_0f38, {Vo, Wq}},
3621 {"vpmovsxwd", _256|_66|_0f38, {Yy, Wo}},
3622 E(24)
3623 {"vpmovsxwq", _128|_66|_0f38, {Vo, Wd}},
3624 {"vpmovsxwq", _256|_66|_0f38, {Yy, Wq}},
3625 E(25)
3626 {"vpmovsxdq", _128|_66|_0f38, {Vo, Wq}},
3627 {"vpmovsxdq", _256|_66|_0f38, {Yy, Wo}},
3628 E(28)
3629 {"vmovapd", _128|_66|_0f, {Vo, Wo}},
3630 {"vmovapd", _256|_66|_0f, {Yy, Xy}},
3631 {"vpmuldq", _128|_66|_0f38, {Vo, VVo, Wo}},
3632 {"vpmuldq", _256|_66|_0f38, {Yy, YVy, Xy}},
3633 E(29)
3634 {"vmovapd", _128|_66|_0f, {Wo, Vo}},
3635 {"vmovapd", _256|_66|_0f, {Xy, Yy}},
3636 {"vpcmpeqq", _128|_66|_0f38, {Vo, VVo, Wo}},
3637 {"vpcmpeqq", _256|_66|_0f38, {Yy, YVy, Xy}},
3638 E(2a)
3639 {"vmovntdqa", _128|_66|_0f38, {Vo, Mo}},
3640 {"vmovntdqa", _256|_66|_0f38, {Yy, My}},
3641 {"vcvtsi2ss", _128|_f3|_0f|W0, {Vo, VVo, Ed}},
3642 {"vcvtsi2ss", _128|_f3|_0f|W1, {Vo, VVo, Eq}},
3643 {"vcvtsi2sd", _128|_f2|_0f|W0, {Vo, VVo, Ed}},
3644 {"vcvtsi2sd", _128|_f2|_0f|W1, {Vo, VVo, Eq}},
3645 E(2b)
3646 {"vmovntps", _128|_0f, {Mo, Vo}},
3647 {"vmovntps", _256|_0f, {My, Xy}},
3648 {"vmovntpd", _128|_66|_0f, {Mo, Vo}},
3649 {"vmovntpd", _256|_66|_0f, {My, Xy}},
3650 {"vpackusdw", _128|_66|_0f38, {Vo, VVo, Wo}},
3651 {"vpackusdw", _256|_66|_0f38, {Yy, YVy, Xy}},
3652 E(2c)
3653 {"vmaskmovps", _128|_66|_0f38, {Vo, VVo, Mo}},
3654 {"vmaskmovps", _256|_66|_0f38, {Yy, YVy, My}},
3655 {"vcvttss2si", _128|_f3|_0f|W0, {Gd, Wd}},
3656 {"vcvttss2si", _128|_f3|_0f|W1, {Gq, Wd}},
3657 {"vcvttsd2si", _128|_f2|_0f|W0, {Gd, Wq}},
3658 {"vcvttsd2si", _128|_f2|_0f|W1, {Gq, Wq}},
3659 E(2d)
3660 {"vcvtsd2si", _128|_f2|_0f|W0, {Gd, Wq}},
3661 {"vcvtsd2si", _128|_f2|_0f|W1, {Gq, Wq}},
3662 {"vcvtss2si", _128|_f3|_0f|W0, {Gd, Wd}},
3663 {"vcvtss2si", _128|_f3|_0f|W1, {Gq, Wd}},
3664 {"vmaskmovpd", _128|_66|_0f38, {Vo, VVo, Mo}},
3665 {"vmaskmovpd", _256|_66|_0f38, {Yy, YVy, My}},
3666 E(2e)
3667 {"vucomiss", _128|_0f, {Vo, Wd}},
3668 {"vucomisd", _128|_66|_0f, {Vo, Wq}},
3669 {"vmaskmovps", _128|_66|_0f38, {Mo, VVo, Vo}},
3670 {"vmaskmovps", _256|_66|_0f38, {My, YVy, Yy}},
3671 E(2f)
3672 {"vmaskmovpd", _128|_66|_0f38, {Mo, VVo, Vo}},
3673 {"vmaskmovpd", _256|_66|_0f38, {My, YVy, Yy}},
3674 {"vcomiss", _128|_0f, {Vo, Wd}},
3675 {"vcomisd", _128|_66|_0f, {Vo, Wq}},
3676 E(30)
3677 {"vpmovzxbw", _128|_66|_0f38, {Vo, Wq}},
3678 {"vpmovzxbw", _256|_66|_0f38, {Yy, Wo}},
3679 E(31)
3680 {"vpmovzxbd", _128|_66|_0f38, {Vo, Wd}},
3681 {"vpmovzxbd", _256|_66|_0f38, {Yy, Wq}},
3682 E(32)
3683 {"vpmovzxbq", _128|_66|_0f38, {Vo, Ww}},
3684 {"vpmovzxbq", _256|_66|_0f38, {Yy, Wd}},
3685 E(33)
3686 {"vpmovzxwd", _128|_66|_0f38, {Vo, Wq}},
3687 {"vpmovzxwd", _256|_66|_0f38, {Yy, Wo}},
3688 E(34)
3689 {"vpmovzxwq", _128|_66|_0f38, {Vo, Wd}},
3690 {"vpmovzxwq", _256|_66|_0f38, {Yy, Wq}},
3691 E(35)
3692 {"vpmovzxdq", _128|_66|_0f38, {Vo, Wq}},
3693 {"vpmovzxdq", _256|_66|_0f38, {Yy, Wo}},
3694 E(36)
3695 {"vpermd", _256|_66|_0f38|W0, {Yy, YVy, Xy}},
3696 E(37)
3697 {"vpcmpgtq", _128|_66|_0f38, {Vo, VVo, Wo}},
3698 {"vpcmpgtq", _256|_66|_0f38, {Yy, YVy, Xy}},
3699 E(38)
3700 {"vpminsb", _128|_66|_0f38, {Vo, VVo, Wo}},
3701 {"vpminsb", _256|_66|_0f38, {Yy, YVy, Xy}},
3702 {"vinserti128", _256|_66|_0f3a, {Yy, YVy, Wo, Ib}},
3703 E(39)
3704 {"vpminsd", _128|_66|_0f38, {Vo, VVo, Wo}},
3705 {"vpminsd", _256|_66|_0f38, {Yy, YVy, Xy}},
3706 {"vextracti128", _256|_66|_0f3a, {Wo, Yy, Ib}},
3707 E(3a)
3708 {"vpminuw", _128|_66|_0f38, {Vo, VVo, Wo}},
3709 {"vpminuw", _256|_66|_0f38, {Yy, YVy, Xy}},
3710 E(3b)
3711 {"vpminud", _128|_66|_0f38, {Vo, VVo, Wo}},
3712 {"vpminud", _256|_66|_0f38, {Yy, YVy, Xy}},
3713 E(3c)
3714 {"vpmaxsb", _128|_66|_0f38, {Vo, VVo, Wo}},
3715 {"vpmaxsb", _256|_66|_0f38, {Yy, YVy, Xy}},
3716 E(3d)
3717 {"vpmaxsd", _128|_66|_0f38, {Vo, VVo, Wo}},
3718 {"vpmaxsd", _256|_66|_0f38, {Yy, YVy, Xy}},
3719 E(3e)
3720 {"vpmaxuw", _128|_66|_0f38, {Vo, VVo, Wo}},
3721 {"vpmaxuw", _256|_66|_0f38, {Yy, YVy, Xy}},
3722 E(3f)
3723 {"vpmaxud", _128|_66|_0f38, {Vo, VVo, Wo}},
3724 {"vpmaxud", _256|_66|_0f38, {Yy, YVy, Xy}},
3725 E(40)
3726 {"vpmulld", _128|_66|_0f38, {Vo, VVo, Wo}},
3727 {"vpmulld", _256|_66|_0f38, {Yy, YVy, Xy}},
3728 {"vdpps", _128|_66|_0f3a, {Vo, VVo, Wo, Ib}},
3729 {"vdpps", _256|_66|_0f3a, {Yy, YVy, Xy, Ib}},
3730 E(41)
3731 {"vdppd", _128|_66|_0f3a, {Vo, VVo, Wo, Ib}},
3732 {"vphminposuw", _128|_66|_0f38, {Vo, Wo}},
3733 E(42)
3734 {"vmpsadbw", _128|_66|_0f3a, {Vo, VVo, Wo, Ib}},
3735 {"vmpsadbw", _256|_66|_0f3a, {Yy, YVy, Xy, Ib}},
3736 E(44)
3737 {"vpclmulqdq", _128|_66|_0f3a, {Vo, VVo, Wo, Ib}},
3738 E(45)
3739 {"vpsrlvd", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
3740 {"vpsrlvd", _256|_66|_0f38|W0, {Yy, YVy, Xy}},
3741 {"vpsrlvq", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
3742 {"vpsrlvq", _256|_66|_0f38|W1, {Yy, YVy, Xy}},
3743 E(46)
3744 {"vpsravd", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
3745 {"vpsravd", _256|_66|_0f38|W0, {Yy, YVy, Xy}},
3746 {"vperm2i128", _256|_66|_0f3a|W0, {Yy, YVy, Xy, Ib}},
3747 E(47)
3748 {"vpsllvd", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
3749 {"vpsllvd", _256|_66|_0f38|W0, {Yy, YVy, Xy}},
3750 {"vpsllvq", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
3751 {"vpsllvq", _256|_66|_0f38|W1, {Yy, YVy, Xy}},
3752 E(48)
3753 {"vpermil2ps", _128|_66|_0f3a|W0, {Vo, VVo, Wo, VIo, I4}},
3754 {"vpermil2ps", _128|_66|_0f3a|W1, {Vo, VVo, VIo, Wo, I4}},
3755 {"vpermil2ps", _256|_66|_0f3a|W0, {Yy, YVy, Xy, YIy, I4}},
3756 {"vpermil2ps", _256|_66|_0f3a|W1, {Yy, YVy, YIy, Xy, I4}},
3757 E(49)
3758 {"vpermil2pd", _128|_66|_0f3a|W0, {Vo, VVo, Wo, VIo, I4}},
3759 {"vpermil2pd", _128|_66|_0f3a|W1, {Vo, VVo, VIo, Wo, I4}},
3760 {"vpermil2pd", _256|_66|_0f3a|W0, {Yy, YVy, Xy, YIy, I4}},
3761 {"vpermil2pd", _256|_66|_0f3a|W1, {Yy, YVy, YIy, Xy, I4}},
3762 E(4a)
3763 {"vblendvps", _128|_66|_0f3a, {Vo, VVo, Wo, VIo}},
3764 {"vblendvps", _256|_66|_0f3a, {Yy, YVy, Xy, YIy}},
3765 E(4b)
3766 {"vblendvpd", _128|_66|_0f3a, {Vo, VVo, Wo, VIo}},
3767 {"vblendvpd", _256|_66|_0f3a, {Yy, YVy, Xy, YIy}},
3768 E(4c)
3769 {"vpblendvb", _128|_66|_0f3a, {Vo, VVo, Wo, VIo}},
3770 {"vpblendvb", _256|_66|_0f3a, {Yy, YVy, Xy, VIo}},
3771 E(50)
3772 {"vmovmskps", _128|_0f, {Gd, VRo}},
3773 {"vmovmskps", _256|_0f, {Gd, YRy}},
3774 {"vmovmskpd", _128|_66|_0f, {Gd, VRo}},
3775 {"vmovmskpd", _256|_66|_0f, {Gd, YRy}},
3776 E(51)
3777 {"vsqrtps", _128|_0f, {Vo, Wo}},
3778 {"vsqrtps", _256|_0f, {Yy, Xy}},
3779 {"vsqrtpd", _128|_66|_0f, {Vo, Wo}},
3780 {"vsqrtpd", _256|_66|_0f, {Yy, Xy}},
3781 {"vsqrtss", _128|_f3|_0f, {Vo, Wo}},
3782 {"vsqrtsd", _128|_f2|_0f, {Vo, Wo}},
3783 E(52)
3784 {"vrsqrtps", _128|_0f, {Vo, Wo}},
3785 {"vrsqrtss", _128|_f3|_0f, {Vo, Wo}},
3786 E(53)
3787 {"vrcpps", _128|_0f, {Vo, Wo}},
3788 {"vrcpss", _128|_f3|_0f, {Vo, Wo}},
3789 E(54)
3790 {"vandps", _128|_0f, {Vo, VVo, Wo}},
3791 {"vandps", _256|_0f, {Yy, YVy, Xy}},
3792 {"vandpd", _128|_66|_0f, {Vo, VVo, Wo}},
3793 {"vandpd", _256|_66|_0f, {Yy, YVy, Xy}},
3794 E(55)
3795 {"vandnps", _128|_0f, {Vo, VVo, Wo}},
3796 {"vandnps", _256|_0f, {Yy, YVy, Xy}},
3797 {"vandnpd", _128|_66|_0f, {Vo, VVo, Wo}},
3798 {"vandnpd", _256|_66|_0f, {Yy, YVy, Xy}},
3799 E(56)
3800 {"vorps", _128|_0f, {Vo, VVo, Wo}},
3801 {"vorps", _256|_0f, {Yy, YVy, Xy}},
3802 {"vorpd", _128|_66|_0f, {Vo, VVo, Wo}},
3803 {"vorpd", _256|_66|_0f, {Yy, YVy, Xy}},
3804 E(57)
3805 {"vxorps", _128|_0f, {Vo, VVo, Wo}},
3806 {"vxorps", _256|_0f, {Yy, YVy, Xy}},
3807 {"vxorpd", _128|_66|_0f, {Vo, VVo, Wo}},
3808 {"vxorpd", _256|_66|_0f, {Yy, YVy, Xy}},
3809 E(58)
3810 {"vaddps", _128|_0f, {Vo, VVo, Wo}},
3811 {"vaddps", _256|_0f, {Yy, YVy, Xy}},
3812 {"vaddpd", _128|_66|_0f, {Vo, VVo, Wo}},
3813 {"vaddpd", _256|_66|_0f, {Yy, YVy, Xy}},
3814 {"vaddss", _128|_f2|_0f, {Vo, VVo, Wo}},
3815 {"vaddsd", _128|_f3|_0f, {Vo, VVo, Wo}},
3816 {"vpbroadcastd", _128|_66|_0f38|W0, {Vo, Wd}},
3817 {"vpbroadcastd", _256|_66|_0f38|W0, {Yy, Wd}},
3818 E(59)
3819 {"vmulss", _128|_0f, {Vo, VVo, Wo}},
3820 {"vmulps", _256|_0f, {Yy, YVy, Xy}},
3821 {"vmulpd", _128|_66|_0f, {Vo, VVo, Wo}},
3822 {"vmulpd", _256|_66|_0f, {Yy, YVy, Xy}},
3823 {"vmulss", _128|_f2|_0f, {Vo, VVo, Wo}},
3824 {"vmulsd", _128|_f3|_0f, {Vo, VVo, Wo}},
3825 {"vpbroadcastq", _128|_66|_0f38|W0, {Vo, Wq}},
3826 {"vpbroadcastq", _256|_66|_0f38|W0, {Yy, Wq}},
3827 E(5a)
3828 {"vcvtps2pd", _128|_0f, {Vo, Wo}},
3829 {"vcvtps2pd", _256|_0f, {Yy, Xy}},
3830 {"vcvtpd2ps", _128|_66|_0f, {Vo, Wo}},
3831 {"vcvtpd2ps", _256|_66|_0f, {Yy, Xy}},
3832 {"vcvtss2sd", _128|_f3|_0f, {Vo, VVo, Wd}},
3833 {"vcvtsd2ss", _128|_f2|_0f, {Vo, VVo, Wq}},
3834 {"vbroadcasti128", _256|_66|_0f38, {Yy, Mo}},
3835 E(5b)
3836 {"vcvtdq2ps", _128|_0f, {Vo, Wo}},
3837 {"vcvtdq2ps", _256|_0f, {Yy, Xy}},
3838 {"vcvtps2dq", _128|_66|_0f, {Vo, Wo}},
3839 {"vcvtps2dq", _256|_66|_0f, {Yy, Xy}},
3840 {"vcvttps2dq", _128|_f3|_0f, {Vo, Wo}},
3841 {"vcvttps2dq", _256|_f3|_0f, {Yy, Xy}},
3842 E(5c)
3843 {"vsubps", _128|_0f, {Vo, VVo, Wo}},
3844 {"vsubps", _256|_0f, {Yy, YVy, Xy}},
3845 {"vsubpd", _128|_66|_0f, {Vo, VVo, Wo}},
3846 {"vsubpd", _256|_66|_0f, {Yy, YVy, Xy}},
3847 {"vsubss", _128|_f2|_0f, {Vo, VVo, Wo}},
3848 {"vsubsd", _128|_f3|_0f, {Vo, VVo, Wo}},
3849 {"vfmaddsubps", _128|_66|_0f3a|W0, {Vo, VIo, Wo, VVo}},
3850 {"vfmaddsubps", _128|_66|_0f3a|W1, {Vo, VIo, VVo, Wo}},
3851 {"vfmaddsubps", _256|_66|_0f3a|W0, {Yy, YIy, Xy, YVy}},
3852 {"vfmaddsubps", _256|_66|_0f3a|W1, {Yy, YIy, YVy, Xy}},
3853 E(5d)
3854 {"vminps", _128|_0f, {Vo, VVo, Wo}},
3855 {"vminps", _256|_0f, {Yy, YVy, Xy}},
3856 {"vminpd", _128|_66|_0f, {Vo, VVo, Wo}},
3857 {"vminpd", _256|_66|_0f, {Yy, YVy, Xy}},
3858 {"vminss", _128|_f2|_0f, {Vo, VVo, Wo}},
3859 {"vminsd", _128|_f3|_0f, {Vo, VVo, Wo}},
3860 {"vfmaddsubpd", _128|_66|_0f3a|W0, {Vo, VIo, Wo, VVo}},
3861 {"vfmaddsubpd", _128|_66|_0f3a|W1, {Vo, VIo, VVo, Wo}},
3862 {"vfmaddsubpd", _256|_66|_0f3a|W0, {Yy, YIy, Xy, YVy}},
3863 {"vfmaddsubpd", _256|_66|_0f3a|W1, {Yy, YIy, YVy, Xy}},
3864 E(5e)
3865 {"vdivps", _128|_0f, {Vo, VVo, Wo}},
3866 {"vdivps", _256|_0f, {Yy, YVy, Xy}},
3867 {"vdivpd", _128|_66|_0f, {Vo, VVo, Wo}},
3868 {"vdivpd", _256|_66|_0f, {Yy, YVy, Xy}},
3869 {"vdivss", _128|_f2|_0f, {Vo, VVo, Wo}},
3870 {"vdivsd", _128|_f3|_0f, {Vo, VVo, Wo}},
3871 {"vfmsubaddps", _128|_66|_0f3a|W0, {Vo, VIo, Wo, VVo}},
3872 {"vfmsubaddps", _128|_66|_0f3a|W1, {Vo, VIo, VVo, Wo}},
3873 {"vfmsubaddps", _256|_66|_0f3a|W0, {Yy, YIy, Xy, YVy}},
3874 {"vfmsubaddps", _256|_66|_0f3a|W1, {Yy, YIy, YVy, Xy}},
3875 E(5f)
3876 {"vmaxps", _128|_0f, {Vo, VVo, Wo}},
3877 {"vmaxps", _256|_0f, {Yy, YVy, Xy}},
3878 {"vmaxpd", _128|_66|_0f, {Vo, VVo, Wo}},
3879 {"vmaxpd", _256|_66|_0f, {Yy, YVy, Xy}},
3880 {"vmaxss", _128|_f2|_0f, {Vo, VVo, Wo}},
3881 {"vmaxsd", _128|_f3|_0f, {Vo, VVo, Wo}},
3882 {"vfmsubaddpd", _128|_66|_0f3a|W0, {Vo, VIo, Wo, VVo}},
3883 {"vfmsubaddpd", _128|_66|_0f3a|W1, {Vo, VIo, VVo, Wo}},
3884 {"vfmsubaddpd", _256|_66|_0f3a|W0, {Yy, YIy, Xy, YVy}},
3885 {"vfmsubaddpd", _256|_66|_0f3a|W1, {Yy, YIy, YVy, Xy}},
3886 E(60)
3887 {"vpcmpestrm", _128|_66|_0f3a, {Vo, Wo, Ib}},
3888 {"vpunpcklbw", _128|_66|_0f, {Vo, VVo, Wo}},
3889 {"vpunpcklbw", _256|_66|_0f, {Yy, YVy, Xy}},
3890 E(61)
3891 {"vpcmpestri", _128|_66|_0f3a, {Vo, Wo, Ib}},
3892 {"vpunpcklwd", _128|_66|_0f, {Vo, VVo, Wo}},
3893 {"vpunpcklwd", _256|_66|_0f, {Yy, YVy, Xy}},
3894 E(62)
3895 {"vpcmpistrm", _128|_66|_0f3a, {Vo, Wo, Ib}},
3896 {"vpunpckldq", _128|_66|_0f, {Vo, VVo, Wo}},
3897 {"vpunpckldq", _256|_66|_0f, {Yy, YVy, Xy}},
3898 E(63)
3899 {"vpcmpistri", _128|_66|_0f3a, {Vo, Wo, Ib}},
3900 {"vpacksswb", _128|_66|_0f, {Vo, VVo, Wo}},
3901 {"vpacksswb", _256|_66|_0f, {Yy, YVy, Xy}},
3902 E(64)
3903 {"vpcmpgtb", _128|_66|_0f, {Vo, VVo, Wo}},
3904 {"vpcmpgtb", _256|_66|_0f, {Yy, YVy, Xy}},
3905 E(65)
3906 {"vpcmpgtw", _128|_66|_0f, {Vo, VVo, Wo}},
3907 {"vpcmpgtw", _256|_66|_0f, {Yy, YVy, Xy}},
3908 E(66)
3909 {"vpcmpgtd", _128|_66|_0f, {Vo, VVo, Wo}},
3910 {"vpcmpgtd", _256|_66|_0f, {Yy, YVy, Xy}},
3911 E(67)
3912 {"vpackuswb", _128|_66|_0f, {Vo, VVo, Wo}},
3913 {"vpackuswb", _256|_66|_0f, {Yy, YVy, Xy}},
3914 E(68)
3915 {"vpunpckhbw", _128|_66|_0f, {Vo, VVo, Wo}},
3916 {"vpunpckhbw", _256|_66|_0f, {Yy, YVy, Xy}},
3917 {"vfmaddps", _128|_66|_0f3a|W0, {Vo, VIo, VVo, Wo}},
3918 {"vfmaddps", _128|_66|_0f3a|W1, {Vo, VIo, Wo, VVo}},
3919 {"vfmaddps", _256|_66|_0f3a|W0, {Yy, YIy, YVy, Xy}},
3920 {"vfmaddps", _256|_66|_0f3a|W1, {Yy, YIy, Xy, YVy}},
3921 E(69)
3922 {"vpunpckhwd", _128|_66|_0f, {Vo, VVo, Wo}},
3923 {"vpunpckhwd", _256|_66|_0f, {Yy, YVy, Xy}},
3924 {"vfmaddpd", _128|_66|_0f3a|W0, {Vo, VIo, VVo, Wo}},
3925 {"vfmaddpd", _128|_66|_0f3a|W1, {Vo, VIo, Wo, VVo}},
3926 {"vfmaddpd", _256|_66|_0f3a|W0, {Yy, YIy, YVy, Xy}},
3927 {"vfmaddpd", _256|_66|_0f3a|W1, {Yy, YIy, Xy, YVy}},
3928 E(6a)
3929 {"vpunpckhdq", _128|_66|_0f, {Vo, VVo, Wo}},
3930 {"vpunpckhdq", _256|_66|_0f, {Yy, YVy, Xy}},
3931 {"vfmaddss", _128|_66|_0f3a|W0, {Vo, VIo, VVo, Wo}},
3932 {"vfmaddss", _128|_66|_0f3a|W1, {Vo, VIo, Wo, VVo}},
3933 E(6b)
3934 {"vpackssdw", _128|_66|_0f, {Vo, VVo, Wo}},
3935 {"vpackssdw", _256|_66|_0f, {Yy, YVy, Xy}},
3936 {"vfmaddsd", _128|_66|_0f3a|W0, {Vo, VIo, VVo, Wo}},
3937 {"vfmaddsd", _128|_66|_0f3a|W1, {Vo, VIo, Wo, VVo}},
3938 E(6c)
3939 {"vpunpcklqdq", _128|_66|_0f, {Vo, VVo, Wo}},
3940 {"vpunpcklqdq", _256|_66|_0f, {Yy, YVy, Xy}},
3941 {"vfmsubps", _128|_66|_0f3a|W0, {Vo, VIo, VVo, Wo}},
3942 {"vfmsubps", _128|_66|_0f3a|W1, {Vo, VIo, Wo, VVo}},
3943 {"vfmsubps", _256|_66|_0f3a|W0, {Yy, YIy, YVy, Xy}},
3944 {"vfmsubps", _256|_66|_0f3a|W1, {Yy, YIy, Xy, YVy}},
3945 E(6d)
3946 {"vpunpckhqdq", _128|_66|_0f, {Vo, VVo, Wo}},
3947 {"vpunpckhqdq", _256|_66|_0f, {Yy, YVy, Xy}},
3948 {"vfmsubpd", _128|_66|_0f3a|W0, {Vo, VIo, VVo, Wo}},
3949 {"vfmsubpd", _128|_66|_0f3a|W1, {Vo, VIo, Wo, VVo}},
3950 {"vfmsubpd", _256|_66|_0f3a|W0, {Yy, YIy, YVy, Xy}},
3951 {"vfmsubpd", _256|_66|_0f3a|W1, {Yy, YIy, Xy, YVy}},
3952 E(6e)
3953 {"vmovd", _128|_66|_0f|W0, {Vo, Ed}},
3954 {"vmovq", _128|_66|_0f|W1, {Vo, Eq}},
3955 {"vfmsubss", _128|_66|_0f3a|W0, {Vo, VIo, VVo, Wo}},
3956 {"vfmsubss", _128|_66|_0f3a|W1, {Vo, VIo, Wo, VVo}},
3957 E(6f)
3958 {"vmovdqa", _128|_66|_0f, {Vo, Wo}},
3959 {"vmovdqa", _256|_66|_0f, {Yy, Xy}},
3960 {"vmovdqu", _128|_f3|_0f, {Vo, Wo}},
3961 {"vmovdqu", _256|_f3|_0f, {Yy, Xy}},
3962 {"vfmsubsd", _128|_66|_0f3a|W0, {Vo, VIo, VVo, Wo}},
3963 {"vfmsubsd", _128|_66|_0f3a|W1, {Vo, VIo, Wo, VVo}},
3964 E(70)
3965 {"vpshufd", _128|_66|_0f, {Vo, Wo, Ib}},
3966 {"vpshufd", _256|_66|_0f, {Yy, Xy, Ib}},
3967 {"vpshufhw", _128|_f3|_0f, {Vo, Wo, Ib}},
3968 {"vpshufhw", _256|_f3|_0f, {Yy, Xy, Ib}},
3969 {"vpshuflw", _128|_f2|_0f, {Vo, Wo, Ib}},
3970 {"vpshuflw", _256|_f2|_0f, {Yy, Xy, Ib}},
3971 E(71)
3972 {0, _128|_66|_0f, {SPECIAL_TYPE_GROUP, GROUP_660F71}},
3973 E(72)
3974 {0, _128|_66|_0f, {SPECIAL_TYPE_GROUP, GROUP_660F72}},
3975 E(73)
3976 {0, _128|_66|_0f, {SPECIAL_TYPE_GROUP, GROUP_660F73}},
3977 E(74)
3978 {"vpcmpeqb", _128|_66|_0f, {Vo, VVo, Wo}},
3979 {"vpcmpeqb", _256|_66|_0f, {Yy, YVy, Xy}},
3980 E(75)
3981 {"vpcmpeqw", _128|_66|_0f, {Vo, VVo, Wo}},
3982 {"vpcmpeqw", _256|_66|_0f, {Yy, YVy, Xy}},
3983 E(76)
3984 {"vpcmpeqd", _128|_66|_0f, {Vo, VVo, Wo}},
3985 {"vpcmpeqd", _256|_66|_0f, {Yy, YVy, Xy}},
3986 E(77)
3987 {"vzeroupper", _128|_0f},
3988 {"vzeroall", _256|_0f},
3989 E(78)
3990 {"vpbroadcastb", _128|_66|_0f38|W0, {Vo, Wb}},
3991 {"vpbroadcastb", _256|_66|_0f38|W0, {Yy, Wb}},
3992 {"vfnmaddps", _128|_66|_0f3a|W0, {Vo, VIo, VVo, Wo}},
3993 {"vfnmaddps", _128|_66|_0f3a|W1, {Vo, VIo, Wo, VVo}},
3994 {"vfnmaddps", _256|_66|_0f3a|W0, {Yy, YIy, YVy, Xy}},
3995 {"vfnmaddps", _256|_66|_0f3a|W1, {Yy, YIy, Xy, YVy}},
3996 E(79)
3997 {"vpbroadcastw", _128|_66|_0f38|W0, {Vo, Ww}},
3998 {"vpbroadcastw", _256|_66|_0f38|W0, {Yy, Ww}},
3999 {"vfnmaddpd", _128|_66|_0f3a|W0, {Vo, VIo, VVo, Wo}},
4000 {"vfnmaddpd", _128|_66|_0f3a|W1, {Vo, VIo, Wo, VVo}},
4001 {"vfnmaddpd", _256|_66|_0f3a|W0, {Yy, YIy, YVy, Xy}},
4002 {"vfnmaddpd", _256|_66|_0f3a|W1, {Yy, YIy, Xy, YVy}},
4003 E(7a)
4004 {"vfnmaddss", _128|_66|_0f3a|W0, {Vo, VIo, VVo, Wo}},
4005 {"vfnmaddss", _128|_66|_0f3a|W1, {Vo, VIo, Wo, VVo}},
4006 E(7b)
4007 {"vfnmaddsd", _128|_66|_0f3a|W0, {Vo, VIo, VVo, Wo}},
4008 {"vfnmaddsd", _128|_66|_0f3a|W1, {Vo, VIo, Wo, VVo}},
4009 E(7c)
4010 {"vhaddpd", _128|_66|_0f, {Vo, VVo, Wo}},
4011 {"vhaddpd", _256|_66|_0f, {Yy, YVy, Xy}},
4012 {"vhaddss", _128|_f2|_0f, {Vo, VVo, Wo}},
4013 {"vhaddss", _256|_f2|_0f, {Yy, YVy, Xy}},
4014 {"vfnmsubps", _128|_66|_0f3a|W0, {Vo, VIo, VVo, Wo}},
4015 {"vfnmsubps", _128|_66|_0f3a|W1, {Vo, VIo, Wo, VVo}},
4016 {"vfnmsubps", _256|_66|_0f3a|W0, {Yy, YIy, YVy, Xy}},
4017 {"vfnmsubps", _256|_66|_0f3a|W1, {Yy, YIy, Xy, YVy}},
4018 E(7d)
4019 {"vhsubpd", _128|_66|_0f, {Vo, VVo, Wo}},
4020 {"vhsubpd", _256|_66|_0f, {Yy, YVy, Xy}},
4021 {"vhsubss", _128|_f2|_0f, {Vo, VVo, Wo}},
4022 {"vhsubss", _256|_f2|_0f, {Yy, YVy, Xy}},
4023 {"vfnmsubpd", _128|_66|_0f3a|W0, {Vo, VIo, VVo, Wo}},
4024 {"vfnmsubpd", _128|_66|_0f3a|W1, {Vo, VIo, Wo, VVo}},
4025 {"vfnmsubpd", _256|_66|_0f3a|W0, {Yy, YIy, YVy, Xy}},
4026 {"vfnmsubpd", _256|_66|_0f3a|W1, {Yy, YIy, Xy, YVy}},
4027 E(7e)
4028 {"vmovd", _128|_66|_0f|W0, {Ed, Vo}},
4029 {"vmovq", _128|_66|_0f|W1, {Eq, Vo}},
4030 {"vmovq", _128|_f3|_0f, {Vo, Wq}},
4031 {"vfnmsubss", _128|_66|_0f3a|W0, {Vo, VIo, VVo, Wo}},
4032 {"vfnmsubss", _128|_66|_0f3a|W1, {Vo, VIo, Wo, VVo}},
4033 E(7f)
4034 {"vmovdqa", _128|_66|_0f, {Wo, Vo}},
4035 {"vmovdqa", _256|_66|_0f, {Xy, Yy}},
4036 {"vmovdqu", _128|_f3|_0f, {Wo, Vo}},
4037 {"vmovdqu", _256|_f3|_0f, {Xy, Yy}},
4038 {"vfnmsubsd", _128|_66|_0f3a|W0, {Vo, VIo, VVo, Wo}},
4039 {"vfnmsubsd", _128|_66|_0f3a|W1, {Vo, VIo, Wo, VVo}},
4040 E(80)
4041 {"vfrczpd", _128|_0f25, {Vo, Wo}},
4042 {"vfrczpd", _256|_0f25, {Yy, Xy}},
4043 E(81)
4044 {"vfrczps", _128|_0f25, {Vo, Wo}},
4045 {"vfrczps", _256|_0f25, {Yy, Xy}},
4046 E(82)
4047 {"vfrczsd", _128|_0f25, {Vo, Wo}},
4048 {"vfrczsd", _256|_0f25, {Yy, Xy}},
4049 E(83)
4050 {"vfrczss", _128|_0f25, {Vo, Wo}},
4051 {"vfrczss", _256|_0f25, {Yy, Xy}},
4052 E(85)
4053 {"vpmacssww", _128|_0f24, {Vo, VVo, Wo, VIo}},
4054 E(86)
4055 {"vpmacsswd", _128|_0f24, {Vo, VVo, Wo, VIo}},
4056 E(87)
4057 {"vpmacssdql", _128|_0f24, {Vo, VVo, Wo, VIo}},
4058 E(8c)
4059 {"vpmaskmovd", _128|_66|_0f38|W0, {Vo, VVo, Mo}},
4060 {"vpmaskmovd", _256|_66|_0f38|W0, {Yy, YVy, My}},
4061 {"vpmaskmovq", _128|_66|_0f38|W1, {Vo, VVo, Mo}},
4062 {"vpmaskmovq", _256|_66|_0f38|W1, {Yy, YVy, My}},
4063 E(8e)
4064 {"vpmacssdd", _128|_0f24, {Vo, VVo, Wo, VIo}},
4065 {"vpmaskmovd", _128|_66|_0f38|W0, {Mo, VVo, Vo}},
4066 {"vpmaskmovd", _256|_66|_0f38|W0, {My, YVy, Yy}},
4067 {"vpmaskmovq", _128|_66|_0f38|W1, {Mo, VVo, Vo}},
4068 {"vpmaskmovq", _256|_66|_0f38|W1, {My, YVy, Yy}},
4069 E(8f)
4070 {"vpmacssdqh", _128|_0f24, {Vo, VVo, Wo, VIo}},
4071 E(90)
4072 {"vprotb", _128|_0f25|W0, {Vo, Wo, VVo}},
4073 {"vprotb", _128|_0f25|W1, {Vo, VVo, Wo}},
4074 {"vpgatherdd", _128|_66|_0f38|W0, {Vo, Wd, VVo}},
4075 {"vpgatherdd", _256|_66|_0f38|W0, {Yy, Xd, YVy}},
4076 {"vpgatherdq", _128|_66|_0f38|W1, {Vo, Wd, VVo}},
4077 {"vpgatherdq", _256|_66|_0f38|W1, {Yy, Xd, YVy}},
4078 E(91)
4079 {"vprotw", _128|_0f25|W0, {Vo, Wo, VVo}},
4080 {"vprotw", _128|_0f25|W1, {Vo, VVo, Wo}},
4081 {"vpgatherqd", _128|_66|_0f38|W0, {Vo, Wq, VVo}},
4082 {"vpgatherqd", _256|_66|_0f38|W0, {Yy, Xq, YVy}},
4083 {"vpgatherqq", _128|_66|_0f38|W1, {Vo, Wq, VVo}},
4084 {"vpgatherqq", _256|_66|_0f38|W1, {Yy, Xq, YVy}},
4085 E(92)
4086 {"vprotd", _128|_0f25|W0, {Vo, Wo, VVo}},
4087 {"vprotd", _128|_0f25|W1, {Vo, VVo, Wo}},
4088 {"vgatherdps", _128|_66|_0f38|W0, {Vo, Wd, VVo}},
4089 {"vgatherdps", _256|_66|_0f38|W0, {Yy, Xd, YVy}},
4090 {"vgatherdpd", _128|_66|_0f38|W1, {Vo, Wd, VVo}},
4091 {"vgatherdpd", _256|_66|_0f38|W1, {Yy, Xd, YVy}},
4092 E(93)
4093 {"vprotq", _128|_0f25|W0, {Vo, Wo, VVo}},
4094 {"vprotq", _128|_0f25|W1, {Vo, VVo, Wo}},
4095 {"vgatherqps", _128|_66|_0f38|W0, {Vo, Wq, VVo}},
4096 {"vgatherqps", _256|_66|_0f38|W0, {Yy, Xq, YVy}},
4097 {"vgatherqpd", _128|_66|_0f38|W1, {Vo, Wq, VVo}},
4098 {"vgatherqpd", _256|_66|_0f38|W1, {Yy, Xq, YVy}},
4099 E(94)
4100 {"vpshlb", _128|_0f25|W0, {Vo, Wo, VVo}},
4101 {"vpshlb", _128|_0f25|W1, {Vo, VVo, Wo}},
4102 E(95)
4103 {"vpmacsww", _128|_0f24, {Vo, VVo, Wo, VIo}},
4104 {"vpshlw", _128|_0f25|W0, {Vo, Wo, VVo}},
4105 {"vpshlw", _128|_0f25|W1, {Vo, VVo, Wo}},
4106 E(96)
4107 {"vfmaddsub132ps", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
4108 {"vfmaddsub132ps", _256|_66|_0f38|W0, {Yy, YVy, Xy}},
4109 {"vfmaddsub132pd", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
4110 {"vfmaddsub132pd", _256|_66|_0f38|W1, {Yy, YVy, Xy}},
4111 {"vpmacswd", _128|_0f24, {Vo, VVo, Wo, VIo}},
4112 {"vpshld", _128|_0f25|W0, {Vo, Wo, VVo}},
4113 {"vpshld", _128|_0f25|W1, {Vo, VVo, Wo}},
4114 E(97)
4115 {"vfmaddsub132ss", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
4116 {"vfmaddsub132sd", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
4117 {"vpmacsdql", _128|_0f24, {Vo, VVo, Wo, VIo}},
4118 {"vpshlq", _128|_0f25|W0, {Vo, Wo, VVo}},
4119 {"vpshlq", _128|_0f25|W1, {Vo, VVo, Wo}},
4120 E(98)
4121 {"vfmadd132ps", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
4122 {"vfmadd132ps", _256|_66|_0f38|W0, {Yy, YVy, Xy}},
4123 {"vfmadd132pd", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
4124 {"vfmadd132pd", _256|_66|_0f38|W1, {Yy, YVy, Xy}},
4125 {"vpshab", _128|_0f25|W0, {Vo, Wo, VVo}},
4126 {"vpshab", _128|_0f25|W1, {Vo, VVo, Wo}},
4127 E(99)
4128 {"vfmadd132ss", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
4129 {"vfmadd132sd", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
4130 {"vpshaw", _128|_0f25|W0, {Vo, Wo, VVo}},
4131 {"vpshaw", _128|_0f25|W1, {Vo, VVo, Wo}},
4132 E(9a)
4133 {"vfmsub132ps", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
4134 {"vfmsub132ps", _256|_66|_0f38|W0, {Yy, YVy, Xy}},
4135 {"vfmsub132pd", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
4136 {"vfmsub132pd", _256|_66|_0f38|W1, {Yy, YVy, Xy}},
4137 {"vpshad", _128|_0f25|W0, {Vo, Wo, VVo}},
4138 {"vpshad", _128|_0f25|W1, {Vo, VVo, Wo}},
4139 E(9b)
4140 {"vfmsub132ss", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
4141 {"vfmsub132sd", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
4142 {"vpshaq", _128|_0f25|W0, {Vo, Wo, VVo}},
4143 {"vpshaq", _128|_0f25|W1, {Vo, VVo, Wo}},
4144 E(9c)
4145 {"vfnmadd132ps", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
4146 {"vfnmadd132ps", _256|_66|_0f38|W0, {Yy, YVy, Xy}},
4147 {"vfnmadd132pd", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
4148 {"vfnmadd132pd", _256|_66|_0f38|W1, {Yy, YVy, Xy}},
4149 E(9d)
4150 {"vfnmadd132ss", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
4151 {"vfnmadd132sd", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
4152 E(9e)
4153 {"vfnmsub132ps", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
4154 {"vfnmsub132ps", _256|_66|_0f38|W0, {Yy, YVy, Xy}},
4155 {"vfnmsub132pd", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
4156 {"vfnmsub132pd", _256|_66|_0f38|W1, {Yy, YVy, Xy}},
4157 {"vpmacsdd", _128|_0f24, {Vo, VVo, Wo, VIo}},
4158 E(9f)
4159 {"vfnmsub132ss", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
4160 {"vfnmsub132sd", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
4161 {"vpmacsdqh", _128|_0f24, {Vo, VVo, Wo, VIo}},
4162 E(a0)
4163 {"vcvtph2ps", _128|_0f24, {Vo, Wq, Ib}},
4164 {"vcvtph2ps", _256|_0f24, {Yy, Xo, Ib}},
4165 E(a1)
4166 {"vcvtps2ph", _128|_0f25, {Wq, Vo}},
4167 {"vcvtps2ph", _256|_0f25, {Xo, Yy}},
4168 E(a2)
4169 {"vpcmov", _128|_0f24|W0, {Vo, VVo, Wo, VIo}},
4170 {"vpcmov", _256|_0f24|W0, {Yy, YVy, Xy, YIy}},
4171 {"vpcmov", _128|_0f24|W1, {Vo, VVo, VIo, Wo}},
4172 {"vpcmov", _256|_0f24|W1, {Yy, YVy, YIy, Xy}},
4173 E(a3)
4174 {"vpperm", _128|_0f24|W0, {Vo, VVo, Wo, VIo}},
4175 {"vpperm", _128|_0f24|W1, {Vo, VVo, VIo, Wo}},
4176 E(a6)
4177 {"vfmaddsub213ps", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
4178 {"vfmaddsub213ps", _256|_66|_0f38|W0, {Yy, YVy, Xy}},
4179 {"vfmaddsub213pd", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
4180 {"vfmaddsub213pd", _256|_66|_0f38|W1, {Yy, YVy, Xy}},
4181 {"vpmadcsswd", _128|_0f24, {Vo, VVo, Wo, VIo}},
4182 E(a7)
4183 {"vfmaddsub213ss", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
4184 {"vfmaddsub213sd", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
4185 E(a8)
4186 {"vfmadd213ps", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
4187 {"vfmadd213ps", _256|_66|_0f38|W0, {Yy, YVy, Xy}},
4188 {"vfmadd213pd", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
4189 {"vfmadd213pd", _256|_66|_0f38|W1, {Yy, YVy, Xy}},
4190 E(a9)
4191 {"vfmadd213ss", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
4192 {"vfmadd213sd", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
4193 E(aa)
4194 {"vfmsub213ps", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
4195 {"vfmsub213ps", _256|_66|_0f38|W0, {Yy, YVy, Xy}},
4196 {"vfmsub213pd", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
4197 {"vfmsub213pd", _256|_66|_0f38|W1, {Yy, YVy, Xy}},
4198 E(ab)
4199 {"vfmsub213ss", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
4200 {"vfmsub213sd", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
4201 E(ac)
4202 {"vfnmadd213ps", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
4203 {"vfnmadd213ps", _256|_66|_0f38|W0, {Yy, YVy, Xy}},
4204 {"vfnmadd213pd", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
4205 {"vfnmadd213pd", _256|_66|_0f38|W1, {Yy, YVy, Xy}},
4206 E(ad)
4207 {"vfnmadd213ss", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
4208 {"vfnmadd213sd", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
4209 E(ae)
4210 {0, _0f, {SPECIAL_TYPE_GROUP, GROUP_0FAE}},
4211 {"vfnmsub213ps", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
4212 {"vfnmsub213ps", _256|_66|_0f38|W0, {Yy, YVy, Xy}},
4213 {"vfnmsub213pd", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
4214 {"vfnmsub213pd", _256|_66|_0f38|W1, {Yy, YVy, Xy}},
4215 E(af)
4216 {"vfnmsub213ss", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
4217 {"vfnmsub213sd", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
4218 E(b6)
4219 {"vfmaddsub231ps", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
4220 {"vfmaddsub231ps", _256|_66|_0f38|W0, {Yy, YVy, Xy}},
4221 {"vfmaddsub231pd", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
4222 {"vfmaddsub231pd", _256|_66|_0f38|W1, {Yy, YVy, Xy}},
4223 {"vpmadcswd", _128|_0f24, {Vo, VVo, Wo, VIo}},
4224 E(b7)
4225 {"vfmaddsub231ss", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
4226 {"vfmaddsub231sd", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
4227 E(b8)
4228 {"vfmadd231ps", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
4229 {"vfmadd231ps", _256|_66|_0f38|W0, {Yy, YVy, Xy}},
4230 {"vfmadd231pd", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
4231 {"vfmadd231pd", _256|_66|_0f38|W1, {Yy, YVy, Xy}},
4232 E(b9)
4233 {"vfmadd231ss", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
4234 {"vfmadd231sd", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
4235 E(ba)
4236 {"vfmsub231ps", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
4237 {"vfmsub231ps", _256|_66|_0f38|W0, {Yy, YVy, Xy}},
4238 {"vfmsub231pd", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
4239 {"vfmsub231pd", _256|_66|_0f38|W1, {Yy, YVy, Xy}},
4240 E(bb)
4241 {"vfmsub231ss", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
4242 {"vfmsub231sd", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
4243 E(bc)
4244 {"vfnmadd231ps", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
4245 {"vfnmadd231ps", _256|_66|_0f38|W0, {Yy, YVy, Xy}},
4246 {"vfnmadd231pd", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
4247 {"vfnmadd231pd", _256|_66|_0f38|W1, {Yy, YVy, Xy}},
4248 E(bd)
4249 {"vfnmadd231ss", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
4250 {"vfnmadd231sd", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
4251 E(be)
4252 {"vfnmsub231ps", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
4253 {"vfnmsub231ps", _256|_66|_0f38|W0, {Yy, YVy, Xy}},
4254 {"vfnmsub231pd", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
4255 {"vfnmsub231pd", _256|_66|_0f38|W1, {Yy, YVy, Xy}},
4256 E(bf)
4257 {"vfnmsub231ss", _128|_66|_0f38|W0, {Vo, VVo, Wo}},
4258 {"vfnmsub231sd", _128|_66|_0f38|W1, {Vo, VVo, Wo}},
4259 E(c0)
4260 {"vprotb", _128|_0f24, {Vo, Wo, Ib}},
4261 E(c1)
4262 {"vprotw", _128|_0f24, {Vo, Wo, Ib}},
4263 {"vphaddbw", _128|_0f25, {Vo, Wo}},
4264 E(c2)
4265 {"vcmpps", _128|_0f, {Vo, VVo, Wo, Ib}},
4266 {"vcmpps", _256|_0f, {Yy, YVy, Xy, Ib}},
4267 {"vcmppd", _128|_66|_0f, {Vo, VVo, Wo, Ib}},
4268 {"vcmppd", _256|_66|_0f, {Yy, YVy, Xy, Ib}},
4269 {"vcmpss", _128|_f2|_0f, {Vo, VVo, Wo, Ib}},
4270 {"vcmpsd", _128|_f3|_0f, {Vo, VVo, Wo, Ib}},
4271 {"vprotd", _128|_0f24, {Vo, Wo, Ib}},
4272 {"vphaddbd", _128|_0f25, {Vo, Wo}},
4273 E(c3)
4274 {"vprotq", _128|_0f24, {Vo, Wo, Ib}},
4275 {"vphaddbd", _128|_0f25, {Vo, Wo}},
4276 E(c4)
4277 {"pinsrw", _128|_66|_0f, {Vo, MRwr, Ib}},
4278 E(c5)
4279 {"vpextrw", _128|_66|_0f, {Gr, VRo, Ib}},
4280 E(c6)
4281 {"vshufps", _128|_0f, {Vo, VVo, Wo, Ib}},
4282 {"vshufps", _256|_0f, {Yy, YVy, Xy, Ib}},
4283 {"vshufpd", _128|_66|_0f, {Vo, VVo, Wo, Ib}},
4284 {"vshufpd", _256|_66|_0f, {Yy, YVy, Xy, Ib}},
4285 {"vphadddwd", _128|_0f25, {Vo, Wo}},
4286 E(c7)
4287 {"vphadddwq", _128|_0f25, {Vo, Wo}},
4288 E(cb)
4289 {"vphadddq", _128|_0f25, {Vo, Wo}},
4290 E(cc)
4291 {"vpcomb", _128|_0f24, {Vo, VVo, Wo, Ib}},
4292 E(cd)
4293 {"vpcomw", _128|_0f24, {Vo, VVo, Wo, Ib}},
4294 E(ce)
4295 {"vpcomd", _128|_0f24, {Vo, VVo, Wo, Ib}},
4296 E(cf)
4297 {"vpcomq", _128|_0f24, {Vo, VVo, Wo, Ib}},
4298 E(d0)
4299 {"vaddsubpd", _128|_66|_0f, {Vo, VVo, Wo}},
4300 {"vaddsubpd", _256|_66|_0f, {Yy, YVy, Xy}},
4301 {"vaddsubss", _128|_f2|_0f, {Vo, VVo, Wo}},
4302 {"vaddsubss", _256|_f2|_0f, {Yy, YVy, Xy}},
4303 E(d1)
4304 {"vpsrlw", _128|_66|_0f, {Vo, VVo, Wo}},
4305 {"vpsrlw", _256|_66|_0f, {Yy, YVy, Xy}},
4306 {"vphaddubw", _128|_0f25, {Vo, Wo}},
4307 E(d2)
4308 {"vpsrld", _128|_66|_0f, {Vo, VVo, Wo}},
4309 {"vpsrld", _256|_66|_0f, {Yy, YVy, Xy}},
4310 {"vphaddubd", _128|_0f25, {Vo, Wo}},
4311 E(d3)
4312 {"vpsrlq", _128|_66|_0f, {Vo, VVo, Wo}},
4313 {"vpsrlq", _256|_66|_0f, {Yy, YVy, Xy}},
4314 {"vphaddubq", _128|_0f25, {Vo, Wo}},
4315 E(d4)
4316 {"vpaddq", _128|_66|_0f, {Vo, VVo, Wo}},
4317 {"vpaddq", _256|_66|_0f, {Yy, YVy, Xy}},
4318 E(d5)
4319 {"vpmullw", _128|_66|_0f, {Vo, VVo, Wo}},
4320 {"vpmullw", _256|_66|_0f, {Yy, YVy, Xy}},
4321 E(d6)
4322 {"vmovq", _128|_66|_0f, {Wq, Vo}},
4323 {"vphadduwd", _128|_0f25, {Vo, Wo}},
4324 E(d7)
4325 {"vpmovmskb", _128|_66|_0f, {Gd, VRo}},
4326 {"vpmovmskb", _256|_66|_0f, {Gq, YRy}},
4327 {"vphadduwq", _128|_0f25, {Vo, Wo}},
4328 {"vphaddwq", _128|_0f25, {Vo, Wo}}, // FIXME
4329 E(d8)
4330 {"vpsubusb", _128|_66|_0f, {Vo, VVo, Wo}},
4331 {"vpsubusb", _256|_66|_0f, {Yy, YVy, Xy}},
4332 E(d9)
4333 {"vpsubusw", _128|_66|_0f, {Vo, VVo, Wo}},
4334 {"vpsubusw", _256|_66|_0f, {Yy, YVy, Xy}},
4335 E(da)
4336 {"vpminub", _128|_66|_0f, {Vo, VVo, Wo}},
4337 {"vpminub", _256|_66|_0f, {Yy, YVy, Xy}},
4338 E(db)
4339 {"vpand", _128|_66|_0f, {Vo, VVo, Wo}},
4340 {"vpand", _256|_66|_0f, {Yy, YVy, Xy}},
4341 {"vaesimc", _128|_66|_0f38, {Vo, Wo}},
4342 {"vphaddudq", _128|_0f25, {Vo, Wo}},
4343 E(dc)
4344 {"vpaddusb", _128|_66|_0f, {Vo, VVo, Wo}},
4345 {"vpaddusb", _256|_66|_0f, {Yy, YVy, Xy}},
4346 {"vaesenc", _128|_66|_0f38, {Vo, VVo, Wo}},
4347 E(dd)
4348 {"vpaddusw", _128|_66|_0f, {Vo, VVo, Wo}},
4349 {"vpaddusw", _256|_66|_0f, {Yy, YVy, Xy}},
4350 {"vaesenclast", _128|_66|_0f38, {Vo, VVo, Wo}},
4351 E(de)
4352 {"vpmaxub", _128|_66|_0f, {Vo, VVo, Wo}},
4353 {"vpmaxub", _256|_66|_0f, {Yy, YVy, Xy}},
4354 {"vaesdec", _128|_66|_0f38, {Vo, VVo, Wo}},
4355 E(df)
4356 {"vpandn", _128|_66|_0f, {Vo, VVo, Wo}},
4357 {"vpandn", _256|_66|_0f, {Yy, YVy, Xy}},
4358 {"vaesdeclast", _128|_66|_0f38, {Vo, VVo, Wo}},
4359 {"vaeskeygenassist", _128|_66|_0f3a, {Vo, Wo, Ib}},
4360 E(e0)
4361 {"vpavgb", _128|_66|_0f, {Vo, VVo, Wo}},
4362 {"vpavgb", _256|_66|_0f, {Yy, YVy, Xy}},
4363 E(e1)
4364 {"vpsraw", _128|_66|_0f, {Vo, VVo, Wo}},
4365 {"vphsubbw", _128|_0f25, {Vo, Wo}},
4366 E(e2)
4367 {"vpsrad", _128|_66|_0f, {Vo, VVo, Wo}},
4368 {"vphsubwd", _128|_0f25, {Vo, Wo}},
4369 E(e3)
4370 {"vpavgw", _128|_66|_0f, {Vo, VVo, Wo}},
4371 {"vpavgw", _256|_66|_0f, {Yy, YVy, Xy}},
4372 {"vphsubdq", _128|_0f25, {Vo, Wo}},
4373 E(e4)
4374 {"vpmulhuw", _128|_66|_0f, {Vo, VVo, Wo}},
4375 {"vpmulhuw", _256|_66|_0f, {Yy, YVy, Xy}},
4376 E(e5)
4377 {"vpmulhw", _128|_66|_0f, {Vo, VVo, Wo}},
4378 {"vpmulhw", _256|_66|_0f, {Yy, YVy, Xy}},
4379 E(e6)
4380 {"vcvtdq2pd", _128|_f3|_0f, {Vo, Wo}},
4381 {"vcvtdq2pd", _256|_f3|_0f, {Yy, Xy}},
4382 {"vcvtpd2dq", _128|_f2|_0f, {Vo, Wo}},
4383 {"vcvtpd2dq", _256|_f2|_0f, {Yy, Xy}},
4384 {"vcvttpd2dq", _128|_66|_0f, {Vo, Wo}},
4385 {"vcvttpd2dq", _256|_66|_0f, {Yy, Xy}},
4386 E(e7)
4387 {"vmovntdq", _128|_66|_0f, {Mo, Vo}},
4388 {"vmovntdq", _256|_66|_0f, {My, Yy}},
4389 E(e8)
4390 {"vpsubsb", _128|_66|_0f, {Vo, VVo, Wo}},
4391 {"vpsubsb", _256|_66|_0f, {Yy, YVy, Xy}},
4392 E(e9)
4393 {"vpsubsw", _128|_66|_0f, {Vo, VVo, Wo}},
4394 {"vpsubsw", _256|_66|_0f, {Yy, YVy, Xy}},
4395 E(ea)
4396 {"vpminsw", _128|_66|_0f, {Vo, VVo, Wo}},
4397 {"vpminsw", _256|_66|_0f, {Yy, YVy, Xy}},
4398 E(eb)
4399 {"vpor", _128|_66|_0f, {Vo, VVo, Wo}},
4400 {"vpor", _256|_66|_0f, {Yy, YVy, Xy}},
4401 E(ec)
4402 {"vpaddsb", _128|_66|_0f, {Vo, VVo, Wo}},
4403 {"vpaddsb", _256|_66|_0f, {Yy, YVy, Xy}},
4404 {"vpcomub", _128|_0f24, {Vo, VVo, Wo, Ib}},
4405 E(ed)
4406 {"vpaddsw", _128|_66|_0f, {Vo, VVo, Wo}},
4407 {"vpaddsw", _256|_66|_0f, {Yy, YVy, Xy}},
4408 {"vpcomuw", _128|_0f24, {Vo, VVo, Wo, Ib}},
4409 E(ee)
4410 {"vpmaxsw", _128|_66|_0f, {Vo, VVo, Wo}},
4411 {"vpmaxsw", _256|_66|_0f, {Yy, YVy, Xy}},
4412 {"vpcomud", _128|_0f24, {Vo, VVo, Wo, Ib}},
4413 E(ef)
4414 {"vpxor", _128|_66|_0f, {Vo, VVo, Wo}},
4415 {"vpxor", _256|_66|_0f, {Yy, YVy, Xy}},
4416 {"vpcomuq", _128|_0f24, {Vo, VVo, Wo, Ib}},
4417 E(f0)
4418 {"vlddqu", _128|_f2|_0f, {Vo, Mo}},
4419 {"vlddqu", _256|_f2|_0f, {Yy, My}},
4420 {"rorx", _128|_f2|_0f3a|W0, {Gd, Ed, Ib}},
4421 {"rorx", _128|_f2|_0f3a|W1, {Gq, Eq, Ib}},
4422 E(f1)
4423 {"vpsllw", _128|_66|_0f, {Vo, VVo, Wo}},
4424 E(f2)
4425 {"vpslld", _128|_66|_0f, {Vo, VVo, Wo}},
4426 {"andn", _128|_0f38|W0, {Gd, RVd, Ed}},
4427 {"andn", _128|_0f38|W1, {Gq, RVq, Eq}},
4428 E(f3)
4429 {0, _128|_0f38|W0, {SPECIAL_TYPE_GROUP, GROUP_0F38_F3}},
4430 {0, _128|_0f38|W1, {SPECIAL_TYPE_GROUP, GROUP_0F38_F3_W}},
4431 {"vpsllq", _128|_66|_0f, {Vo, VVo, Wo}},
4432 E(f4)
4433 {"vpmuludq", _128|_66|_0f, {Vo, VVo, Wo}},
4434 {"vpmuludq", _256|_66|_0f, {Yy, YVy, Xy}},
4435 E(f5)
4436 {"vpmaddwd", _128|_66|_0f, {Vo, VVo, Wo}},
4437 {"vpmaddwd", _256|_66|_0f, {Yy, YVy, Xy}},
4438 {"bzhi", _128|_0f38|W0, {Gd, RVd, Ed}},
4439 {"bzhi", _128|_0f38|W1, {Gq, RVq, Eq}},
4440 {"pdep", _128|_f2|_0f38|W0, {Gd, RVd, Ed}},
4441 {"pdep", _128|_f2|_0f38|W1, {Gq, RVq, Eq}},
4442 {"pext", _128|_f3|_0f38|W0, {Gd, RVd, Ed}},
4443 {"pext", _128|_f3|_0f38|W1, {Gq, RVq, Eq}},
4444 E(f6)
4445 {"vpsadbw", _128|_66|_0f, {Vo, VVo, Wo}},
4446 {"vpsadbw", _256|_66|_0f, {Yy, YVy, Xy}},
4447 {"mulx", _128|_f2|_0f38|W0, {Gd, RVd, Ed}},
4448 {"mulx", _128|_f2|_0f38|W1, {Gq, RVq, Eq}},
4449 E(f7)
4450 {"vmaskmovdqu", _128|_66|_0f, {Vo, VRo}},
4451 {"bextr", _128|_0f38|W0, {Gd, RVd, Ed}},
4452 {"bextr", _128|_0f38|W1, {Gq, RVq, Eq}},
4453 {"sarx", _128|_f3|_0f38|W0, {Gd, RVd, Ed}},
4454 {"sarx", _128|_f3|_0f38|W1, {Gq, RVq, Eq}},
4455 {"shlx", _128|_66|_0f38|W0, {Gd, RVd, Ed}},
4456 {"shlx", _128|_66|_0f38|W1, {Gq, RVq, Eq}},
4457 {"shlx", _128|_f2|_0f38|W0, {Gd, RVd, Ed}},
4458 {"shlx", _128|_f2|_0f38|W1, {Gq, RVq, Eq}},
4459 E(f8)
4460 {"vpsubb", _128|_66|_0f, {Vo, VVo, Wo}},
4461 {"vpsubb", _256|_66|_0f, {Yy, YVy, Xy}},
4462 E(f9)
4463 {"vpsubw", _128|_66|_0f, {Vo, VVo, Wo}},
4464 {"vpsubw", _256|_66|_0f, {Yy, YVy, Xy}},
4465 E(fa)
4466 {"vpsubd", _128|_66|_0f, {Vo, VVo, Wo}},
4467 {"vpsubd", _256|_66|_0f, {Yy, YVy, Xy}},
4468 E(fb)
4469 {"vpsubq", _128|_66|_0f, {Vo, VVo, Wo}},
4470 {"vpsubq", _256|_66|_0f, {Yy, YVy, Xy}},
4471 E(fc)
4472 {"vpaddb", _128|_66|_0f, {Vo, VVo, Wo}},
4473 {"vpaddb", _256|_66|_0f, {Yy, YVy, Xy}},
4474 E(fd)
4475 {"vpaddw", _128|_66|_0f, {Vo, VVo, Wo}},
4476 {"vpaddw", _256|_66|_0f, {Yy, YVy, Xy}},
4477 E(fe)
4478 {"vpaddd", _128|_66|_0f, {Vo, VVo, Wo}},
4479 {"vpaddd", _256|_66|_0f, {Yy, YVy, Xy}},
4480 Elast
4481 
4482 x86opc_vex_insn x86_group_vex_insns[][8] = {
4483 /* 0 - GROUP_0FAE */
4484 {
4485 {0},
4486 {0},
4487 {"vldmxcsr", _0f, {Md}},
4488 {"vstmxcsr", _0f, {Md}},
4489 {0},
4490 {0},
4491 {0},
4492 {0},
4493 },
4494 /* 1 - GROUP_660F71 */
4495 {
4496 {0},
4497 {0},
4498 {"vpsrlw", _128|_66|_0f, {VVo, VRo, Ib}},
4499 {0},
4500 {"vpsraw", _128|_66|_0f, {VVo, VRo, Ib}},
4501 {0},
4502 {"vpsllw", _128|_66|_0f, {VVo, VRo, Ib}},
4503 {0},
4504 },
4505 /* 2 - GROUP_660F72 */
4506 {
4507 {0},
4508 {0},
4509 {"vpsrld", _128|_66|_0f, {VVo, VRo, Ib}},
4510 {0},
4511 {"vpsrad", _128|_66|_0f, {VVo, VRo, Ib}},
4512 {0},
4513 {"vpslld", _128|_66|_0f, {VVo, VRo, Ib}},
4514 {0},
4515 },
4516 /* 3 - GROUP_660F73 */
4517 {
4518 {0},
4519 {0},
4520 {"vpsrlq", _128|_66|_0f, {VVo, VRo, Ib}},
4521 {"vpsrldq", _128|_66|_0f, {VVo, VRo, Ib}},
4522 {0},
4523 {0},
4524 {"vpsllq", _128|_66|_0f, {VVo, VRo, Ib}},
4525 {"vpslldq", _128|_66|_0f, {VVo, VRo, Ib}},
4526 },
4527 /* 4 - GROUP_0F25_12 */
4528 {
4529 {"llwpcb", _128|_0f25|W0, {Rw}},
4530 {"slwpcb", _128|_0f25|W0, {Rw}},
4531 {0},
4532 {0},
4533 {0},
4534 {0},
4535 {0},
4536 {0},
4537 },
4538 /* 5 - GROUP_0F25_12_L */
4539 {
4540 {"llwpcb", _256|_0f25|W0, {Rd}},
4541 {"slwpcb", _256|_0f25|W0, {Rd}},
4542 {0},
4543 {0},
4544 {0},
4545 {0},
4546 {0},
4547 {0},
4548 },
4549 /* 6 - GROUP_0F25_12_W */
4550 {
4551 {"llwpcb", _128|_0f25|W1, {Rq}},
4552 {"slwpcb", _128|_0f25|W1, {Rq}},
4553 {0},
4554 {0},
4555 {0},
4556 {0},
4557 {0},
4558 {0},
4559 },
4560 /* 7 - GROUP_0FA_12 */
4561 {
4562 {"lwpins", _128|_0fA, {RVw, Ed, Iw}},
4563 {"lwpval", _128|_0fA, {RVw, Ed, Iw}},
4564 {0},
4565 {0},
4566 {0},
4567 {0},
4568 {0},
4569 {0},
4570 },
4571 /* 8 - GROUP_0FA_12_L */
4572 {
4573 {"lwpins", _256|_0fA, {RVd, Ed, Id}},
4574 {"lwpval", _256|_0fA, {RVd, Ed, Id}},
4575 {0},
4576 {0},
4577 {0},
4578 {0},
4579 {0},
4580 {0},
4581 },
4582 /* 9 - GROUP_0FA_12_W */
4583 {
4584 {"lwpins", _128|_0fA|W1, {RVq, Ed, Id}},
4585 {"lwpval", _128|_0fA|W1, {RVq, Ed, Id}},
4586 {0},
4587 {0},
4588 {0},
4589 {0},
4590 {0},
4591 {0},
4592 },
4593 /* 12 - GROUP_0F38_F3 */
4594 {
4595 {0},
4596 {"blsr", _128|_0f38|W0, {RVd, Ed}},
4597 {"blsmsk", _128|_0f38|W0, {RVd, Ed}},
4598 {"blsi", _128|_0f38|W0, {RVd, Ed}},
4599 {0},
4600 {0},
4601 {0},
4602 {0},
4603 },
4604 /* 11 - GROUP_0F38_F3_W */
4605 {
4606 {0},
4607 {"blsr", _128|_0f38|W1, {RVq, Eq}},
4608 {"blsmsk", _128|_0f38|W1, {RVq, Eq}},
4609 {"blsi", _128|_0f38|W1, {RVq, Eq}},
4610 {0},
4611 {0},
4612 {0},
4613 {0},
4614 },
4615 };
4616 
4617 x86opc_vex_insn *x86_vex_insns[256] = {
4618 v00, v01, v02, v03, v04, v05, v06, v07,
4619 v08, v09, v0a, v0b, v0c, v0d, v0e, v0f,
4620 v10, v11, v12, v13, v14, v15, v16, v17,
4621 v18, v19, v1a,   0, v1c, v1d, v1e,   0,
4622 v20, v21, v22, v23, v24, v25,   0,   0,
4623 v28, v29, v2a, v2b, v2c, v2d, v2e, v2f,
4624 v30, v31, v32, v33, v34, v35, v36, v37,
4625 v38, v39, v3a, v3b, v3c, v3d, v3e, v3f,
4626 v40, v41, v42,   0, v44, v45, v46, v47,
4627 v48, v49, v4a, v4b, v4c,   0,   0,   0,
4628 v50, v51, v52, v53, v54, v55, v56, v57,
4629 v58, v59, v5a, v5b, v5c, v5d, v5e, v5f,
4630 v60, v61, v62, v63, v64, v65, v66, v67,
4631 v68, v69, v6a, v6b, v6c, v6d, v6e, v6f,
4632 v70, v71, v72, v73, v74, v75, v76, v77,
4633 v78, v79, v7a, v7b, v7c, v7d, v7e, v7f,
4634 v80, v81, v82, v83,   0, v85, v86, v87,
4635   0,   0,   0,   0, v8c,   0, v8e, v8f,
4636 v90, v91, v92, v93, v94, v95, v96, v97,
4637 v98, v99, v9a, v9b, v9c, v9d, v9e, v9f,
4638 va0, va1, va2, va3,   0,   0, va6, va7,
4639 va8, va9, vaa, vab, vac, vad, vae, vaf,
4640   0,   0,   0,   0,   0,   0, vb6, vb7,
4641 vb8, vb9, vba, vbb, vbc, vbd, vbe, vbf,
4642 vc0, vc1, vc2, vc3, vc4, vc5, vc6, vc7,
4643   0,   0,   0, vcb, vcc, vcd, vce, vcf,
4644 vd0, vd1, vd2, vd3, vd4, vd5, vd6, vd7,
4645 vd8, vd9, vda, vdb, vdc, vdd, vde, vdf,
4646 ve0, ve1, ve2, ve3, ve4, ve5, ve6, ve7,
4647 ve8, ve9, vea, veb, vec, ved, vee, vef,
4648 vf0, vf1, vf2, vf3, vf4, vf5, vf6, vf7,
4649 vf8, vf9, vfa, vfb, vfc, vfd, vfe,   0,
4650 };
4651