1static const struct dis386 evex_table[][256] = {
2  /* EVEX_0F */
3  {
4    /* 00 */
5    { Bad_Opcode },
6    { Bad_Opcode },
7    { Bad_Opcode },
8    { Bad_Opcode },
9    { Bad_Opcode },
10    { Bad_Opcode },
11    { Bad_Opcode },
12    { Bad_Opcode },
13    /* 08 */
14    { Bad_Opcode },
15    { Bad_Opcode },
16    { Bad_Opcode },
17    { Bad_Opcode },
18    { Bad_Opcode },
19    { Bad_Opcode },
20    { Bad_Opcode },
21    { Bad_Opcode },
22    /* 10 */
23    { PREFIX_TABLE (PREFIX_EVEX_0F10) },
24    { PREFIX_TABLE (PREFIX_EVEX_0F11) },
25    { PREFIX_TABLE (PREFIX_EVEX_0F12) },
26    { MOD_TABLE (MOD_EVEX_0F13) },
27    { "vunpcklpX",	{ XM, Vex, EXx }, PREFIX_OPCODE },
28    { "vunpckhpX",	{ XM, Vex, EXx }, PREFIX_OPCODE },
29    { PREFIX_TABLE (PREFIX_EVEX_0F16) },
30    { MOD_TABLE (MOD_EVEX_0F17) },
31    /* 18 */
32    { Bad_Opcode },
33    { Bad_Opcode },
34    { Bad_Opcode },
35    { Bad_Opcode },
36    { Bad_Opcode },
37    { Bad_Opcode },
38    { Bad_Opcode },
39    { Bad_Opcode },
40    /* 20 */
41    { Bad_Opcode },
42    { Bad_Opcode },
43    { Bad_Opcode },
44    { Bad_Opcode },
45    { Bad_Opcode },
46    { Bad_Opcode },
47    { Bad_Opcode },
48    { Bad_Opcode },
49    /* 28 */
50    { "vmovapX",	{ XM, EXx }, PREFIX_OPCODE },
51    { "vmovapX",	{ EXxS, XM }, PREFIX_OPCODE },
52    { PREFIX_TABLE (PREFIX_EVEX_0F2A) },
53    { MOD_TABLE (MOD_EVEX_0F2B) },
54    { PREFIX_TABLE (PREFIX_VEX_0F2C) },
55    { PREFIX_TABLE (PREFIX_VEX_0F2D) },
56    { PREFIX_TABLE (PREFIX_VEX_0F2E) },
57    { PREFIX_TABLE (PREFIX_VEX_0F2F) },
58    /* 30 */
59    { Bad_Opcode },
60    { Bad_Opcode },
61    { Bad_Opcode },
62    { Bad_Opcode },
63    { Bad_Opcode },
64    { Bad_Opcode },
65    { Bad_Opcode },
66    { Bad_Opcode },
67    /* 38 */
68    { Bad_Opcode },
69    { Bad_Opcode },
70    { Bad_Opcode },
71    { Bad_Opcode },
72    { Bad_Opcode },
73    { Bad_Opcode },
74    { Bad_Opcode },
75    { Bad_Opcode },
76    /* 40 */
77    { Bad_Opcode },
78    { Bad_Opcode },
79    { Bad_Opcode },
80    { Bad_Opcode },
81    { Bad_Opcode },
82    { Bad_Opcode },
83    { Bad_Opcode },
84    { Bad_Opcode },
85    /* 48 */
86    { Bad_Opcode },
87    { Bad_Opcode },
88    { Bad_Opcode },
89    { Bad_Opcode },
90    { Bad_Opcode },
91    { Bad_Opcode },
92    { Bad_Opcode },
93    { Bad_Opcode },
94    /* 50 */
95    { Bad_Opcode },
96    { PREFIX_TABLE (PREFIX_EVEX_0F51) },
97    { Bad_Opcode },
98    { Bad_Opcode },
99    { "vandpX",	{ XM, Vex, EXx }, PREFIX_OPCODE },
100    { "vandnpX",	{ XM, Vex, EXx }, PREFIX_OPCODE },
101    { "vorpX",	{ XM, Vex, EXx }, PREFIX_OPCODE },
102    { "vxorpX",	{ XM, Vex, EXx }, PREFIX_OPCODE },
103    /* 58 */
104    { PREFIX_TABLE (PREFIX_EVEX_0F58) },
105    { PREFIX_TABLE (PREFIX_EVEX_0F59) },
106    { PREFIX_TABLE (PREFIX_EVEX_0F5A) },
107    { PREFIX_TABLE (PREFIX_EVEX_0F5B) },
108    { PREFIX_TABLE (PREFIX_EVEX_0F5C) },
109    { PREFIX_TABLE (PREFIX_EVEX_0F5D) },
110    { PREFIX_TABLE (PREFIX_EVEX_0F5E) },
111    { PREFIX_TABLE (PREFIX_EVEX_0F5F) },
112    /* 60 */
113    { "vpunpcklbw",	{ XM, Vex, EXx }, PREFIX_DATA },
114    { "vpunpcklwd",	{ XM, Vex, EXx }, PREFIX_DATA },
115    { VEX_W_TABLE (EVEX_W_0F62) },
116    { "vpacksswb",	{ XM, Vex, EXx }, PREFIX_DATA },
117    { "vpcmpgtb",	{ XMask, Vex, EXx }, PREFIX_DATA },
118    { "vpcmpgtw",	{ XMask, Vex, EXx }, PREFIX_DATA },
119    { VEX_W_TABLE (EVEX_W_0F66) },
120    { "vpackuswb",	{ XM, Vex, EXx }, PREFIX_DATA },
121    /* 68 */
122    { "vpunpckhbw",	{ XM, Vex, EXx }, PREFIX_DATA },
123    { "vpunpckhwd",	{ XM, Vex, EXx }, PREFIX_DATA },
124    { VEX_W_TABLE (EVEX_W_0F6A) },
125    { VEX_W_TABLE (EVEX_W_0F6B) },
126    { VEX_W_TABLE (EVEX_W_0F6C) },
127    { VEX_W_TABLE (EVEX_W_0F6D) },
128    { EVEX_LEN_TABLE (EVEX_LEN_0F6E) },
129    { PREFIX_TABLE (PREFIX_EVEX_0F6F) },
130    /* 70 */
131    { PREFIX_TABLE (PREFIX_EVEX_0F70) },
132    { REG_TABLE (REG_EVEX_0F71) },
133    { REG_TABLE (REG_EVEX_0F72) },
134    { REG_TABLE (REG_EVEX_0F73) },
135    { "vpcmpeqb",	{ XMask, Vex, EXx }, PREFIX_DATA },
136    { "vpcmpeqw",	{ XMask, Vex, EXx }, PREFIX_DATA },
137    { VEX_W_TABLE (EVEX_W_0F76) },
138    { Bad_Opcode },
139    /* 78 */
140    { PREFIX_TABLE (PREFIX_EVEX_0F78) },
141    { PREFIX_TABLE (PREFIX_EVEX_0F79) },
142    { PREFIX_TABLE (PREFIX_EVEX_0F7A) },
143    { PREFIX_TABLE (PREFIX_EVEX_0F7B) },
144    { Bad_Opcode },
145    { Bad_Opcode },
146    { PREFIX_TABLE (PREFIX_EVEX_0F7E) },
147    { PREFIX_TABLE (PREFIX_EVEX_0F7F) },
148    /* 80 */
149    { Bad_Opcode },
150    { Bad_Opcode },
151    { Bad_Opcode },
152    { Bad_Opcode },
153    { Bad_Opcode },
154    { Bad_Opcode },
155    { Bad_Opcode },
156    { Bad_Opcode },
157    /* 88 */
158    { Bad_Opcode },
159    { Bad_Opcode },
160    { Bad_Opcode },
161    { Bad_Opcode },
162    { Bad_Opcode },
163    { Bad_Opcode },
164    { Bad_Opcode },
165    { Bad_Opcode },
166    /* 90 */
167    { Bad_Opcode },
168    { Bad_Opcode },
169    { Bad_Opcode },
170    { Bad_Opcode },
171    { Bad_Opcode },
172    { Bad_Opcode },
173    { Bad_Opcode },
174    { Bad_Opcode },
175    /* 98 */
176    { Bad_Opcode },
177    { Bad_Opcode },
178    { Bad_Opcode },
179    { Bad_Opcode },
180    { Bad_Opcode },
181    { Bad_Opcode },
182    { Bad_Opcode },
183    { Bad_Opcode },
184    /* A0 */
185    { Bad_Opcode },
186    { Bad_Opcode },
187    { Bad_Opcode },
188    { Bad_Opcode },
189    { Bad_Opcode },
190    { Bad_Opcode },
191    { Bad_Opcode },
192    { Bad_Opcode },
193    /* A8 */
194    { Bad_Opcode },
195    { Bad_Opcode },
196    { Bad_Opcode },
197    { Bad_Opcode },
198    { Bad_Opcode },
199    { Bad_Opcode },
200    { Bad_Opcode },
201    { Bad_Opcode },
202    /* B0 */
203    { Bad_Opcode },
204    { Bad_Opcode },
205    { Bad_Opcode },
206    { Bad_Opcode },
207    { Bad_Opcode },
208    { Bad_Opcode },
209    { Bad_Opcode },
210    { Bad_Opcode },
211    /* B8 */
212    { Bad_Opcode },
213    { Bad_Opcode },
214    { Bad_Opcode },
215    { Bad_Opcode },
216    { Bad_Opcode },
217    { Bad_Opcode },
218    { Bad_Opcode },
219    { Bad_Opcode },
220    /* C0 */
221    { Bad_Opcode },
222    { Bad_Opcode },
223    { PREFIX_TABLE (PREFIX_EVEX_0FC2) },
224    { Bad_Opcode },
225    { EVEX_LEN_TABLE (EVEX_LEN_0FC4) },
226    { EVEX_LEN_TABLE (EVEX_LEN_0FC5) },
227    { "vshufpX",	{ XM, Vex, EXx, Ib }, PREFIX_OPCODE },
228    { Bad_Opcode },
229    /* C8 */
230    { Bad_Opcode },
231    { Bad_Opcode },
232    { Bad_Opcode },
233    { Bad_Opcode },
234    { Bad_Opcode },
235    { Bad_Opcode },
236    { Bad_Opcode },
237    { Bad_Opcode },
238    /* D0 */
239    { Bad_Opcode },
240    { "vpsrlw",		{ XM, Vex, EXxmm }, PREFIX_DATA },
241    { VEX_W_TABLE (EVEX_W_0FD2) },
242    { VEX_W_TABLE (EVEX_W_0FD3) },
243    { VEX_W_TABLE (EVEX_W_0FD4) },
244    { "vpmullw",	{ XM, Vex, EXx }, PREFIX_DATA },
245    { EVEX_LEN_TABLE (EVEX_LEN_0FD6) },
246    { Bad_Opcode },
247    /* D8 */
248    { "vpsubusb",	{ XM, Vex, EXx }, PREFIX_DATA },
249    { "vpsubusw",	{ XM, Vex, EXx }, PREFIX_DATA },
250    { "vpminub",	{ XM, Vex, EXx }, PREFIX_DATA },
251    { "vpand%DQ",	{ XM, Vex, EXx }, PREFIX_DATA },
252    { "vpaddusb",	{ XM, Vex, EXx }, PREFIX_DATA },
253    { "vpaddusw",	{ XM, Vex, EXx }, PREFIX_DATA },
254    { "vpmaxub",	{ XM, Vex, EXx }, PREFIX_DATA },
255    { "vpandn%DQ",	{ XM, Vex, EXx }, PREFIX_DATA },
256    /* E0 */
257    { "vpavgb",		{ XM, Vex, EXx }, PREFIX_DATA },
258    { "vpsraw",		{ XM, Vex, EXxmm }, PREFIX_DATA },
259    { "vpsra%DQ",	{ XM, Vex, EXxmm }, PREFIX_DATA },
260    { "vpavgw",		{ XM, Vex, EXx }, PREFIX_DATA },
261    { "vpmulhuw",	{ XM, Vex, EXx }, PREFIX_DATA },
262    { "vpmulhw",	{ XM, Vex, EXx }, PREFIX_DATA },
263    { PREFIX_TABLE (PREFIX_EVEX_0FE6) },
264    { VEX_W_TABLE (EVEX_W_0FE7) },
265    /* E8 */
266    { "vpsubsb",	{ XM, Vex, EXx }, PREFIX_DATA },
267    { "vpsubsw",	{ XM, Vex, EXx }, PREFIX_DATA },
268    { "vpminsw",	{ XM, Vex, EXx }, PREFIX_DATA },
269    { "vpor%DQ",	{ XM, Vex, EXx }, PREFIX_DATA },
270    { "vpaddsb",	{ XM, Vex, EXx }, PREFIX_DATA },
271    { "vpaddsw",	{ XM, Vex, EXx }, PREFIX_DATA },
272    { "vpmaxsw",	{ XM, Vex, EXx }, PREFIX_DATA },
273    { "vpxor%DQ",	{ XM, Vex, EXx }, PREFIX_DATA },
274    /* F0 */
275    { Bad_Opcode },
276    { "vpsllw",		{ XM, Vex, EXxmm }, PREFIX_DATA },
277    { VEX_W_TABLE (EVEX_W_0FF2) },
278    { VEX_W_TABLE (EVEX_W_0FF3) },
279    { VEX_W_TABLE (EVEX_W_0FF4) },
280    { "vpmaddwd",	{ XM, Vex, EXx }, PREFIX_DATA },
281    { "vpsadbw",	{ XM, Vex, EXx }, PREFIX_DATA },
282    { Bad_Opcode },
283    /* F8 */
284    { "vpsubb",		{ XM, Vex, EXx }, PREFIX_DATA },
285    { "vpsubw",		{ XM, Vex, EXx }, PREFIX_DATA },
286    { VEX_W_TABLE (EVEX_W_0FFA) },
287    { VEX_W_TABLE (EVEX_W_0FFB) },
288    { "vpaddb",		{ XM, Vex, EXx }, PREFIX_DATA },
289    { "vpaddw",		{ XM, Vex, EXx }, PREFIX_DATA },
290    { VEX_W_TABLE (EVEX_W_0FFE) },
291    { Bad_Opcode },
292  },
293  /* EVEX_0F38 */
294  {
295    /* 00 */
296    { "vpshufb",	{ XM, Vex, EXx }, PREFIX_DATA },
297    { Bad_Opcode },
298    { Bad_Opcode },
299    { Bad_Opcode },
300    { "vpmaddubsw",	{ XM, Vex, EXx }, PREFIX_DATA },
301    { Bad_Opcode },
302    { Bad_Opcode },
303    { Bad_Opcode },
304    /* 08 */
305    { Bad_Opcode },
306    { Bad_Opcode },
307    { Bad_Opcode },
308    { "vpmulhrsw",	{ XM, Vex, EXx }, PREFIX_DATA },
309    { VEX_W_TABLE (VEX_W_0F380C) },
310    { VEX_W_TABLE (EVEX_W_0F380D) },
311    { Bad_Opcode },
312    { Bad_Opcode },
313    /* 10 */
314    { PREFIX_TABLE (PREFIX_EVEX_0F3810) },
315    { PREFIX_TABLE (PREFIX_EVEX_0F3811) },
316    { PREFIX_TABLE (PREFIX_EVEX_0F3812) },
317    { PREFIX_TABLE (PREFIX_EVEX_0F3813) },
318    { PREFIX_TABLE (PREFIX_EVEX_0F3814) },
319    { PREFIX_TABLE (PREFIX_EVEX_0F3815) },
320    { EVEX_LEN_TABLE (EVEX_LEN_0F3816) },
321    { Bad_Opcode },
322    /* 18 */
323    { VEX_W_TABLE (VEX_W_0F3818) },
324    { VEX_W_TABLE (EVEX_W_0F3819) },
325    { VEX_W_TABLE (EVEX_W_0F381A) },
326    { VEX_W_TABLE (EVEX_W_0F381B) },
327    { "vpabsb",		{ XM, EXx }, PREFIX_DATA },
328    { "vpabsw",		{ XM, EXx }, PREFIX_DATA },
329    { VEX_W_TABLE (EVEX_W_0F381E) },
330    { VEX_W_TABLE (EVEX_W_0F381F) },
331    /* 20 */
332    { PREFIX_TABLE (PREFIX_EVEX_0F3820) },
333    { PREFIX_TABLE (PREFIX_EVEX_0F3821) },
334    { PREFIX_TABLE (PREFIX_EVEX_0F3822) },
335    { PREFIX_TABLE (PREFIX_EVEX_0F3823) },
336    { PREFIX_TABLE (PREFIX_EVEX_0F3824) },
337    { PREFIX_TABLE (PREFIX_EVEX_0F3825) },
338    { PREFIX_TABLE (PREFIX_EVEX_0F3826) },
339    { PREFIX_TABLE (PREFIX_EVEX_0F3827) },
340    /* 28 */
341    { PREFIX_TABLE (PREFIX_EVEX_0F3828) },
342    { PREFIX_TABLE (PREFIX_EVEX_0F3829) },
343    { PREFIX_TABLE (PREFIX_EVEX_0F382A) },
344    { VEX_W_TABLE (EVEX_W_0F382B) },
345    { "vscalefp%XW",	{ XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
346    { "vscalefs%XW",	{ XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA },
347    { Bad_Opcode },
348    { Bad_Opcode },
349    /* 30 */
350    { PREFIX_TABLE (PREFIX_EVEX_0F3830) },
351    { PREFIX_TABLE (PREFIX_EVEX_0F3831) },
352    { PREFIX_TABLE (PREFIX_EVEX_0F3832) },
353    { PREFIX_TABLE (PREFIX_EVEX_0F3833) },
354    { PREFIX_TABLE (PREFIX_EVEX_0F3834) },
355    { PREFIX_TABLE (PREFIX_EVEX_0F3835) },
356    { EVEX_LEN_TABLE (EVEX_LEN_0F3836) },
357    { VEX_W_TABLE (EVEX_W_0F3837) },
358    /* 38 */
359    { PREFIX_TABLE (PREFIX_EVEX_0F3838) },
360    { PREFIX_TABLE (PREFIX_EVEX_0F3839) },
361    { PREFIX_TABLE (PREFIX_EVEX_0F383A) },
362    { "vpminu%DQ",	{ XM, Vex, EXx }, PREFIX_DATA },
363    { "vpmaxsb",	{ XM, Vex, EXx }, PREFIX_DATA },
364    { "vpmaxs%DQ",	{ XM, Vex, EXx }, PREFIX_DATA },
365    { "vpmaxuw",	{ XM, Vex, EXx }, PREFIX_DATA },
366    { "vpmaxu%DQ",	{ XM, Vex, EXx }, PREFIX_DATA },
367    /* 40 */
368    { "vpmull%DQ",	{ XM, Vex, EXx }, PREFIX_DATA },
369    { Bad_Opcode },
370    { "vgetexpp%XW",	{ XM, EXx, EXxEVexS }, PREFIX_DATA },
371    { "vgetexps%XW",	{ XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS }, PREFIX_DATA },
372    { "vplzcnt%DQ",	{ XM, EXx }, PREFIX_DATA },
373    { "vpsrlv%DQ",	{ XM, Vex, EXx }, PREFIX_DATA },
374    { "vpsrav%DQ",	{ XM, Vex, EXx }, PREFIX_DATA },
375    { "vpsllv%DQ",	{ XM, Vex, EXx }, PREFIX_DATA },
376    /* 48 */
377    { Bad_Opcode },
378    { Bad_Opcode },
379    { Bad_Opcode },
380    { Bad_Opcode },
381    { "vrcp14p%XW",	{ XM, EXx }, PREFIX_DATA },
382    { "vrcp14s%XW",	{ XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA },
383    { "vrsqrt14p%XW",	{ XM, EXx }, 0 },
384    { "vrsqrt14s%XW",	{ XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA },
385    /* 50 */
386    { "vpdpbusd",	{ XM, Vex, EXx }, PREFIX_DATA },
387    { "vpdpbusds",	{ XM, Vex, EXx }, PREFIX_DATA },
388    { PREFIX_TABLE (PREFIX_EVEX_0F3852) },
389    { PREFIX_TABLE (PREFIX_EVEX_0F3853) },
390    { "vpopcnt%BW",	{ XM, EXx }, PREFIX_DATA },
391    { "vpopcnt%DQ",	{ XM, EXx }, PREFIX_DATA },
392    { Bad_Opcode },
393    { Bad_Opcode },
394    /* 58 */
395    { VEX_W_TABLE (VEX_W_0F3858) },
396    { VEX_W_TABLE (EVEX_W_0F3859) },
397    { VEX_W_TABLE (EVEX_W_0F385A) },
398    { VEX_W_TABLE (EVEX_W_0F385B) },
399    { Bad_Opcode },
400    { Bad_Opcode },
401    { Bad_Opcode },
402    { Bad_Opcode },
403    /* 60 */
404    { Bad_Opcode },
405    { Bad_Opcode },
406    { "vpexpand%BW", { XM, EXbwUnit }, PREFIX_DATA },
407    { "vpcompress%BW",   { EXbwUnit, XM }, PREFIX_DATA },
408    { "vpblendm%DQ",	{ XM, Vex, EXx }, PREFIX_DATA },
409    { "vblendmp%XW",	{ XM, Vex, EXx }, PREFIX_DATA },
410    { "vpblendm%BW",	{ XM, Vex, EXx }, PREFIX_DATA },
411    { Bad_Opcode },
412    /* 68 */
413    { PREFIX_TABLE (PREFIX_EVEX_0F3868) },
414    { Bad_Opcode },
415    { Bad_Opcode },
416    { Bad_Opcode },
417    { Bad_Opcode },
418    { Bad_Opcode },
419    { Bad_Opcode },
420    { Bad_Opcode },
421    /* 70 */
422    { VEX_W_TABLE (EVEX_W_0F3870) },
423    { "vpshldv%DQ",  { XM, Vex, EXx }, PREFIX_DATA },
424    { PREFIX_TABLE (PREFIX_EVEX_0F3872) },
425    { "vpshrdv%DQ",  { XM, Vex, EXx }, PREFIX_DATA },
426    { Bad_Opcode },
427    { "vpermi2%BW",	{ XM, Vex, EXx }, PREFIX_DATA },
428    { "vpermi2%DQ",	{ XM, Vex, EXx }, PREFIX_DATA },
429    { "vpermi2p%XW",	{ XM, Vex, EXx }, PREFIX_DATA },
430    /* 78 */
431    { VEX_W_TABLE (VEX_W_0F3878) },
432    { VEX_W_TABLE (VEX_W_0F3879) },
433    { VEX_W_TABLE (EVEX_W_0F387A) },
434    { VEX_W_TABLE (EVEX_W_0F387B) },
435    { MOD_TABLE (MOD_EVEX_0F387C) },
436    { "vpermt2%BW",	{ XM, Vex, EXx }, PREFIX_DATA },
437    { "vpermt2%DQ",	{ XM, Vex, EXx }, PREFIX_DATA },
438    { "vpermt2p%XW",	{ XM, Vex, EXx }, PREFIX_DATA },
439    /* 80 */
440    { Bad_Opcode },
441    { Bad_Opcode },
442    { Bad_Opcode },
443    { VEX_W_TABLE (EVEX_W_0F3883) },
444    { Bad_Opcode },
445    { Bad_Opcode },
446    { Bad_Opcode },
447    { Bad_Opcode },
448    /* 88 */
449    { "vexpandp%XW",	{ XM, EXEvexXGscat }, PREFIX_DATA },
450    { "vpexpand%DQ",	{ XM, EXEvexXGscat }, PREFIX_DATA },
451    { "vcompressp%XW",	{ EXEvexXGscat, XM }, PREFIX_DATA },
452    { "vpcompress%DQ",	{ EXEvexXGscat, XM }, PREFIX_DATA },
453    { Bad_Opcode },
454    { "vperm%BW",	{ XM, Vex, EXx }, PREFIX_DATA },
455    { Bad_Opcode },
456    { "vpshufbitqmb",  { XMask, Vex, EXx }, PREFIX_DATA },
457    /* 90 */
458    { "vpgatherd%DQ",	{ XM, MVexVSIBDWpX }, PREFIX_DATA },
459    { VEX_W_TABLE (EVEX_W_0F3891) },
460    { "vgatherdp%XW",	{ XM, MVexVSIBDWpX}, PREFIX_DATA },
461    { VEX_W_TABLE (EVEX_W_0F3893) },
462    { Bad_Opcode },
463    { Bad_Opcode },
464    { "vfmaddsub132p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
465    { "vfmsubadd132p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
466    /* 98 */
467    { "vfmadd132p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
468    { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA },
469    { PREFIX_TABLE (PREFIX_EVEX_0F389A) },
470    { PREFIX_TABLE (PREFIX_EVEX_0F389B) },
471    { "vfnmadd132p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
472    { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA },
473    { "vfnmsub132p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
474    { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA },
475    /* A0 */
476    { "vpscatterd%DQ",	{ MVexVSIBDWpX, XM }, PREFIX_DATA },
477    { VEX_W_TABLE (EVEX_W_0F38A1) },
478    { "vscatterdp%XW",	{ MVexVSIBDWpX, XM }, PREFIX_DATA },
479    { VEX_W_TABLE (EVEX_W_0F38A3) },
480    { Bad_Opcode },
481    { Bad_Opcode },
482    { "vfmaddsub213p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
483    { "vfmsubadd213p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
484    /* A8 */
485    { "vfmadd213p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
486    { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA },
487    { PREFIX_TABLE (PREFIX_EVEX_0F38AA) },
488    { PREFIX_TABLE (PREFIX_EVEX_0F38AB) },
489    { "vfnmadd213p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
490    { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA },
491    { "vfnmsub213p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
492    { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA },
493    /* B0 */
494    { Bad_Opcode },
495    { Bad_Opcode },
496    { Bad_Opcode },
497    { Bad_Opcode },
498    { "vpmadd52luq",	{ XM, Vex, EXx }, PREFIX_DATA },
499    { "vpmadd52huq",	{ XM, Vex, EXx }, PREFIX_DATA },
500    { "vfmaddsub231p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
501    { "vfmsubadd231p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
502    /* B8 */
503    { "vfmadd231p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
504    { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA },
505    { "vfmsub231p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
506    { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA },
507    { "vfnmadd231p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
508    { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA },
509    { "vfnmsub231p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
510    { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA },
511    /* C0 */
512    { Bad_Opcode },
513    { Bad_Opcode },
514    { Bad_Opcode },
515    { Bad_Opcode },
516    { "vpconflict%DQ",	{ XM, EXx }, PREFIX_DATA },
517    { Bad_Opcode },
518    { REG_TABLE (REG_EVEX_0F38C6) },
519    { REG_TABLE (REG_EVEX_0F38C7) },
520    /* C8 */
521    { "vexp2p%XW",        { XM, EXx, EXxEVexS }, PREFIX_DATA },
522    { Bad_Opcode },
523    { "vrcp28p%XW",       { XM, EXx, EXxEVexS }, PREFIX_DATA },
524    { "vrcp28s%XW",	{ XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS }, PREFIX_DATA },
525    { "vrsqrt28p%XW",     { XM, EXx, EXxEVexS }, PREFIX_DATA },
526    { "vrsqrt28s%XW",	{ XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS }, PREFIX_DATA },
527    { Bad_Opcode },
528    { VEX_W_TABLE (VEX_W_0F38CF) },
529    /* D0 */
530    { Bad_Opcode },
531    { Bad_Opcode },
532    { Bad_Opcode },
533    { Bad_Opcode },
534    { Bad_Opcode },
535    { Bad_Opcode },
536    { Bad_Opcode },
537    { Bad_Opcode },
538    /* D8 */
539    { Bad_Opcode },
540    { Bad_Opcode },
541    { Bad_Opcode },
542    { Bad_Opcode },
543    { "vaesenc",	{ XM, Vex, EXx }, PREFIX_DATA },
544    { "vaesenclast",	{ XM, Vex, EXx }, PREFIX_DATA },
545    { "vaesdec",	{ XM, Vex, EXx }, PREFIX_DATA },
546    { "vaesdeclast",	{ XM, Vex, EXx }, PREFIX_DATA },
547    /* E0 */
548    { Bad_Opcode },
549    { Bad_Opcode },
550    { Bad_Opcode },
551    { Bad_Opcode },
552    { Bad_Opcode },
553    { Bad_Opcode },
554    { Bad_Opcode },
555    { Bad_Opcode },
556    /* E8 */
557    { Bad_Opcode },
558    { Bad_Opcode },
559    { Bad_Opcode },
560    { Bad_Opcode },
561    { Bad_Opcode },
562    { Bad_Opcode },
563    { Bad_Opcode },
564    { Bad_Opcode },
565    /* F0 */
566    { Bad_Opcode },
567    { Bad_Opcode },
568    { Bad_Opcode },
569    { Bad_Opcode },
570    { Bad_Opcode },
571    { Bad_Opcode },
572    { Bad_Opcode },
573    { Bad_Opcode },
574    /* F8 */
575    { Bad_Opcode },
576    { Bad_Opcode },
577    { Bad_Opcode },
578    { Bad_Opcode },
579    { Bad_Opcode },
580    { Bad_Opcode },
581    { Bad_Opcode },
582    { Bad_Opcode },
583  },
584  /* EVEX_0F3A */
585  {
586    /* 00 */
587    { VEX_W_TABLE (EVEX_W_0F3A00) },
588    { VEX_W_TABLE (EVEX_W_0F3A01) },
589    { Bad_Opcode },
590    { "valign%DQ",	{ XM, Vex, EXx, Ib }, PREFIX_DATA },
591    { VEX_W_TABLE (VEX_W_0F3A04) },
592    { VEX_W_TABLE (EVEX_W_0F3A05) },
593    { Bad_Opcode },
594    { Bad_Opcode },
595    /* 08 */
596    { VEX_W_TABLE (EVEX_W_0F3A08) },
597    { VEX_W_TABLE (EVEX_W_0F3A09) },
598    { VEX_W_TABLE (EVEX_W_0F3A0A) },
599    { VEX_W_TABLE (EVEX_W_0F3A0B) },
600    { Bad_Opcode },
601    { Bad_Opcode },
602    { Bad_Opcode },
603    { "vpalignr",	{ XM, Vex, EXx, Ib }, PREFIX_DATA },
604    /* 10 */
605    { Bad_Opcode },
606    { Bad_Opcode },
607    { Bad_Opcode },
608    { Bad_Opcode },
609    { EVEX_LEN_TABLE (EVEX_LEN_0F3A14) },
610    { EVEX_LEN_TABLE (EVEX_LEN_0F3A15) },
611    { EVEX_LEN_TABLE (EVEX_LEN_0F3A16) },
612    { EVEX_LEN_TABLE (EVEX_LEN_0F3A17) },
613    /* 18 */
614    { VEX_W_TABLE (EVEX_W_0F3A18) },
615    { VEX_W_TABLE (EVEX_W_0F3A19) },
616    { VEX_W_TABLE (EVEX_W_0F3A1A) },
617    { VEX_W_TABLE (EVEX_W_0F3A1B) },
618    { Bad_Opcode },
619    { VEX_W_TABLE (VEX_W_0F3A1D) },
620    { "vpcmpu%DQ",	{ XMask, Vex, EXx, VPCMP }, PREFIX_DATA },
621    { "vpcmp%DQ",	{ XMask, Vex, EXx, VPCMP }, PREFIX_DATA },
622    /* 20 */
623    { EVEX_LEN_TABLE (EVEX_LEN_0F3A20) },
624    { VEX_W_TABLE (EVEX_W_0F3A21) },
625    { EVEX_LEN_TABLE (EVEX_LEN_0F3A22) },
626    { VEX_W_TABLE (EVEX_W_0F3A23) },
627    { Bad_Opcode },
628    { "vpternlog%DQ",	{ XM, Vex, EXx, Ib }, PREFIX_DATA },
629    { "vgetmantp%XW",	{ XM, EXx, EXxEVexS, Ib }, PREFIX_DATA },
630    { "vgetmants%XW",	{ XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS, Ib }, PREFIX_DATA },
631    /* 28 */
632    { Bad_Opcode },
633    { Bad_Opcode },
634    { Bad_Opcode },
635    { Bad_Opcode },
636    { Bad_Opcode },
637    { Bad_Opcode },
638    { Bad_Opcode },
639    { Bad_Opcode },
640    /* 30 */
641    { Bad_Opcode },
642    { Bad_Opcode },
643    { Bad_Opcode },
644    { Bad_Opcode },
645    { Bad_Opcode },
646    { Bad_Opcode },
647    { Bad_Opcode },
648    { Bad_Opcode },
649    /* 38 */
650    { VEX_W_TABLE (EVEX_W_0F3A38) },
651    { VEX_W_TABLE (EVEX_W_0F3A39) },
652    { VEX_W_TABLE (EVEX_W_0F3A3A) },
653    { VEX_W_TABLE (EVEX_W_0F3A3B) },
654    { Bad_Opcode },
655    { Bad_Opcode },
656    { "vpcmpu%BW",	{ XMask, Vex, EXx, VPCMP }, PREFIX_DATA },
657    { "vpcmp%BW",	{ XMask, Vex, EXx, VPCMP }, PREFIX_DATA },
658    /* 40 */
659    { Bad_Opcode },
660    { Bad_Opcode },
661    { VEX_W_TABLE (EVEX_W_0F3A42) },
662    { VEX_W_TABLE (EVEX_W_0F3A43) },
663    { "vpclmulqdq",	{ XM, Vex, EXx, PCLMUL }, PREFIX_DATA },
664    { Bad_Opcode },
665    { Bad_Opcode },
666    { Bad_Opcode },
667    /* 48 */
668    { Bad_Opcode },
669    { Bad_Opcode },
670    { Bad_Opcode },
671    { Bad_Opcode },
672    { Bad_Opcode },
673    { Bad_Opcode },
674    { Bad_Opcode },
675    { Bad_Opcode },
676    /* 50 */
677    { "vrangep%XW",	{ XM, Vex, EXx, EXxEVexS, Ib }, PREFIX_DATA },
678    { "vranges%XW",	{ XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS, Ib }, PREFIX_DATA },
679    { Bad_Opcode },
680    { Bad_Opcode },
681    { "vfixupimmp%XW",	{ XM, Vex, EXx, EXxEVexS, Ib }, PREFIX_DATA },
682    { "vfixupimms%XW",	{ XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS, Ib }, PREFIX_DATA },
683    { "vreducep%XW",	{ XM, EXx, EXxEVexS, Ib }, PREFIX_DATA },
684    { "vreduces%XW",	{ XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS, Ib }, PREFIX_DATA },
685    /* 58 */
686    { Bad_Opcode },
687    { Bad_Opcode },
688    { Bad_Opcode },
689    { Bad_Opcode },
690    { Bad_Opcode },
691    { Bad_Opcode },
692    { Bad_Opcode },
693    { Bad_Opcode },
694    /* 60 */
695    { Bad_Opcode },
696    { Bad_Opcode },
697    { Bad_Opcode },
698    { Bad_Opcode },
699    { Bad_Opcode },
700    { Bad_Opcode },
701    { "vfpclassp%XW%XZ",	{ XMask, EXx, Ib }, PREFIX_DATA },
702    { "vfpclasss%XW",	{ XMask, EXVexWdqScalar, Ib }, PREFIX_DATA },
703    /* 68 */
704    { Bad_Opcode },
705    { Bad_Opcode },
706    { Bad_Opcode },
707    { Bad_Opcode },
708    { Bad_Opcode },
709    { Bad_Opcode },
710    { Bad_Opcode },
711    { Bad_Opcode },
712    /* 70 */
713    { VEX_W_TABLE (EVEX_W_0F3A70) },
714    { "vpshld%DQ",   { XM, Vex, EXx, Ib }, PREFIX_DATA },
715    { VEX_W_TABLE (EVEX_W_0F3A72) },
716    { "vpshrd%DQ",   { XM, Vex, EXx, Ib }, PREFIX_DATA },
717    { Bad_Opcode },
718    { Bad_Opcode },
719    { Bad_Opcode },
720    { Bad_Opcode },
721    /* 78 */
722    { Bad_Opcode },
723    { Bad_Opcode },
724    { Bad_Opcode },
725    { Bad_Opcode },
726    { Bad_Opcode },
727    { Bad_Opcode },
728    { Bad_Opcode },
729    { Bad_Opcode },
730    /* 80 */
731    { Bad_Opcode },
732    { Bad_Opcode },
733    { Bad_Opcode },
734    { Bad_Opcode },
735    { Bad_Opcode },
736    { Bad_Opcode },
737    { Bad_Opcode },
738    { Bad_Opcode },
739    /* 88 */
740    { Bad_Opcode },
741    { Bad_Opcode },
742    { Bad_Opcode },
743    { Bad_Opcode },
744    { Bad_Opcode },
745    { Bad_Opcode },
746    { Bad_Opcode },
747    { Bad_Opcode },
748    /* 90 */
749    { Bad_Opcode },
750    { Bad_Opcode },
751    { Bad_Opcode },
752    { Bad_Opcode },
753    { Bad_Opcode },
754    { Bad_Opcode },
755    { Bad_Opcode },
756    { Bad_Opcode },
757    /* 98 */
758    { Bad_Opcode },
759    { Bad_Opcode },
760    { Bad_Opcode },
761    { Bad_Opcode },
762    { Bad_Opcode },
763    { Bad_Opcode },
764    { Bad_Opcode },
765    { Bad_Opcode },
766    /* A0 */
767    { Bad_Opcode },
768    { Bad_Opcode },
769    { Bad_Opcode },
770    { Bad_Opcode },
771    { Bad_Opcode },
772    { Bad_Opcode },
773    { Bad_Opcode },
774    { Bad_Opcode },
775    /* A8 */
776    { Bad_Opcode },
777    { Bad_Opcode },
778    { Bad_Opcode },
779    { Bad_Opcode },
780    { Bad_Opcode },
781    { Bad_Opcode },
782    { Bad_Opcode },
783    { Bad_Opcode },
784    /* B0 */
785    { Bad_Opcode },
786    { Bad_Opcode },
787    { Bad_Opcode },
788    { Bad_Opcode },
789    { Bad_Opcode },
790    { Bad_Opcode },
791    { Bad_Opcode },
792    { Bad_Opcode },
793    /* B8 */
794    { Bad_Opcode },
795    { Bad_Opcode },
796    { Bad_Opcode },
797    { Bad_Opcode },
798    { Bad_Opcode },
799    { Bad_Opcode },
800    { Bad_Opcode },
801    { Bad_Opcode },
802    /* C0 */
803    { Bad_Opcode },
804    { Bad_Opcode },
805    { Bad_Opcode },
806    { Bad_Opcode },
807    { Bad_Opcode },
808    { Bad_Opcode },
809    { Bad_Opcode },
810    { Bad_Opcode },
811    /* C8 */
812    { Bad_Opcode },
813    { Bad_Opcode },
814    { Bad_Opcode },
815    { Bad_Opcode },
816    { Bad_Opcode },
817    { Bad_Opcode },
818    { VEX_W_TABLE (VEX_W_0F3ACE) },
819    { VEX_W_TABLE (VEX_W_0F3ACF) },
820    /* D0 */
821    { Bad_Opcode },
822    { Bad_Opcode },
823    { Bad_Opcode },
824    { Bad_Opcode },
825    { Bad_Opcode },
826    { Bad_Opcode },
827    { Bad_Opcode },
828    { Bad_Opcode },
829    /* D8 */
830    { Bad_Opcode },
831    { Bad_Opcode },
832    { Bad_Opcode },
833    { Bad_Opcode },
834    { Bad_Opcode },
835    { Bad_Opcode },
836    { Bad_Opcode },
837    { Bad_Opcode },
838    /* E0 */
839    { Bad_Opcode },
840    { Bad_Opcode },
841    { Bad_Opcode },
842    { Bad_Opcode },
843    { Bad_Opcode },
844    { Bad_Opcode },
845    { Bad_Opcode },
846    { Bad_Opcode },
847    /* E8 */
848    { Bad_Opcode },
849    { Bad_Opcode },
850    { Bad_Opcode },
851    { Bad_Opcode },
852    { Bad_Opcode },
853    { Bad_Opcode },
854    { Bad_Opcode },
855    { Bad_Opcode },
856    /* F0 */
857    { Bad_Opcode },
858    { Bad_Opcode },
859    { Bad_Opcode },
860    { Bad_Opcode },
861    { Bad_Opcode },
862    { Bad_Opcode },
863    { Bad_Opcode },
864    { Bad_Opcode },
865    /* F8 */
866    { Bad_Opcode },
867    { Bad_Opcode },
868    { Bad_Opcode },
869    { Bad_Opcode },
870    { Bad_Opcode },
871    { Bad_Opcode },
872    { Bad_Opcode },
873    { Bad_Opcode },
874  },
875};
876