1/////////////////////////////////////////////////////////////////////////
2// $Id: dis_tables_avx.inc 11878 2013-10-11 20:09:51Z sshwarts $
3/////////////////////////////////////////////////////////////////////////
4//
5//   Copyright (c) 2011 Stanislav Shwartsman
6//          Written by Stanislav Shwartsman [sshwarts at sourceforge net]
7//
8//  This library is free software; you can redistribute it and/or
9//  modify it under the terms of the GNU Lesser General Public
10//  License as published by the Free Software Foundation; either
11//  version 2 of the License, or (at your option) any later version.
12//
13//  This library is distributed in the hope that it will be useful,
14//  but WITHOUT ANY WARRANTY; without even the implied warranty of
15//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16//  Lesser General Public License for more details.
17//
18//  You should have received a copy of the GNU Lesser General Public
19//  License along with this library; if not, write to the Free Software
20//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
21//
22/////////////////////////////////////////////////////////////////////////
23
24/* ************************************************************************ */
25/* AVX VEX-encoded 0x0F, 0x0F 0x38 and 0x0F 0x3A opcodes */
26
27static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f10[4] = {
28  /* -- */ { 0, &Ia_vmovups_Vps_Wps },
29  /* 66 */ { 0, &Ia_vmovupd_Vpd_Wpd },
30  /* F3 */ { 0, &Ia_vmovss_Vss_Wss },
31  /* F2 */ { 0, &Ia_vmovsd_Vsd_Wsd }
32};
33
34static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f11[4] = {
35  /* -- */ { 0, &Ia_vmovups_Wps_Vps },
36  /* 66 */ { 0, &Ia_vmovupd_Wpd_Vpd },
37  /* F3 */ { 0, &Ia_vmovss_Wss_Vss },
38  /* F2 */ { 0, &Ia_vmovsd_Wsd_Vsd }
39};
40
41static BxDisasmOpcodeTable_t BxDisasmGroupModVMOVHLPS[2] = {
42  /* R */ { 0, &Ia_vmovhlps_Vps_Hdq_Udq },
43  /* M */ { 0, &Ia_vmovlps_Vps_Hdq_Mq }
44};
45
46static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f12[4] = {
47  /* -- */ { GRPMOD(VMOVHLPS) },
48  /* 66 */ { 0, &Ia_vmovlpd_Vpd_Hdq_Mq },
49  /* F3 */ { 0, &Ia_vmovsldup_Vdq_Wdq },
50  /* F2 */ { 0, &Ia_vmovddup_Vdq_Wq }
51};
52
53static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f13[2] = {
54  /* -- */ { 0, &Ia_vmovlps_Mq_Vps },
55  /* 66 */ { 0, &Ia_vmovlpd_Mq_Vpd }
56};
57
58static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f14[2] = {
59  /* -- */ { 0, &Ia_vunpcklps_Vps_Hps_Wps },
60  /* 66 */ { 0, &Ia_vunpcklpd_Vpd_Hpd_Wpd }
61};
62
63static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f15[2] = {
64  /* -- */ { 0, &Ia_vunpckhps_Vps_Hps_Wps },
65  /* 66 */ { 0, &Ia_vunpckhpd_Vpd_Hpd_Wpd }
66};
67
68static BxDisasmOpcodeTable_t BxDisasmGroupModVMOVLHPS[2] = {
69  /* R */ { 0, &Ia_vmovlhps_Vps_Hdq_Udq },
70  /* M */ { 0, &Ia_vmovhps_Vps_Hdq_Mq }
71};
72
73static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f16[4] = {
74  /* -- */ { GRPMOD(VMOVLHPS) },
75  /* 66 */ { 0, &Ia_vmovhpd_Vpd_Hdq_Mq },
76  /* F3 */ { 0, &Ia_vmovshdup_Vdq_Wdq },
77  /* F2 */ { 0, &Ia_Invalid }
78};
79
80static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f17[2] = {
81  /* -- */ { 0, &Ia_vmovhps_Mq_Vps },
82  /* 66 */ { 0, &Ia_vmovhpd_Mq_Vpd }
83};
84
85static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f28[2] = {
86  /* -- */ { 0, &Ia_vmovaps_Vps_Wps },
87  /* 66 */ { 0, &Ia_vmovapd_Vpd_Wpd }
88};
89
90static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f29[2] = {
91  /* -- */ { 0, &Ia_vmovaps_Wps_Vps },
92  /* 66 */ { 0, &Ia_vmovapd_Wpd_Vpd }
93};
94
95static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f2a[4] = {
96  /* -- */ { 0, &Ia_Invalid },
97  /* 66 */ { 0, &Ia_Invalid },
98  /* F3 */ { 0, &Ia_vcvtsi2ss_Vss_Hps_Ey },
99  /* F2 */ { 0, &Ia_vcvtsi2sd_Vsd_Hpd_Ey }
100};
101
102static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f2b[2] = {
103  /* -- */ { 0, &Ia_vmovntps_Mps_Vps },
104  /* 66 */ { 0, &Ia_vmovntpd_Mpd_Vpd }
105};
106
107static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f2c[4] = {
108  /* -- */ { 0, &Ia_Invalid },
109  /* 66 */ { 0, &Ia_Invalid },
110  /* F3 */ { 0, &Ia_vcvttss2si_Gy_Wss },
111  /* F2 */ { 0, &Ia_vcvttsd2si_Gy_Wsd }
112};
113
114static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f2d[4] = {
115  /* -- */ { 0, &Ia_Invalid },
116  /* 66 */ { 0, &Ia_Invalid },
117  /* F3 */ { 0, &Ia_vcvtss2si_Gy_Wss },
118  /* F2 */ { 0, &Ia_vcvtsd2si_Gy_Wsd }
119};
120
121static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f2e[2] = {
122  /* -- */ { 0, &Ia_vucomiss_Vss_Wss },
123  /* 66 */ { 0, &Ia_vucomisd_Vsd_Wsd }
124};
125
126static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f2f[2] = {
127  /* -- */ { 0, &Ia_vcomiss_Vss_Wss },
128  /* 66 */ { 0, &Ia_vcomisd_Vsd_Wsd }
129};
130
131static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f50[2] = {
132  /* -- */ { 0, &Ia_vmovmskps_Gd_Ups },
133  /* 66 */ { 0, &Ia_vmovmskpd_Gd_Upd }
134};
135
136static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f51[4] = {
137  /* -- */ { 0, &Ia_vsqrtps_Vps_Wps },
138  /* 66 */ { 0, &Ia_vsqrtpd_Vpd_Wpd },
139  /* F3 */ { 0, &Ia_vsqrtss_Vss_Hps_Wss },
140  /* F2 */ { 0, &Ia_vsqrtsd_Vsd_Hpd_Wsd }
141};
142
143static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f52[4] = {
144  /* -- */ { 0, &Ia_vrsqrtps_Vps_Wps },
145  /* 66 */ { 0, &Ia_Invalid },
146  /* F3 */ { 0, &Ia_vrsqrtss_Vss_Hps_Wss },
147  /* F2 */ { 0, &Ia_Invalid }
148};
149
150static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f53[4] = {
151  /* -- */ { 0, &Ia_vrcpps_Vps_Wps },
152  /* 66 */ { 0, &Ia_Invalid },
153  /* F3 */ { 0, &Ia_vrcpss_Vss_Hps_Wss },
154  /* F2 */ { 0, &Ia_Invalid }
155};
156
157static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f54[2] = {
158  /* -- */ { 0, &Ia_vandps_Vps_Hps_Wps },
159  /* 66 */ { 0, &Ia_vandpd_Vpd_Hpd_Wpd }
160};
161
162static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f55[2] = {
163  /* -- */ { 0, &Ia_vandnps_Vps_Hps_Wps },
164  /* 66 */ { 0, &Ia_vandnpd_Vpd_Hpd_Wpd }
165};
166
167static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f56[2] = {
168  /* -- */ { 0, &Ia_vorps_Vps_Hps_Wps },
169  /* 66 */ { 0, &Ia_vorpd_Vpd_Hpd_Wpd }
170};
171
172static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f57[2] = {
173  /* -- */ { 0, &Ia_vxorps_Vps_Hps_Wps },
174  /* 66 */ { 0, &Ia_vxorpd_Vpd_Hpd_Wpd }
175};
176
177static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f58[4] = {
178  /* -- */ { 0, &Ia_vaddps_Vps_Hps_Wps },
179  /* 66 */ { 0, &Ia_vaddpd_Vpd_Hpd_Wpd },
180  /* F3 */ { 0, &Ia_vaddss_Vss_Hps_Wss },
181  /* F2 */ { 0, &Ia_vaddsd_Vsd_Hpd_Wsd }
182};
183
184static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f59[4] = {
185  /* -- */ { 0, &Ia_vmulps_Vps_Hps_Wps },
186  /* 66 */ { 0, &Ia_vmulpd_Vpd_Hpd_Wpd },
187  /* F3 */ { 0, &Ia_vmulss_Vss_Hps_Wss },
188  /* F2 */ { 0, &Ia_vmulsd_Vsd_Hpd_Wsd }
189};
190
191static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f5a[4] = {
192  /* -- */ { 0, &Ia_vcvtps2pd_Vpd_Wps },
193  /* 66 */ { 0, &Ia_vcvtpd2ps_Vps_Wpd },
194  /* F3 */ { 0, &Ia_vcvtss2sd_Vsd_Hpd_Wss },
195  /* F2 */ { 0, &Ia_vcvtsd2ss_Vss_Hps_Wsd }
196};
197
198static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f5b[4] = {
199  /* -- */ { 0, &Ia_vcvtdq2ps_Vps_Wdq },
200  /* 66 */ { 0, &Ia_vcvtps2dq_Vdq_Wps },
201  /* F3 */ { 0, &Ia_vcvttps2dq_Vdq_Wps },
202  /* F2 */ { 0, &Ia_Invalid }
203};
204
205static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f5c[4] = {
206  /* -- */ { 0, &Ia_vsubps_Vps_Hps_Wps },
207  /* 66 */ { 0, &Ia_vsubpd_Vpd_Hpd_Wpd },
208  /* F3 */ { 0, &Ia_vsubss_Vss_Hps_Wss },
209  /* F2 */ { 0, &Ia_vsubsd_Vsd_Hpd_Wsd }
210};
211
212static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f5d[4] = {
213  /* -- */ { 0, &Ia_vminps_Vps_Hps_Wps },
214  /* 66 */ { 0, &Ia_vminpd_Vpd_Hpd_Wpd },
215  /* F3 */ { 0, &Ia_vminss_Vss_Hps_Wss },
216  /* F2 */ { 0, &Ia_vminsd_Vsd_Hpd_Wsd }
217};
218
219static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f5e[4] = {
220  /* -- */ { 0, &Ia_vdivps_Vps_Hps_Wps },
221  /* 66 */ { 0, &Ia_vdivpd_Vpd_Hpd_Wpd },
222  /* F3 */ { 0, &Ia_vdivss_Vss_Hps_Wss },
223  /* F2 */ { 0, &Ia_vdivsd_Vsd_Hpd_Wsd }
224};
225
226static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f5f[4] = {
227  /* -- */ { 0, &Ia_vmaxps_Vps_Hps_Wps },
228  /* 66 */ { 0, &Ia_vmaxpd_Vpd_Hpd_Wpd },
229  /* F3 */ { 0, &Ia_vmaxss_Vss_Hps_Wss },
230  /* F2 */ { 0, &Ia_vmaxsd_Vsd_Hpd_Wsd }
231};
232
233static BxDisasmOpcodeTable_t BxDisasmGrpVexW_AVX0f6e[3] = {
234  /* 0 */ { GRPSSE66(Ia_vmovd_Vdq_Ed) },
235  /* 1 */ { GRPSSE66(Ia_vmovq_Vdq_Eq) }
236};
237
238static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f6f[4] = {
239  /* -- */ { 0, &Ia_Invalid },
240  /* 66 */ { 0, &Ia_vmovdqa_Vdq_Wdq },
241  /* F3 */ { 0, &Ia_vmovdqu_Vdq_Wdq },
242  /* F2 */ { 0, &Ia_Invalid }
243};
244
245static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f70[4] = {
246  /* -- */ { 0, &Ia_Invalid },
247  /* 66 */ { 0, &Ia_vpshufd_Vdq_Hdq_Wdq_Ib },
248  /* F3 */ { 0, &Ia_vpshufhw_Vdq_Hdq_Wdq_Ib },
249  /* F2 */ { 0, &Ia_vpshuflw_Vdq_Hdq_Wdq_Ib }
250};
251
252static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f7c[4] = {
253  /* -- */ { 0, &Ia_Invalid },
254  /* 66 */ { 0, &Ia_vhaddpd_Vpd_Hpd_Wpd },
255  /* F3 */ { 0, &Ia_Invalid },
256  /* F2 */ { 0, &Ia_vhaddps_Vps_Hps_Wps }
257};
258
259static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f7d[4] = {
260  /* -- */ { 0, &Ia_Invalid },
261  /* 66 */ { 0, &Ia_vhsubpd_Vpd_Hpd_Wpd },
262  /* F3 */ { 0, &Ia_Invalid },
263  /* F2 */ { 0, &Ia_vhsubps_Vps_Hps_Wps }
264};
265
266static BxDisasmOpcodeTable_t BxDisasmGrpVexW_AVX660f7e[3] = {
267  /* 0 */ { 0, &Ia_vmovd_Ed_Vd },
268  /* 1 */ { 0, &Ia_vmovq_Eq_Vq }
269};
270
271static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f7e[4] = {
272  /* -- */ { 0, &Ia_Invalid },
273  /* 66 */ { GRPVEXW(AVX660f7e) },
274  /* F3 */ { 0, &Ia_vmovq_Vq_Wq },
275  /* F2 */ { 0, &Ia_Invalid }
276};
277
278static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f7f[4] = {
279  /* -- */ { 0, &Ia_Invalid },
280  /* 66 */ { 0, &Ia_vmovdqa_Wdq_Vdq },
281  /* F3 */ { 0, &Ia_vmovdqu_Wdq_Vdq },
282  /* F2 */ { 0, &Ia_Invalid }
283};
284
285static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0fc2[4] = {
286  /* -- */ { 0, &Ia_vcmpps_Vps_Hps_Wps_Ib },
287  /* 66 */ { 0, &Ia_vcmppd_Vpd_Hpd_Wpd_Ib },
288  /* F3 */ { 0, &Ia_vcmpss_Vss_Hps_Wss_Ib },
289  /* F2 */ { 0, &Ia_vcmpsd_Vsd_Hpd_Wsd_Ib }
290};
291
292static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0fc6[2] = {
293  /* -- */ { 0, &Ia_vshufps_Vps_Hps_Wps_Ib },
294  /* 66 */ { 0, &Ia_vshufpd_Vpd_Hpd_Wpd_Ib }
295};
296
297static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0fd0[4] = {
298  /* -- */ { 0, &Ia_Invalid },
299  /* 66 */ { 0, &Ia_vaddsubpd_Vpd_Hpd_Wpd },
300  /* F3 */ { 0, &Ia_Invalid },
301  /* F2 */ { 0, &Ia_vaddsubps_Vps_Hps_Wps }
302};
303
304static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0fe6[4] = {
305  /* -- */ { 0, &Ia_Invalid },
306  /* 66 */ { 0, &Ia_vcvttpd2dq_Vq_Wpd },
307  /* F3 */ { 0, &Ia_vcvtdq2pd_Vpd_Wq },
308  /* F2 */ { 0, &Ia_vcvtpd2dq_Vq_Wpd }
309};
310
311/* Group12 */
312static BxDisasmOpcodeTable_t BxDisasmGroupAVXG12[8] = {
313  /* 0 */ { 0, &Ia_Invalid },
314  /* 1 */ { 0, &Ia_Invalid },
315  /* 2 */ { GRPSSE66(Ia_vpsrlw_Hdq_Udq_Ib) },
316  /* 3 */ { 0, &Ia_Invalid },
317  /* 4 */ { GRPSSE66(Ia_vpsraw_Hdq_Udq_Ib) },
318  /* 5 */ { 0, &Ia_Invalid },
319  /* 6 */ { GRPSSE66(Ia_vpsllw_Hdq_Udq_Ib) },
320  /* 7 */ { 0, &Ia_Invalid }
321};
322
323/* Group13 */
324static BxDisasmOpcodeTable_t BxDisasmGroupAVXG13[8] = {
325  /* 0 */ { 0, &Ia_Invalid },
326  /* 1 */ { 0, &Ia_Invalid },
327  /* 2 */ { GRPSSE66(Ia_vpsrld_Hdq_Udq_Ib) },
328  /* 3 */ { 0, &Ia_Invalid },
329  /* 4 */ { GRPSSE66(Ia_vpsrad_Hdq_Udq_Ib) },
330  /* 5 */ { 0, &Ia_Invalid },
331  /* 6 */ { GRPSSE66(Ia_vpslld_Hdq_Udq_Ib) },
332  /* 7 */ { 0, &Ia_Invalid }
333};
334
335/* Group14 */
336static BxDisasmOpcodeTable_t BxDisasmGroupAVXG14[8] = {
337  /* 0 */ { 0, &Ia_Invalid },
338  /* 1 */ { 0, &Ia_Invalid },
339  /* 2 */ { GRPSSE66(Ia_vpsrlq_Hdq_Udq_Ib) },
340  /* 3 */ { GRPSSE66(Ia_vpsrldq_Hdq_Udq_Ib) },
341  /* 4 */ { 0, &Ia_Invalid },
342  /* 5 */ { 0, &Ia_Invalid },
343  /* 6 */ { GRPSSE66(Ia_vpsllq_Hdq_Udq_Ib) },
344  /* 7 */ { GRPSSE66(Ia_vpslldq_Hdq_Udq_Ib) }
345};
346
347/* Group15 */
348static BxDisasmOpcodeTable_t BxDisasmGroupAVXG15M[8] = {
349  /* 0 */ { 0, &Ia_Invalid },
350  /* 1 */ { 0, &Ia_Invalid },
351  /* 2 */ { 0, &Ia_vldmxcsr },
352  /* 3 */ { 0, &Ia_vstmxcsr },
353  /* 4 */ { 0, &Ia_Invalid },
354  /* 5 */ { 0, &Ia_Invalid },
355  /* 6 */ { 0, &Ia_Invalid },
356  /* 7 */ { 0, &Ia_Invalid }
357};
358
359static BxDisasmOpcodeTable_t BxDisasmGroupModAVXG15[2] = {
360  /* R */ { 0, &Ia_Invalid },
361  /* M */ { GRPN(AVXG15M) }
362};
363
364static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a16[2] = {
365  /* 0 */ { GRPSSE66(Ia_vpextrd_Ed_Vdq_Ib) },
366  /* 1 */ { GRPSSE66(Ia_vpextrq_Eq_Vdq_Ib) }
367};
368
369static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a22[2] = {
370  /* 0 */ { GRPSSE66(Ia_vpinsrd_Vdq_Hdq_Ed_Ib) },
371  /* 1 */ { GRPSSE66(Ia_vpinsrq_Vdq_Hdq_Eq_Ib) }
372};
373
374static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a00[2] = {
375  /* 0 */ { 0, &Ia_Invalid },
376  /* 1 */ { GRPSSE66(Ia_vpermq_Vdq_Wdq_Ib) }
377};
378
379static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a01[2] = {
380  /* 0 */ { 0, &Ia_Invalid },
381  /* 1 */ { GRPSSE66(Ia_vpermpd_Vpd_Wpd_Ib) }
382};
383
384static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3845[2] = {
385  /* 0 */ { GRPSSE66(Ia_vpsrlvd_Vdq_Hdq_Wdq) },
386  /* 1 */ { GRPSSE66(Ia_vpsrlvq_Vdq_Hdq_Wdq) }
387};
388
389static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3847[2] = {
390  /* 0 */ { GRPSSE66(Ia_vpsllvd_Vdq_Hdq_Wdq) },
391  /* 1 */ { GRPSSE66(Ia_vpsllvq_Vdq_Hdq_Wdq) }
392};
393
394static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f388c[2] = {
395  /* 0 */ { GRPSSE66(Ia_vmaskmovd_Vdq_Hdq_Mdq) },
396  /* 1 */ { GRPSSE66(Ia_vmaskmovq_Vdq_Hdq_Mdq) }
397};
398
399static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f388e[2] = {
400  /* 0 */ { GRPSSE66(Ia_vmaskmovd_Mdq_Hdq_Vdq) },
401  /* 1 */ { GRPSSE66(Ia_vmaskmovq_Mdq_Hdq_Vdq) }
402};
403
404static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3890[2] = {
405  /* 0 */ { GRPSSE66(Ia_vgatherdd_Vdq_VSib_Hdq) },
406  /* 1 */ { GRPSSE66(Ia_vgatherdq_Vdq_VSib_Hdq) }
407};
408
409static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3891[2] = {
410  /* 0 */ { GRPSSE66(Ia_vgatherqd_Vdq_VSib_Hdq) },
411  /* 1 */ { GRPSSE66(Ia_vgatherqq_Vdq_VSib_Hdq) }
412};
413
414static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3892[2] = {
415  /* 0 */ { GRPSSE66(Ia_vgatherdps_Vps_VSib_Hps) },
416  /* 1 */ { GRPSSE66(Ia_vgatherdpd_Vpd_VSib_Hpd) }
417};
418
419static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3893[2] = {
420  /* 0 */ { GRPSSE66(Ia_vgatherqps_Vps_VSib_Hps) },
421  /* 1 */ { GRPSSE66(Ia_vgatherqpd_Vpd_VSib_Hpd) }
422};
423
424// FMA
425static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3896[2] = {
426  /* 0 */ { GRPSSE66(Ia_vfmaddsub132ps_Vps_Hps_Wps) },
427  /* 1 */ { GRPSSE66(Ia_vfmaddsub132pd_Vpd_Hpd_Wpd) }
428};
429
430static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3897[2] = {
431  /* 0 */ { GRPSSE66(Ia_vfmsubadd132ps_Vps_Hps_Wps) },
432  /* 1 */ { GRPSSE66(Ia_vfmsubadd132pd_Vpd_Hpd_Wpd) }
433};
434
435static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3898[2] = {
436  /* 0 */ { GRPSSE66(Ia_vfmadd132ps_Vps_Hps_Wps) },
437  /* 1 */ { GRPSSE66(Ia_vfmadd132pd_Vpd_Hpd_Wpd) }
438};
439
440static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3899[2] = {
441  /* 0 */ { GRPSSE66(Ia_vfmadd132ss_Vps_Hss_Wss) },
442  /* 1 */ { GRPSSE66(Ia_vfmadd132sd_Vpd_Hsd_Wsd) }
443};
444
445static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f389a[2] = {
446  /* 0 */ { GRPSSE66(Ia_vfmsub132ps_Vps_Hps_Wps) },
447  /* 1 */ { GRPSSE66(Ia_vfmsub132pd_Vpd_Hpd_Wpd) }
448};
449
450static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f389b[2] = {
451  /* 0 */ { GRPSSE66(Ia_vfmsub132ss_Vps_Hss_Wss) },
452  /* 1 */ { GRPSSE66(Ia_vfmsub132sd_Vpd_Hsd_Wsd) }
453};
454
455static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f389c[2] = {
456  /* 0 */ { GRPSSE66(Ia_vfnmadd132ps_Vps_Hps_Wps) },
457  /* 1 */ { GRPSSE66(Ia_vfnmadd132pd_Vpd_Hpd_Wpd) }
458};
459
460static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f389d[2] = {
461  /* 0 */ { GRPSSE66(Ia_vfnmadd132ss_Vps_Hss_Wss) },
462  /* 1 */ { GRPSSE66(Ia_vfnmadd132sd_Vpd_Hsd_Wsd) }
463};
464
465static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f389e[2] = {
466  /* 0 */ { GRPSSE66(Ia_vfnmsub132ps_Vps_Hps_Wps) },
467  /* 1 */ { GRPSSE66(Ia_vfnmsub132pd_Vpd_Hpd_Wpd) }
468};
469
470static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f389f[2] = {
471  /* 0 */ { GRPSSE66(Ia_vfnmsub132ss_Vps_Hss_Wss) },
472  /* 1 */ { GRPSSE66(Ia_vfnmsub132sd_Vpd_Hsd_Wsd) }
473};
474
475static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38a6[2] = {
476  /* 0 */ { GRPSSE66(Ia_vfmaddsub213ps_Vps_Hps_Wps) },
477  /* 1 */ { GRPSSE66(Ia_vfmaddsub213pd_Vpd_Hpd_Wpd) }
478};
479
480static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38a7[2] = {
481  /* 0 */ { GRPSSE66(Ia_vfmsubadd213ps_Vps_Hps_Wps) },
482  /* 1 */ { GRPSSE66(Ia_vfmsubadd213pd_Vpd_Hpd_Wpd) }
483};
484
485static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38a8[2] = {
486  /* 0 */ { GRPSSE66(Ia_vfmadd213ps_Vps_Hps_Wps) },
487  /* 1 */ { GRPSSE66(Ia_vfmadd213pd_Vpd_Hpd_Wpd) }
488};
489
490static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38a9[2] = {
491  /* 0 */ { GRPSSE66(Ia_vfmadd213ss_Vps_Hss_Wss) },
492  /* 1 */ { GRPSSE66(Ia_vfmadd213sd_Vpd_Hsd_Wsd) }
493};
494
495static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38aa[2] = {
496  /* 0 */ { GRPSSE66(Ia_vfmsub213ps_Vps_Hps_Wps) },
497  /* 1 */ { GRPSSE66(Ia_vfmsub213pd_Vpd_Hpd_Wpd) }
498};
499
500static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38ab[2] = {
501  /* 0 */ { GRPSSE66(Ia_vfmsub213ss_Vps_Hss_Wss) },
502  /* 1 */ { GRPSSE66(Ia_vfmsub213sd_Vpd_Hsd_Wsd) }
503};
504
505static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38ac[2] = {
506  /* 0 */ { GRPSSE66(Ia_vfnmadd213ps_Vps_Hps_Wps) },
507  /* 1 */ { GRPSSE66(Ia_vfnmadd213pd_Vpd_Hpd_Wpd) }
508};
509
510static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38ad[2] = {
511  /* 0 */ { GRPSSE66(Ia_vfnmadd213ss_Vps_Hss_Wss) },
512  /* 1 */ { GRPSSE66(Ia_vfnmadd213sd_Vpd_Hsd_Wsd) }
513};
514
515static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38ae[2] = {
516  /* 0 */ { GRPSSE66(Ia_vfnmsub213ps_Vps_Hps_Wps) },
517  /* 1 */ { GRPSSE66(Ia_vfnmsub213pd_Vpd_Hpd_Wpd) }
518};
519
520static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38af[2] = {
521  /* 0 */ { GRPSSE66(Ia_vfnmsub213ss_Vps_Hss_Wss) },
522  /* 1 */ { GRPSSE66(Ia_vfnmsub213sd_Vpd_Hsd_Wsd) }
523};
524
525static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38b6[2] = {
526  /* 0 */ { GRPSSE66(Ia_vfmaddsub231ps_Vps_Hps_Wps) },
527  /* 1 */ { GRPSSE66(Ia_vfmaddsub231pd_Vpd_Hpd_Wpd) }
528};
529
530static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38b7[2] = {
531  /* 0 */ { GRPSSE66(Ia_vfmsubadd231ps_Vps_Hps_Wps) },
532  /* 1 */ { GRPSSE66(Ia_vfmsubadd231pd_Vpd_Hpd_Wpd) }
533};
534
535static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38b8[2] = {
536  /* 0 */ { GRPSSE66(Ia_vfmadd231ps_Vps_Hps_Wps) },
537  /* 1 */ { GRPSSE66(Ia_vfmadd231pd_Vpd_Hpd_Wpd) }
538};
539
540static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38b9[2] = {
541  /* 0 */ { GRPSSE66(Ia_vfmadd231ss_Vps_Hss_Wss) },
542  /* 1 */ { GRPSSE66(Ia_vfmadd231sd_Vpd_Hsd_Wsd) }
543};
544
545static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38ba[2] = {
546  /* 0 */ { GRPSSE66(Ia_vfmsub231ps_Vps_Hps_Wps) },
547  /* 1 */ { GRPSSE66(Ia_vfmsub231pd_Vpd_Hpd_Wpd) }
548};
549
550static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38bb[2] = {
551  /* 0 */ { GRPSSE66(Ia_vfmsub231ss_Vps_Hss_Wss) },
552  /* 1 */ { GRPSSE66(Ia_vfmsub231sd_Vpd_Hsd_Wsd) }
553};
554
555static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38bc[2] = {
556  /* 0 */ { GRPSSE66(Ia_vfnmadd231ps_Vps_Hps_Wps) },
557  /* 1 */ { GRPSSE66(Ia_vfnmadd231pd_Vpd_Hpd_Wpd) }
558};
559
560static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38bd[2] = {
561  /* 0 */ { GRPSSE66(Ia_vfnmadd231ss_Vps_Hss_Wss) },
562  /* 1 */ { GRPSSE66(Ia_vfnmadd231sd_Vpd_Hsd_Wsd) }
563};
564
565static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38be[2] = {
566  /* 0 */ { GRPSSE66(Ia_vfnmsub231ps_Vps_Hps_Wps) },
567  /* 1 */ { GRPSSE66(Ia_vfnmsub231pd_Vpd_Hpd_Wpd) }
568};
569
570static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f38bf[2] = {
571  /* 0 */ { GRPSSE66(Ia_vfnmsub231ss_Vps_Hss_Wss) },
572  /* 1 */ { GRPSSE66(Ia_vfnmsub231sd_Vpd_Hsd_Wsd) }
573};
574// FMA
575
576static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f38f5[4] = {
577  /* -- */ { 0, &Ia_bzhi_Gy_Ey_By },
578  /* 66 */ { 0, &Ia_Invalid },
579  /* F3 */ { 0, &Ia_pext_Gy_By_Ey },
580  /* F2 */ { 0, &Ia_pdep_Gy_By_Ey }
581};
582
583static BxDisasmOpcodeTable_t BxDisasmGroupAVX_0f38f7[4] = {
584  /* -- */ { 0, &Ia_bextr_Gy_Ey_By },
585  /* 66 */ { 0, &Ia_shlx_Gy_Ey_By },
586  /* F3 */ { 0, &Ia_sarx_Gy_Ey_By },
587  /* F2 */ { 0, &Ia_shrx_Gy_Ey_By }
588};
589
590/* Group17 */
591static BxDisasmOpcodeTable_t BxDisasmGroupAVXG17[8] = {
592  /* 0 */ { 0, &Ia_Invalid },
593  /* 1 */ { 0, &Ia_blsr_By_Ey },
594  /* 2 */ { 0, &Ia_blsmsk_By_Ey },
595  /* 3 */ { 0, &Ia_blsi_By_Ey },
596  /* 4 */ { 0, &Ia_Invalid },
597  /* 5 */ { 0, &Ia_Invalid },
598  /* 6 */ { 0, &Ia_Invalid },
599  /* 7 */ { 0, &Ia_Invalid }
600};
601
602// FMA4 (AMD)
603static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a5c[2] = {
604  /* 0 */ { GRPSSE66(Ia_vfmaddsubps_Vps_Hps_Wps_VIb) },
605  /* 1 */ { GRPSSE66(Ia_vfmaddsubps_Vps_Hps_VIb_Wps) }
606};
607
608static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a5d[2] = {
609  /* 0 */ { GRPSSE66(Ia_vfmaddsubpd_Vpd_Hpd_Wpd_VIb) },
610  /* 1 */ { GRPSSE66(Ia_vfmaddsubpd_Vpd_Hpd_VIb_Wpd) }
611};
612
613static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a5e[2] = {
614  /* 0 */ { GRPSSE66(Ia_vfmsubaddps_Vps_Hps_Wps_VIb) },
615  /* 1 */ { GRPSSE66(Ia_vfmsubaddps_Vps_Hps_VIb_Wps) }
616};
617
618static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a5f[2] = {
619  /* 0 */ { GRPSSE66(Ia_vfmsubaddpd_Vpd_Hpd_Wpd_VIb) },
620  /* 1 */ { GRPSSE66(Ia_vfmsubaddpd_Vpd_Hpd_VIb_Wpd) }
621};
622
623static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a68[2] = {
624  /* 0 */ { GRPSSE66(Ia_vfmaddps_Vps_Hps_Wps_VIb) },
625  /* 1 */ { GRPSSE66(Ia_vfmaddps_Vps_Hps_VIb_Wps) }
626};
627
628static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a69[2] = {
629  /* 0 */ { GRPSSE66(Ia_vfmaddpd_Vpd_Hpd_Wpd_VIb) },
630  /* 1 */ { GRPSSE66(Ia_vfmaddpd_Vpd_Hpd_VIb_Wpd) }
631};
632
633static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a6a[2] = {
634  /* 0 */ { GRPSSE66(Ia_vfmaddss_Vss_Hss_Wss_VIb) },
635  /* 1 */ { GRPSSE66(Ia_vfmaddss_Vss_Hss_VIb_Wss) }
636};
637
638static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a6b[2] = {
639  /* 0 */ { GRPSSE66(Ia_vfmaddsd_Vsd_Hsd_Wsd_VIb) },
640  /* 1 */ { GRPSSE66(Ia_vfmaddsd_Vsd_Hsd_VIb_Wsd) }
641};
642
643static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a6c[2] = {
644  /* 0 */ { GRPSSE66(Ia_vfmsubps_Vps_Hps_Wps_VIb) },
645  /* 1 */ { GRPSSE66(Ia_vfmsubps_Vps_Hps_VIb_Wps) }
646};
647
648static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a6d[2] = {
649  /* 0 */ { GRPSSE66(Ia_vfmsubpd_Vpd_Hpd_Wpd_VIb) },
650  /* 1 */ { GRPSSE66(Ia_vfmsubpd_Vpd_Hpd_VIb_Wpd) }
651};
652
653static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a6e[2] = {
654  /* 0 */ { GRPSSE66(Ia_vfmsubss_Vss_Hss_Wss_VIb) },
655  /* 1 */ { GRPSSE66(Ia_vfmsubss_Vss_Hss_VIb_Wss) }
656};
657
658static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a6f[2] = {
659  /* 0 */ { GRPSSE66(Ia_vfmsubsd_Vsd_Hsd_Wsd_VIb) },
660  /* 1 */ { GRPSSE66(Ia_vfmsubsd_Vsd_Hsd_VIb_Wsd) }
661};
662
663static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a78[2] = {
664  /* 0 */ { GRPSSE66(Ia_vfnmaddps_Vps_Hps_Wps_VIb) },
665  /* 1 */ { GRPSSE66(Ia_vfnmaddps_Vps_Hps_VIb_Wps) }
666};
667
668static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a79[2] = {
669  /* 0 */ { GRPSSE66(Ia_vfnmaddpd_Vpd_Hpd_Wpd_VIb) },
670  /* 1 */ { GRPSSE66(Ia_vfnmaddpd_Vpd_Hpd_VIb_Wpd) }
671};
672
673static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a7a[2] = {
674  /* 0 */ { GRPSSE66(Ia_vfnmaddss_Vss_Hss_Wss_VIb) },
675  /* 1 */ { GRPSSE66(Ia_vfnmaddss_Vss_Hss_VIb_Wss) }
676};
677
678static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a7b[2] = {
679  /* 0 */ { GRPSSE66(Ia_vfnmaddsd_Vsd_Hsd_Wsd_VIb) },
680  /* 1 */ { GRPSSE66(Ia_vfnmaddsd_Vsd_Hsd_VIb_Wsd) }
681};
682
683static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a7c[2] = {
684  /* 0 */ { GRPSSE66(Ia_vfnmsubps_Vps_Hps_Wps_VIb) },
685  /* 1 */ { GRPSSE66(Ia_vfnmsubps_Vps_Hps_VIb_Wps) }
686};
687
688static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a7d[2] = {
689  /* 0 */ { GRPSSE66(Ia_vfnmsubpd_Vpd_Hpd_Wpd_VIb) },
690  /* 1 */ { GRPSSE66(Ia_vfnmsubpd_Vpd_Hpd_VIb_Wpd) }
691};
692
693static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a7e[2] = {
694  /* 0 */ { GRPSSE66(Ia_vfnmsubss_Vss_Hss_Wss_VIb) },
695  /* 1 */ { GRPSSE66(Ia_vfnmsubss_Vss_Hss_VIb_Wss) }
696};
697
698static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a7f[2] = {
699  /* 0 */ { GRPSSE66(Ia_vfnmsubsd_Vsd_Hsd_Wsd_VIb) },
700  /* 1 */ { GRPSSE66(Ia_vfnmsubsd_Vsd_Hsd_VIb_Wsd) }
701};
702// FMA4 (AMD)
703
704static BxDisasmOpcodeTable_t BxDisasmOpcodesAVX[256*3] = {
705  // 256 entries for VEX-encoded 0x0F opcodes
706  /* 00 */ { 0, &Ia_Invalid },
707  /* 01 */ { 0, &Ia_Invalid },
708  /* 02 */ { 0, &Ia_Invalid },
709  /* 03 */ { 0, &Ia_Invalid },
710  /* 04 */ { 0, &Ia_Invalid },
711  /* 05 */ { 0, &Ia_Invalid },
712  /* 06 */ { 0, &Ia_Invalid },
713  /* 07 */ { 0, &Ia_Invalid },
714  /* 08 */ { 0, &Ia_Invalid },
715  /* 09 */ { 0, &Ia_Invalid },
716  /* 0A */ { 0, &Ia_Invalid },
717  /* 0B */ { 0, &Ia_Invalid },
718  /* 0C */ { 0, &Ia_Invalid },
719  /* 0D */ { 0, &Ia_Invalid },
720  /* 0E */ { 0, &Ia_Invalid },
721  /* 0F */ { 0, &Ia_Invalid },
722  /* 10 */ { GRPAVX(0f10) },
723  /* 11 */ { GRPAVX(0f11) },
724  /* 12 */ { GRPAVX(0f12) },
725  /* 13 */ { GRPAVX2(0f13) },
726  /* 14 */ { GRPAVX2(0f14) },
727  /* 15 */ { GRPAVX2(0f15) },
728  /* 16 */ { GRPAVX(0f16) },
729  /* 17 */ { GRPAVX2(0f17) },
730  /* 18 */ { 0, &Ia_Invalid },
731  /* 19 */ { 0, &Ia_Invalid },
732  /* 1A */ { 0, &Ia_Invalid },
733  /* 1B */ { 0, &Ia_Invalid },
734  /* 1C */ { 0, &Ia_Invalid },
735  /* 1D */ { 0, &Ia_Invalid },
736  /* 1E */ { 0, &Ia_Invalid },
737  /* 1F */ { 0, &Ia_Invalid },
738  /* 20 */ { 0, &Ia_Invalid },
739  /* 21 */ { 0, &Ia_Invalid },
740  /* 22 */ { 0, &Ia_Invalid },
741  /* 23 */ { 0, &Ia_Invalid },
742  /* 24 */ { 0, &Ia_Invalid },
743  /* 25 */ { 0, &Ia_Invalid },
744  /* 26 */ { 0, &Ia_Invalid },
745  /* 27 */ { 0, &Ia_Invalid },
746  /* 28 */ { GRPAVX2(0f28) },
747  /* 29 */ { GRPAVX2(0f29) },
748  /* 2A */ { GRPAVX(0f2a) },
749  /* 2B */ { GRPAVX2(0f2b) },
750  /* 2C */ { GRPAVX(0f2c) },
751  /* 2C */ { GRPAVX(0f2d) },
752  /* 2E */ { GRPAVX2(0f2e) },
753  /* 2F */ { GRPAVX2(0f2f) },
754  /* 30 */ { 0, &Ia_Invalid },
755  /* 31 */ { 0, &Ia_Invalid },
756  /* 32 */ { 0, &Ia_Invalid },
757  /* 33 */ { 0, &Ia_Invalid },
758  /* 34 */ { 0, &Ia_Invalid },
759  /* 35 */ { 0, &Ia_Invalid },
760  /* 36 */ { 0, &Ia_Invalid },
761  /* 37 */ { 0, &Ia_Invalid },
762  /* 38 */ { 0, &Ia_Invalid },
763  /* 39 */ { 0, &Ia_Invalid },
764  /* 3A */ { 0, &Ia_Invalid },
765  /* 3B */ { 0, &Ia_Invalid },
766  /* 3C */ { 0, &Ia_Invalid },
767  /* 3D */ { 0, &Ia_Invalid },
768  /* 3E */ { 0, &Ia_Invalid },
769  /* 3F */ { 0, &Ia_Invalid },
770  /* 40 */ { 0, &Ia_Invalid },
771  /* 41 */ { 0, &Ia_Invalid },
772  /* 42 */ { 0, &Ia_Invalid },
773  /* 43 */ { 0, &Ia_Invalid },
774  /* 44 */ { 0, &Ia_Invalid },
775  /* 45 */ { 0, &Ia_Invalid },
776  /* 46 */ { 0, &Ia_Invalid },
777  /* 47 */ { 0, &Ia_Invalid },
778  /* 48 */ { 0, &Ia_Invalid },
779  /* 49 */ { 0, &Ia_Invalid },
780  /* 4A */ { 0, &Ia_Invalid },
781  /* 4B */ { 0, &Ia_Invalid },
782  /* 4C */ { 0, &Ia_Invalid },
783  /* 4D */ { 0, &Ia_Invalid },
784  /* 4E */ { 0, &Ia_Invalid },
785  /* 4F */ { 0, &Ia_Invalid },
786  /* 50 */ { GRPAVX2(0f50) },
787  /* 51 */ { GRPAVX(0f51) },
788  /* 52 */ { GRPAVX(0f52) },
789  /* 53 */ { GRPAVX(0f53) },
790  /* 54 */ { GRPAVX2(0f54) },
791  /* 55 */ { GRPAVX2(0f55) },
792  /* 56 */ { GRPAVX2(0f56) },
793  /* 57 */ { GRPAVX2(0f57) },
794  /* 58 */ { GRPAVX(0f58) },
795  /* 59 */ { GRPAVX(0f59) },
796  /* 5A */ { GRPAVX(0f5a) },
797  /* 5B */ { GRPAVX(0f5b) },
798  /* 5C */ { GRPAVX(0f5c) },
799  /* 5D */ { GRPAVX(0f5d) },
800  /* 5E */ { GRPAVX(0f5e) },
801  /* 5F */ { GRPAVX(0f5f) },
802  /* 60 */ { GRPSSE66(Ia_vpunpcklbw_Vdq_Hdq_Wdq) },
803  /* 61 */ { GRPSSE66(Ia_vpunpcklwd_Vdq_Hdq_Wdq) },
804  /* 62 */ { GRPSSE66(Ia_vpunpckldq_Vdq_Hdq_Wdq) },
805  /* 63 */ { GRPSSE66(Ia_vpacksswb_Vdq_Hdq_Wdq) },
806  /* 64 */ { GRPSSE66(Ia_vpcmpgtb_Vdq_Hdq_Wdq) },
807  /* 65 */ { GRPSSE66(Ia_vpcmpgtw_Vdq_Hdq_Wdq) },
808  /* 66 */ { GRPSSE66(Ia_vpcmpgtd_Vdq_Hdq_Wdq) },
809  /* 67 */ { GRPSSE66(Ia_vpackuswb_Vdq_Hdq_Wdq) },
810  /* 68 */ { GRPSSE66(Ia_vpunpckhbw_Vdq_Hdq_Wdq) },
811  /* 69 */ { GRPSSE66(Ia_vpunpckhwd_Vdq_Hdq_Wdq) },
812  /* 6A */ { GRPSSE66(Ia_vpunpckhdq_Vdq_Hdq_Wdq) },
813  /* 6B */ { GRPSSE66(Ia_vpackssdw_Vdq_Hdq_Wdq) },
814  /* 6C */ { GRPSSE66(Ia_vpunpcklqdq_Vdq_Hdq_Wdq) },
815  /* 6D */ { GRPSSE66(Ia_vpunpckhqdq_Vdq_Hdq_Wdq) },
816  /* 6E */ { GRPVEXW(AVX0f6e) },
817  /* 6F */ { GRPAVX(0f6f) },
818  /* 70 */ { GRPAVX(0f70) },
819  /* 71 */ { GRPN(AVXG12) },
820  /* 72 */ { GRPN(AVXG13) },
821  /* 73 */ { GRPN(AVXG14) },
822  /* 74 */ { GRPSSE66(Ia_vpcmpeqb_Vdq_Hdq_Wdq) },
823  /* 75 */ { GRPSSE66(Ia_vpcmpeqw_Vdq_Hdq_Wdq) },
824  /* 76 */ { GRPSSE66(Ia_vpcmpeqd_Vdq_Hdq_Wdq) },
825  /* 77 */ { GRPSSENONE(Ia_vzeroupper) },
826  /* 78 */ { 0, &Ia_Invalid },
827  /* 79 */ { 0, &Ia_Invalid },
828  /* 7A */ { 0, &Ia_Invalid },
829  /* 7B */ { 0, &Ia_Invalid },
830  /* 7C */ { GRPAVX(0f7c) },
831  /* 7D */ { GRPAVX(0f7d) },
832  /* 7E */ { GRPAVX(0f7e) },
833  /* 7F */ { GRPAVX(0f7f) },
834  /* 80 */ { 0, &Ia_Invalid },
835  /* 81 */ { 0, &Ia_Invalid },
836  /* 82 */ { 0, &Ia_Invalid },
837  /* 83 */ { 0, &Ia_Invalid },
838  /* 84 */ { 0, &Ia_Invalid },
839  /* 85 */ { 0, &Ia_Invalid },
840  /* 86 */ { 0, &Ia_Invalid },
841  /* 87 */ { 0, &Ia_Invalid },
842  /* 88 */ { 0, &Ia_Invalid },
843  /* 89 */ { 0, &Ia_Invalid },
844  /* 8A */ { 0, &Ia_Invalid },
845  /* 8B */ { 0, &Ia_Invalid },
846  /* 8C */ { 0, &Ia_Invalid },
847  /* 8D */ { 0, &Ia_Invalid },
848  /* 8E */ { 0, &Ia_Invalid },
849  /* 8F */ { 0, &Ia_Invalid },
850  /* 90 */ { 0, &Ia_Invalid },
851  /* 91 */ { 0, &Ia_Invalid },
852  /* 92 */ { 0, &Ia_Invalid },
853  /* 93 */ { 0, &Ia_Invalid },
854  /* 94 */ { 0, &Ia_Invalid },
855  /* 95 */ { 0, &Ia_Invalid },
856  /* 96 */ { 0, &Ia_Invalid },
857  /* 97 */ { 0, &Ia_Invalid },
858  /* 98 */ { 0, &Ia_Invalid },
859  /* 99 */ { 0, &Ia_Invalid },
860  /* 9A */ { 0, &Ia_Invalid },
861  /* 9B */ { 0, &Ia_Invalid },
862  /* 9C */ { 0, &Ia_Invalid },
863  /* 9D */ { 0, &Ia_Invalid },
864  /* 9E */ { 0, &Ia_Invalid },
865  /* 9F */ { 0, &Ia_Invalid },
866  /* A0 */ { 0, &Ia_Invalid },
867  /* A1 */ { 0, &Ia_Invalid },
868  /* A2 */ { 0, &Ia_Invalid },
869  /* A3 */ { 0, &Ia_Invalid },
870  /* A4 */ { 0, &Ia_Invalid },
871  /* A5 */ { 0, &Ia_Invalid },
872  /* A6 */ { 0, &Ia_Invalid },
873  /* A7 */ { 0, &Ia_Invalid },
874  /* A8 */ { 0, &Ia_Invalid },
875  /* A9 */ { 0, &Ia_Invalid },
876  /* AA */ { 0, &Ia_Invalid },
877  /* AB */ { 0, &Ia_Invalid },
878  /* AC */ { 0, &Ia_Invalid },
879  /* AD */ { 0, &Ia_Invalid },
880  /* AE */ { GRPMOD(AVXG15) },
881  /* AF */ { 0, &Ia_Invalid },
882  /* B0 */ { 0, &Ia_Invalid },
883  /* B1 */ { 0, &Ia_Invalid },
884  /* B2 */ { 0, &Ia_Invalid },
885  /* B3 */ { 0, &Ia_Invalid },
886  /* B4 */ { 0, &Ia_Invalid },
887  /* B5 */ { 0, &Ia_Invalid },
888  /* B6 */ { 0, &Ia_Invalid },
889  /* B7 */ { 0, &Ia_Invalid },
890  /* B8 */ { 0, &Ia_Invalid },
891  /* B9 */ { 0, &Ia_Invalid },
892  /* BA */ { 0, &Ia_Invalid },
893  /* BB */ { 0, &Ia_Invalid },
894  /* BC */ { 0, &Ia_Invalid },
895  /* BD */ { 0, &Ia_Invalid },
896  /* BE */ { 0, &Ia_Invalid },
897  /* BF */ { 0, &Ia_Invalid },
898  /* C0 */ { 0, &Ia_Invalid },
899  /* C1 */ { 0, &Ia_Invalid },
900  /* C2 */ { GRPAVX(0fc2) },
901  /* C3 */ { 0, &Ia_Invalid },
902  /* C4 */ { GRPSSE66(Ia_vpinsrw_Vdq_Hdq_Ew_Ib) },
903  /* C5 */ { GRPSSE66(Ia_vpextrw_Gd_Udq_Ib) },
904  /* C6 */ { GRPAVX2(0fc6) },
905  /* C7 */ { 0, &Ia_Invalid },
906  /* C8 */ { 0, &Ia_Invalid },
907  /* C9 */ { 0, &Ia_Invalid },
908  /* CA */ { 0, &Ia_Invalid },
909  /* CB */ { 0, &Ia_Invalid },
910  /* CC */ { 0, &Ia_Invalid },
911  /* CD */ { 0, &Ia_Invalid },
912  /* CE */ { 0, &Ia_Invalid },
913  /* CF */ { 0, &Ia_Invalid },
914  /* D0 */ { GRPAVX(0fd0) },
915  /* D1 */ { GRPSSE66(Ia_vpsrlw_Vdq_Hdq_Wdq) },
916  /* D2 */ { GRPSSE66(Ia_vpsrld_Vdq_Hdq_Wdq) },
917  /* D3 */ { GRPSSE66(Ia_vpsrlq_Vdq_Hdq_Wdq) },
918  /* D4 */ { GRPSSE66(Ia_vpaddq_Vdq_Hdq_Wdq) },
919  /* D5 */ { GRPSSE66(Ia_vpmullw_Vdq_Hdq_Wdq) },
920  /* D6 */ { GRPSSE66(Ia_vmovq_Wq_Vq) },
921  /* D7 */ { GRPSSE66(Ia_vpmovmskb_Gd_Udq) },
922  /* D8 */ { GRPSSE66(Ia_vpsubusb_Vdq_Hdq_Wdq) },
923  /* D9 */ { GRPSSE66(Ia_vpsubusw_Vdq_Hdq_Wdq) },
924  /* DA */ { GRPSSE66(Ia_vpminub_Vdq_Hdq_Wdq) },
925  /* DB */ { GRPSSE66(Ia_vpand_Vdq_Hdq_Wdq) },
926  /* DC */ { GRPSSE66(Ia_vpaddusb_Vdq_Hdq_Wdq) },
927  /* DD */ { GRPSSE66(Ia_vpaddusw_Vdq_Hdq_Wdq) },
928  /* DE */ { GRPSSE66(Ia_vpmaxub_Vdq_Hdq_Wdq) },
929  /* DF */ { GRPSSE66(Ia_vpandn_Vdq_Hdq_Wdq) },
930  /* E0 */ { GRPSSE66(Ia_vpavgb_Vdq_Hdq_Wdq) },
931  /* E1 */ { GRPSSE66(Ia_vpsraw_Vdq_Hdq_Wdq) },
932  /* E2 */ { GRPSSE66(Ia_vpsrad_Vdq_Hdq_Wdq) },
933  /* E3 */ { GRPSSE66(Ia_vpavgw_Vdq_Hdq_Wdq) },
934  /* E4 */ { GRPSSE66(Ia_vpmulhuw_Vdq_Hdq_Wdq) },
935  /* E5 */ { GRPSSE66(Ia_vpmulhw_Vdq_Hdq_Wdq) },
936  /* E6 */ { GRPAVX(0fe6) },
937  /* E7 */ { GRPSSE66(Ia_vmovntdq_Mdq_Vdq) },
938  /* E8 */ { GRPSSE66(Ia_vpsubsb_Vdq_Hdq_Wdq) },
939  /* E9 */ { GRPSSE66(Ia_vpsubsw_Vdq_Hdq_Wdq) },
940  /* EA */ { GRPSSE66(Ia_vpminsw_Vdq_Hdq_Wdq) },
941  /* EB */ { GRPSSE66(Ia_vpor_Vdq_Hdq_Wdq) },
942  /* EC */ { GRPSSE66(Ia_vpaddsb_Vdq_Hdq_Wdq) },
943  /* ED */ { GRPSSE66(Ia_vpaddsw_Vdq_Hdq_Wdq) },
944  /* EE */ { GRPSSE66(Ia_vpmaxsw_Vdq_Hdq_Wdq) },
945  /* EF */ { GRPSSE66(Ia_vpxor_Vdq_Hdq_Wdq) },
946  /* F0 */ { GRPSSEF2(Ia_vlddqu_Vdq_Mdq) },
947  /* F1 */ { GRPSSE66(Ia_vpsllw_Vdq_Hdq_Wdq) },
948  /* F2 */ { GRPSSE66(Ia_vpslld_Vdq_Hdq_Wdq) },
949  /* F3 */ { GRPSSE66(Ia_vpsllq_Vdq_Hdq_Wdq) },
950  /* F4 */ { GRPSSE66(Ia_vpmuludq_Vdq_Hdq_Wdq) },
951  /* F5 */ { GRPSSE66(Ia_vpmaddwd_Vdq_Hdq_Wdq) },
952  /* F6 */ { GRPSSE66(Ia_vpsadbw_Vdq_Hdq_Wdq) },
953  /* F7 */ { GRPSSE66(Ia_vmaskmovdqu_Vdq_Udq) },
954  /* F8 */ { GRPSSE66(Ia_vpsubb_Vdq_Hdq_Wdq) },
955  /* F9 */ { GRPSSE66(Ia_vpsubw_Vdq_Hdq_Wdq) },
956  /* FA */ { GRPSSE66(Ia_vpsubd_Vdq_Hdq_Wdq) },
957  /* FB */ { GRPSSE66(Ia_vpsubq_Vdq_Hdq_Wdq) },
958  /* FC */ { GRPSSE66(Ia_vpaddb_Vdq_Hdq_Wdq) },
959  /* FD */ { GRPSSE66(Ia_vpaddw_Vdq_Hdq_Wdq) },
960  /* FE */ { GRPSSE66(Ia_vpaddd_Vdq_Hdq_Wdq) },
961  /* FF */ { 0, &Ia_Invalid },
962
963  // 256 entries for VEX-encoded 0x0F 0x38 opcodes
964  /* 00 */ { GRPSSE66(Ia_vpshufb_Vdq_Hdq_Wdq) },
965  /* 01 */ { GRPSSE66(Ia_vphaddw_Vdq_Hdq_Wdq) },
966  /* 02 */ { GRPSSE66(Ia_vphaddd_Vdq_Hdq_Wdq) },
967  /* 03 */ { GRPSSE66(Ia_vphaddsw_Vdq_Hdq_Wdq) },
968  /* 04 */ { GRPSSE66(Ia_vpmaddubsw_Vdq_Hdq_Wdq) },
969  /* 05 */ { GRPSSE66(Ia_vphsubw_Vdq_Hdq_Wdq) },
970  /* 06 */ { GRPSSE66(Ia_vphsubd_Vdq_Hdq_Wdq) },
971  /* 07 */ { GRPSSE66(Ia_vphsubsw_Vdq_Hdq_Wdq) },
972  /* 08 */ { GRPSSE66(Ia_vpsignb_Vdq_Hdq_Wdq) },
973  /* 09 */ { GRPSSE66(Ia_vpsignw_Vdq_Hdq_Wdq) },
974  /* 0A */ { GRPSSE66(Ia_vpsignd_Vdq_Hdq_Wdq) },
975  /* 0B */ { GRPSSE66(Ia_vpmulhrsw_Vdq_Hdq_Wdq) },
976  /* 0C */ { GRPSSE66(Ia_vpermilps_Vps_Hps_Wps) },
977  /* 0D */ { GRPSSE66(Ia_vpermilpd_Vpd_Hpd_Wpd) },
978  /* 0E */ { GRPSSE66(Ia_vtestps_Vps_Wps) },
979  /* 0F */ { GRPSSE66(Ia_vtestpd_Vpd_Wpd) },
980  /* 10 */ { 0, &Ia_Invalid },
981  /* 11 */ { 0, &Ia_Invalid },
982  /* 12 */ { 0, &Ia_Invalid },
983  /* 13 */ { GRPSSE66(Ia_vcvtph2ps_Vps_Wq) },
984  /* 14 */ { 0, &Ia_Invalid },
985  /* 15 */ { 0, &Ia_Invalid },
986  /* 16 */ { GRPSSE66(Ia_vpermps_Vps_Hps_Wps) },
987  /* 17 */ { GRPSSE66(Ia_vptest_Vdq_Wdq) },
988  /* 18 */ { GRPSSE66(Ia_vbroadcastss_Vps_Wss) },
989  /* 19 */ { GRPSSE66(Ia_vbroadcastsd_Vpd_Wsd) },
990  /* 1A */ { GRPSSE66(Ia_vbroadcastf128_Vdq_Mdq) },
991  /* 1B */ { 0, &Ia_Invalid },
992  /* 1C */ { GRPSSE66(Ia_vpabsb_Vdq_Hdq_Wdq) },
993  /* 1D */ { GRPSSE66(Ia_vpabsw_Vdq_Hdq_Wdq) },
994  /* 1E */ { GRPSSE66(Ia_vpabsd_Vdq_Hdq_Wdq) },
995  /* 1F */ { 0, &Ia_Invalid },
996  /* 20 */ { GRPSSE66(Ia_vpmovsxbw_Vdq_Wq) },
997  /* 21 */ { GRPSSE66(Ia_vpmovsxbd_Vdq_Wd) },
998  /* 22 */ { GRPSSE66(Ia_vpmovsxbq_Vdq_Ww) },
999  /* 23 */ { GRPSSE66(Ia_vpmovsxwd_Vdq_Wq) },
1000  /* 24 */ { GRPSSE66(Ia_vpmovsxwq_Vdq_Wd) },
1001  /* 25 */ { GRPSSE66(Ia_vpmovsxdq_Vdq_Wq) },
1002  /* 26 */ { 0, &Ia_Invalid },
1003  /* 27 */ { 0, &Ia_Invalid },
1004  /* 28 */ { GRPSSE66(Ia_vpmuldq_Vdq_Hdq_Wdq) },
1005  /* 29 */ { GRPSSE66(Ia_vpcmpeqq_Vdq_Hdq_Wdq) },
1006  /* 2A */ { GRPSSE66(Ia_vmovntdqa_Vdq_Mdq) },
1007  /* 2B */ { GRPSSE66(Ia_vpackusdw_Vdq_Hdq_Wdq) },
1008  /* 2C */ { GRPSSE66(Ia_vmaskmovps_Vps_Hps_Mps) },
1009  /* 2D */ { GRPSSE66(Ia_vmaskmovpd_Vpd_Hpd_Mpd) },
1010  /* 2E */ { GRPSSE66(Ia_vmaskmovps_Mps_Hps_Vps) },
1011  /* 2F */ { GRPSSE66(Ia_vmaskmovpd_Mpd_Hpd_Vpd) },
1012  /* 30 */ { GRPSSE66(Ia_vpmovzxbw_Vdq_Wq) },
1013  /* 31 */ { GRPSSE66(Ia_vpmovzxbd_Vdq_Wd) },
1014  /* 32 */ { GRPSSE66(Ia_vpmovzxbq_Vdq_Ww) },
1015  /* 33 */ { GRPSSE66(Ia_vpmovzxwd_Vdq_Wq) },
1016  /* 34 */ { GRPSSE66(Ia_vpmovzxwq_Vdq_Wd) },
1017  /* 35 */ { GRPSSE66(Ia_vpmovzxdq_Vdq_Wq) },
1018  /* 36 */ { GRPSSE66(Ia_vpermd_Vdq_Hdq_Wdq) },
1019  /* 37 */ { GRPSSE66(Ia_vpcmpgtq_Vdq_Hdq_Wdq) },
1020  /* 38 */ { GRPSSE66(Ia_vpminsb_Vdq_Hdq_Wdq) },
1021  /* 39 */ { GRPSSE66(Ia_vpminsd_Vdq_Hdq_Wdq) },
1022  /* 3A */ { GRPSSE66(Ia_vpminuw_Vdq_Hdq_Wdq) },
1023  /* 3B */ { GRPSSE66(Ia_vpminud_Vdq_Hdq_Wdq) },
1024  /* 3C */ { GRPSSE66(Ia_vpmaxsb_Vdq_Hdq_Wdq) },
1025  /* 3D */ { GRPSSE66(Ia_vpmaxsd_Vdq_Hdq_Wdq) },
1026  /* 3E */ { GRPSSE66(Ia_vpmaxuw_Vdq_Hdq_Wdq) },
1027  /* 3F */ { GRPSSE66(Ia_vpmaxud_Vdq_Hdq_Wdq) },
1028  /* 40 */ { GRPSSE66(Ia_vpmulld_Vdq_Hdq_Wdq) },
1029  /* 41 */ { GRPSSE66(Ia_vphminposuw_Vdq_Wdq) },
1030  /* 42 */ { 0, &Ia_Invalid },
1031  /* 43 */ { 0, &Ia_Invalid },
1032  /* 44 */ { 0, &Ia_Invalid },
1033  /* 45 */ { GRPVEXW(0f3845) },
1034  /* 46 */ { GRPSSE66(Ia_vpsravd_Vdq_Hdq_Wdq) },
1035  /* 47 */ { GRPVEXW(0f3847) },
1036  /* 48 */ { 0, &Ia_Invalid },
1037  /* 49 */ { 0, &Ia_Invalid },
1038  /* 4A */ { 0, &Ia_Invalid },
1039  /* 4B */ { 0, &Ia_Invalid },
1040  /* 4C */ { 0, &Ia_Invalid },
1041  /* 4D */ { 0, &Ia_Invalid },
1042  /* 4E */ { 0, &Ia_Invalid },
1043  /* 4F */ { 0, &Ia_Invalid },
1044  /* 50 */ { 0, &Ia_Invalid },
1045  /* 51 */ { 0, &Ia_Invalid },
1046  /* 52 */ { 0, &Ia_Invalid },
1047  /* 53 */ { 0, &Ia_Invalid },
1048  /* 54 */ { 0, &Ia_Invalid },
1049  /* 55 */ { 0, &Ia_Invalid },
1050  /* 56 */ { 0, &Ia_Invalid },
1051  /* 57 */ { 0, &Ia_Invalid },
1052  /* 58 */ { GRPSSE66(Ia_vpbroadcastd_Vdq_Wd) },
1053  /* 59 */ { GRPSSE66(Ia_vpbroadcastq_Vdq_Wq) },
1054  /* 5A */ { GRPSSE66(Ia_vbroadcasti128_Vdq_Mdq) },
1055  /* 5B */ { 0, &Ia_Invalid },
1056  /* 5C */ { 0, &Ia_Invalid },
1057  /* 5D */ { 0, &Ia_Invalid },
1058  /* 5E */ { 0, &Ia_Invalid },
1059  /* 5F */ { 0, &Ia_Invalid },
1060  /* 60 */ { 0, &Ia_Invalid },
1061  /* 61 */ { 0, &Ia_Invalid },
1062  /* 62 */ { 0, &Ia_Invalid },
1063  /* 63 */ { 0, &Ia_Invalid },
1064  /* 64 */ { 0, &Ia_Invalid },
1065  /* 65 */ { 0, &Ia_Invalid },
1066  /* 66 */ { 0, &Ia_Invalid },
1067  /* 67 */ { 0, &Ia_Invalid },
1068  /* 68 */ { 0, &Ia_Invalid },
1069  /* 69 */ { 0, &Ia_Invalid },
1070  /* 6A */ { 0, &Ia_Invalid },
1071  /* 6B */ { 0, &Ia_Invalid },
1072  /* 6C */ { 0, &Ia_Invalid },
1073  /* 6D */ { 0, &Ia_Invalid },
1074  /* 6E */ { 0, &Ia_Invalid },
1075  /* 6F */ { 0, &Ia_Invalid },
1076  /* 70 */ { 0, &Ia_Invalid },
1077  /* 71 */ { 0, &Ia_Invalid },
1078  /* 72 */ { 0, &Ia_Invalid },
1079  /* 73 */ { 0, &Ia_Invalid },
1080  /* 74 */ { 0, &Ia_Invalid },
1081  /* 75 */ { 0, &Ia_Invalid },
1082  /* 76 */ { 0, &Ia_Invalid },
1083  /* 77 */ { 0, &Ia_Invalid },
1084  /* 78 */ { GRPSSE66(Ia_vpbroadcastb_Vdq_Wb) },
1085  /* 79 */ { GRPSSE66(Ia_vpbroadcastw_Vdq_Ww) },
1086  /* 7A */ { 0, &Ia_Invalid },
1087  /* 7B */ { 0, &Ia_Invalid },
1088  /* 7C */ { 0, &Ia_Invalid },
1089  /* 7D */ { 0, &Ia_Invalid },
1090  /* 7E */ { 0, &Ia_Invalid },
1091  /* 7F */ { 0, &Ia_Invalid },
1092  /* 80 */ { 0, &Ia_Invalid },
1093  /* 81 */ { 0, &Ia_Invalid },
1094  /* 82 */ { 0, &Ia_Invalid },
1095  /* 83 */ { 0, &Ia_Invalid },
1096  /* 84 */ { 0, &Ia_Invalid },
1097  /* 85 */ { 0, &Ia_Invalid },
1098  /* 86 */ { 0, &Ia_Invalid },
1099  /* 87 */ { 0, &Ia_Invalid },
1100  /* 88 */ { 0, &Ia_Invalid },
1101  /* 89 */ { 0, &Ia_Invalid },
1102  /* 8A */ { 0, &Ia_Invalid },
1103  /* 8B */ { 0, &Ia_Invalid },
1104  /* 8C */ { GRPVEXW(0f388c) },
1105  /* 8D */ { 0, &Ia_Invalid },
1106  /* 8E */ { GRPVEXW(0f388e) },
1107  /* 8F */ { 0, &Ia_Invalid },
1108  /* 90 */ { GRPVEXW(0f3890) },
1109  /* 91 */ { GRPVEXW(0f3891) },
1110  /* 92 */ { GRPVEXW(0f3892) },
1111  /* 93 */ { GRPVEXW(0f3893) },
1112  /* 94 */ { 0, &Ia_Invalid },
1113  /* 95 */ { 0, &Ia_Invalid },
1114  /* 96 */ { GRPVEXW(0f3896) },
1115  /* 97 */ { GRPVEXW(0f3897) },
1116  /* 98 */ { GRPVEXW(0f3898) },
1117  /* 99 */ { GRPVEXW(0f3899) },
1118  /* 9A */ { GRPVEXW(0f389a) },
1119  /* 9B */ { GRPVEXW(0f389b) },
1120  /* 9C */ { GRPVEXW(0f389c) },
1121  /* 9D */ { GRPVEXW(0f389d) },
1122  /* 9E */ { GRPVEXW(0f389e) },
1123  /* 9F */ { GRPVEXW(0f389f) },
1124  /* A0 */ { 0, &Ia_Invalid },
1125  /* A1 */ { 0, &Ia_Invalid },
1126  /* A2 */ { 0, &Ia_Invalid },
1127  /* A3 */ { 0, &Ia_Invalid },
1128  /* A4 */ { 0, &Ia_Invalid },
1129  /* A5 */ { 0, &Ia_Invalid },
1130  /* A6 */ { GRPVEXW(0f38a6) },
1131  /* A7 */ { GRPVEXW(0f38a7) },
1132  /* A8 */ { GRPVEXW(0f38a8) },
1133  /* A9 */ { GRPVEXW(0f38a9) },
1134  /* AA */ { GRPVEXW(0f38aa) },
1135  /* AB */ { GRPVEXW(0f38ab) },
1136  /* AC */ { GRPVEXW(0f38ac) },
1137  /* AD */ { GRPVEXW(0f38ad) },
1138  /* AE */ { GRPVEXW(0f38ae) },
1139  /* AF */ { GRPVEXW(0f38af) },
1140  /* B0 */ { 0, &Ia_Invalid },
1141  /* B1 */ { 0, &Ia_Invalid },
1142  /* B2 */ { 0, &Ia_Invalid },
1143  /* B3 */ { 0, &Ia_Invalid },
1144  /* B4 */ { 0, &Ia_Invalid },
1145  /* B5 */ { 0, &Ia_Invalid },
1146  /* B6 */ { GRPVEXW(0f38b6) },
1147  /* B7 */ { GRPVEXW(0f38b7) },
1148  /* B8 */ { GRPVEXW(0f38b8) },
1149  /* B9 */ { GRPVEXW(0f38b9) },
1150  /* BA */ { GRPVEXW(0f38ba) },
1151  /* BB */ { GRPVEXW(0f38bb) },
1152  /* BC */ { GRPVEXW(0f38bc) },
1153  /* BD */ { GRPVEXW(0f38bd) },
1154  /* BE */ { GRPVEXW(0f38be) },
1155  /* BF */ { GRPVEXW(0f38bf) },
1156  /* C0 */ { 0, &Ia_Invalid },
1157  /* C1 */ { 0, &Ia_Invalid },
1158  /* C2 */ { 0, &Ia_Invalid },
1159  /* C3 */ { 0, &Ia_Invalid },
1160  /* C4 */ { 0, &Ia_Invalid },
1161  /* C5 */ { 0, &Ia_Invalid },
1162  /* C6 */ { 0, &Ia_Invalid },
1163  /* C7 */ { 0, &Ia_Invalid },
1164  /* C8 */ { 0, &Ia_Invalid },
1165  /* C9 */ { 0, &Ia_Invalid },
1166  /* CA */ { 0, &Ia_Invalid },
1167  /* CB */ { 0, &Ia_Invalid },
1168  /* CC */ { 0, &Ia_Invalid },
1169  /* CD */ { 0, &Ia_Invalid },
1170  /* CE */ { 0, &Ia_Invalid },
1171  /* CF */ { 0, &Ia_Invalid },
1172  /* D0 */ { 0, &Ia_Invalid },
1173  /* D1 */ { 0, &Ia_Invalid },
1174  /* D2 */ { 0, &Ia_Invalid },
1175  /* D3 */ { 0, &Ia_Invalid },
1176  /* D4 */ { 0, &Ia_Invalid },
1177  /* D5 */ { 0, &Ia_Invalid },
1178  /* D6 */ { 0, &Ia_Invalid },
1179  /* D7 */ { 0, &Ia_Invalid },
1180  /* D8 */ { 0, &Ia_Invalid },
1181  /* D9 */ { 0, &Ia_Invalid },
1182  /* DA */ { 0, &Ia_Invalid },
1183  /* DB */ { GRPSSE66(Ia_vaesimc_Vdq_Wdq) },
1184  /* DC */ { GRPSSE66(Ia_vaesenc_Vdq_Hdq_Wdq) },
1185  /* DD */ { GRPSSE66(Ia_vaesenclast_Vdq_Hdq_Wdq) },
1186  /* DE */ { GRPSSE66(Ia_vaesdec_Vdq_Hdq_Wdq) },
1187  /* DF */ { GRPSSE66(Ia_vaesdeclast_Vdq_Hdq_Wdq) },
1188  /* E0 */ { 0, &Ia_Invalid },
1189  /* E1 */ { 0, &Ia_Invalid },
1190  /* E2 */ { 0, &Ia_Invalid },
1191  /* E3 */ { 0, &Ia_Invalid },
1192  /* E4 */ { 0, &Ia_Invalid },
1193  /* E5 */ { 0, &Ia_Invalid },
1194  /* E6 */ { 0, &Ia_Invalid },
1195  /* E7 */ { 0, &Ia_Invalid },
1196  /* E8 */ { 0, &Ia_Invalid },
1197  /* E9 */ { 0, &Ia_Invalid },
1198  /* EA */ { 0, &Ia_Invalid },
1199  /* EB */ { 0, &Ia_Invalid },
1200  /* EC */ { 0, &Ia_Invalid },
1201  /* ED */ { 0, &Ia_Invalid },
1202  /* EE */ { 0, &Ia_Invalid },
1203  /* EF */ { 0, &Ia_Invalid },
1204  /* F0 */ { 0, &Ia_Invalid },
1205  /* F1 */ { 0, &Ia_Invalid },
1206  /* F2 */ { 0, &Ia_andn_Gy_By_Ey },
1207  /* F3 */ { GRPN(AVXG17) },
1208  /* F4 */ { 0, &Ia_Invalid },
1209  /* F5 */ { GRPAVX(0f38f5) },
1210  /* F6 */ { GRPSSEF2(Ia_mulx_By_Gy_Ey) },
1211  /* F7 */ { GRPAVX(0f38f7) },
1212  /* F8 */ { 0, &Ia_Invalid },
1213  /* F9 */ { 0, &Ia_Invalid },
1214  /* FA */ { 0, &Ia_Invalid },
1215  /* FB */ { 0, &Ia_Invalid },
1216  /* FC */ { 0, &Ia_Invalid },
1217  /* FD */ { 0, &Ia_Invalid },
1218  /* FE */ { 0, &Ia_Invalid },
1219  /* FF */ { 0, &Ia_Invalid },
1220
1221  // 256 entries for VEX-encoded 0x0F 0x3A opcodes
1222  /* 00 */ { GRPVEXW(0f3a00) },
1223  /* 01 */ { GRPVEXW(0f3a01) },
1224  /* 02 */ { GRPSSE66(Ia_vpblendd_Vdq_Hdq_Wdq_Ib) },
1225  /* 03 */ { 0, &Ia_Invalid },
1226  /* 04 */ { GRPSSE66(Ia_vpermilps_Vps_Wps_Ib) },
1227  /* 05 */ { GRPSSE66(Ia_vpermilpd_Vpd_Wpd_Ib) },
1228  /* 06 */ { GRPSSE66(Ia_vperm2f128_Vdq_Hdq_Wdq_Ib) },
1229  /* 07 */ { 0, &Ia_Invalid },
1230  /* 08 */ { GRPSSE66(Ia_vroundps_Vps_Wps_Ib) },
1231  /* 09 */ { GRPSSE66(Ia_vroundpd_Vpd_Wpd_Ib) },
1232  /* 0A */ { GRPSSE66(Ia_vroundss_Vss_Hps_Wss_Ib) },
1233  /* 0B */ { GRPSSE66(Ia_vroundsd_Vsd_Hpd_Wsd_Ib) },
1234  /* 0C */ { GRPSSE66(Ia_vblendps_Vps_Hps_Wps_Ib) },
1235  /* 0D */ { GRPSSE66(Ia_vblendpd_Vpd_Hpd_Wpd_Ib) },
1236  /* 0E */ { GRPSSE66(Ia_vpblendw_Vdq_Hdq_Wdq_Ib) },
1237  /* 0F */ { GRPSSE66(Ia_vpalignr_Vdq_Hdq_Wdq_Ib) },
1238  /* 10 */ { 0, &Ia_Invalid },
1239  /* 11 */ { 0, &Ia_Invalid },
1240  /* 12 */ { 0, &Ia_Invalid },
1241  /* 13 */ { 0, &Ia_Invalid },
1242  /* 14 */ { GRPSSE66(Ia_vpextrb_Ebd_Vdq_Ib) },
1243  /* 15 */ { GRPSSE66(Ia_vpextrw_Ewd_Vdq_Ib) },
1244  /* 16 */ { GRPVEXW(0f3a16) },
1245  /* 17 */ { GRPSSE66(Ia_vextractps_Ed_Vdq_Ib) },
1246  /* 18 */ { GRPSSE66(Ia_vinsertf128_Vdq_Hdq_Wdq_Ib) },
1247  /* 19 */ { GRPSSE66(Ia_vextractf128_Wdq_Vdq_Ib) },
1248  /* 1A */ { 0, &Ia_Invalid },
1249  /* 1B */ { 0, &Ia_Invalid },
1250  /* 1C */ { 0, &Ia_Invalid },
1251  /* 1D */ { GRPSSE66(Ia_vcvtps2ph_Wq_Vps_Ib) },
1252  /* 1E */ { 0, &Ia_Invalid },
1253  /* 1F */ { 0, &Ia_Invalid },
1254  /* 20 */ { GRPSSE66(Ia_vpinsrb_Vdq_Hdq_Ew_Ib) },
1255  /* 21 */ { GRPSSE66(Ia_vinsertps_Vps_Hps_Wss_Ib) },
1256  /* 22 */ { GRPVEXW(0f3a22) },
1257  /* 23 */ { 0, &Ia_Invalid },
1258  /* 24 */ { 0, &Ia_Invalid },
1259  /* 25 */ { 0, &Ia_Invalid },
1260  /* 26 */ { 0, &Ia_Invalid },
1261  /* 27 */ { 0, &Ia_Invalid },
1262  /* 28 */ { 0, &Ia_Invalid },
1263  /* 29 */ { 0, &Ia_Invalid },
1264  /* 2A */ { 0, &Ia_Invalid },
1265  /* 2B */ { 0, &Ia_Invalid },
1266  /* 2C */ { 0, &Ia_Invalid },
1267  /* 2D */ { 0, &Ia_Invalid },
1268  /* 2E */ { 0, &Ia_Invalid },
1269  /* 2F */ { 0, &Ia_Invalid },
1270  /* 30 */ { 0, &Ia_Invalid },
1271  /* 31 */ { 0, &Ia_Invalid },
1272  /* 32 */ { 0, &Ia_Invalid },
1273  /* 33 */ { 0, &Ia_Invalid },
1274  /* 34 */ { 0, &Ia_Invalid },
1275  /* 35 */ { 0, &Ia_Invalid },
1276  /* 36 */ { 0, &Ia_Invalid },
1277  /* 37 */ { 0, &Ia_Invalid },
1278  /* 38 */ { GRPSSE66(Ia_vinserti128_Vdq_Hdq_Wdq_Ib) },
1279  /* 39 */ { GRPSSE66(Ia_vextracti128_Wdq_Vdq_Ib) },
1280  /* 3A */ { 0, &Ia_Invalid },
1281  /* 3B */ { 0, &Ia_Invalid },
1282  /* 3C */ { 0, &Ia_Invalid },
1283  /* 3D */ { 0, &Ia_Invalid },
1284  /* 3E */ { 0, &Ia_Invalid },
1285  /* 3F */ { 0, &Ia_Invalid },
1286  /* 40 */ { GRPSSE66(Ia_vdpps_Vps_Hps_Wps_Ib) },
1287  /* 41 */ { GRPSSE66(Ia_vdppd_Vpd_Hpd_Wpd_Ib) },
1288  /* 42 */ { GRPSSE66(Ia_vmpsadbw_Vdq_Hdq_Wdq_Ib) },
1289  /* 43 */ { 0, &Ia_Invalid },
1290  /* 44 */ { GRPSSE66(Ia_vpclmulqdq_Vdq_Hdq_Wdq_Ib) },
1291  /* 45 */ { 0, &Ia_Invalid },
1292  /* 46 */ { GRPSSE66(Ia_vperm2i128_Vdq_Hdq_Wdq_Ib) },
1293  /* 47 */ { 0, &Ia_Invalid },
1294  /* 48 */ { 0, &Ia_Invalid },
1295  /* 49 */ { 0, &Ia_Invalid },
1296  /* 4A */ { GRPSSE66(Ia_vblendvps_Vps_Hps_Wps_Ib) },
1297  /* 4B */ { GRPSSE66(Ia_vblendvpd_Vpd_Hpd_Wpd_Ib) },
1298  /* 4C */ { GRPSSE66(Ia_vpblendvb_Vdq_Hdq_Wdq_Ib) },
1299  /* 4D */ { 0, &Ia_Invalid },
1300  /* 4E */ { 0, &Ia_Invalid },
1301  /* 4F */ { 0, &Ia_Invalid },
1302  /* 50 */ { 0, &Ia_Invalid },
1303  /* 51 */ { 0, &Ia_Invalid },
1304  /* 52 */ { 0, &Ia_Invalid },
1305  /* 53 */ { 0, &Ia_Invalid },
1306  /* 54 */ { 0, &Ia_Invalid },
1307  /* 55 */ { 0, &Ia_Invalid },
1308  /* 56 */ { 0, &Ia_Invalid },
1309  /* 57 */ { 0, &Ia_Invalid },
1310  /* 58 */ { 0, &Ia_Invalid },
1311  /* 59 */ { 0, &Ia_Invalid },
1312  /* 5A */ { 0, &Ia_Invalid },
1313  /* 5B */ { 0, &Ia_Invalid },
1314  /* 5C */ { GRPVEXW(0f3a5c) },
1315  /* 5D */ { GRPVEXW(0f3a5d) },
1316  /* 5E */ { GRPVEXW(0f3a5e) },
1317  /* 5F */ { GRPVEXW(0f3a5f) },
1318  /* 60 */ { GRPSSE66(Ia_vpcmpestrm_Vdq_Wdq_Ib) },
1319  /* 61 */ { GRPSSE66(Ia_vpcmpestri_Vdq_Wdq_Ib) },
1320  /* 62 */ { GRPSSE66(Ia_vpcmpistrm_Vdq_Wdq_Ib) },
1321  /* 63 */ { GRPSSE66(Ia_vpcmpistri_Vdq_Wdq_Ib) },
1322  /* 64 */ { 0, &Ia_Invalid },
1323  /* 65 */ { 0, &Ia_Invalid },
1324  /* 66 */ { 0, &Ia_Invalid },
1325  /* 67 */ { 0, &Ia_Invalid },
1326  /* 68 */ { GRPVEXW(0f3a68) },
1327  /* 69 */ { GRPVEXW(0f3a69) },
1328  /* 6A */ { GRPVEXW(0f3a6a) },
1329  /* 6B */ { GRPVEXW(0f3a6b) },
1330  /* 6C */ { GRPVEXW(0f3a6c) },
1331  /* 6D */ { GRPVEXW(0f3a6d) },
1332  /* 6E */ { GRPVEXW(0f3a6e) },
1333  /* 6F */ { GRPVEXW(0f3a6f) },
1334  /* 70 */ { 0, &Ia_Invalid },
1335  /* 71 */ { 0, &Ia_Invalid },
1336  /* 72 */ { 0, &Ia_Invalid },
1337  /* 73 */ { 0, &Ia_Invalid },
1338  /* 74 */ { 0, &Ia_Invalid },
1339  /* 75 */ { 0, &Ia_Invalid },
1340  /* 76 */ { 0, &Ia_Invalid },
1341  /* 77 */ { 0, &Ia_Invalid },
1342  /* 78 */ { GRPVEXW(0f3a78) },
1343  /* 79 */ { GRPVEXW(0f3a79) },
1344  /* 7A */ { GRPVEXW(0f3a7a) },
1345  /* 7B */ { GRPVEXW(0f3a7b) },
1346  /* 7C */ { GRPVEXW(0f3a7c) },
1347  /* 7D */ { GRPVEXW(0f3a7d) },
1348  /* 7E */ { GRPVEXW(0f3a7e) },
1349  /* 7F */ { GRPVEXW(0f3a7f) },
1350  /* 80 */ { 0, &Ia_Invalid },
1351  /* 81 */ { 0, &Ia_Invalid },
1352  /* 82 */ { 0, &Ia_Invalid },
1353  /* 83 */ { 0, &Ia_Invalid },
1354  /* 84 */ { 0, &Ia_Invalid },
1355  /* 85 */ { 0, &Ia_Invalid },
1356  /* 86 */ { 0, &Ia_Invalid },
1357  /* 87 */ { 0, &Ia_Invalid },
1358  /* 88 */ { 0, &Ia_Invalid },
1359  /* 89 */ { 0, &Ia_Invalid },
1360  /* 8A */ { 0, &Ia_Invalid },
1361  /* 8B */ { 0, &Ia_Invalid },
1362  /* 8C */ { 0, &Ia_Invalid },
1363  /* 8D */ { 0, &Ia_Invalid },
1364  /* 8E */ { 0, &Ia_Invalid },
1365  /* 8F */ { 0, &Ia_Invalid },
1366  /* 90 */ { 0, &Ia_Invalid },
1367  /* 91 */ { 0, &Ia_Invalid },
1368  /* 92 */ { 0, &Ia_Invalid },
1369  /* 93 */ { 0, &Ia_Invalid },
1370  /* 94 */ { 0, &Ia_Invalid },
1371  /* 95 */ { 0, &Ia_Invalid },
1372  /* 96 */ { 0, &Ia_Invalid },
1373  /* 97 */ { 0, &Ia_Invalid },
1374  /* 98 */ { 0, &Ia_Invalid },
1375  /* 99 */ { 0, &Ia_Invalid },
1376  /* 9A */ { 0, &Ia_Invalid },
1377  /* 9B */ { 0, &Ia_Invalid },
1378  /* 9C */ { 0, &Ia_Invalid },
1379  /* 9D */ { 0, &Ia_Invalid },
1380  /* 9E */ { 0, &Ia_Invalid },
1381  /* 9F */ { 0, &Ia_Invalid },
1382  /* A0 */ { 0, &Ia_Invalid },
1383  /* A1 */ { 0, &Ia_Invalid },
1384  /* A2 */ { 0, &Ia_Invalid },
1385  /* A3 */ { 0, &Ia_Invalid },
1386  /* A4 */ { 0, &Ia_Invalid },
1387  /* A5 */ { 0, &Ia_Invalid },
1388  /* A6 */ { 0, &Ia_Invalid },
1389  /* A7 */ { 0, &Ia_Invalid },
1390  /* A8 */ { 0, &Ia_Invalid },
1391  /* A9 */ { 0, &Ia_Invalid },
1392  /* AA */ { 0, &Ia_Invalid },
1393  /* AB */ { 0, &Ia_Invalid },
1394  /* AC */ { 0, &Ia_Invalid },
1395  /* AD */ { 0, &Ia_Invalid },
1396  /* AE */ { 0, &Ia_Invalid },
1397  /* AF */ { 0, &Ia_Invalid },
1398  /* B0 */ { 0, &Ia_Invalid },
1399  /* B1 */ { 0, &Ia_Invalid },
1400  /* B2 */ { 0, &Ia_Invalid },
1401  /* B3 */ { 0, &Ia_Invalid },
1402  /* B4 */ { 0, &Ia_Invalid },
1403  /* B5 */ { 0, &Ia_Invalid },
1404  /* B6 */ { 0, &Ia_Invalid },
1405  /* B7 */ { 0, &Ia_Invalid },
1406  /* B8 */ { 0, &Ia_Invalid },
1407  /* B9 */ { 0, &Ia_Invalid },
1408  /* BA */ { 0, &Ia_Invalid },
1409  /* BB */ { 0, &Ia_Invalid },
1410  /* BC */ { 0, &Ia_Invalid },
1411  /* BD */ { 0, &Ia_Invalid },
1412  /* BE */ { 0, &Ia_Invalid },
1413  /* BF */ { 0, &Ia_Invalid },
1414  /* C0 */ { 0, &Ia_Invalid },
1415  /* C1 */ { 0, &Ia_Invalid },
1416  /* C2 */ { 0, &Ia_Invalid },
1417  /* C3 */ { 0, &Ia_Invalid },
1418  /* C4 */ { 0, &Ia_Invalid },
1419  /* C5 */ { 0, &Ia_Invalid },
1420  /* C6 */ { 0, &Ia_Invalid },
1421  /* C7 */ { 0, &Ia_Invalid },
1422  /* C8 */ { 0, &Ia_Invalid },
1423  /* C9 */ { 0, &Ia_Invalid },
1424  /* CA */ { 0, &Ia_Invalid },
1425  /* CB */ { 0, &Ia_Invalid },
1426  /* CC */ { 0, &Ia_Invalid },
1427  /* CD */ { 0, &Ia_Invalid },
1428  /* CE */ { 0, &Ia_Invalid },
1429  /* CF */ { 0, &Ia_Invalid },
1430  /* D0 */ { 0, &Ia_Invalid },
1431  /* D1 */ { 0, &Ia_Invalid },
1432  /* D2 */ { 0, &Ia_Invalid },
1433  /* D3 */ { 0, &Ia_Invalid },
1434  /* D4 */ { 0, &Ia_Invalid },
1435  /* D5 */ { 0, &Ia_Invalid },
1436  /* D6 */ { 0, &Ia_Invalid },
1437  /* D7 */ { 0, &Ia_Invalid },
1438  /* D8 */ { 0, &Ia_Invalid },
1439  /* D9 */ { 0, &Ia_Invalid },
1440  /* DA */ { 0, &Ia_Invalid },
1441  /* DB */ { 0, &Ia_Invalid },
1442  /* DC */ { 0, &Ia_Invalid },
1443  /* DD */ { 0, &Ia_Invalid },
1444  /* DE */ { 0, &Ia_Invalid },
1445  /* DF */ { GRPSSE66(Ia_vaeskeygenassist_Vdq_Wdq_Ib) },
1446  /* E0 */ { 0, &Ia_Invalid },
1447  /* E1 */ { 0, &Ia_Invalid },
1448  /* E2 */ { 0, &Ia_Invalid },
1449  /* E3 */ { 0, &Ia_Invalid },
1450  /* E4 */ { 0, &Ia_Invalid },
1451  /* E5 */ { 0, &Ia_Invalid },
1452  /* E6 */ { 0, &Ia_Invalid },
1453  /* E7 */ { 0, &Ia_Invalid },
1454  /* E8 */ { 0, &Ia_Invalid },
1455  /* E9 */ { 0, &Ia_Invalid },
1456  /* EA */ { 0, &Ia_Invalid },
1457  /* EB */ { 0, &Ia_Invalid },
1458  /* EC */ { 0, &Ia_Invalid },
1459  /* ED */ { 0, &Ia_Invalid },
1460  /* EE */ { 0, &Ia_Invalid },
1461  /* EF */ { 0, &Ia_Invalid },
1462  /* F0 */ { 0, &Ia_rorx_Gy_Ey_Ib },
1463  /* F1 */ { 0, &Ia_Invalid },
1464  /* F2 */ { 0, &Ia_Invalid },
1465  /* F3 */ { 0, &Ia_Invalid },
1466  /* F4 */ { 0, &Ia_Invalid },
1467  /* F5 */ { 0, &Ia_Invalid },
1468  /* F6 */ { 0, &Ia_Invalid },
1469  /* F7 */ { 0, &Ia_Invalid },
1470  /* F8 */ { 0, &Ia_Invalid },
1471  /* F9 */ { 0, &Ia_Invalid },
1472  /* FA */ { 0, &Ia_Invalid },
1473  /* FB */ { 0, &Ia_Invalid },
1474  /* FC */ { 0, &Ia_Invalid },
1475  /* FD */ { 0, &Ia_Invalid },
1476  /* FE */ { 0, &Ia_Invalid },
1477  /* FF */ { 0, &Ia_Invalid }
1478};
1479